組み込み関数

!

! expr - 論理否定。

> SELECT ! true;
 false
> SELECT ! false;
 true
> SELECT ! NULL;
 NULL

開始 1.0.0


!=

expr1 != expr2 - expr1expr2 と等しくない場合は true を返し、それ以外の場合は false を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、等価比較で使用できる型である必要があります。マップ型はサポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 1 != 2;
 true
> SELECT 1 != '2';
 true
> SELECT true != NULL;
 NULL
> SELECT NULL != NULL;
 NULL

開始 1.0.0


%

expr1 % expr2 - expr1 / expr2 の後の余りを返します。

> SELECT 2 % 1.8;
 0.2
> SELECT MOD(2, 1.8);
 0.2

開始 1.0.0


&

expr1 & expr2 - expr1expr2 のビット単位 AND の結果を返します。

> SELECT 3 & 5;
 1

開始 1.4.0


*

expr1 * expr2 - expr1 * expr2 を返します。

> SELECT 2 * 3;
 6

開始 1.0.0


+

expr1 + expr2 - expr1 + expr2 を返します。

> SELECT 1 + 2;
 3

開始 1.0.0


-

expr1 - expr2 - expr1 - expr2 を返します。

> SELECT 2 - 1;
 1

開始 1.0.0


/

expr1 / expr2 - expr1 / expr2 を返します。常に浮動小数点除算を実行します。

> SELECT 3 / 2;
 1.5
> SELECT 2L / 2L;
 1.0

開始 1.0.0


<

expr1 < expr2 - expr1expr2 より小さい場合は true を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、順序付け可能な型である必要があります。たとえば、マップ型は順序付けできないため、サポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 1 < 2;
 true
> SELECT 1.1 < '1';
 false
> SELECT to_date('2009-07-30 04:17:52') < to_date('2009-07-30 04:17:52');
 false
> SELECT to_date('2009-07-30 04:17:52') < to_date('2009-08-01 04:17:52');
 true
> SELECT 1 < NULL;
 NULL

開始 1.0.0


<=

expr1 <= expr2 - expr1expr2 以下である場合は true を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、順序付け可能な型である必要があります。たとえば、マップ型は順序付けできないため、サポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 2 <= 2;
 true
> SELECT 1.0 <= '1';
 true
> SELECT to_date('2009-07-30 04:17:52') <= to_date('2009-07-30 04:17:52');
 true
> SELECT to_date('2009-07-30 04:17:52') <= to_date('2009-08-01 04:17:52');
 true
> SELECT 1 <= NULL;
 NULL

開始 1.0.0


<=>

expr1 <=> expr2 - null以外のオペランドについてはEQUAL(=)演算子と同じ結果を返しますが、両方がnullの場合はtrueを返し、いずれか一方がnullの場合はfalseを返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、等価比較で使用できる型である必要があります。マップ型はサポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 2 <=> 2;
 true
> SELECT 1 <=> '1';
 true
> SELECT true <=> NULL;
 false
> SELECT NULL <=> NULL;
 true

開始 1.1.0


<>

expr1 != expr2 - expr1expr2 と等しくない場合は true を返し、それ以外の場合は false を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、等価比較で使用できる型である必要があります。マップ型はサポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 1 != 2;
 true
> SELECT 1 != '2';
 true
> SELECT true != NULL;
 NULL
> SELECT NULL != NULL;
 NULL

開始 1.0.0


=

expr1 = expr2 - expr1expr2 と等しい場合は true を返し、それ以外の場合は false を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、等価比較で使用できる型である必要があります。マップ型はサポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 2 = 2;
 true
> SELECT 1 = '1';
 true
> SELECT true = NULL;
 NULL
> SELECT NULL = NULL;
 NULL

開始 1.0.0


==

expr1 == expr2 - expr1expr2 と等しい場合は true を返し、それ以外の場合は false を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、等価比較で使用できる型である必要があります。マップ型はサポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 2 == 2;
 true
> SELECT 1 == '1';
 true
> SELECT true == NULL;
 NULL
> SELECT NULL == NULL;
 NULL

開始 1.0.0


>

expr1 > expr2 - expr1expr2 より大きい場合は true を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、順序付け可能な型である必要があります。たとえば、マップ型は順序付けできないため、サポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 2 > 1;
 true
> SELECT 2 > 1.1;
 true
> SELECT to_date('2009-07-30 04:17:52') > to_date('2009-07-30 04:17:52');
 false
> SELECT to_date('2009-07-30 04:17:52') > to_date('2009-08-01 04:17:52');
 false
> SELECT 1 > NULL;
 NULL

開始 1.0.0


>=

expr1 >= expr2 - expr1expr2 以上である場合は true を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、順序付け可能な型である必要があります。たとえば、マップ型は順序付けできないため、サポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT 2 >= 1;
 true
> SELECT 2.0 >= '2.1';
 false
> SELECT to_date('2009-07-30 04:17:52') >= to_date('2009-07-30 04:17:52');
 true
> SELECT to_date('2009-07-30 04:17:52') >= to_date('2009-08-01 04:17:52');
 false
> SELECT 1 >= NULL;
 NULL

開始 1.0.0


^

expr1 ^ expr2 - expr1expr2 のビット単位排他的 OR の結果を返します。

> SELECT 3 ^ 5;
 6

開始 1.4.0


abs

abs(expr) - 数値または間隔値の絶対値を返します。

> SELECT abs(-1);
 1
> SELECT abs(INTERVAL -'1-1' YEAR TO MONTH);
 1-1

開始 1.2.0


acos

acos(expr) - java.lang.Math.acos で計算された場合のように、expr の逆コサイン(別名アークコサイン)を返します。

> SELECT acos(1);
 0.0
> SELECT acos(2);
 NaN

開始 1.4.0


acosh

acosh(expr) - expr の逆双曲線コサインを返します。

> SELECT acosh(1);
 0.0
> SELECT acosh(0);
 NaN

開始 3.0.0


add_months

add_months(start_date, num_months) - start_date から num_months 後に相当する日付を返します。

> SELECT add_months('2016-08-31', 1);
 2016-09-30

開始 1.5.0


aes_decrypt

aes_decrypt(expr, key[, mode[, padding[, aad]]]) - mode の AES と padding を使用して、expr の復号化された値を返します。16、24、および 32 ビットのキー長がサポートされています。(modepadding) のサポートされている組み合わせは、('ECB'、'PKCS')、('GCM'、'NONE')、('CBC'、'PKCS') です。オプションの追加認証データ (AAD) は GCM でのみサポートされています。暗号化用に提供されている場合は、復号化用に同じ AAD 値を提供する必要があります。デフォルトのモードは GCM です。

引数

  • expr - 復号化するバイナリ値。
  • key - データの復号化に使用するパスフレーズ。
  • mode - メッセージの復号に使用するブロック暗号モードを指定します。有効なモード:ECB、GCM、CBC。
  • padding - ブロックサイズの倍数ではないメッセージをどのようにパディングするかを指定します。有効な値:PKCS、NONE、DEFAULT。DEFAULTパディングは、ECBの場合はPKCS、GCMの場合はNONE、CBCの場合はPKCSを意味します。
  • aad - オプションの追加認証データ。GCMモードでのみサポートされます。これは任意の形式の入力が可能で、暗号化と復号化の両方で提供する必要があります。

> SELECT aes_decrypt(unhex('83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94'), '0000111122223333');
 Spark
> SELECT aes_decrypt(unhex('6E7CA17BBB468D3084B5744BCA729FB7B2B7BCB8E4472847D02670489D95FA97DBBA7D3210'), '0000111122223333', 'GCM');
 Spark SQL
> SELECT aes_decrypt(unbase64('3lmwu+Mw0H3fi5NDvcu9lg=='), '1234567890abcdef', 'ECB', 'PKCS');
 Spark SQL
> SELECT aes_decrypt(unbase64('2NYmDCjgXTbbxGA3/SnJEfFC/JQ7olk2VQWReIAAFKo='), '1234567890abcdef', 'CBC');
 Apache Spark
> SELECT aes_decrypt(unbase64('AAAAAAAAAAAAAAAAAAAAAPSd4mWyMZ5mhvjiAPQJnfg='), 'abcdefghijklmnop12345678ABCDEFGH', 'CBC', 'DEFAULT');
 Spark
> SELECT aes_decrypt(unbase64('AAAAAAAAAAAAAAAAQiYi+sTLm7KD9UcZ2nlRdYDe/PX4'), 'abcdefghijklmnop12345678ABCDEFGH', 'GCM', 'DEFAULT', 'This is an AAD mixed into the input');
 Spark

開始 3.3.0


aes_encrypt

aes_encrypt(expr, key[, mode[, padding[, iv[, aad]]]]) - 指定されたpaddingを使用して、指定されたmodeでAESを使用し、exprの暗号化された値を返します。16、24、および32ビットのキー長がサポートされています。(modepadding)のサポートされる組み合わせは、('ECB'、'PKCS')、('GCM'、'NONE')、および('CBC'、'PKCS')です。オプションの初期化ベクトル(IV)は、CBCおよびGCMモードでのみサポートされています。これらは、CBCの場合は16バイト、GCMの場合は12バイトでなければなりません。提供されていない場合は、ランダムなベクトルが生成され、出力の先頭に追加されます。オプションの追加認証データ(AAD)は、GCMでのみサポートされています。暗号化のために提供された場合、復号化には同一のAAD値を指定する必要があります。デフォルトのモードはGCMです。

引数

  • expr - 暗号化するバイナリ値。
  • key - データの暗号化に使用するパスフレーズ。
  • mode - メッセージの暗号化に使用するブロック暗号モードを指定します。有効なモード:ECB、GCM、CBC。
  • padding - ブロックサイズの倍数ではないメッセージをどのようにパディングするかを指定します。有効な値:PKCS、NONE、DEFAULT。DEFAULTパディングは、ECBの場合はPKCS、GCMの場合はNONE、CBCの場合はPKCSを意味します。
  • iv - オプションの初期化ベクトル。CBCおよびGCMモードでのみサポートされています。有効な値:Noneまたは ''。CBCモードの場合は16バイトの配列。GCMモードの場合は12バイトの配列。
  • aad - オプションの追加認証データ。GCMモードでのみサポートされます。これは任意の形式の入力が可能で、暗号化と復号化の両方で提供する必要があります。

> SELECT hex(aes_encrypt('Spark', '0000111122223333'));
 83F16B2AA704794132802D248E6BFD4E380078182D1544813898AC97E709B28A94
> SELECT hex(aes_encrypt('Spark SQL', '0000111122223333', 'GCM'));
 6E7CA17BBB468D3084B5744BCA729FB7B2B7BCB8E4472847D02670489D95FA97DBBA7D3210
> SELECT base64(aes_encrypt('Spark SQL', '1234567890abcdef', 'ECB', 'PKCS'));
 3lmwu+Mw0H3fi5NDvcu9lg==
> SELECT base64(aes_encrypt('Apache Spark', '1234567890abcdef', 'CBC', 'DEFAULT'));
 2NYmDCjgXTbbxGA3/SnJEfFC/JQ7olk2VQWReIAAFKo=
> SELECT base64(aes_encrypt('Spark', 'abcdefghijklmnop12345678ABCDEFGH', 'CBC', 'DEFAULT', unhex('00000000000000000000000000000000')));
 AAAAAAAAAAAAAAAAAAAAAPSd4mWyMZ5mhvjiAPQJnfg=
> SELECT base64(aes_encrypt('Spark', 'abcdefghijklmnop12345678ABCDEFGH', 'GCM', 'DEFAULT', unhex('000000000000000000000000'), 'This is an AAD mixed into the input'));
 AAAAAAAAAAAAAAAAQiYi+sTLm7KD9UcZ2nlRdYDe/PX4

開始 3.3.0


aggregate

aggregate(expr, start, merge, finish) - 初期状態と配列内のすべての要素にバイナリ演算子を適用し、これを単一の状態に縮小します。最終状態は、finish関数を適用することで最終結果に変換されます。

> SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x);
 6
> SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x, acc -> acc * 10);
 60

開始 2.4.0


and

expr1 and expr2 - 論理AND。

> SELECT true and true;
 true
> SELECT true and false;
 false
> SELECT true and NULL;
 NULL
> SELECT false and NULL;
 false

開始 1.0.0


any

any(expr) - exprの値の少なくとも1つがtrueの場合にtrueを返します。

> SELECT any(col) FROM VALUES (true), (false), (false) AS tab(col);
 true
> SELECT any(col) FROM VALUES (NULL), (true), (false) AS tab(col);
 true
> SELECT any(col) FROM VALUES (false), (false), (NULL) AS tab(col);
 false

開始 3.0.0


any_value

any_value(expr[, isIgnoreNull]) - 行のグループについて、exprのいずれかの値を返します。isIgnoreNullがtrueの場合、null以外の値のみを返します。

> SELECT any_value(col) FROM VALUES (10), (5), (20) AS tab(col);
 10
> SELECT any_value(col) FROM VALUES (NULL), (5), (20) AS tab(col);
 NULL
> SELECT any_value(col, true) FROM VALUES (NULL), (5), (20) AS tab(col);
 5

この関数は非決定的です。

開始 3.4.0


approx_count_distinct

approx_count_distinct(expr[, relativeSD]) - HyperLogLog++によって推定されたカーディナリティを返します。relativeSDは、許容される最大相対標準偏差を定義します。

> SELECT approx_count_distinct(col1) FROM VALUES (1), (1), (2), (2), (3) tab(col1);
 3

開始 1.6.0


approx_percentile

approx_percentile(col, percentage [, accuracy]) - 数値またはansiインターバル列colの近似percentileを返します。これは、順序付けられたcolの値(最小から最大にソート)の中で、colの値のpercentage以下がその値以下になるような最小の値です。percentageの値は0.0から1.0の間でなければなりません。accuracyパラメータ(デフォルト:10000)は、メモリを犠牲にして近似精度を制御する正の数値リテラルです。accuracyの値が高いほど精度が向上し、1.0/accuracyは近似の相対誤差です。percentageが配列の場合、percentage配列の各値は0.0から1.0の間でなければなりません。この場合、指定されたpercentage配列での列colの近似パーセンタイル配列を返します。

> SELECT approx_percentile(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);
 [1,1,0]
> SELECT approx_percentile(col, 0.5, 100) FROM VALUES (0), (6), (7), (9), (10) AS tab(col);
 7
> SELECT approx_percentile(col, 0.5, 100) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '1' MONTH), (INTERVAL '2' MONTH), (INTERVAL '10' MONTH) AS tab(col);
 0-1
> SELECT approx_percentile(col, array(0.5, 0.7), 100) FROM VALUES (INTERVAL '0' SECOND), (INTERVAL '1' SECOND), (INTERVAL '2' SECOND), (INTERVAL '10' SECOND) AS tab(col);
 [0 00:00:01.000000000,0 00:00:02.000000000]

開始 2.1.0


array

array(expr, ...) - 指定された要素を持つ配列を返します。

> SELECT array(1, 2, 3);
 [1,2,3]

開始 1.1.0


array_agg

array_agg(expr) - 一意でない要素のリストを収集して返します。

> SELECT array_agg(col) FROM VALUES (1), (2), (1) AS tab(col);
 [1,2,1]

収集された結果の順序はシャッフル後に非決定的になる可能性がある行の順序に依存するため、この関数は非決定的です。

開始 3.3.0


array_append

array_append(array, element) - 最初の引数として渡された配列の最後に要素を追加します。要素の型は、配列の要素の型と同様である必要があります。NULL要素も配列に追加されます。ただし、渡された配列がNULLの場合、出力はNULLになります。

> SELECT array_append(array('b', 'd', 'c', 'a'), 'd');
 ["b","d","c","a","d"]
> SELECT array_append(array(1, 2, 3, null), null);
 [1,2,3,null,null]
> SELECT array_append(CAST(null as Array<Int>), 2);
 NULL

開始 3.4.0


array_compact

array_compact(array) - 配列からnull値を削除します。

> SELECT array_compact(array(1, 2, 3, null));
 [1,2,3]
> SELECT array_compact(array("a", "b", "c"));
 ["a","b","c"]

開始 3.4.0


array_contains

array_contains(array, value) - 配列に値が含まれている場合にtrueを返します。

> SELECT array_contains(array(1, 2, 3), 2);
 true

開始 1.5.0


array_distinct

array_distinct(array) - 配列から重複値を削除します。

> SELECT array_distinct(array(1, 2, 3, null, 3));
 [1,2,3,null]

開始 2.4.0


array_except

array_except(array1, array2) - 重複なしで、array1には存在するがarray2には存在しない要素の配列を返します。

> SELECT array_except(array(1, 2, 3), array(1, 3, 5));
 [2]

開始 2.4.0


array_insert

array_insert(x, pos, val) - 配列xのインデックスposにvalを配置します。配列のインデックスは1から始まります。最大負のインデックスは-1で、この場合、関数は現在の最後の要素の後に新しい要素を挿入します。配列サイズを超えるインデックスは配列を追加し、インデックスが負の場合は配列の先頭に「null」要素を追加します。

> SELECT array_insert(array(1, 2, 3, 4), 5, 5);
 [1,2,3,4,5]
> SELECT array_insert(array(5, 4, 3, 2), -1, 1);
 [5,4,3,2,1]
> SELECT array_insert(array(5, 3, 2, 1), -4, 4);
 [5,4,3,2,1]

開始 3.4.0


array_intersect

array_intersect(array1, array2) - 重複なしで、array1とarray2の積集合にある要素の配列を返します。

> SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));
 [1,3]

開始 2.4.0


array_join

array_join(array, delimiter[, nullReplacement]) - 区切り文字と、nullを置き換えるオプションの文字列を使用して、指定された配列の要素を連結します。nullReplacementの値が設定されていない場合、null値はフィルタリングされます。

> SELECT array_join(array('hello', 'world'), ' ');
 hello world
> SELECT array_join(array('hello', null ,'world'), ' ');
 hello world
> SELECT array_join(array('hello', null ,'world'), ' ', ',');
 hello , world

開始 2.4.0


array_max

array_max(array) - 配列内の最大値を返します。NaNは、double/float型の場合、NaNではない要素よりも大きくなります。NULL要素はスキップされます。

> SELECT array_max(array(1, 20, null, 3));
 20

開始 2.4.0


array_min

array_min(array) - 配列内の最小値を返します。NaNは、double/float型の場合、NaNではない要素よりも大きくなります。NULL要素はスキップされます。

> SELECT array_min(array(1, 20, null, 3));
 1

開始 2.4.0


array_position

array_position(array, element) - 配列の最初に一致する要素の(1ベースの)インデックスをlongとして返すか、一致するものが見つからない場合は0を返します。

> SELECT array_position(array(312, 773, 708, 708), 708);
 3
> SELECT array_position(array(312, 773, 708, 708), 414);
 0

開始 2.4.0


array_prepend

array_prepend(array, element) - 最初の引数として渡された配列の先頭に要素を追加します。要素の型は、配列の要素の型と同じである必要があります。NULL要素も配列の先頭に追加されます。ただし、渡された配列がNULLの場合、出力はNULLになります。

> SELECT array_prepend(array('b', 'd', 'c', 'a'), 'd');
 ["d","b","d","c","a"]
> SELECT array_prepend(array(1, 2, 3, null), null);
 [null,1,2,3,null]
> SELECT array_prepend(CAST(null as Array<Int>), 2);
 NULL

開始 3.5.0


array_remove

array_remove(array, element) - 配列から要素に等しいすべての要素を削除します。

> SELECT array_remove(array(1, 2, 3, null, 3), 3);
 [1,2,null]

開始 2.4.0


array_repeat

array_repeat(element, count) - 要素をcount回含む配列を返します。

> SELECT array_repeat('123', 2);
 ["123","123"]

開始 2.4.0


array_size

array_size(expr) - 配列のサイズを返します。この関数は、null入力に対してnullを返します。

> SELECT array_size(array('b', 'd', 'c', 'a'));
 4

開始 3.3.0


array_sort

array_sort(expr, func) - 入力配列をソートします。funcが省略されている場合、昇順でソートします。入力配列の要素は順序付け可能である必要があります。NaNは、double/float型の場合、NaNではない要素よりも大きくなります。NULL要素は、返された配列の最後に配置されます。3.0.0以降、この関数は、指定された比較関数に基づいて配列をソートして返します。比較関数は、配列の2つの要素を表す2つの引数を受け取ります。最初の要素が2番目の要素よりも小さい、等しい、または大きい場合に、負の整数、0、または正の整数を返します。比較関数がnullを返した場合、関数は失敗してエラーを発生させます。

> SELECT array_sort(array(5, 6, 1), (left, right) -> case when left < right then -1 when left > right then 1 else 0 end);
 [1,5,6]
> SELECT array_sort(array('bc', 'ab', 'dc'), (left, right) -> case when left is null and right is null then 0 when left is null then -1 when right is null then 1 when left < right then 1 when left > right then -1 else 0 end);
 ["dc","bc","ab"]
> SELECT array_sort(array('b', 'd', null, 'c', 'a'));
 ["a","b","c","d",null]

開始 2.4.0


array_union

array_union(array1, array2) - 重複なしで、array1とarray2の和集合にある要素の配列を返します。

> SELECT array_union(array(1, 2, 3), array(1, 3, 5));
 [1,2,3,5]

開始 2.4.0


arrays_overlap

arrays_overlap(a1, a2) - a1にa2にも存在するnull以外の要素が少なくとも1つ含まれている場合にtrueを返します。配列に共通の要素がなく、両方が空ではなく、いずれかにnull要素が含まれている場合はnullが返され、それ以外の場合はfalseが返されます。

> SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5));
 true

開始 2.4.0


arrays_zip

arrays_zip(a1, a2, ...) - N番目の構造体が入力配列のすべてのN番目の値を含む、構造体の結合された配列を返します。

> SELECT arrays_zip(array(1, 2, 3), array(2, 3, 4));
 [{"0":1,"1":2},{"0":2,"1":3},{"0":3,"1":4}]
> SELECT arrays_zip(array(1, 2), array(2, 3), array(3, 4));
 [{"0":1,"1":2,"2":3},{"0":2,"1":3,"2":4}]

開始 2.4.0


ascii

ascii(str) - strの最初の文字の数値を返します。

> SELECT ascii('222');
 50
> SELECT ascii(2);
 50

開始 1.5.0


asin

asin(expr) - java.lang.Math.asinで計算されたかのように、exprの逆正弦(別名アークサイン)の逆正弦を返します。

> SELECT asin(0);
 0.0
> SELECT asin(2);
 NaN

開始 1.4.0


asinh

asinh(expr) - exprの逆双曲線正弦を返します。

> SELECT asinh(0);
 0.0

開始 3.0.0


assert_true

assert_true(expr) - exprがtrueでない場合に例外をスローします。

> SELECT assert_true(0 < 1);
 NULL

開始 2.0.0


atan

atan(expr) - java.lang.Math.atanで計算されたかのように、exprの逆正接(別名アークタンジェント)を返します。

> SELECT atan(0);
 0.0

開始 1.4.0


atan2

atan2(exprY, exprX) - java.lang.Math.atan2で計算されたかのように、平面の正のx軸と(exprXexprY)の座標で指定された点との間のラジアン単位の角度を返します。

引数

  • exprY - y軸上の座標
  • exprX - x軸上の座標

> SELECT atan2(0, 0);
 0.0

開始 1.4.0


atanh

atanh(expr) - exprの逆双曲線正接を返します。

> SELECT atanh(0);
 0.0
> SELECT atanh(2);
 NaN

開始 3.0.0


avg

avg(expr) - グループの値から計算された平均を返します。

> SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);
 2.0
> SELECT avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
 1.5

開始 1.0.0


base64

base64(bin) - 引数をバイナリbinからbase64文字列に変換します。

> SELECT base64('Spark SQL');
 U3BhcmsgU1FM
> SELECT base64(x'537061726b2053514c');
 U3BhcmsgU1FM

開始 1.5.0


between

expr1 [NOT] BETWEEN expr2 AND expr3 - expr1expr2expr3の間にあるか[ないか]を評価します。

> SELECT col1 FROM VALUES 1, 3, 5, 7 WHERE col1 BETWEEN 2 AND 5;
 3
 5

開始 1.0.0


bigint

bigint(expr) - 値exprをターゲットデータ型bigintにキャストします。

開始 2.0.1


bin

bin(expr) - 長い値exprのバイナリで表現された文字列表現を返します。

> SELECT bin(13);
 1101
> SELECT bin(-13);
 1111111111111111111111111111111111111111111111111111111111110011
> SELECT bin(13.3);
 1101

開始 1.5.0


binary

binary(expr) - 値exprをターゲットデータ型binaryにキャストします。

開始 2.0.1


bit_and

bit_and(expr) - すべてのnull以外の入力値のビット単位ANDを返します。nullの場合はnullを返します。

> SELECT bit_and(col) FROM VALUES (3), (5) AS tab(col);
 1

開始 3.0.0


bit_count

bit_count(expr) - 引数exprで設定されているビット数を、符号なし64ビット整数として返します。引数がNULLの場合はNULLを返します。

> SELECT bit_count(0);
 0

開始 3.0.0


bit_get

bit_get(expr, pos) - 指定された位置のビットの値(0または1)を返します。位置は右から左に0から番号が付けられます。位置引数は負にすることはできません。

> SELECT bit_get(11, 0);
 1
> SELECT bit_get(11, 2);
 0

開始 3.2.0


bit_length

bit_length(expr) - 文字列データのビット長またはバイナリデータのビット数を返します。

> SELECT bit_length('Spark SQL');
 72
> SELECT bit_length(x'537061726b2053514c');
 72

開始 2.3.0


bit_or

bit_or(expr) - すべてのnull以外の入力値のビット単位ORを返します。nullの場合はnullを返します。

> SELECT bit_or(col) FROM VALUES (3), (5) AS tab(col);
 7

開始 3.0.0


bit_xor

bit_xor(expr) - すべてのnull以外の入力値のビット単位XORを返します。nullの場合はnullを返します。

> SELECT bit_xor(col) FROM VALUES (3), (5) AS tab(col);
 6

開始 3.0.0


bitmap_bit_position

bitmap_bit_position(child) - 指定された入力子式のビット位置を返します。

> SELECT bitmap_bit_position(1);
 0
> SELECT bitmap_bit_position(123);
 122

開始 3.5.0


bitmap_bucket_number

bitmap_bucket_number(child) - 指定された入力子式のバケット番号を返します。

> SELECT bitmap_bucket_number(123);
 1
> SELECT bitmap_bucket_number(0);
 0

開始 3.5.0


bitmap_construct_agg

bitmap_construct_agg(child) - 子式のすべての値からビットが設定された位置を持つビットマップを返します。子式はbitmap_bit_position()である可能性が最も高くなります。

> SELECT substring(hex(bitmap_construct_agg(bitmap_bit_position(col))), 0, 6) FROM VALUES (1), (2), (3) AS tab(col);
 070000
> SELECT substring(hex(bitmap_construct_agg(bitmap_bit_position(col))), 0, 6) FROM VALUES (1), (1), (1) AS tab(col);
 010000

開始 3.5.0


bitmap_count

bitmap_count(child) - 子ビットマップ内の設定されたビット数を返します。

> SELECT bitmap_count(X '1010');
 2
> SELECT bitmap_count(X 'FFFF');
 16
> SELECT bitmap_count(X '0');
 0

開始 3.5.0


bitmap_or_agg

bitmap_or_agg(child) - 子式のすべてのビットマップのビット単位ORであるビットマップを返します。入力はbitmap_construct_agg()から作成されたビットマップである必要があります。

> SELECT substring(hex(bitmap_or_agg(col)), 0, 6) FROM VALUES (X '10'), (X '20'), (X '40') AS tab(col);
 700000
> SELECT substring(hex(bitmap_or_agg(col)), 0, 6) FROM VALUES (X '10'), (X '10'), (X '10') AS tab(col);
 100000

開始 3.5.0


bool_and

bool_and(expr) - exprのすべての値がtrueの場合にtrueを返します。

> SELECT bool_and(col) FROM VALUES (true), (true), (true) AS tab(col);
 true
> SELECT bool_and(col) FROM VALUES (NULL), (true), (true) AS tab(col);
 true
> SELECT bool_and(col) FROM VALUES (true), (false), (true) AS tab(col);
 false

開始 3.0.0


bool_or

bool_or(expr) - exprの値の少なくとも1つがtrueの場合にtrueを返します。

> SELECT bool_or(col) FROM VALUES (true), (false), (false) AS tab(col);
 true
> SELECT bool_or(col) FROM VALUES (NULL), (true), (false) AS tab(col);
 true
> SELECT bool_or(col) FROM VALUES (false), (false), (NULL) AS tab(col);
 false

開始 3.0.0


boolean

boolean(expr) - 値exprをターゲットデータ型booleanにキャストします。

開始 2.0.1


bround

bround(expr, d) - HALF_EVEN丸めモードを使用して、exprを小数点以下d桁に丸めた値を返します。

> SELECT bround(2.5, 0);
 2
> SELECT bround(25, -1);
 20

開始 2.0.0


btrim

btrim(str) - strから先頭と末尾の空白文字を削除します。

btrim(str, trimStr) - strから先頭と末尾のtrimStr文字を削除します。

引数

  • str - 文字列式
  • trimStr - トリムするトリム文字列文字。デフォルト値は単一のスペースです。

> SELECT btrim('    SparkSQL   ');
 SparkSQL
> SELECT btrim(encode('    SparkSQL   ', 'utf-8'));
 SparkSQL
> SELECT btrim('SSparkSQLS', 'SL');
 parkSQ
> SELECT btrim(encode('SSparkSQLS', 'utf-8'), encode('SL', 'utf-8'));
 parkSQ

開始 3.2.0


cardinality

cardinality(expr) - 配列またはマップのサイズを返します。spark.sql.legacy.sizeOfNullがfalseに設定されているか、spark.sql.ansi.enabledがtrueに設定されている場合、この関数はnull入力に対してnullを返します。それ以外の場合、関数はnull入力に対して-1を返します。デフォルト設定では、この関数はnull入力に対して-1を返します。

> SELECT cardinality(array('b', 'd', 'c', 'a'));
 4
> SELECT cardinality(map('a', 1, 'b', 2));
 2

開始 1.5.0


case

CASE expr1 WHEN expr2 THEN expr3 [WHEN expr4 THEN expr5]* [ELSE expr6] END - expr1 = expr2の場合、expr3を返します。expr1 = expr4の場合、expr5を返します。それ以外の場合はexpr6を返します。

引数

  • expr1 - 比較のオペランドの1つである式。
  • expr2、expr4 - それぞれが比較のもう一方のオペランドである式。
  • expr3、expr5、expr6 - 分岐値式とelse値式はすべて同じ型であるか、共通の型に強制変換可能である必要があります。

> SELECT CASE col1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE '?' END FROM VALUES 1, 2, 3;
 one
 two
 ?
> SELECT CASE col1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' END FROM VALUES 1, 2, 3;
 one
 two
 NULL

開始 1.0.1


cast

cast(expr AS type) - 値exprをターゲットデータ型typeにキャストします。

> SELECT cast('10' as int);
 10

開始 1.0.0


cbrt

cbrt(expr) - exprの立方根を返します。

> SELECT cbrt(27.0);
 3.0

開始 1.4.0


ceil

ceil(expr[, scale]) - expr以上となるように切り上げた最小の数値を返します。オプションのscaleパラメータを指定して、丸め動作を制御できます。

> SELECT ceil(-0.1);
 0
> SELECT ceil(5);
 5
> SELECT ceil(3.1411, 3);
 3.142
> SELECT ceil(3.1411, -3);
 1000

開始 3.3.0


ceiling

ceiling(expr[, scale]) - expr 以上の最小の数値を、切り上げて返します。オプションの scale パラメータを指定して、丸め動作を制御できます。

> SELECT ceiling(-0.1);
 0
> SELECT ceiling(5);
 5
> SELECT ceiling(3.1411, 3);
 3.142
> SELECT ceiling(3.1411, -3);
 1000

開始 3.3.0


char

char(expr) - expr とバイナリ的に同等の ASCII 文字を返します。n が 256 より大きい場合、結果は chr(n % 256) と同等です。

> SELECT char(65);
 A

開始 2.3.0


char_length

char_length(expr) - 文字列データの文字長、またはバイナリデータのバイト数を返します。文字列データの長さには、末尾のスペースが含まれます。バイナリデータの長さには、バイナリゼロが含まれます。

> SELECT char_length('Spark SQL ');
 10
> SELECT char_length(x'537061726b2053514c');
 9
> SELECT CHAR_LENGTH('Spark SQL ');
 10
> SELECT CHARACTER_LENGTH('Spark SQL ');
 10

開始 1.5.0


character_length

character_length(expr) - 文字列データの文字長、またはバイナリデータのバイト数を返します。文字列データの長さには、末尾のスペースが含まれます。バイナリデータの長さには、バイナリゼロが含まれます。

> SELECT character_length('Spark SQL ');
 10
> SELECT character_length(x'537061726b2053514c');
 9
> SELECT CHAR_LENGTH('Spark SQL ');
 10
> SELECT CHARACTER_LENGTH('Spark SQL ');
 10

開始 1.5.0


chr

chr(expr) - expr とバイナリ的に同等の ASCII 文字を返します。n が 256 より大きい場合、結果は chr(n % 256) と同等です。

> SELECT chr(65);
 A

開始 2.3.0


coalesce

coalesce(expr1, expr2, ...) - 最初の非 NULL 引数が存在する場合はそれを返します。それ以外の場合は、NULL を返します。

> SELECT coalesce(NULL, 1, NULL);
 1

開始 1.0.0


collect_list

collect_list(expr) - 一意でない要素のリストを収集して返します。

> SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col);
 [1,2,1]

収集された結果の順序はシャッフル後に非決定的になる可能性がある行の順序に依存するため、この関数は非決定的です。

開始 2.0.0


collect_set

collect_set(expr) - 一意な要素のセットを収集して返します。

> SELECT collect_set(col) FROM VALUES (1), (2), (1) AS tab(col);
 [1,2]

収集された結果の順序はシャッフル後に非決定的になる可能性がある行の順序に依存するため、この関数は非決定的です。

開始 2.0.0


concat

concat(col1, col2, ..., colN) - col1, col2, ..., colN の連結を返します。

> SELECT concat('Spark', 'SQL');
 SparkSQL
> SELECT concat(array(1, 2, 3), array(4, 5), array(6));
 [1,2,3,4,5,6]

配列の連結ロジックは 2.4.0 以降で利用可能です。

開始 1.5.0


concat_ws

concat_ws(sep[, str | array(str)]+) - sep で区切られた文字列の連結を返します。NULL 値はスキップされます。

> SELECT concat_ws(' ', 'Spark', 'SQL');
  Spark SQL
> SELECT concat_ws('s');

> SELECT concat_ws('/', 'foo', null, 'bar');
  foo/bar
> SELECT concat_ws(null, 'Spark', 'SQL');
  NULL

開始 1.5.0


contains

contains(left, right) - ブール値を返します。right が left 内に見つかった場合は True です。いずれかの入力式が NULL の場合は NULL を返します。それ以外の場合は False を返します。left または right は、STRING または BINARY 型である必要があります。

> SELECT contains('Spark SQL', 'Spark');
 true
> SELECT contains('Spark SQL', 'SPARK');
 false
> SELECT contains('Spark SQL', null);
 NULL
> SELECT contains(x'537061726b2053514c', x'537061726b');
 true

開始 3.3.0


conv

conv(num, from_base, to_base) - numfrom_base から to_base に変換します。

> SELECT conv('100', 2, 10);
 4
> SELECT conv(-10, 16, -10);
 -16

開始 1.5.0


convert_timezone

convert_timezone([sourceTz, ]targetTz, sourceTs) - タイムゾーンなしのタイムスタンプ sourceTs を、sourceTz タイムゾーンから targetTz に変換します。

引数

  • sourceTz - 入力タイムスタンプのタイムゾーン。省略した場合、現在のセッションタイムゾーンがソースタイムゾーンとして使用されます。
  • targetTz - 入力タイムスタンプの変換先のタイムゾーン
  • sourceTs - タイムゾーンなしのタイムスタンプ

> SELECT convert_timezone('Europe/Brussels', 'America/Los_Angeles', timestamp_ntz'2021-12-06 00:00:00');
 2021-12-05 15:00:00
> SELECT convert_timezone('Europe/Brussels', timestamp_ntz'2021-12-05 15:00:00');
 2021-12-06 00:00:00

開始 3.4.0


corr

corr(expr1, expr2) - 数値ペアのセット間のピアソン相関係数を返します。

> SELECT corr(c1, c2) FROM VALUES (3, 2), (3, 3), (6, 4) as tab(c1, c2);
 0.8660254037844387

開始 1.6.0


cos

cos(expr) - java.lang.Math.cos で計算されたかのように、expr のコサインを返します。

引数

  • expr - ラジアン単位の角度

> SELECT cos(0);
 1.0

開始 1.4.0


cosh

cosh(expr) - java.lang.Math.cosh で計算されたかのように、expr の双曲線コサインを返します。

引数

  • expr - 双曲線角

> SELECT cosh(0);
 1.0

開始 1.4.0


cot

cot(expr) - 1/java.lang.Math.tan で計算されたかのように、expr のコタンジェントを返します。

引数

  • expr - ラジアン単位の角度

> SELECT cot(1);
 0.6420926159343306

開始 2.3.0


count

count(*) - NULL を含む、取得された行の合計数を返します。

count(expr[, expr...]) - 指定された式がすべて非 NULL である行数を返します。

count(DISTINCT expr[, expr...]) - 指定された式が一意で非 NULL である行数を返します。

> SELECT count(*) FROM VALUES (NULL), (5), (5), (20) AS tab(col);
 4
> SELECT count(col) FROM VALUES (NULL), (5), (5), (20) AS tab(col);
 3
> SELECT count(DISTINCT col) FROM VALUES (NULL), (5), (5), (10) AS tab(col);
 2

開始 1.0.0


count_if

count_if(expr) - 式の TRUE 値の数を返します。

> SELECT count_if(col % 2 = 0) FROM VALUES (NULL), (0), (1), (2), (3) AS tab(col);
 2
> SELECT count_if(col IS NULL) FROM VALUES (NULL), (0), (1), (2), (3) AS tab(col);
 1

開始 3.0.0


count_min_sketch

count_min_sketch(col, eps, confidence, seed) - 指定された esp、信頼度、およびシードを持つ列のカウント最小スケッチを返します。結果はバイト配列であり、使用前に CountMinSketch に逆シリアル化できます。カウント最小スケッチは、準線形空間を使用してカーディナリティ推定に使用される確率的データ構造です。

> SELECT hex(count_min_sketch(col, 0.5d, 0.5d, 1)) FROM VALUES (1), (2), (1) AS tab(col);
 0000000100000000000000030000000100000004000000005D8D6AB90000000000000000000000000000000200000000000000010000000000000000

開始 2.2.0


covar_pop

covar_pop(expr1, expr2) - 数値ペアのセットの母共分散を返します。

> SELECT covar_pop(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);
 0.6666666666666666

開始 2.0.0


covar_samp

covar_samp(expr1, expr2) - 数値ペアのセットの標本共分散を返します。

> SELECT covar_samp(c1, c2) FROM VALUES (1,1), (2,2), (3,3) AS tab(c1, c2);
 1.0

開始 2.0.0


crc32

crc32(expr) - expr の巡回冗長検査値を bigint として返します。

> SELECT crc32('Spark');
 1557323817

開始 1.5.0


csc

csc(expr) - 1/java.lang.Math.sin で計算されたかのように、expr のコセカントを返します。

引数

  • expr - ラジアン単位の角度

> SELECT csc(1);
 1.1883951057781212

開始 3.3.0


cume_dist

cume_dist() - パーティション内のすべての値に対する値の位置を計算します。

> SELECT a, b, cume_dist() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   0.6666666666666666
 A1 1   0.6666666666666666
 A1 2   1.0
 A2 3   1.0

開始 2.0.0


curdate

curdate() - クエリ評価の開始時の現在の日付を返します。同じクエリ内の curdate のすべての呼び出しは、同じ値を返します。

> SELECT curdate();
 2022-09-06

開始 3.4.0


current_catalog

current_catalog() - 現在のカタログを返します。

> SELECT current_catalog();
 spark_catalog

開始 3.1.0


current_database

current_database() - 現在のデータベースを返します。

> SELECT current_database();
 default

開始 1.6.0


current_date

current_date() - クエリ評価の開始時の現在の日付を返します。同じクエリ内の current_date のすべての呼び出しは、同じ値を返します。

current_date - クエリ評価の開始時の現在の日付を返します。

> SELECT current_date();
 2020-04-25
> SELECT current_date;
 2020-04-25

括弧なしの構文は 2.0.1 以降でサポートされています。

開始 1.5.0


current_schema

current_schema() - 現在のデータベースを返します。

> SELECT current_schema();
 default

開始 1.6.0


current_timestamp

current_timestamp() - クエリ評価の開始時の現在のタイムスタンプを返します。同じクエリ内の current_timestamp のすべての呼び出しは、同じ値を返します。

current_timestamp - クエリ評価の開始時の現在のタイムスタンプを返します。

> SELECT current_timestamp();
 2020-04-25 15:49:11.914
> SELECT current_timestamp;
 2020-04-25 15:49:11.914

括弧なしの構文は 2.0.1 以降でサポートされています。

開始 1.5.0


current_timezone

current_timezone() - 現在のセッションのローカルタイムゾーンを返します。

> SELECT current_timezone();
 Asia/Shanghai

開始 3.1.0


current_user

current_user() - 現在の実行コンテキストのユーザー名。

> SELECT current_user();
 mockingjay

開始 3.2.0


date

date(expr) - 値 expr をターゲットデータ型 date にキャストします。

開始 2.0.1


date_add

date_add(start_date, num_days) - start_datenum_days 後である日付を返します。

> SELECT date_add('2016-07-30', 1);
 2016-07-31

開始 1.5.0


date_diff

date_diff(endDate, startDate) - startDate から endDate までの日数を返します。

> SELECT date_diff('2009-07-31', '2009-07-30');
 1

> SELECT date_diff('2009-07-30', '2009-07-31');
 -1

開始 3.4.0


date_format

date_format(timestamp, fmt) - timestamp を、日付形式 fmt で指定された形式の文字列の値に変換します。

引数

  • timestamp - 指定された形式に変換される日付/タイムスタンプまたは文字列。
  • fmt - 従う日付/時刻形式パターン。有効な日付と時刻の形式パターンについては、Datetime Patterns を参照してください。

> SELECT date_format('2016-04-08', 'y');
 2016

開始 1.5.0


date_from_unix_date

date_from_unix_date(days) - 1970-01-01 からの日数から日付を作成します。

> SELECT date_from_unix_date(1);
 1970-01-02

開始 3.1.0


date_part

date_part(field, source) - 日付/タイムスタンプまたは間隔のソースの一部を抽出します。

引数

  • field - 抽出するソースのどの部分を選択します。サポートされている文字列値は、同等の関数 EXTRACT のフィールドと同じです。
  • source - field を抽出する日付/タイムスタンプまたは間隔の列

> SELECT date_part('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');
 2019
> SELECT date_part('week', timestamp'2019-08-12 01:00:00.123456');
 33
> SELECT date_part('doy', DATE'2019-08-12');
 224
> SELECT date_part('SECONDS', timestamp'2019-10-01 00:00:01.000001');
 1.000001
> SELECT date_part('days', interval 5 days 3 hours 7 minutes);
 5
> SELECT date_part('seconds', interval 5 hours 30 seconds 1 milliseconds 1 microseconds);
 30.001001
> SELECT date_part('MONTH', INTERVAL '2021-11' YEAR TO MONTH);
 11
> SELECT date_part('MINUTE', INTERVAL '123 23:55:59.002001' DAY TO SECOND);
 55

date_part 関数は、SQL 標準関数 EXTRACT(field FROM source) と同等です。

開始 3.0.0


date_sub

date_sub(start_date, num_days) - start_datenum_days 前である日付を返します。

> SELECT date_sub('2016-07-30', 1);
 2016-07-29

開始 1.5.0


date_trunc

date_trunc(fmt, ts) - タイムスタンプ ts を、形式モデル fmt で指定された単位に切り捨てて返します。

引数

  • fmt - 切り捨てられる単位を表す形式
    • "YEAR"、"YYYY"、"YY" - ts が該当する年の最初の日付に切り捨てます。時間部分はゼロになります
    • "QUARTER" - ts が該当する四半期の最初の日付に切り捨てます。時間部分はゼロになります
    • "MONTH"、"MM"、"MON" - ts が該当する月の最初の日付に切り捨てます。時間部分はゼロになります
    • "WEEK" - ts が該当する週の月曜日に切り捨てます。時間部分はゼロになります
    • "DAY"、"DD" - 時間部分をゼロにします
    • "HOUR" - 分と秒(分数部分を含む)をゼロにします
    • "MINUTE" - 秒(分数部分を含む)をゼロにします
    • "SECOND" - 秒の分数部分をゼロにします
    • "MILLISECOND" - マイクロ秒をゼロにします
    • "MICROSECOND" - すべてが残ります
  • ts - datetime 値または有効なタイムスタンプ文字列

> SELECT date_trunc('YEAR', '2015-03-05T09:32:05.359');
 2015-01-01 00:00:00
> SELECT date_trunc('MM', '2015-03-05T09:32:05.359');
 2015-03-01 00:00:00
> SELECT date_trunc('DD', '2015-03-05T09:32:05.359');
 2015-03-05 00:00:00
> SELECT date_trunc('HOUR', '2015-03-05T09:32:05.359');
 2015-03-05 09:00:00
> SELECT date_trunc('MILLISECOND', '2015-03-05T09:32:05.123456');
 2015-03-05 09:32:05.123

開始 2.3.0


dateadd

dateadd(start_date, num_days) - start_datenum_days 後である日付を返します。

> SELECT dateadd('2016-07-30', 1);
 2016-07-31

開始 3.4.0


datediff

datediff(endDate, startDate) - startDate から endDate までの日数を返します。

> SELECT datediff('2009-07-31', '2009-07-30');
 1

> SELECT datediff('2009-07-30', '2009-07-31');
 -1

開始 1.5.0


datepart

datepart(field, source) - 日付/タイムスタンプまたは間隔のソースの一部を抽出します。

引数

  • field - 抽出するソースのどの部分を選択します。サポートされている文字列値は、同等の関数 EXTRACT のフィールドと同じです。
  • source - field を抽出する日付/タイムスタンプまたは間隔の列

> SELECT datepart('YEAR', TIMESTAMP '2019-08-12 01:00:00.123456');
 2019
> SELECT datepart('week', timestamp'2019-08-12 01:00:00.123456');
 33
> SELECT datepart('doy', DATE'2019-08-12');
 224
> SELECT datepart('SECONDS', timestamp'2019-10-01 00:00:01.000001');
 1.000001
> SELECT datepart('days', interval 5 days 3 hours 7 minutes);
 5
> SELECT datepart('seconds', interval 5 hours 30 seconds 1 milliseconds 1 microseconds);
 30.001001
> SELECT datepart('MONTH', INTERVAL '2021-11' YEAR TO MONTH);
 11
> SELECT datepart('MINUTE', INTERVAL '123 23:55:59.002001' DAY TO SECOND);
 55

datepart 関数は、SQL 標準関数 EXTRACT(field FROM source) と同等です。

開始 3.4.0


day

day(date) - 日付/タイムスタンプの月の日を返します。

> SELECT day('2009-07-30');
 30

開始 1.5.0


dayofmonth

dayofmonth(date) - 日付/タイムスタンプの月の日を返します。

> SELECT dayofmonth('2009-07-30');
 30

開始 1.5.0


dayofweek

dayofweek(date) - 日付/タイムスタンプの曜日を返します(1 = 日曜日、2 = 月曜日、...、7 = 土曜日)。

> SELECT dayofweek('2009-07-30');
 5

開始 2.3.0


dayofyear

dayofyear(date) - 日付/タイムスタンプの年の日を返します。

> SELECT dayofyear('2016-04-09');
 100

開始 1.5.0


decimal

decimal(expr) - 値 expr をターゲットデータ型 decimal にキャストします。

開始 2.0.1


decode

decode(bin, charset) - 2 番目の引数の文字セットを使用して、最初の引数をデコードします。

decode(expr, search, result [, search, result ] ... [, default]) - expr を各検索値と順番に比較します。expr が検索値と等しい場合、decode は対応する結果を返します。一致するものが見つからない場合は、default を返します。default が省略された場合は、null を返します。

> SELECT decode(encode('abc', 'utf-8'), 'utf-8');
 abc
> SELECT decode(2, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle', 'Non domestic');
 San Francisco
> SELECT decode(6, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle', 'Non domestic');
 Non domestic
> SELECT decode(6, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle');
 NULL
> SELECT decode(null, 6, 'Spark', NULL, 'SQL', 4, 'rocks');
 SQL

開始 3.2.0


degrees

degrees(expr) - ラジアンを度数に変換します。

引数

  • expr - ラジアン単位の角度

> SELECT degrees(3.141592653589793);
 180.0

開始 1.4.0


dense_rank

dense_rank() - 値のグループ内の値の順位を計算します。結果は、以前に割り当てられたランク値に 1 を加えたものです。関数 rank とは異なり、dense_rank はランキングシーケンスにギャップを生成しません。

引数

  • children - これは順位の基準となるものです。子の一つの値の変化は、順位の変化を引き起こします。これは内部パラメータであり、アナライザーによって割り当てられます。

> SELECT a, b, dense_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   1
 A1 1   1
 A1 2   2
 A2 3   1

開始 2.0.0


div

expr1 div expr2 - expr1expr2 で割ります。オペランドが NULL の場合、または expr2 が 0 の場合は NULL を返します。結果は long にキャストされます。

> SELECT 3 div 2;
 1
> SELECT INTERVAL '1-1' YEAR TO MONTH div INTERVAL '-1' MONTH;
 -13

開始 3.0.0


double

double(expr) - 値 expr をターゲットデータ型 double にキャストします。

開始 2.0.1


e

e() - オイラー数 e を返します。

> SELECT e();
 2.718281828459045

開始 1.5.0


element_at

element_at(array, index) - 指定された(1 ベースの)インデックスにある配列の要素を返します。インデックスが 0 の場合、Spark はエラーをスローします。インデックスが < 0 の場合は、最後から最初の要素にアクセスします。インデックスが配列の長さを超えており、spark.sql.ansi.enabled が false に設定されている場合、関数は NULL を返します。spark.sql.ansi.enabled が true に設定されている場合は、無効なインデックスに対して ArrayIndexOutOfBoundsException がスローされます。

element_at(map, key) - 指定されたキーの値​​を返します。キーがマップに含まれていない場合、関数は NULL を返します。

> SELECT element_at(array(1, 2, 3), 2);
 2
> SELECT element_at(map(1, 'a', 2, 'b'), 2);
 b

開始 2.4.0


elt

elt(n, input1, input2, ...) - n 番目の入力を返します。たとえば、n が 2 の場合は input2 を返します。インデックスが配列の長さを超えており、spark.sql.ansi.enabled が false に設定されている場合、関数は NULL を返します。spark.sql.ansi.enabled が true に設定されている場合は、無効なインデックスに対して ArrayIndexOutOfBoundsException がスローされます。

> SELECT elt(1, 'scala', 'java');
 scala
> SELECT elt(2, 'a', 1);
 1

開始 2.0.0


encode

encode(str, charset) - 2 番目の引数の文字セットを使用して、最初の引数をエンコードします。

> SELECT encode('abc', 'utf-8');
 abc

開始 1.5.0


endswith

endswith(left, right) - ブール値を返します。left が right で終わる場合は True です。いずれかの入力式が NULL の場合は NULL を返します。それ以外の場合は False を返します。left または right は、STRING または BINARY 型である必要があります。

> SELECT endswith('Spark SQL', 'SQL');
 true
> SELECT endswith('Spark SQL', 'Spark');
 false
> SELECT endswith('Spark SQL', null);
 NULL
> SELECT endswith(x'537061726b2053514c', x'537061726b');
 false
> SELECT endswith(x'537061726b2053514c', x'53514c');
 true

開始 3.3.0


equal_null

equal_null(expr1, expr2) - 非 NULL オペランドの場合は EQUAL(=) 演算子と同じ結果を返しますが、両方が null の場合は true、いずれかが null の場合は false を返します。

引数

  • expr1, expr2 - 2つの式は同じ型であるか、共通の型にキャストできる必要があり、等価比較で使用できる型である必要があります。マップ型はサポートされていません。配列/構造体などの複合型の場合、フィールドのデータ型は順序付け可能である必要があります。

> SELECT equal_null(3, 3);
 true
> SELECT equal_null(1, '11');
 false
> SELECT equal_null(true, NULL);
 false
> SELECT equal_null(NULL, 'abc');
 false
> SELECT equal_null(NULL, NULL);
 true

開始 3.4.0


every

every(expr) - expr のすべての値が true の場合は true を返します。

> SELECT every(col) FROM VALUES (true), (true), (true) AS tab(col);
 true
> SELECT every(col) FROM VALUES (NULL), (true), (true) AS tab(col);
 true
> SELECT every(col) FROM VALUES (true), (false), (true) AS tab(col);
 false

開始 3.0.0


exists

exists(expr, pred) - 配列内の 1 つ以上の要素に対して述語が保持されるかどうかをテストします。

> SELECT exists(array(1, 2, 3), x -> x % 2 == 0);
 true
> SELECT exists(array(1, 2, 3), x -> x % 2 == 10);
 false
> SELECT exists(array(1, null, 3), x -> x % 2 == 0);
 NULL
> SELECT exists(array(0, null, 2, 3, null), x -> x IS NULL);
 true
> SELECT exists(array(1, 2, 3), x -> x IS NULL);
 false

開始 2.4.0


exp

exp(expr) - expr のべき乗に対する e を返します。

> SELECT exp(0);
 1.0

開始 1.4.0


explode

explode(expr) - 配列 expr の要素を複数の行に、またはマップ expr の要素を複数の行と列に分離します。特に指定がない限り、配列の要素にはデフォルトの列名 col、マップの要素には key および value を使用します。

> SELECT explode(array(10, 20));
 10
 20
> SELECT explode(collection => array(10, 20));
 10
 20
> SELECT * FROM explode(collection => array(10, 20));
 10
 20

開始 1.0.0


explode_outer

explode_outer(expr) - 配列 expr の要素を複数の行に、またはマップ expr の要素を複数の行と列に分離します。特に指定がない限り、配列の要素にはデフォルトの列名 col、マップの要素には key および value を使用します。

> SELECT explode_outer(array(10, 20));
 10
 20
> SELECT explode_outer(collection => array(10, 20));
 10
 20
> SELECT * FROM explode_outer(collection => array(10, 20));
 10
 20

開始 1.0.0


expm1

expm1(expr) - exp(expr) - 1 を返します。

> SELECT expm1(0);
 0.0

開始 1.4.0


extract

extract(field FROM source) - 日付/タイムスタンプまたは間隔のソースの一部を抽出します。

引数

  • field - 抽出するソースのどの部分を選択します。
    • 日付とタイムスタンプの field でサポートされている文字列値(大文字と小文字は区別されません)は次のとおりです。
      • "YEAR"、("Y", "YEARS", "YR", "YRS") - 年のフィールド
      • "YEAROFWEEK" - 日付が該当する ISO 8601 週番号の年。たとえば、2005-01-02 は 2004 年の第 53 週の一部であるため、結果は 2004 になります。
      • "QUARTER", ("QTR") - そのdatetimeが含まれる年の四半期 (1 - 4)
      • "MONTH", ("MON", "MONS", "MONTHS") - 月フィールド (1 - 12)
      • "WEEK", ("W", "WEEKS") - ISO 8601 週番号に基づく年の週番号。週は月曜日に始まり、週1はその年の最初の4日以上を含む週です。ISO週番号システムでは、1月上旬の日付が前年の第52週または第53週の一部である可能性があり、12月下旬の日付が翌年の第1週の一部である可能性があります。たとえば、2005-01-02は2004年の第53週の一部であり、2012-12-31は2013年の第1週の一部です。
      • "DAY", ("D", "DAYS") - 月の日フィールド (1 - 31)
      • "DAYOFWEEK",("DOW") - datetimeの曜日を日曜(1)から土曜(7)で表します
      • "DAYOFWEEK_ISO",("DOW_ISO") - datetimeの曜日をISO 8601に基づいて月曜(1)から日曜(7)で表します
      • "DOY" - 年の日 (1 - 365/366)
      • "HOUR", ("H", "HOURS", "HR", "HRS") - 時間フィールド (0 - 23)
      • "MINUTE", ("M", "MIN", "MINS", "MINUTES") - 分フィールド (0 - 59)
      • "SECOND", ("S", "SEC", "SECONDS", "SECS") - 秒フィールド (小数部分を含む)
    • interval(months, days, microsecondsで構成される)のfieldでサポートされる文字列値は(大文字と小文字を区別しません)
      • "YEAR", ("Y", "YEARS", "YR", "YRS") - 合計の months / 12
      • "MONTH", ("MON", "MONS", "MONTHS") - 合計の months % 12
      • "DAY", ("D", "DAYS") - intervalの days 部分
      • "HOUR", ("H", "HOURS", "HR", "HRS") - microseconds に含まれる時間数
      • "MINUTE", ("M", "MIN", "MINS", "MINUTES") - microseconds から時間を取り除いた後の残りの分数
      • "SECOND", ("S", "SEC", "SECONDS", "SECS") - microseconds から時間と分を取り除いた後の残りの小数秒を含む秒数
  • source - field を抽出する日付/タイムスタンプまたは間隔の列

> SELECT extract(YEAR FROM TIMESTAMP '2019-08-12 01:00:00.123456');
 2019
> SELECT extract(week FROM timestamp'2019-08-12 01:00:00.123456');
 33
> SELECT extract(doy FROM DATE'2019-08-12');
 224
> SELECT extract(SECONDS FROM timestamp'2019-10-01 00:00:01.000001');
 1.000001
> SELECT extract(days FROM interval 5 days 3 hours 7 minutes);
 5
> SELECT extract(seconds FROM interval 5 hours 30 seconds 1 milliseconds 1 microseconds);
 30.001001
> SELECT extract(MONTH FROM INTERVAL '2021-11' YEAR TO MONTH);
 11
> SELECT extract(MINUTE FROM INTERVAL '123 23:55:59.002001' DAY TO SECOND);
 55

extract関数は date_part(field, source) と同等です。

開始 3.0.0


factorial

factorial(expr) - expr の階乗を返します。expr は [0..20] です。それ以外の場合は、null を返します。

> SELECT factorial(5);
 120

開始 1.5.0


filter

filter(expr, func) - 指定された述語を使用して入力配列をフィルタリングします。

> SELECT filter(array(1, 2, 3), x -> x % 2 == 1);
 [1,3]
> SELECT filter(array(0, 2, 3), (x, i) -> x > i);
 [2,3]
> SELECT filter(array(0, null, 2, 3, null), x -> x IS NOT NULL);
 [0,2,3]

内部関数は 3.0.0 以降、インデックス引数を使用できます。

開始 2.4.0


find_in_set

find_in_set(str, str_array) - カンマ区切りのリスト (str_array) 内の指定された文字列 (str) のインデックス (1-based) を返します。文字列が見つからない場合、または指定された文字列 (str) にカンマが含まれている場合は、0 を返します。

> SELECT find_in_set('ab','abc,b,ab,c,def');
 3

開始 1.5.0


first

first(expr[, isIgnoreNull]) - 行のグループに対する expr の最初の値を返します。isIgnoreNull が true の場合は、null でない値のみを返します。

> SELECT first(col) FROM VALUES (10), (5), (20) AS tab(col);
 10
> SELECT first(col) FROM VALUES (NULL), (5), (20) AS tab(col);
 NULL
> SELECT first(col, true) FROM VALUES (NULL), (5), (20) AS tab(col);
 5

この関数は、シャッフルの後に非決定的な可能性がある行の順序に結果が依存するため、非決定的です。

開始 2.0.0


first_value

first_value(expr[, isIgnoreNull]) - 行のグループに対する expr の最初の値を返します。isIgnoreNull が true の場合は、null でない値のみを返します。

> SELECT first_value(col) FROM VALUES (10), (5), (20) AS tab(col);
 10
> SELECT first_value(col) FROM VALUES (NULL), (5), (20) AS tab(col);
 NULL
> SELECT first_value(col, true) FROM VALUES (NULL), (5), (20) AS tab(col);
 5

この関数は、シャッフルの後に非決定的な可能性がある行の順序に結果が依存するため、非決定的です。

開始 2.0.0


flatten

flatten(arrayOfArrays) - 配列の配列を単一の配列に変換します。

> SELECT flatten(array(array(1, 2), array(3, 4)));
 [1,2,3,4]

開始 2.4.0


float

float(expr) - 値 expr をターゲットのデータ型 float にキャストします。

開始 2.0.1


floor

floor(expr[, scale]) - expr 以下の最大の数(切り捨て後)を返します。オプションの scale パラメータを指定して、丸め動作を制御できます。

> SELECT floor(-0.1);
 -1
> SELECT floor(5);
 5
> SELECT floor(3.1411, 3);
 3.141
> SELECT floor(3.1411, -3);
 0

開始 3.3.0


forall

forall(expr, pred) - 配列内のすべての要素に対して述語が保持されるかどうかをテストします。

> SELECT forall(array(1, 2, 3), x -> x % 2 == 0);
 false
> SELECT forall(array(2, 4, 8), x -> x % 2 == 0);
 true
> SELECT forall(array(1, null, 3), x -> x % 2 == 0);
 false
> SELECT forall(array(2, null, 8), x -> x % 2 == 0);
 NULL

開始 3.0.0


format_number

format_number(expr1, expr2) - 数値 expr1 を '#,###,###.##' のようにフォーマットし、expr2 小数桁数に丸めます。expr2 が 0 の場合、結果に小数点や小数部は含まれません。expr2 はユーザー指定のフォーマットも受け入れます。これは、MySQLのFORMATのように機能することを想定しています。

> SELECT format_number(12332.123456, 4);
 12,332.1235
> SELECT format_number(12332.123456, '##################.###');
 12332.123

開始 1.5.0


format_string

format_string(strfmt, obj, ...) - printf スタイルの書式文字列からフォーマットされた文字列を返します。

> SELECT format_string("Hello World %d %s", 100, "days");
 Hello World 100 days

開始 1.5.0


from_csv

from_csv(csvStr, schema[, options]) - 指定された csvStrschema を持つ構造体値を返します。

> SELECT from_csv('1, 0.8', 'a INT, b DOUBLE');
 {"a":1,"b":0.8}
> SELECT from_csv('26/08/2015', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
 {"time":2015-08-26 00:00:00}

開始 3.0.0


from_json

from_json(jsonStr, schema[, options]) - 指定された jsonStrschema を持つ構造体値を返します。

> SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
 {"a":1,"b":0.8}
> SELECT from_json('{"time":"26/08/2015"}', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
 {"time":2015-08-26 00:00:00}
> SELECT from_json('{"teacher": "Alice", "student": [{"name": "Bob", "rank": 1}, {"name": "Charlie", "rank": 2}]}', 'STRUCT<teacher: STRING, student: ARRAY<STRUCT<name: STRING, rank: INT>>>');
 {"teacher":"Alice","student":[{"name":"Bob","rank":1},{"name":"Charlie","rank":2}]}

開始 2.2.0


from_unixtime

from_unixtime(unix_time[, fmt]) - 指定された fmtunix_time を返します。

引数

  • unix_time - 指定された形式に変換される UNIX タイムスタンプ。
  • fmt - 従うべき日付/時刻のフォーマットパターン。有効な日付と時刻のフォーマットパターンについては、Datetime Patterns を参照してください。省略すると、'yyyy-MM-dd HH:mm:ss' パターンが使用されます。

> SELECT from_unixtime(0, 'yyyy-MM-dd HH:mm:ss');
 1969-12-31 16:00:00

> SELECT from_unixtime(0);
 1969-12-31 16:00:00

開始 1.5.0


from_utc_timestamp

from_utc_timestamp(timestamp, timezone) - '2017-07-14 02:40:00.0' のようなタイムスタンプが与えられた場合、それを UTC の時刻として解釈し、その時刻を指定されたタイムゾーンのタイムスタンプとしてレンダリングします。たとえば、'GMT+1' は '2017-07-14 03:40:00.0' を生成します。

> SELECT from_utc_timestamp('2016-08-31', 'Asia/Seoul');
 2016-08-31 09:00:00

開始 1.5.0


get

get(array, index) - 指定された (0-based) インデックスにある配列の要素を返します。インデックスが配列の境界外を指している場合、この関数は NULL を返します。

> SELECT get(array(1, 2, 3), 0);
 1
> SELECT get(array(1, 2, 3), 3);
 NULL
> SELECT get(array(1, 2, 3), -1);
 NULL

開始 3.4.0


get_json_object

get_json_object(json_txt, path) - path から json オブジェクトを抽出します。

> SELECT get_json_object('{"a":"b"}', '$.a');
 b

開始 1.5.0


getbit

getbit(expr, pos) - 指定された位置のビットの値(0または1)を返します。位置は右から左に0から始まる番号が付けられます。位置引数は負の数にできません。

> SELECT getbit(11, 0);
 1
> SELECT getbit(11, 2);
 0

開始 3.2.0


greatest

greatest(expr, ...) - すべてのパラメータの最大値を返し、null 値はスキップします。

> SELECT greatest(10, 9, 2, 4, 3);
 10

開始 1.5.0


grouping

grouping(col) - GROUP BY で指定された列が集計されているかどうかを示します。集計されている場合は 1、結果セットで集計されていない場合は 0 を返します。",

> SELECT name, grouping(name), sum(age) FROM VALUES (2, 'Alice'), (5, 'Bob') people(age, name) GROUP BY cube(name);
  Alice 0   2
  Bob   0   5
  NULL  1   7

開始 2.0.0


grouping_id

grouping_id([col1[, col2 ..]]) - グループ化のレベルを返します。(grouping(c1) << (n-1)) + (grouping(c2) << (n-2)) + ... + grouping(cn) に等しくなります。

> SELECT name, grouping_id(), sum(age), avg(height) FROM VALUES (2, 'Alice', 165), (5, 'Bob', 180) people(age, name, height) GROUP BY cube(name, height);
  Alice 0   2   165.0
  Alice 1   2   165.0
  NULL  3   7   172.5
  Bob   0   5   180.0
  Bob   1   5   180.0
  NULL  2   2   165.0
  NULL  2   5   180.0

入力列は、グループ化列と完全に一致するか、空(すべてのグループ化列を意味する)である必要があります。

開始 2.0.0


hash

hash(expr1, expr2, ...) - 引数のハッシュ値を返します。

> SELECT hash('Spark', array(123), 2);
 -1321691492

開始 2.0.0


hex

hex(expr) - expr を16進数に変換します。

> SELECT hex(17);
 11
> SELECT hex('Spark SQL');
 537061726B2053514C

開始 1.5.0


histogram_numeric

histogram_numeric(expr, nb) - nb 個のビンを使用して、数値の 'expr' のヒストグラムを計算します。戻り値は、ヒストグラムのビンの中心を表す (x,y) ペアの配列です。 'nb' の値を大きくすると、ヒストグラムの近似はより細かくなりますが、外れ値の周りにアーティファクトが生じる可能性があります。実際には、20〜40個のヒストグラムビンでうまく機能することがわかりましたが、偏ったデータセットや小さいデータセットの場合は、より多くのビンが必要になります。この関数は、不均一なビン幅のヒストグラムを作成することに注意してください。ヒストグラムの二乗平均誤差に関して保証はありませんが、実際には R/S-Plus 統計コンピューティングパッケージで生成されるヒストグラムと同等です。注意:戻り値の「x」フィールドの出力型は、集計関数で消費される入力値から伝播されます。

> SELECT histogram_numeric(col, 5) FROM VALUES (0), (1), (2), (10) AS tab(col);
 [{"x":0,"y":1.0},{"x":1,"y":1.0},{"x":2,"y":1.0},{"x":10,"y":1.0}]

開始 3.3.0


hll_sketch_agg

hll_sketch_agg(expr, lgConfigK) - HllSketch の更新可能なバイナリ表現を返します。 lgConfigK(オプション)は、K の対数底2であり、K は HllSketch のバケットまたはスロットの数です。

> SELECT hll_sketch_estimate(hll_sketch_agg(col, 12)) FROM VALUES (1), (1), (2), (2), (3) tab(col);
 3

開始 3.5.0


hll_sketch_estimate

hll_sketch_estimate(expr) - Datasketches HllSketch のバイナリ表現が与えられた場合、推定される一意の値の数を返します。

> SELECT hll_sketch_estimate(hll_sketch_agg(col)) FROM VALUES (1), (1), (2), (2), (3) tab(col);
 3

開始 3.5.0


hll_union

hll_union(first, second, allowDifferentLgConfigK) - Datasketches Union オブジェクトを使用して、Datasketches HllSketch オブジェクトの2つのバイナリ表現をマージします。異なる lgConfigK 値を持つスケッチの結合を許可するには、allowDifferentLgConfigK を true に設定します(デフォルトは false)。

> SELECT hll_sketch_estimate(hll_union(hll_sketch_agg(col1), hll_sketch_agg(col2))) FROM VALUES (1, 4), (1, 4), (2, 5), (2, 5), (3, 6) tab(col1, col2);
 6

開始 3.5.0


hll_union_agg

hll_union_agg(expr, allowDifferentLgConfigK) - 推定される一意の値の数を返します。allowDifferentLgConfigK(オプション)は、異なる lgConfigK 値を持つスケッチの結合を許可します(デフォルトは false)。

> SELECT hll_sketch_estimate(hll_union_agg(sketch, true)) FROM (SELECT hll_sketch_agg(col) as sketch FROM VALUES (1) tab(col) UNION ALL SELECT hll_sketch_agg(col, 20) as sketch FROM VALUES (1) tab(col));
 1

開始 3.5.0


hour

hour(timestamp) - 文字列/タイムスタンプの時間コンポーネントを返します。

> SELECT hour('2009-07-30 12:58:59');
 12

開始 1.5.0


hypot

hypot(expr1, expr2) - sqrt(expr12 + expr22) を返します。

> SELECT hypot(3, 4);
 5.0

開始 1.4.0


if

if(expr1, expr2, expr3) - expr1 が true と評価された場合、expr2 を返します。それ以外の場合は expr3 を返します。

> SELECT if(1 < 2, 'a', 'b');
 a

開始 1.0.0


ifnull

ifnull(expr1, expr2) - expr1 が null の場合は expr2 を返し、それ以外の場合は expr1 を返します。

> SELECT ifnull(NULL, array('2'));
 ["2"]

開始 2.0.0


ilike

str ilike pattern[ ESCAPE escape] - escape を使用して strpattern と大文字と小文字を区別せずに一致する場合は true を返し、引数のいずれかが null の場合は null を返し、それ以外の場合は false を返します。

引数

  • str - 文字列式
  • pattern - 文字列式。パターンは、以下の特殊記号を除き、リテラルかつ大文字と小文字を区別せずに一致する文字列です。

    _ は、入力内の任意の1文字と一致します (posix 正規表現の . に似ています)

    % は、入力内のゼロ文字以上と一致します (posix 正規表現の .* に似ています)

    Spark 2.0 以降、文字列リテラルは SQL パーサーでエスケープ解除されます。たとえば、"\abc" に一致させるには、パターンは "\abc" である必要があります。

    SQL 構成 'spark.sql.parser.escapedStringLiterals' が有効になっている場合、文字列リテラルの解析に関する Spark 1.6 の動作に戻ります。たとえば、構成が有効になっている場合、"\abc" に一致させるためのパターンは "\abc" である必要があります。
  • escape - Spark 3.0 から追加された文字。デフォルトのエスケープ文字は '\' です。エスケープ文字が特殊記号または別のエスケープ文字の前にある場合、次の文字はリテラルに一致します。他の文字をエスケープすることは無効です。

> SELECT ilike('Spark', '_Park');
true
> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals  true
> SELECT '%SystemDrive%\Users\John' ilike '\%SystemDrive\%\\users%';
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals  false
> SELECT '%SystemDrive%\\USERS\\John' ilike '\%SystemDrive\%\\\\Users%';
true
> SELECT '%SystemDrive%/Users/John' ilike '/%SYSTEMDrive/%//Users%' ESCAPE '/';
true

標準的な正規表現と一致させるには、RLIKE を使用します。

開始 3.3.0


in

expr1 in(expr2, expr3, ...) - expr が任意の valN に等しい場合は true を返します。

引数

  • expr1, expr2, expr3, ... - 引数は同じ型である必要があります。

> SELECT 1 in(1, 2, 3);
 true
> SELECT 1 in(2, 3, 4);
 false
> SELECT named_struct('a', 1, 'b', 2) in(named_struct('a', 1, 'b', 1), named_struct('a', 1, 'b', 3));
 false
> SELECT named_struct('a', 1, 'b', 2) in(named_struct('a', 1, 'b', 2), named_struct('a', 1, 'b', 3));
 true

開始 1.0.0


initcap

initcap(str) - 各単語の最初の文字を大文字にした str を返します。他のすべての文字は小文字です。単語は空白で区切られます。

> SELECT initcap('sPark sql');
 Spark Sql

開始 1.5.0


inline

inline(expr) - 構造体の配列をテーブルに展開します。特に指定のない限り、デフォルトで列名 col1、col2 などを使用します。

> SELECT inline(array(struct(1, 'a'), struct(2, 'b')));
 1  a
 2  b

開始 2.0.0


inline_outer

inline_outer(expr) - 構造体の配列をテーブルに展開します。特に指定のない限り、デフォルトで列名 col1、col2 などを使用します。

> SELECT inline_outer(array(struct(1, 'a'), struct(2, 'b')));
 1  a
 2  b

開始 2.0.0


input_file_block_length

input_file_block_length() - 読み取り中のブロックの長さを返します。利用できない場合は -1 を返します。

> SELECT input_file_block_length();
 -1

開始 2.2.0


input_file_block_start

input_file_block_start() - 読み取り中のブロックの開始オフセットを返します。利用できない場合は -1 を返します。

> SELECT input_file_block_start();
 -1

開始 2.2.0


input_file_name

input_file_name() - 読み取り中のファイルの名前を返します。利用できない場合は空の文字列を返します。

> SELECT input_file_name();

開始 1.5.0


instr

instr(str, substr) - str 内で substr が最初に現れる (1-based) インデックスを返します。

> SELECT instr('SparkSQL', 'SQL');
 6

開始 1.5.0


int

int(expr) - 値 expr をターゲットのデータ型 int にキャストします。

開始 2.0.1


isnan

isnan(expr) - expr が NaN の場合は true を返し、それ以外の場合は false を返します。

> SELECT isnan(cast('NaN' as double));
 true

開始 1.5.0


isnotnull

isnotnull(expr) - expr が null でない場合は true を返し、それ以外の場合は false を返します。

> SELECT isnotnull(1);
 true

開始 1.0.0


isnull

isnull(expr) - expr が null の場合は true を返し、それ以外の場合は false を返します。

> SELECT isnull(1);
 false

開始 1.0.0


java_method

java_method(class, method[, arg1[, arg2 ..]]) - リフレクションを使用してメソッドを呼び出します。

> SELECT java_method('java.util.UUID', 'randomUUID');
 c33fb387-8500-4bfa-81d2-6e0e3e930df2
> SELECT java_method('java.util.UUID', 'fromString', 'a5cf6c42-0c85-418f-af6c-3e4e5b1328f2');
 a5cf6c42-0c85-418f-af6c-3e4e5b1328f2

開始 2.0.0


json_array_length

json_array_length(jsonArray) - 最も外側の JSON 配列の要素数を返します。

引数

  • jsonArray - JSON 配列。他の有効な JSON 文字列、NULL、または無効な JSON の場合は NULL が返されます。

> SELECT json_array_length('[1,2,3,4]');
  4
> SELECT json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]');
  5
> SELECT json_array_length('[1,2');
  NULL

開始 3.1.0


json_object_keys

json_object_keys(json_object) - 最も外側の JSON オブジェクトのすべてのキーを配列として返します。

引数

  • json_object - JSON オブジェクト。有効な JSON オブジェクトが指定された場合、最も外側のオブジェクトのすべてのキーが配列として返されます。他の有効な JSON 文字列、無効な JSON 文字列、または空の文字列の場合は、関数は null を返します。

> SELECT json_object_keys('{}');
  []
> SELECT json_object_keys('{"key": "value"}');
  ["key"]
> SELECT json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}');
  ["f1","f2"]

開始 3.1.0


json_tuple

json_tuple(jsonStr, p1, p2, ..., pn) - 関数 get_json_object のようなタプルを返しますが、複数の名前を受け取ります。すべての入力パラメータと出力列の型は文字列です。

> SELECT json_tuple('{"a":1, "b":2}', 'a', 'b');
 1  2

開始 1.6.0


kurtosis

kurtosis(expr) - グループの値から計算された尖度値を返します。

> SELECT kurtosis(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);
 -0.7014368047529627
> SELECT kurtosis(col) FROM VALUES (1), (10), (100), (10), (1) as tab(col);
 0.19432323191699075

開始 1.6.0


lag

lag(input[, offset[, default]]) - ウィンドウ内の現在の行よりoffset行前のinputの値を返します。offsetのデフォルト値は1で、defaultのデフォルト値はnullです。offset行目のinputの値がnullの場合、nullが返されます。そのようなオフセット行が存在しない場合(例えば、オフセットが1の場合、ウィンドウの最初の行には前の行がない)、defaultが返されます。

引数

  • input - 現在の行よりoffset行前の評価対象となる文字列式。
  • offset - パーティション内で戻る行数を示す整数式。
  • default - オフセット行が存在しない場合に使用する文字列式。

> SELECT a, b, lag(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   NULL
 A1 1   1
 A1 2   1
 A2 3   NULL

開始 2.0.0


last

last(expr[, isIgnoreNull]) - 行グループにおけるexprの最後の値を返します。isIgnoreNullがtrueの場合、null以外の値のみを返します。

> SELECT last(col) FROM VALUES (10), (5), (20) AS tab(col);
 20
> SELECT last(col) FROM VALUES (10), (5), (NULL) AS tab(col);
 NULL
> SELECT last(col, true) FROM VALUES (10), (5), (NULL) AS tab(col);
 5

この関数は、シャッフルの後に非決定的な可能性がある行の順序に結果が依存するため、非決定的です。

開始 2.0.0


last_day

last_day(date) - 指定された日付が属する月の最終日を返します。

> SELECT last_day('2009-01-12');
 2009-01-31

開始 1.5.0


last_value

last_value(expr[, isIgnoreNull]) - 行グループにおけるexprの最後の値を返します。isIgnoreNullがtrueの場合、null以外の値のみを返します。

> SELECT last_value(col) FROM VALUES (10), (5), (20) AS tab(col);
 20
> SELECT last_value(col) FROM VALUES (10), (5), (NULL) AS tab(col);
 NULL
> SELECT last_value(col, true) FROM VALUES (10), (5), (NULL) AS tab(col);
 5

この関数は、シャッフルの後に非決定的な可能性がある行の順序に結果が依存するため、非決定的です。

開始 2.0.0


lcase

lcase(str) - str内のすべての文字を小文字に変更して返します。

> SELECT lcase('SparkSql');
 sparksql

開始 1.0.1


lead

lead(input[, offset[, default]]) - ウィンドウ内の現在の行よりoffset行後のinputの値を返します。offsetのデフォルト値は1で、defaultのデフォルト値はnullです。offset行目のinputの値がnullの場合、nullが返されます。そのようなオフセット行が存在しない場合(例えば、オフセットが1の場合、ウィンドウの最後の行には後続の行がない)、defaultが返されます。

引数

  • input - 現在の行よりoffset行後の評価対象となる文字列式。
  • offset - パーティション内で進む行数を示す整数式。
  • default - オフセットがウィンドウよりも大きい場合に使用する文字列式。デフォルト値はnullです。

> SELECT a, b, lead(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   1
 A1 1   2
 A1 2   NULL
 A2 3   NULL

開始 2.0.0


least

least(expr, ...) - null値をスキップして、すべてのパラメータの中で最小の値を返します。

> SELECT least(10, 9, 2, 4, 3);
 2

開始 1.5.0


left

left(str, len) - 文字列strの左端からlen(lenは文字列型も可)文字を返します。lenが0以下の場合、結果は空の文字列になります。

> SELECT left('Spark SQL', 3);
 Spa
> SELECT left(encode('Spark SQL', 'utf-8'), 3);
 Spa

開始 2.3.0


len

len(expr) - 文字列データの文字長またはバイナリデータのバイト数を返します。文字列データの長さには末尾のスペースが含まれます。バイナリデータの長さにはバイナリのゼロが含まれます。

> SELECT len('Spark SQL ');
 10
> SELECT len(x'537061726b2053514c');
 9
> SELECT CHAR_LENGTH('Spark SQL ');
 10
> SELECT CHARACTER_LENGTH('Spark SQL ');
 10

開始 3.4.0


length

length(expr) - 文字列データの文字長またはバイナリデータのバイト数を返します。文字列データの長さには末尾のスペースが含まれます。バイナリデータの長さにはバイナリのゼロが含まれます。

> SELECT length('Spark SQL ');
 10
> SELECT length(x'537061726b2053514c');
 9
> SELECT CHAR_LENGTH('Spark SQL ');
 10
> SELECT CHARACTER_LENGTH('Spark SQL ');
 10

開始 1.5.0


levenshtein

levenshtein(str1, str2[, threshold]) - 与えられた2つの文字列間のレーベンシュタイン距離を返します。thresholdが設定されており、距離がそれよりも大きい場合は-1を返します。

> SELECT levenshtein('kitten', 'sitting');
 3
> SELECT levenshtein('kitten', 'sitting', 2);
 -1

開始 1.5.0


like

str like pattern[ ESCAPE escape] - strescapeを使用してpatternに一致する場合trueを返し、引数のいずれかがnullの場合はnullを返し、それ以外の場合はfalseを返します。

引数

  • str - 文字列式
  • pattern - 文字列式。パターンは、以下の特殊記号を除き、文字通り一致する文字列です。

    _ は入力内の任意の1文字に一致します(posix正規表現の.に類似)。% は入力内の0個以上の文字に一致します(posix正規表現の.*に類似)。

    Spark 2.0 以降、文字列リテラルは SQL パーサーでエスケープ解除されます。たとえば、"\abc" に一致させるには、パターンは "\abc" である必要があります。

    SQL 構成 'spark.sql.parser.escapedStringLiterals' が有効になっている場合、文字列リテラルの解析に関する Spark 1.6 の動作に戻ります。たとえば、構成が有効になっている場合、"\abc" に一致させるためのパターンは "\abc" である必要があります。
  • escape - Spark 3.0 から追加された文字。デフォルトのエスケープ文字は '\' です。エスケープ文字が特殊記号または別のエスケープ文字の前にある場合、次の文字はリテラルに一致します。他の文字をエスケープすることは無効です。

> SELECT like('Spark', '_park');
true
> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals  true
> SELECT '%SystemDrive%\Users\John' like '\%SystemDrive\%\\Users%';
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals  false
> SELECT '%SystemDrive%\\Users\\John' like '\%SystemDrive\%\\\\Users%';
true
> SELECT '%SystemDrive%/Users/John' like '/%SystemDrive/%//Users%' ESCAPE '/';
true

標準的な正規表現と一致させるには、RLIKE を使用します。

開始 1.0.0


ln

ln(expr) - exprの自然対数(底e)を返します。

> SELECT ln(1);
 0.0

開始 1.4.0


localtimestamp

localtimestamp() - クエリ評価開始時のタイムゾーンなしの現在のタイムスタンプを返します。同じクエリ内のlocaltimestampのすべての呼び出しは同じ値を返します。

localtimestamp - クエリ評価開始時のセッションタイムゾーンでの現在のローカル日時を返します。

> SELECT localtimestamp();
 2020-04-25 15:49:11.914

開始 3.4.0


locate

locate(substr, str[, pos]) - str内のposの位置以降で最初にsubstrが出現する位置を返します。指定されたposと戻り値は1から始まるベースです。

> SELECT locate('bar', 'foobarbar');
 4
> SELECT locate('bar', 'foobarbar', 5);
 7
> SELECT POSITION('bar' IN 'foobarbar');
 4

開始 1.5.0


log

log(base, expr) - baseを底とするexprの対数を返します。

> SELECT log(10, 100);
 2.0

開始 1.5.0


log10

log10(expr) - 10を底とするexprの対数を返します。

> SELECT log10(10);
 1.0

開始 1.4.0


log1p

log1p(expr) - log(1 + expr)を返します。

> SELECT log1p(0);
 0.0

開始 1.4.0


log2

log2(expr) - 2を底とするexprの対数を返します。

> SELECT log2(2);
 1.0

開始 1.4.0


lower

lower(str) - str内のすべての文字を小文字に変更して返します。

> SELECT lower('SparkSql');
 sparksql

開始 1.0.1


lpad

lpad(str, len[, pad]) - strを、padで左からlenの長さに埋め込んで返します。strlenよりも長い場合、戻り値はlen文字またはバイトに短縮されます。padが指定されていない場合、strが文字文字列の場合はスペース文字で左に埋められ、バイトシーケンスの場合はゼロで埋められます。

> SELECT lpad('hi', 5, '??');
 ???hi
> SELECT lpad('hi', 1, '??');
 h
> SELECT lpad('hi', 5);
    hi
> SELECT hex(lpad(unhex('aabb'), 5));
 000000AABB
> SELECT hex(lpad(unhex('aabb'), 5, unhex('1122')));
 112211AABB

開始 1.5.0


ltrim

ltrim(str) - strから先頭のスペース文字を削除します。

引数

  • str - 文字列式
  • trimStr - トリムするトリム文字列文字。デフォルト値は単一のスペースです。

> SELECT ltrim('    SparkSQL   ');
 SparkSQL

開始 1.5.0


luhn_check

luhn_check(str ) - 数字の文字列がLuhnアルゴリズムに従って有効かどうかを確認します。このチェックサム関数は、クレジットカード番号や政府識別番号で、入力ミスや誤った番号を有効な番号と区別するために広く適用されています。

> SELECT luhn_check('8112189876');
 true
> SELECT luhn_check('79927398713');
 true
> SELECT luhn_check('79927398714');
 false

開始 3.5.0


make_date

make_date(year, month, day) - 年、月、日のフィールドから日付を作成します。構成spark.sql.ansi.enabledがfalseの場合、関数は無効な入力に対してNULLを返します。それ以外の場合は、代わりにエラーがスローされます。

引数

  • year - 表す年、1から9999
  • month - 表す月、1(1月)から12(12月)
  • day - 表す日、1から31

> SELECT make_date(2013, 7, 15);
 2013-07-15
> SELECT make_date(2019, 7, NULL);
 NULL

開始 3.0.0


make_dt_interval

make_dt_interval([days[, hours[, mins[, secs]]]]) - 日、時、分、秒からDayTimeIntervalTypeの期間を作成します。

引数

  • days - 日数、正または負
  • hours - 時間数、正または負
  • mins - 分数、正または負
  • secs - マイクロ秒精度で小数部を持つ秒数。

> SELECT make_dt_interval(1, 12, 30, 01.001001);
 1 12:30:01.001001000
> SELECT make_dt_interval(2);
 2 00:00:00.000000000
> SELECT make_dt_interval(100, null, 3);
 NULL

開始 3.2.0


make_interval

make_interval([years[, months[, weeks[, days[, hours[, mins[, secs]]]]]]]) - 年、月、週、日、時、分、秒から間隔を作成します。

引数

  • years - 年数、正または負
  • months - 月数、正または負
  • weeks - 週数、正または負
  • days - 日数、正または負
  • hours - 時間数、正または負
  • mins - 分数、正または負
  • secs - マイクロ秒精度で小数部を持つ秒数。

> SELECT make_interval(100, 11, 1, 1, 12, 30, 01.001001);
 100 years 11 months 8 days 12 hours 30 minutes 1.001001 seconds
> SELECT make_interval(100, null, 3);
 NULL
> SELECT make_interval(0, 1, 0, 1, 0, 0, 100.000001);
 1 months 1 days 1 minutes 40.000001 seconds

開始 3.0.0


make_timestamp

make_timestamp(year, month, day, hour, min, sec[, timezone]) - 年、月、日、時、分、秒、タイムゾーンのフィールドからタイムスタンプを作成します。結果のデータ型は、構成spark.sql.timestampTypeの値と一致します。構成spark.sql.ansi.enabledがfalseの場合、関数は無効な入力に対してNULLを返します。それ以外の場合は、代わりにエラーがスローされます。

引数

  • year - 表す年、1から9999
  • month - 表す月、1(1月)から12(12月)
  • day - 表す日、1から31
  • hour - 表す時、0から23
  • min - 表す分、0から59
  • sec - 表す秒とそのマイクロ秒部分、0から60。値は13のような整数、または13.123のような小数にすることができます。sec引数が60に等しい場合、秒フィールドは0に設定され、1分が最終的なタイムスタンプに追加されます。
  • timezone - タイムゾーン識別子。例えば、CET、UTCなど。

> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887);
 2014-12-28 06:30:45.887
> SELECT make_timestamp(2014, 12, 28, 6, 30, 45.887, 'CET');
 2014-12-27 21:30:45.887
> SELECT make_timestamp(2019, 6, 30, 23, 59, 60);
 2019-07-01 00:00:00
> SELECT make_timestamp(2019, 6, 30, 23, 59, 1);
 2019-06-30 23:59:01
> SELECT make_timestamp(null, 7, 22, 15, 30, 0);
 NULL

開始 3.0.0


make_timestamp_ltz

make_timestamp_ltz(year, month, day, hour, min, sec[, timezone]) - 年、月、日、時、分、秒、タイムゾーンのフィールドから、現在のタイムスタンプをローカルタイムゾーンで作成します。構成spark.sql.ansi.enabledがfalseの場合、関数は無効な入力に対してNULLを返します。それ以外の場合は、代わりにエラーがスローされます。

引数

  • year - 表す年、1から9999
  • month - 表す月、1(1月)から12(12月)
  • day - 表す日、1から31
  • hour - 表す時、0から23
  • min - 表す分、0から59
  • sec - 表す秒とそのマイクロ秒部分、0から60。sec引数が60に等しい場合、秒フィールドは0に設定され、1分が最終的なタイムスタンプに追加されます。
  • timezone - タイムゾーン識別子。例えば、CET、UTCなど。

> SELECT make_timestamp_ltz(2014, 12, 28, 6, 30, 45.887);
 2014-12-28 06:30:45.887
> SELECT make_timestamp_ltz(2014, 12, 28, 6, 30, 45.887, 'CET');
 2014-12-27 21:30:45.887
> SELECT make_timestamp_ltz(2019, 6, 30, 23, 59, 60);
 2019-07-01 00:00:00
> SELECT make_timestamp_ltz(null, 7, 22, 15, 30, 0);
 NULL

開始 3.4.0


make_timestamp_ntz

make_timestamp_ntz(year, month, day, hour, min, sec) - 年、月、日、時、分、秒のフィールドからローカル日時を作成します。構成spark.sql.ansi.enabledがfalseの場合、関数は無効な入力に対してNULLを返します。それ以外の場合は、代わりにエラーがスローされます。

引数

  • year - 表す年、1から9999
  • month - 表す月、1(1月)から12(12月)
  • day - 表す日、1から31
  • hour - 表す時、0から23
  • min - 表す分、0から59
  • sec - 表す秒とそのマイクロ秒部分、0から60。sec引数が60に等しい場合、秒フィールドは0に設定され、1分が最終的なタイムスタンプに追加されます。

> SELECT make_timestamp_ntz(2014, 12, 28, 6, 30, 45.887);
 2014-12-28 06:30:45.887
> SELECT make_timestamp_ntz(2019, 6, 30, 23, 59, 60);
 2019-07-01 00:00:00
> SELECT make_timestamp_ntz(null, 7, 22, 15, 30, 0);
 NULL

開始 3.4.0


make_ym_interval

make_ym_interval([years[, months]]) - 年と月から年-月間隔を作成します。

引数

  • years - 年数、正または負
  • months - 月数、正または負

> SELECT make_ym_interval(1, 2);
 1-2
> SELECT make_ym_interval(1, 0);
 1-0
> SELECT make_ym_interval(-1, 1);
 -0-11
> SELECT make_ym_interval(2);
 2-0

開始 3.2.0


map

map(key0, value0, key1, value1, ...) - 指定されたキー/値ペアでマップを作成します。

> SELECT map(1.0, '2', 3.0, '4');
 {1.0:"2",3.0:"4"}

開始 2.0.0


map_concat

map_concat(map, ...) - 与えられたすべてのマップの結合を返します。

> SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c'));
 {1:"a",2:"b",3:"c"}

開始 2.4.0


map_contains_key

map_contains_key(map, key) - マップにキーが含まれている場合はtrueを返します。

> SELECT map_contains_key(map(1, 'a', 2, 'b'), 1);
 true
> SELECT map_contains_key(map(1, 'a', 2, 'b'), 3);
 false

開始 3.3.0


map_entries

map_entries(map) - 与えられたマップ内のすべてのエントリの順序なしの配列を返します。

> SELECT map_entries(map(1, 'a', 2, 'b'));
 [{"key":1,"value":"a"},{"key":2,"value":"b"}]

開始 3.0.0


map_filter

map_filter(expr, func) - 関数を使用してマップ内のエントリをフィルタリングします。

> SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v);
 {1:0,3:-1}

開始 3.0.0


map_from_arrays

map_from_arrays(keys, values) - 指定されたキー/値配列のペアでマップを作成します。キー内のすべての要素はnullであってはなりません。

> SELECT map_from_arrays(array(1.0, 3.0), array('2', '4'));
 {1.0:"2",3.0:"4"}

開始 2.4.0


map_from_entries

map_from_entries(arrayOfEntries) - 与えられたエントリの配列から作成されたマップを返します。

> SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b')));
 {1:"a",2:"b"}

開始 2.4.0


map_keys

map_keys(map) - マップのキーを含む順序なしの配列を返します。

> SELECT map_keys(map(1, 'a', 2, 'b'));
 [1,2]

開始 2.0.0


map_values

map_values(map) - マップの値を含む順序なしの配列を返します。

> SELECT map_values(map(1, 'a', 2, 'b'));
 ["a","b"]

開始 2.0.0


map_zip_with

map_zip_with(map1, map2, function) - 同じキーを持つ値のペアに関数を適用することにより、2つの指定されたマップを1つのマップにマージします。1つのマップにのみ存在するキーの場合、欠落しているキーの値としてNULLが渡されます。入力マップに重複キーが含まれている場合、重複キーの最初のエントリのみがラムダ関数に渡されます。

> SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2));
 {1:"ax",2:"by"}
> SELECT map_zip_with(map('a', 1, 'b', 2), map('b', 3, 'c', 4), (k, v1, v2) -> coalesce(v1, 0) + coalesce(v2, 0));
 {"a":1,"b":5,"c":4}

開始 3.0.0


mask

mask(input[, upperChar, lowerChar, digitChar, otherChar]) - 指定された文字列値をマスクします。関数は文字を'X'または'x'に、数字を'n'に置き換えます。これは、機密情報を削除したテーブルのコピーを作成するのに役立ちます。

引数

  • input - マスクする文字列値。サポートされている型:STRING、VARCHAR、CHAR
  • upperChar - 大文字の文字を置き換える文字。元の文字を保持するにはNULLを指定します。デフォルト値:'X'
  • lowerChar - 小文字の文字を置き換える文字。元の文字を保持するにはNULLを指定します。デフォルト値:'x'
  • digitChar - 数字の文字を置き換える文字。元の文字を保持するにはNULLを指定します。デフォルト値:'n'
  • otherChar - 他のすべての文字を置き換える文字。元の文字を保持するにはNULLを指定します。デフォルト値:NULL

> SELECT mask('abcd-EFGH-8765-4321');
  xxxx-XXXX-nnnn-nnnn
> SELECT mask('abcd-EFGH-8765-4321', 'Q');
  xxxx-QQQQ-nnnn-nnnn
> SELECT mask('AbCD123-@$#', 'Q', 'q');
  QqQQnnn-@$#
> SELECT mask('AbCD123-@$#');
  XxXXnnn-@$#
> SELECT mask('AbCD123-@$#', 'Q');
  QxQQnnn-@$#
> SELECT mask('AbCD123-@$#', 'Q', 'q');
  QqQQnnn-@$#
> SELECT mask('AbCD123-@$#', 'Q', 'q', 'd');
  QqQQddd-@$#
> SELECT mask('AbCD123-@$#', 'Q', 'q', 'd', 'o');
  QqQQdddoooo
> SELECT mask('AbCD123-@$#', NULL, 'q', 'd', 'o');
  AqCDdddoooo
> SELECT mask('AbCD123-@$#', NULL, NULL, 'd', 'o');
  AbCDdddoooo
> SELECT mask('AbCD123-@$#', NULL, NULL, NULL, 'o');
  AbCD123oooo
> SELECT mask(NULL, NULL, NULL, NULL, 'o');
  NULL
> SELECT mask(NULL);
  NULL
> SELECT mask('AbCD123-@$#', NULL, NULL, NULL, NULL);
  AbCD123-@$#

開始 3.4.0


max

max(expr) - exprの最大値を返します。

> SELECT max(col) FROM VALUES (10), (50), (20) AS tab(col);
 50

開始 1.0.0


max_by

max_by(x, y) - yの最大値に関連付けられたxの値を返します。

> SELECT max_by(x, y) FROM VALUES ('a', 10), ('b', 50), ('c', 20) AS tab(x, y);
 b

開始 3.0.0


md5

md5(expr) - exprのMD5 128ビットチェックサムを16進文字列として返します。

> SELECT md5('Spark');
 8cde774d6f7333752ed72cacddb05126

開始 1.5.0


mean

mean(expr) - グループの値から計算された平均値を返します。

> SELECT mean(col) FROM VALUES (1), (2), (3) AS tab(col);
 2.0
> SELECT mean(col) FROM VALUES (1), (2), (NULL) AS tab(col);
 1.5

開始 1.0.0


median

median(col) - 数値またはANSI間隔列colの中央値を返します。

> SELECT median(col) FROM VALUES (0), (10) AS tab(col);
 5.0
> SELECT median(col) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '10' MONTH) AS tab(col);
 0-5

開始 3.4.0


min

min(expr) - exprの最小値を返します。

> SELECT min(col) FROM VALUES (10), (-1), (20) AS tab(col);
 -1

開始 1.0.0


min_by

min_by(x, y) - yの最小値に関連付けられたxの値を返します。

> SELECT min_by(x, y) FROM VALUES ('a', 10), ('b', 50), ('c', 20) AS tab(x, y);
 a

開始 3.0.0


minute

minute(timestamp) - 文字列/タイムスタンプの分の構成要素を返します。

> SELECT minute('2009-07-30 12:58:59');
 58

開始 1.5.0


mod

expr1 mod expr2 - expr1/expr2 の剰余を返します。

> SELECT 2 % 1.8;
 0.2
> SELECT MOD(2, 1.8);
 0.2

開始 1.0.0


mode

mode(col) - col 内の値の中で最も頻繁に出現する値を返します。NULL値は無視されます。すべての値がNULLであるか、行数が0の場合はNULLを返します。

> SELECT mode(col) FROM VALUES (0), (10), (10) AS tab(col);
 10
> SELECT mode(col) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '10' MONTH), (INTERVAL '10' MONTH) AS tab(col);
 0-10
> SELECT mode(col) FROM VALUES (0), (10), (10), (null), (null), (null) AS tab(col);
 10

開始 3.4.0


monotonically_increasing_id

monotonically_increasing_id() - 単調増加する64ビット整数を返します。生成されるIDは、単調増加であり、一意であることが保証されますが、連続しているわけではありません。現在の実装では、パーティションIDを上位31ビットに、下位33ビットを各パーティション内のレコード番号として使用します。データフレームのパーティション数が10億未満であり、各パーティションのレコード数が80億未満であることを前提としています。この関数の結果はパーティションIDに依存するため、非決定的です。

> SELECT monotonically_increasing_id();
 0

開始 1.4.0


month

month(date) - 日付/タイムスタンプの月の構成要素を返します。

> SELECT month('2016-07-30');
 7

開始 1.5.0


months_between

months_between(timestamp1, timestamp2[, roundOff]) - timestamp1timestamp2 より後の場合、結果は正になります。 timestamp1timestamp2 が同じ月の同じ日であるか、どちらも月末である場合、時刻は無視されます。それ以外の場合、差は1ヶ月あたり31日として計算され、roundOff=falseでない限り、8桁に丸められます。

> SELECT months_between('1997-02-28 10:30:00', '1996-10-30');
 3.94959677
> SELECT months_between('1997-02-28 10:30:00', '1996-10-30', false);
 3.9495967741935485

開始 1.5.0


named_struct

named_struct(name1, val1, name2, val2, ...) - 指定されたフィールド名と値を持つ構造体を作成します。

> SELECT named_struct("a", 1, "b", 2, "c", 3);
 {"a":1,"b":2,"c":3}

開始 1.5.0


nanvl

nanvl(expr1, expr2) - expr1 がNaNでなければ expr1 を返し、そうでなければ expr2 を返します。

> SELECT nanvl(cast('NaN' as double), 123);
 123.0

開始 1.5.0


negative

negative(expr) - expr の符号を反転した値を返します。

> SELECT negative(1);
 -1

開始 1.0.0


next_day

next_day(start_date, day_of_week) - start_date より後で、指定された名前の曜日となる最初の日付を返します。入力パラメータの少なくとも1つがNULLの場合、関数はNULLを返します。入力パラメータの両方がNULLではなく、day_of_weekが無効な入力である場合、spark.sql.ansi.enabled がtrueに設定されているとIllegalArgumentExceptionをスローし、それ以外の場合はNULLを返します。

> SELECT next_day('2015-01-14', 'TU');
 2015-01-20

開始 1.5.0


not

not expr - 論理否定。

> SELECT not true;
 false
> SELECT not false;
 true
> SELECT not NULL;
 NULL

開始 1.0.0


now

now() - クエリ評価の開始時の現在のタイムスタンプを返します。

> SELECT now();
 2020-04-25 15:49:11.914

開始 1.6.0


nth_value

nth_value(input[, offset]) - ウィンドウフレームの先頭から offset 番目の行にある input の値を返します。オフセットは1から始まります。ignoreNulls=trueの場合、offset番目の行を見つける際にNULLをスキップします。それ以外の場合は、すべての行がoffsetにカウントされます。そのようなoffset番目の行がない場合(例えば、オフセットが10で、ウィンドウフレームのサイズが10未満の場合)、nullが返されます。

引数

  • input - 関数が操作する対象の列または式。
  • offset - ウィンドウフレーム内のオフセットを示す正の整数リテラル。1から始まります。
  • ignoreNulls - NthValueが使用する行の決定においてnull値をスキップする必要があることを示すオプションの指定。

> SELECT a, b, nth_value(b, 2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   1
 A1 1   1
 A1 2   1
 A2 3   NULL

開始 3.1.0


ntile

ntile(n) - 各ウィンドウパーティションの行を、1から最大で n までの n 個のバケットに分割します。

引数

  • buckets - 行を分割するバケット数を示す整数式。デフォルト値は1です。

> SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   1
 A1 1   1
 A1 2   2
 A2 3   1

開始 2.0.0


nullif

nullif(expr1, expr2) - expr1expr2 と等しい場合はnullを返し、それ以外の場合は expr1 を返します。

> SELECT nullif(2, 2);
 NULL

開始 2.0.0


nvl

nvl(expr1, expr2) - expr1 がnullの場合は expr2 を返し、それ以外の場合は expr1 を返します。

> SELECT nvl(NULL, array('2'));
 ["2"]

開始 2.0.0


nvl2

nvl2(expr1, expr2, expr3) - expr1 がnullでない場合は expr2 を返し、それ以外の場合は expr3 を返します。

> SELECT nvl2(NULL, 2, 1);
 1

開始 2.0.0


octet_length

octet_length(expr) - 文字列データのバイト長またはバイナリデータのバイト数を返します。

> SELECT octet_length('Spark SQL');
 9
> SELECT octet_length(x'537061726b2053514c');
 9

開始 2.3.0


or

expr1 or expr2 - 論理OR。

> SELECT true or false;
 true
> SELECT false or false;
 false
> SELECT true or NULL;
 true
> SELECT false or NULL;
 NULL

開始 1.0.0


overlay

overlay(input, replace, pos[, len]) - inputpos から始まり、長さが len である部分を replace で置き換えます。

> SELECT overlay('Spark SQL' PLACING '_' FROM 6);
 Spark_SQL
> SELECT overlay('Spark SQL' PLACING 'CORE' FROM 7);
 Spark CORE
> SELECT overlay('Spark SQL' PLACING 'ANSI ' FROM 7 FOR 0);
 Spark ANSI SQL
> SELECT overlay('Spark SQL' PLACING 'tructured' FROM 2 FOR 4);
 Structured SQL
> SELECT overlay(encode('Spark SQL', 'utf-8') PLACING encode('_', 'utf-8') FROM 6);
 Spark_SQL
> SELECT overlay(encode('Spark SQL', 'utf-8') PLACING encode('CORE', 'utf-8') FROM 7);
 Spark CORE
> SELECT overlay(encode('Spark SQL', 'utf-8') PLACING encode('ANSI ', 'utf-8') FROM 7 FOR 0);
 Spark ANSI SQL
> SELECT overlay(encode('Spark SQL', 'utf-8') PLACING encode('tructured', 'utf-8') FROM 2 FOR 4);
 Structured SQL

開始 3.0.0


parse_url

parse_url(url, partToExtract[, key]) - URLから一部を抽出します。

> SELECT parse_url('https://spark.dokyumento.jp/path?query=1', 'HOST');
 spark.apache.org
> SELECT parse_url('https://spark.dokyumento.jp/path?query=1', 'QUERY');
 query=1
> SELECT parse_url('https://spark.dokyumento.jp/path?query=1', 'QUERY', 'query');
 1

開始 2.0.0


percent_rank

percent_rank() - 値のグループにおける値のパーセンテージランクを計算します。

引数

  • children - これは順位の基準となるものです。子の一つの値の変化は、順位の変化を引き起こします。これは内部パラメータであり、アナライザーによって割り当てられます。

> SELECT a, b, percent_rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   0.0
 A1 1   0.0
 A1 2   1.0
 A2 3   0.0

開始 2.0.0


percentile

percentile(col, percentage [, frequency]) - 指定されたパーセンテージにおける数値またはANSIインターバル列 col の正確なパーセンタイル値を返します。パーセンテージの値は0.0から1.0の間である必要があります。頻度の値は正の整数である必要があります。

percentile(col, array(percentage1 [, percentage2]...) [, frequency]) - 指定されたパーセンテージにおける数値列 col の正確なパーセンタイル値の配列を返します。パーセンテージ配列の各値は0.0から1.0の間である必要があります。頻度の値は正の整数である必要があります。

> SELECT percentile(col, 0.3) FROM VALUES (0), (10) AS tab(col);
 3.0
> SELECT percentile(col, array(0.25, 0.75)) FROM VALUES (0), (10) AS tab(col);
 [2.5,7.5]
> SELECT percentile(col, 0.5) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '10' MONTH) AS tab(col);
 0-5
> SELECT percentile(col, array(0.2, 0.5)) FROM VALUES (INTERVAL '0' SECOND), (INTERVAL '10' SECOND) AS tab(col);
 [0 00:00:02.000000000,0 00:00:05.000000000]

開始 2.1.0


percentile_approx

percentile_approx(col, percentage [, accuracy]) - 数値またはansiインターバル列 col の近似 percentile を返します。これは、順序付けられた col 値(最小から最大にソート)のうち、col 値の percentage 以下がその値以下であるような最小の値です。パーセンテージの値は0.0から1.0の間である必要があります。accuracy パラメータ(デフォルト:10000)は、メモリを犠牲にして近似精度を制御する正の数値リテラルです。accuracy の値が大きいほど精度が向上し、1.0/accuracy は近似の相対誤差です。percentage が配列の場合、パーセンテージ配列の各値は0.0から1.0の間である必要があります。この場合、指定されたパーセンテージ配列における列 col の近似パーセンタイル配列を返します。

> SELECT percentile_approx(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);
 [1,1,0]
> SELECT percentile_approx(col, 0.5, 100) FROM VALUES (0), (6), (7), (9), (10) AS tab(col);
 7
> SELECT percentile_approx(col, 0.5, 100) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '1' MONTH), (INTERVAL '2' MONTH), (INTERVAL '10' MONTH) AS tab(col);
 0-1
> SELECT percentile_approx(col, array(0.5, 0.7), 100) FROM VALUES (INTERVAL '0' SECOND), (INTERVAL '1' SECOND), (INTERVAL '2' SECOND), (INTERVAL '10' SECOND) AS tab(col);
 [0 00:00:01.000000000,0 00:00:02.000000000]

開始 2.1.0


pi

pi() - 円周率を返します。

> SELECT pi();
 3.141592653589793

開始 1.5.0


pmod

pmod(expr1, expr2) - expr1 mod expr2 の正の値を返します。

> SELECT pmod(10, 3);
 1
> SELECT pmod(-10, 3);
 2

開始 1.5.0


posexplode

posexplode(expr) - 配列 expr の要素を位置付きの複数の行に分離するか、マップ expr の要素を位置付きの複数の行と列に分離します。特に指定がない限り、位置には列名 pos、配列の要素には col、マップの要素には keyvalue が使用されます。

> SELECT posexplode(array(10,20));
 0  10
 1  20
> SELECT * FROM posexplode(array(10,20));
 0  10
 1  20

開始 2.0.0


posexplode_outer

posexplode_outer(expr) - 配列 expr の要素を位置付きの複数の行に分離するか、マップ expr の要素を位置付きの複数の行と列に分離します。特に指定がない限り、位置には列名 pos、配列の要素には col、マップの要素には keyvalue が使用されます。

> SELECT posexplode_outer(array(10,20));
 0  10
 1  20
> SELECT * FROM posexplode_outer(array(10,20));
 0  10
 1  20

開始 2.0.0


position

position(substr, str[, pos]) - str 内の substr が最初に現れる位置を、pos の後から検索して返します。指定された pos と戻り値は1から始まります。

> SELECT position('bar', 'foobarbar');
 4
> SELECT position('bar', 'foobarbar', 5);
 7
> SELECT POSITION('bar' IN 'foobarbar');
 4

開始 1.5.0


positive

positive(expr) - expr の値を返します。

> SELECT positive(1);
 1

開始 1.5.0


pow

pow(expr1, expr2) - expr1expr2 のべき乗にします。

> SELECT pow(2, 3);
 8.0

開始 1.4.0


power

power(expr1, expr2) - expr1expr2 のべき乗にします。

> SELECT power(2, 3);
 8.0

開始 1.4.0


printf

printf(strfmt, obj, ...) - printfスタイルのフォーマット文字列からフォーマットされた文字列を返します。

> SELECT printf("Hello World %d %s", 100, "days");
 Hello World 100 days

開始 1.5.0


quarter

quarter(date) - 日付の年の四半期を1から4の範囲で返します。

> SELECT quarter('2016-08-31');
 3

開始 1.5.0


radians

radians(expr) - 度をラジアンに変換します。

引数

  • expr - 度単位の角度

> SELECT radians(180);
 3.141592653589793

開始 1.4.0


raise_error

raise_error(expr) - expr を指定して例外をスローします。

> SELECT raise_error('custom error message');
 java.lang.RuntimeException
 custom error message

開始 3.1.0


rand

rand([seed]) - 独立かつ同一分布 (i.i.d.) の一様分布の[0, 1)の範囲の乱数値を返します。

> SELECT rand();
 0.9629742951434543
> SELECT rand(0);
 0.7604953758285915
> SELECT rand(null);
 0.7604953758285915

この関数は一般的に非決定的です。

開始 1.5.0


randn

randn([seed]) - 標準正規分布から抽出された独立かつ同一分布 (i.i.d.) の乱数値を返します。

> SELECT randn();
 -0.3254147983080288
> SELECT randn(0);
 1.6034991609278433
> SELECT randn(null);
 1.6034991609278433

この関数は一般的に非決定的です。

開始 1.5.0


random

random([seed]) - 独立かつ同一分布 (i.i.d.) の一様分布の[0, 1)の範囲の乱数値を返します。

> SELECT random();
 0.9629742951434543
> SELECT random(0);
 0.7604953758285915
> SELECT random(null);
 0.7604953758285915

この関数は一般的に非決定的です。

開始 1.5.0


rank

rank() - 値のグループにおける値のランクを計算します。結果は、パーティションの順序において現在の行以前または現在の行と同じ行の数に1を加えたものです。値はシーケンスにギャップを生成します。

引数

  • children - これは順位の基準となるものです。子の一つの値の変化は、順位の変化を引き起こします。これは内部パラメータであり、アナライザーによって割り当てられます。

> SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   1
 A1 1   1
 A1 2   3
 A2 3   1

開始 2.0.0


reduce

reduce(expr, start, merge, finish) - バイナリ演算子を初期状態と配列内のすべての要素に適用し、これを単一の状態に縮小します。最終状態は、finish関数を適用して最終結果に変換されます。

> SELECT reduce(array(1, 2, 3), 0, (acc, x) -> acc + x);
 6
> SELECT reduce(array(1, 2, 3), 0, (acc, x) -> acc + x, acc -> acc * 10);
 60

開始 3.4.0


reflect

reflect(class, method[, arg1[, arg2 ..]]) - リフレクションを使用してメソッドを呼び出します。

> SELECT reflect('java.util.UUID', 'randomUUID');
 c33fb387-8500-4bfa-81d2-6e0e3e930df2
> SELECT reflect('java.util.UUID', 'fromString', 'a5cf6c42-0c85-418f-af6c-3e4e5b1328f2');
 a5cf6c42-0c85-418f-af6c-3e4e5b1328f2

開始 2.0.0


regexp

regexp(str, regexp) - strregexp に一致する場合はtrueを、それ以外の場合はfalseを返します。

引数

  • str - 文字列式
  • regexp - 文字列式。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。

> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals  true
> SELECT regexp('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals  false
> SELECT regexp('%SystemDrive%\\Users\\John', '%SystemDrive%\\\\Users.*');
true

単純な文字列パターンと一致させるには、LIKEを使用します。

開始 3.2.0


regexp_count

regexp_count(str, regexp) - 正規表現パターン regexp が文字列 str 内で一致した回数を返します。

引数

  • str - 文字列式。
  • regexp - 正規表現を表す文字列。正規表現文字列はJavaの正規表現である必要があります。

> SELECT regexp_count('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');
 2
> SELECT regexp_count('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}');
 8

開始 3.4.0


regexp_extract

regexp_extract(str, regexp[, idx]) - regexp 式に一致し、正規表現グループのインデックスに対応する最初の文字列を str から抽出します。

引数

  • str - 文字列式。
  • regexp - 正規表現を表す文字列。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。
  • idx - グループインデックスを表す整数式。正規表現には複数のグループが含まれている場合があります。idx は、抽出する正規表現グループを示します。グループインデックスは非負である必要があります。idx の最小値は0で、正規表現全体に一致することを意味します。idx が指定されていない場合、デフォルトのグループインデックス値は1です。idx パラメータは、Java正規表現のMatcher group()メソッドインデックスです。

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
 100

開始 1.5.0


regexp_extract_all

regexp_extract_all(str, regexp[, idx]) - regexp 式に一致し、正規表現グループのインデックスに対応するすべての文字列を str から抽出します。

引数

  • str - 文字列式。
  • regexp - 正規表現を表す文字列。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。
  • idx - グループインデックスを表す整数式。正規表現には複数のグループが含まれている場合があります。idx は、抽出する正規表現グループを示します。グループインデックスは非負である必要があります。idx の最小値は0で、正規表現全体に一致することを意味します。idx が指定されていない場合、デフォルトのグループインデックス値は1です。idx パラメータは、Java正規表現のMatcher group()メソッドインデックスです。

> SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)', 1);
 ["100","300"]

開始 3.1.0


regexp_instr

regexp_instr(str, regexp) - 文字列を正規表現で検索し、一致したサブストリングの開始位置を示す整数を返します。位置は0ベースではなく、1ベースです。一致するものが見つからない場合は、0を返します。

引数

  • str - 文字列式。
  • regexp - 正規表現を表す文字列。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。

> SELECT regexp_instr('user@spark.apache.org', '@[^.]*');
 5

開始 3.4.0


regexp_like

regexp_like(str, regexp) - strregexp に一致する場合はtrueを、それ以外の場合はfalseを返します。

引数

  • str - 文字列式
  • regexp - 文字列式。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。

> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals  true
> SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals  false
> SELECT regexp_like('%SystemDrive%\\Users\\John', '%SystemDrive%\\\\Users.*');
true

単純な文字列パターンと一致させるには、LIKEを使用します。

開始 3.2.0


regexp_replace

regexp_replace(str, regexp, rep[, position]) - regexp に一致する str のすべてのサブストリングを rep で置き換えます。

引数

  • str - 正規表現パターンの一致を検索する文字列式。
  • regexp - 正規表現を表す文字列。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。
  • rep - 一致したサブストリングを置き換える文字列式。
  • position - 検索を開始する str 内の位置を示す正の整数リテラル。デフォルトは1です。positionが str の文字数よりも大きい場合、結果は str になります。

> SELECT regexp_replace('100-200', '(\\d+)', 'num');
 num-num

開始 1.5.0


regexp_substr

regexp_substr(str, regexp) - 文字列 str 内の正規表現 regexp に一致するサブストリングを返します。正規表現が見つからない場合、結果はnullになります。

引数

  • str - 文字列式。
  • regexp - 正規表現を表す文字列。正規表現文字列はJavaの正規表現である必要があります。

> SELECT regexp_substr('Steven Jones and Stephen Smith are the best players', 'Ste(v|ph)en');
 Steven
> SELECT regexp_substr('Steven Jones and Stephen Smith are the best players', 'Jeck');
 NULL

開始 3.4.0


regr_avgx

regr_avgx(y, x) - グループ内の非nullペアの独立変数の平均を返します。ここで、y は従属変数であり、x は独立変数です。

> SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 2.75
> SELECT regr_avgx(y, x) FROM VALUES (1, null) AS tab(y, x);
 NULL
> SELECT regr_avgx(y, x) FROM VALUES (null, 1) AS tab(y, x);
 NULL
> SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 3.0
> SELECT regr_avgx(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 3.0

開始 3.3.0


regr_avgy

regr_avgy(y, x) - グループ内の非nullペアの従属変数の平均を返します。ここで、y は従属変数であり、x は独立変数です。

> SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 1.75
> SELECT regr_avgy(y, x) FROM VALUES (1, null) AS tab(y, x);
 NULL
> SELECT regr_avgy(y, x) FROM VALUES (null, 1) AS tab(y, x);
 NULL
> SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 1.6666666666666667
> SELECT regr_avgy(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 1.5

開始 3.3.0


regr_count

regr_count(y, x) - グループ内の非nullの数値ペアの数を返します。ここで、y は従属変数であり、x は独立変数です。

> SELECT regr_count(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 4
> SELECT regr_count(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 3
> SELECT regr_count(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 2

開始 3.3.0


regr_intercept

regr_intercept(y, x) - グループ内の非nullのペアについて、単変量線形回帰直線の切片を返します。ここで、yは従属変数、xは独立変数です。

> SELECT regr_intercept(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);
 0.0
> SELECT regr_intercept(y, x) FROM VALUES (1, null) AS tab(y, x);
 NULL
> SELECT regr_intercept(y, x) FROM VALUES (null, 1) AS tab(y, x);
 NULL

開始 3.4.0


regr_r2

regr_r2(y, x) - グループ内の非nullのペアについて、決定係数を返します。ここで、yは従属変数、xは独立変数です。

> SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 0.2727272727272727
> SELECT regr_r2(y, x) FROM VALUES (1, null) AS tab(y, x);
 NULL
> SELECT regr_r2(y, x) FROM VALUES (null, 1) AS tab(y, x);
 NULL
> SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 0.7500000000000001
> SELECT regr_r2(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 1.0

開始 3.3.0


regr_slope

regr_slope(y, x) - グループ内の非nullのペアについて、線形回帰直線の傾きを返します。ここで、yは従属変数、xは独立変数です。

> SELECT regr_slope(y, x) FROM VALUES (1,1), (2,2), (3,3) AS tab(y, x);
 1.0
> SELECT regr_slope(y, x) FROM VALUES (1, null) AS tab(y, x);
 NULL
> SELECT regr_slope(y, x) FROM VALUES (null, 1) AS tab(y, x);
 NULL

開始 3.4.0


regr_sxx

regr_sxx(y, x) - グループ内の非nullのペアについて、REGR_COUNT(y, x) * VAR_POP(x)を返します。ここで、yは従属変数、xは独立変数です。

> SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 2.75
> SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 2.0
> SELECT regr_sxx(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 2.0

開始 3.4.0


regr_sxy

regr_sxy(y, x) - グループ内の非nullのペアについて、REGR_COUNT(y, x) * COVAR_POP(y, x)を返します。ここで、yは従属変数、xは独立変数です。

> SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 0.75
> SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 1.0
> SELECT regr_sxy(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 1.0

開始 3.4.0


regr_syy

regr_syy(y, x) - グループ内の非nullのペアについて、REGR_COUNT(y, x) * VAR_POP(y)を返します。ここで、yは従属変数、xは独立変数です。

> SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, 2), (2, 3), (2, 4) AS tab(y, x);
 0.75
> SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, null), (2, 3), (2, 4) AS tab(y, x);
 0.6666666666666666
> SELECT regr_syy(y, x) FROM VALUES (1, 2), (2, null), (null, 3), (2, 4) AS tab(y, x);
 0.5

開始 3.4.0


repeat

repeat(str, n) - 指定された文字列値をn回繰り返す文字列を返します。

> SELECT repeat('123', 2);
 123123

開始 1.5.0


replace

replace(str, search[, replace]) - searchのすべての出現箇所をreplaceで置き換えます。

引数

  • str - 文字列式
  • search - 文字列式です。searchstrで見つからない場合、strは変更されずに返されます。
  • replace - 文字列式です。replaceが指定されていないか、空の文字列である場合、strから削除された文字列は何も置き換えられません。

> SELECT replace('ABCabc', 'abc', 'DEF');
 ABCDEF

開始 2.3.0


reverse

reverse(array) - 反転された文字列、または要素の順序が逆になった配列を返します。

> SELECT reverse('Spark SQL');
 LQS krapS
> SELECT reverse(array(2, 1, 4, 3));
 [3,4,1,2]

配列の反転ロジックは2.4.0以降で利用可能です。

開始 1.5.0


right(str, len) - 文字列strの右端からlenlenは文字列型も可)文字を返します。lenが0以下の場合、結果は空の文字列になります。

> SELECT right('Spark SQL', 3);
 SQL

開始 2.3.0


rint

rint(expr) - 引数に最も近い値で、数学的な整数に等しいdouble値を返します。

> SELECT rint(12.3456);
 12.0

開始 1.4.0


rlike

rlike(str, regexp) - strregexpに一致する場合はtrue、そうでない場合はfalseを返します。

引数

  • str - 文字列式
  • regexp - 文字列式。正規表現文字列はJavaの正規表現である必要があります。

    Spark 2.0以降、文字列リテラル(正規表現パターンを含む)はSQLパーサーでエスケープされなくなりました。たとえば、"\abc"に一致させるには、regexp の正規表現は"^\abc$"になります。

    文字列リテラルの解析に関してSpark 1.6の動作に戻すために使用できるSQL設定 'spark.sql.parser.escapedStringLiterals'があります。たとえば、この設定が有効な場合、"\abc"に一致できるregexpは"^\abc$"になります。

> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals  true
> SELECT rlike('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals  false
> SELECT rlike('%SystemDrive%\\Users\\John', '%SystemDrive%\\\\Users.*');
true

単純な文字列パターンと一致させるには、LIKEを使用します。

開始 1.0.0


round

round(expr, d) - exprd桁の小数点以下でHALF_UP丸めモードを使用して丸めた値を返します。

> SELECT round(2.5, 0);
 3

開始 1.5.0


row_number

row_number() - ウィンドウパーティション内の行の順序に従って、1から始まる一意の連番を各行に割り当てます。

> SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
 A1 1   1
 A1 1   2
 A1 2   3
 A2 3   1

開始 2.0.0


rpad

rpad(str, len[, pad]) - strpadで右にパディングして長さlenにします。strlenより長い場合、戻り値はlen文字に短縮されます。padが指定されていない場合、strが文字列の場合は右に空白文字で、バイナリ文字列の場合はゼロでパディングされます。

> SELECT rpad('hi', 5, '??');
 hi???
> SELECT rpad('hi', 1, '??');
 h
> SELECT rpad('hi', 5);
 hi
> SELECT hex(rpad(unhex('aabb'), 5));
 AABB000000
> SELECT hex(rpad(unhex('aabb'), 5, unhex('1122')));
 AABB112211

開始 1.5.0


rtrim

rtrim(str) - strから末尾の空白文字を削除します。

引数

  • str - 文字列式
  • trimStr - トリムするトリム文字列文字。デフォルト値は単一のスペースです。

> SELECT rtrim('    SparkSQL   ');
 SparkSQL

開始 1.5.0


schema_of_csv

schema_of_csv(csv[, options]) - CSV文字列のDDL形式のスキーマを返します。

> SELECT schema_of_csv('1,abc');
 STRUCT<_c0: INT, _c1: STRING>

開始 3.0.0


schema_of_json

schema_of_json(json[, options]) - JSON文字列のDDL形式のスキーマを返します。

> SELECT schema_of_json('[{"col":0}]');
 ARRAY<STRUCT<col: BIGINT>>
> SELECT schema_of_json('[{"col":01}]', map('allowNumericLeadingZeros', 'true'));
 ARRAY<STRUCT<col: BIGINT>>

開始 2.4.0


sec

sec(expr) - 1/java.lang.Math.cosで計算されたかのように、exprの正割を返します。

引数

  • expr - ラジアン単位の角度

> SELECT sec(0);
 1.0

開始 3.3.0


second

second(timestamp) - 文字列/タイムスタンプの秒コンポーネントを返します。

> SELECT second('2009-07-30 12:58:59');
 59

開始 1.5.0


sentences

sentences(str[, lang, country]) - strを単語の配列の配列に分割します。

> SELECT sentences('Hi there! Good morning.');
 [["Hi","there"],["Good","morning"]]

開始 2.0.0


sequence

sequence(start, stop, step) - 開始から停止(両端を含む)までの要素の配列を、ステップずつ増分して生成します。返される要素の型は、引数式の型と同じです。

サポートされる型は、byte、short、integer、long、date、timestampです。

開始式と停止式は同じ型に解決する必要があります。開始式と停止式が「date」または「timestamp」型に解決する場合、ステップ式は「interval」または「year-month interval」または「day-time interval」型に解決する必要があります。それ以外の場合は、開始式と停止式と同じ型に解決する必要があります。

引数

  • start - 式。範囲の開始。
  • stop - 式。範囲の終了(両端を含む)。
  • step - オプションの式。範囲のステップ。デフォルトでは、開始が停止以下の場合はステップは1、それ以外の場合は-1です。時間シーケンスの場合、それぞれ1日と-1日です。開始が停止より大きい場合、ステップは負でなければならず、逆も同様です。

> SELECT sequence(1, 5);
 [1,2,3,4,5]
> SELECT sequence(5, 1);
 [5,4,3,2,1]
> SELECT sequence(to_date('2018-01-01'), to_date('2018-03-01'), interval 1 month);
 [2018-01-01,2018-02-01,2018-03-01]
> SELECT sequence(to_date('2018-01-01'), to_date('2018-03-01'), interval '0-1' year to month);
 [2018-01-01,2018-02-01,2018-03-01]

開始 2.4.0


session_window

session_window(time_column, gap_duration) - 指定されたタイムスタンプ列とギャップ期間からセッションウィンドウを生成します。詳細な説明と例については、構造化ストリーミングガイドドキュメントの「時間ウィンドウのタイプ」を参照してください。

引数

  • time_column - 時間でウィンドウ化するためのタイムスタンプとして使用する列または式。時間列はTimestampTypeである必要があります。
  • gap_duration - 固定ギャップ期間の場合は「interval value」として表されるセッションのタイムアウトを指定する文字列(詳細についてはInterval Literalを参照)、または各入力に適用され、動的なギャップ期間の「interval value」に評価される式。

> SELECT a, session_window.start, session_window.end, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:10:00'), ('A2', '2021-01-01 00:01:00') AS tab(a, b) GROUP by a, session_window(b, '5 minutes') ORDER BY a, start;
  A1    2021-01-01 00:00:00 2021-01-01 00:09:30 2
  A1    2021-01-01 00:10:00 2021-01-01 00:15:00 1
  A2    2021-01-01 00:01:00 2021-01-01 00:06:00 1
> SELECT a, session_window.start, session_window.end, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:10:00'), ('A2', '2021-01-01 00:01:00'), ('A2', '2021-01-01 00:04:30') AS tab(a, b) GROUP by a, session_window(b, CASE WHEN a = 'A1' THEN '5 minutes' WHEN a = 'A2' THEN '1 minute' ELSE '10 minutes' END) ORDER BY a, start;
  A1    2021-01-01 00:00:00 2021-01-01 00:09:30 2
  A1    2021-01-01 00:10:00 2021-01-01 00:15:00 1
  A2    2021-01-01 00:01:00 2021-01-01 00:02:00 1
  A2    2021-01-01 00:04:30 2021-01-01 00:05:30 1

開始 3.2.0


sha

sha(expr) - exprのsha1ハッシュ値を16進数文字列として返します。

> SELECT sha('Spark');
 85f5955f4b27a9a4c2aab6ffe5d7189fc298b92c

開始 1.5.0


sha1

sha1(expr) - exprのsha1ハッシュ値を16進数文字列として返します。

> SELECT sha1('Spark');
 85f5955f4b27a9a4c2aab6ffe5d7189fc298b92c

開始 1.5.0


sha2

sha2(expr, bitLength) - exprのSHA-2ファミリーのチェックサムを16進数文字列として返します。SHA-224、SHA-256、SHA-384、およびSHA-512がサポートされています。ビット長0は256に相当します。

> SELECT sha2('Spark', 256);
 529bc3b07127ecb7e53a4dcf1991d9152c24537d919178022b2c42657f79a26b

開始 1.5.0


shiftleft

shiftleft(base, expr) - ビット単位の左シフト。

> SELECT shiftleft(2, 1);
 4

開始 1.5.0


shiftright

shiftright(base, expr) - ビット単位の(符号付き)右シフト。

> SELECT shiftright(4, 1);
 2

開始 1.5.0


shiftrightunsigned

shiftrightunsigned(base, expr) - ビット単位の符号なし右シフト。

> SELECT shiftrightunsigned(4, 1);
 2

開始 1.5.0


shuffle

shuffle(array) - 指定された配列のランダムな順列を返します。

> SELECT shuffle(array(1, 20, 3, 5));
 [3,1,5,20]
> SELECT shuffle(array(1, 20, null, 3));
 [20,null,3,1]

この関数は非決定的です。

開始 2.4.0


sign

sign(expr) - exprが負の場合は-1.0、0の場合は0.0、正の場合は1.0を返します。

> SELECT sign(40);
 1.0
> SELECT sign(INTERVAL -'100' YEAR);
 -1.0

開始 1.4.0


signum

signum(expr) - exprが負の場合は-1.0、0の場合は0.0、正の場合は1.0を返します。

> SELECT signum(40);
 1.0
> SELECT signum(INTERVAL -'100' YEAR);
 -1.0

開始 1.4.0


sin

sin(expr) - java.lang.Math.sinで計算されたかのように、exprのサインを返します。

引数

  • expr - ラジアン単位の角度

> SELECT sin(0);
 0.0

開始 1.4.0


sinh

sinh(expr) - java.lang.Math.sinhで計算されたかのように、exprの双曲線サインを返します。

引数

  • expr - 双曲線角

> SELECT sinh(0);
 0.0

開始 1.4.0


size

size(expr) - 配列またはマップのサイズを返します。関数は、spark.sql.legacy.sizeOfNullがfalseに設定されているか、spark.sql.ansi.enabledがtrueに設定されている場合、null入力に対してnullを返します。それ以外の場合、関数はnull入力に対して-1を返します。デフォルト設定では、関数はnull入力に対して-1を返します。

> SELECT size(array('b', 'd', 'c', 'a'));
 4
> SELECT size(map('a', 1, 'b', 2));
 2

開始 1.5.0


skewness

skewness(expr) - グループの値から計算された歪度値を返します。

> SELECT skewness(col) FROM VALUES (-10), (-20), (100), (1000) AS tab(col);
 1.1135657469022011
> SELECT skewness(col) FROM VALUES (-1000), (-100), (10), (20) AS tab(col);
 -1.1135657469022011

開始 1.6.0


slice

slice(x, start, length) - 指定された長さで、インデックスstartから始まる(配列インデックスは1から始まるか、startが負の場合は末尾から始まる)配列xのサブセット。

> SELECT slice(array(1, 2, 3, 4), 2, 2);
 [2,3]
> SELECT slice(array(1, 2, 3, 4), -2, 2);
 [3,4]

開始 2.4.0


smallint

smallint(expr) - 値exprをターゲットデータ型smallintにキャストします。

開始 2.0.1


some

some(expr) - exprの値の少なくとも1つがtrueの場合にtrueを返します。

> SELECT some(col) FROM VALUES (true), (false), (false) AS tab(col);
 true
> SELECT some(col) FROM VALUES (NULL), (true), (false) AS tab(col);
 true
> SELECT some(col) FROM VALUES (false), (false), (NULL) AS tab(col);
 false

開始 3.0.0


sort_array

sort_array(array[, ascendingOrder]) - 配列要素の自然な順序に従って、入力配列を昇順または降順にソートします。double/float型の場合、NaNはNaN以外の要素よりも大きくなります。null要素は、昇順の場合は返された配列の先頭に、降順の場合は返された配列の末尾に配置されます。

> SELECT sort_array(array('b', 'd', null, 'c', 'a'), true);
 [null,"a","b","c","d"]

開始 1.5.0


soundex

soundex(str) - 文字列のSoundexコードを返します。

> SELECT soundex('Miller');
 M460

開始 1.5.0


space

space(n) - n個のスペースで構成される文字列を返します。

> SELECT concat(space(2), '1');
   1

開始 1.5.0


spark_partition_id

spark_partition_id() - 現在のパーティションIDを返します。

> SELECT spark_partition_id();
 0

開始 1.4.0


split

split(str, regex, limit) - regexに一致する出現箇所の周りでstrを分割し、最大limitの長さの配列を返します。

引数

  • str - 分割する文字列式。
  • regex - 正規表現を表す文字列。正規表現文字列はJava正規表現である必要があります。
  • limit - 正規表現が適用される回数を制御する整数式。
    • limit > 0:結果の配列の長さはlimitを超えず、結果の配列の最後の要素には、最後に一致した正規表現を超えたすべての入力が含まれます。
    • limit <= 0:regexは可能な限り多く適用され、結果の配列は任意のサイズにできます。

> SELECT split('oneAtwoBthreeC', '[ABC]');
 ["one","two","three",""]
> SELECT split('oneAtwoBthreeC', '[ABC]', -1);
 ["one","two","three",""]
> SELECT split('oneAtwoBthreeC', '[ABC]', 2);
 ["one","twoBthreeC"]

開始 1.5.0


split_part

split_part(str, delimiter, partNum) - strを区切り文字で分割し、分割の要求された部分(1から始まる)を返します。入力がnullの場合、nullを返します。partNumが分割された部分の範囲外の場合、空の文字列を返します。partNumが0の場合、エラーをスローします。partNumが負の場合、部分は文字列の末尾から逆方向にカウントされます。delimiterが空の文字列の場合、strは分割されません。

> SELECT split_part('11.12.13', '.', 3);
 13

開始 3.3.0


sqrt

sqrt(expr) - exprの平方根を返します。

> SELECT sqrt(4);
 2.0

開始 1.1.1


stack

stack(n, expr1, ..., exprk) - expr1、...、exprkn行に分割します。特に指定がない限り、デフォルトで列名col0、col1などが使用されます。

> SELECT stack(2, 1, 2, 3);
 1  2
 3  NULL

開始 2.0.0


startswith

startswith(left, right) - ブール値を返します。leftがrightで始まる場合、値はTrueです。入力式のいずれかがNULLの場合、NULLを返します。それ以外の場合は、Falseを返します。leftまたはrightは、STRING型またはBINARY型である必要があります。

> SELECT startswith('Spark SQL', 'Spark');
 true
> SELECT startswith('Spark SQL', 'SQL');
 false
> SELECT startswith('Spark SQL', null);
 NULL
> SELECT startswith(x'537061726b2053514c', x'537061726b');
 true
> SELECT startswith(x'537061726b2053514c', x'53514c');
 false

開始 3.3.0


std

std(expr) - グループの値から計算されたサンプル標準偏差を返します。

> SELECT std(col) FROM VALUES (1), (2), (3) AS tab(col);
 1.0

開始 1.6.0


stddev

stddev(expr) - グループの値から計算されたサンプル標準偏差を返します。

> SELECT stddev(col) FROM VALUES (1), (2), (3) AS tab(col);
 1.0

開始 1.6.0


stddev_pop

stddev_pop(expr) - グループの値から計算された母集団標準偏差を返します。

> SELECT stddev_pop(col) FROM VALUES (1), (2), (3) AS tab(col);
 0.816496580927726

開始 1.6.0


stddev_samp

stddev_samp(expr) - グループの値から計算されたサンプル標準偏差を返します。

> SELECT stddev_samp(col) FROM VALUES (1), (2), (3) AS tab(col);
 1.0

開始 1.6.0


str_to_map

str_to_map(text[, pairDelim[, keyValueDelim]]) - 区切り文字を使用してテキストをキー/値ペアに分割した後、マップを作成します。デフォルトの区切り文字は、pairDelimの場合は「,」、keyValueDelimの場合は「:」です。pairDelimkeyValueDelimの両方が正規表現として扱われます。

> SELECT str_to_map('a:1,b:2,c:3', ',', ':');
 {"a":"1","b":"2","c":"3"}
> SELECT str_to_map('a');
 {"a":null}

開始 2.0.1


string

string(expr) - 値exprをターゲットデータ型stringにキャストします。

開始 2.0.1


struct

struct(col1, col2, col3, ...) - 指定されたフィールド値を持つ構造体を作成します。

> SELECT struct(1, 2, 3);
 {"col1":1,"col2":2,"col3":3}

開始 1.4.0


substr

substr(str, pos[, len]) - strposから始まり、長さがlenのサブストリング、またはposから始まり、長さがlenのバイト配列のスライスを返します。

substr(str FROM pos[ FOR len]]) - strposから始まり、長さがlenのサブストリング、またはposから始まり、長さがlenのバイト配列のスライスを返します。

> SELECT substr('Spark SQL', 5);
 k SQL
> SELECT substr('Spark SQL', -3);
 SQL
> SELECT substr('Spark SQL', 5, 1);
 k
> SELECT substr('Spark SQL' FROM 5);
 k SQL
> SELECT substr('Spark SQL' FROM -3);
 SQL
> SELECT substr('Spark SQL' FROM 5 FOR 1);
 k
> SELECT substr(encode('Spark SQL', 'utf-8'), 5);
 k SQL

開始 1.5.0


substring

substring(str, pos[, len]) - strposから始まり、長さがlenのサブストリング、またはposから始まり、長さがlenのバイト配列のスライスを返します。

substring(str FROM pos[ FOR len]]) - strposから始まり、長さがlenのサブストリング、またはposから始まり、長さがlenのバイト配列のスライスを返します。

> SELECT substring('Spark SQL', 5);
 k SQL
> SELECT substring('Spark SQL', -3);
 SQL
> SELECT substring('Spark SQL', 5, 1);
 k
> SELECT substring('Spark SQL' FROM 5);
 k SQL
> SELECT substring('Spark SQL' FROM -3);
 SQL
> SELECT substring('Spark SQL' FROM 5 FOR 1);
 k
> SELECT substring(encode('Spark SQL', 'utf-8'), 5);
 k SQL

開始 1.5.0


substring_index

substring_index(str, delim, count) - str から、区切り文字 delimcount 回出現する前の部分文字列を返します。count が正の場合、(左から数えて) 最後の区切り文字の左側にあるすべてが返されます。count が負の場合、(右から数えて) 最後の区切り文字の右側にあるすべてが返されます。関数 substring_index は、delim を検索する際に大文字と小文字を区別します。

> SELECT substring_index('www.apache.org', '.', 2);
 www.apache

開始 1.5.0


sum

sum(expr) - グループの値から計算された合計を返します。

> SELECT sum(col) FROM VALUES (5), (10), (15) AS tab(col);
 30
> SELECT sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
 25
> SELECT sum(col) FROM VALUES (NULL), (NULL) AS tab(col);
 NULL

開始 1.0.0


tan

tan(expr) - java.lang.Math.tan によって計算されたかのように、expr のタンジェントを返します。

引数

  • expr - ラジアン単位の角度

> SELECT tan(0);
 0.0

開始 1.4.0


tanh

tanh(expr) - java.lang.Math.tanh によって計算されたかのように、expr の双曲線タンジェントを返します。

引数

  • expr - 双曲線角

> SELECT tanh(0);
 0.0

開始 1.4.0


timestamp

timestamp(expr) - 値 expr をターゲットのデータ型 timestamp にキャストします。

開始 2.0.1


timestamp_micros

timestamp_micros(microseconds) - UTC エポックからのマイクロ秒数からタイムスタンプを作成します。

> SELECT timestamp_micros(1230219000123123);
 2008-12-25 07:30:00.123123

開始 3.1.0


timestamp_millis

timestamp_millis(milliseconds) - UTC エポックからのミリ秒数からタイムスタンプを作成します。

> SELECT timestamp_millis(1230219000123);
 2008-12-25 07:30:00.123

開始 3.1.0


timestamp_seconds

timestamp_seconds(seconds) - UTC エポックからの秒数 (小数も可) からタイムスタンプを作成します。

> SELECT timestamp_seconds(1230219000);
 2008-12-25 07:30:00
> SELECT timestamp_seconds(1230219000.123);
 2008-12-25 07:30:00.123

開始 3.1.0


tinyint

tinyint(expr) - 値 expr をターゲットのデータ型 tinyint にキャストします。

開始 2.0.1


to_binary

to_binary(str[, fmt]) - 入力 str を、指定された fmt に基づいてバイナリ値に変換します。fmt は、"hex"、"utf-8"、"utf8"、または "base64" の大文字と小文字を区別しない文字列リテラルにすることができます。デフォルトでは、fmt が省略された場合、変換のバイナリ形式は "hex" です。入力パラメーターの少なくとも 1 つが NULL の場合、関数は NULL を返します。

> SELECT to_binary('abc', 'utf-8');
 abc

開始 3.3.0


to_char

to_char(numberExpr, formatExpr) - numberExprformatExpr に基づいて文字列に変換します。変換に失敗した場合は例外をスローします。形式は、大文字と小文字を区別せずに、次の文字で構成できます。'0' または '9': 0 から 9 までの期待される数字を指定します。形式文字列内の 0 または 9 のシーケンスは、入力値の数字のシーケンスと一致し、形式文字列内の対応するシーケンスと同じ長さの結果文字列を生成します。結果文字列は、0/9 シーケンスが一致する10進数値の部分よりも多くの桁数を含み、0で始まり、小数点の前にある場合は、ゼロで左埋めされます。それ以外の場合は、スペースで埋められます。'.' または 'D': 小数点の位置を指定します (オプション、一度のみ許可)。',' または 'G': グループ化 (千単位) 区切り文字 (,) の位置を指定します。各グループ化区切り文字の左側と右側に 0 または 9 がある必要があります。'$': $ 通貨記号の位置を指定します。この文字は一度だけ指定できます。'S' または 'MI': '-' または '+' 符号の位置を指定します (オプション、形式文字列の先頭または末尾に一度のみ許可)。'S' は正の値の場合は '+' を出力しますが、'MI' はスペースを出力することに注意してください。'PR': 形式文字列の末尾でのみ許可されます。入力値が負の場合、結果文字列が山かっこで囲まれることを指定します ('<1>').

> SELECT to_char(454, '999');
 454
> SELECT to_char(454.00, '000D00');
 454.00
> SELECT to_char(12454, '99G999');
 12,454
> SELECT to_char(78.12, '$99.99');
 $78.12
> SELECT to_char(-12454.8, '99G999D9S');
 12,454.8-

開始 3.4.0


to_csv

to_csv(expr[, options]) - 指定された構造体の値を CSV 文字列で返します

> SELECT to_csv(named_struct('a', 1, 'b', 2));
 1,2
> SELECT to_csv(named_struct('time', to_timestamp('2015-08-26', 'yyyy-MM-dd')), map('timestampFormat', 'dd/MM/yyyy'));
 26/08/2015

開始 3.0.0


to_date

to_date(date_str[, fmt]) - date_str 式を fmt 式を使用して日付に解析します。入力が無効な場合は null を返します。デフォルトでは、fmt が省略された場合は日付へのキャスト規則に従います。

引数

  • date_str - 日付に解析される文字列。
  • fmt - 従うべき日付形式パターン。有効な日付と時刻の形式パターンについては、日付と時刻のパターンを参照してください。

> SELECT to_date('2009-07-30 04:17:52');
 2009-07-30
> SELECT to_date('2016-12-31', 'yyyy-MM-dd');
 2016-12-31

開始 1.5.0


to_json

to_json(expr[, options]) - 指定された構造体の値を JSON 文字列で返します

> SELECT to_json(named_struct('a', 1, 'b', 2));
 {"a":1,"b":2}
> SELECT to_json(named_struct('time', to_timestamp('2015-08-26', 'yyyy-MM-dd')), map('timestampFormat', 'dd/MM/yyyy'));
 {"time":"26/08/2015"}
> SELECT to_json(array(named_struct('a', 1, 'b', 2)));
 [{"a":1,"b":2}]
> SELECT to_json(map('a', named_struct('b', 1)));
 {"a":{"b":1}}
> SELECT to_json(map(named_struct('a', 1),named_struct('b', 2)));
 {"[1]":{"b":2}}
> SELECT to_json(map('a', 1));
 {"a":1}
> SELECT to_json(array(map('a', 1)));
 [{"a":1}]

開始 2.2.0


to_number

to_number(expr, fmt) - 文字列 'expr' を文字列形式 'fmt' に基づいて数値に変換します。変換に失敗した場合は例外をスローします。形式は、大文字と小文字を区別せずに、次の文字で構成できます。'0' または '9': 0 から 9 までの期待される数字を指定します。形式文字列内の 0 または 9 のシーケンスは、入力文字列内の数字のシーケンスと一致します。0/9 シーケンスが 0 で始まり、小数点の前にある場合、同じサイズの数字シーケンスのみと一致できます。それ以外の場合、シーケンスが 9 で始まるか、小数点の後の場合、同じサイズまたはそれより小さいサイズの数字シーケンスと一致できます。'.' または 'D': 小数点の位置を指定します (オプション、一度のみ許可)。',' または 'G': グループ化 (千単位) 区切り文字 (,) の位置を指定します。各グループ化区切り文字の左側と右側に 0 または 9 がある必要があります。'expr' は数値のサイズに関連するグループ化区切り文字と一致する必要があります。'$': $ 通貨記号の位置を指定します。この文字は一度だけ指定できます。'S' または 'MI': '-' または '+' 符号の位置を指定します (オプション、形式文字列の先頭または末尾に一度のみ許可)。'S' は '-' を許可しますが、'MI' は許可しません。'PR': 形式文字列の末尾でのみ許可されます。'expr' が山かっこで囲まれた負の数を示すことを指定します ('<1>').

> SELECT to_number('454', '999');
 454
> SELECT to_number('454.00', '000.00');
 454.00
> SELECT to_number('12,454', '99,999');
 12454
> SELECT to_number('$78.12', '$99.99');
 78.12
> SELECT to_number('12,454.8-', '99,999.9S');
 -12454.8

開始 3.3.0


to_timestamp

to_timestamp(timestamp_str[, fmt]) - timestamp_str 式を fmt 式を使用してタイムスタンプに解析します。入力が無効な場合は null を返します。デフォルトでは、fmt が省略された場合はタイムスタンプへのキャスト規則に従います。結果のデータ型は、構成 spark.sql.timestampType の値と一致します。

引数

  • timestamp_str - タイムスタンプに解析される文字列。
  • fmt - 従うべきタイムスタンプ形式パターン。有効な日付と時刻の形式パターンについては、日付と時刻のパターンを参照してください。

> SELECT to_timestamp('2016-12-31 00:12:00');
 2016-12-31 00:12:00
> SELECT to_timestamp('2016-12-31', 'yyyy-MM-dd');
 2016-12-31 00:00:00

開始 2.2.0


to_timestamp_ltz

to_timestamp_ltz(timestamp_str[, fmt]) - timestamp_str 式を fmt 式を使用して、ローカルタイムゾーン付きのタイムスタンプに解析します。入力が無効な場合は null を返します。デフォルトでは、fmt が省略された場合はタイムスタンプへのキャスト規則に従います。

引数

  • timestamp_str - ローカルタイムゾーン付きのタイムスタンプに解析される文字列。
  • fmt - 従うべきタイムスタンプ形式パターン。有効な日付と時刻の形式パターンについては、日付と時刻のパターンを参照してください。

> SELECT to_timestamp_ltz('2016-12-31 00:12:00');
 2016-12-31 00:12:00
> SELECT to_timestamp_ltz('2016-12-31', 'yyyy-MM-dd');
 2016-12-31 00:00:00

開始 3.4.0


to_timestamp_ntz

to_timestamp_ntz(timestamp_str[, fmt]) - timestamp_str 式を fmt 式を使用して、タイムゾーンなしのタイムスタンプに解析します。入力が無効な場合は null を返します。デフォルトでは、fmt が省略された場合はタイムスタンプへのキャスト規則に従います。

引数

  • timestamp_str - タイムゾーンなしのタイムスタンプに解析される文字列。
  • fmt - 従うべきタイムスタンプ形式パターン。有効な日付と時刻の形式パターンについては、日付と時刻のパターンを参照してください。

> SELECT to_timestamp_ntz('2016-12-31 00:12:00');
 2016-12-31 00:12:00
> SELECT to_timestamp_ntz('2016-12-31', 'yyyy-MM-dd');
 2016-12-31 00:00:00

開始 3.4.0


to_unix_timestamp

to_unix_timestamp(timeExp[, fmt]) - 指定された時間の UNIX タイムスタンプを返します。

引数

  • timeExp - UNIX タイムスタンプとして返される日付/タイムスタンプまたは文字列。
  • fmt - 従うべき日付/時刻形式パターン。timeExp が文字列でない場合は無視されます。デフォルト値は "yyyy-MM-dd HH:mm:ss" です。有効な日付と時刻の形式パターンについては、日付と時刻のパターンを参照してください。

> SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');
 1460098800

開始 1.6.0


to_utc_timestamp

to_utc_timestamp(timestamp, timezone) - '2017-07-14 02:40:00.0' のようなタイムスタンプが与えられた場合、それを指定されたタイムゾーンの時間として解釈し、その時間を UTC のタイムスタンプとしてレンダリングします。たとえば、'GMT+1' は '2017-07-14 01:40:00.0' を生成します。

> SELECT to_utc_timestamp('2016-08-31', 'Asia/Seoul');
 2016-08-30 15:00:00

開始 1.5.0


to_varchar

to_varchar(numberExpr, formatExpr) - numberExprformatExpr に基づいて文字列に変換します。変換に失敗した場合は例外をスローします。形式は、大文字と小文字を区別せずに、次の文字で構成できます。'0' または '9': 0 から 9 までの期待される数字を指定します。形式文字列内の 0 または 9 のシーケンスは、入力値の数字のシーケンスと一致し、形式文字列内の対応するシーケンスと同じ長さの結果文字列を生成します。結果文字列は、0/9 シーケンスが一致する10進数値の部分よりも多くの桁数を含み、0で始まり、小数点の前にある場合は、ゼロで左埋めされます。それ以外の場合は、スペースで埋められます。'.' または 'D': 小数点の位置を指定します (オプション、一度のみ許可)。',' または 'G': グループ化 (千単位) 区切り文字 (,) の位置を指定します。各グループ化区切り文字の左側と右側に 0 または 9 がある必要があります。'$': $ 通貨記号の位置を指定します。この文字は一度だけ指定できます。'S' または 'MI': '-' または '+' 符号の位置を指定します (オプション、形式文字列の先頭または末尾に一度のみ許可)。'S' は正の値の場合は '+' を出力しますが、'MI' はスペースを出力することに注意してください。'PR': 形式文字列の末尾でのみ許可されます。入力値が負の場合、結果文字列が山かっこで囲まれることを指定します ('<1>').

> SELECT to_varchar(454, '999');
 454
> SELECT to_varchar(454.00, '000D00');
 454.00
> SELECT to_varchar(12454, '99G999');
 12,454
> SELECT to_varchar(78.12, '$99.99');
 $78.12
> SELECT to_varchar(-12454.8, '99G999D9S');
 12,454.8-

開始 3.5.0


transform

transform(expr, func) - 関数を使用して配列内の要素を変換します。

> SELECT transform(array(1, 2, 3), x -> x + 1);
 [2,3,4]
> SELECT transform(array(1, 2, 3), (x, i) -> x + i);
 [1,3,5]

開始 2.4.0


transform_keys

transform_keys(expr, func) - 関数を使用してマップ内の要素を変換します。

> SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + 1);
 {2:1,3:2,4:3}
> SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + v);
 {2:1,4:2,6:3}

開始 3.0.0


transform_values

transform_values(expr, func) - 関数を使用してマップ内の値を変換します。

> SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> v + 1);
 {1:2,2:3,3:4}
> SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + v);
 {1:2,2:4,3:6}

開始 3.0.0


translate

translate(input, from, to) - input 文字列を、from 文字列に存在する文字を to 文字列内の対応する文字に置き換えることによって変換します。

> SELECT translate('AaBbCc', 'abc', '123');
 A1B2C3

開始 1.5.0


trim

trim(str) - str から先頭と末尾の空白文字を削除します。

trim(BOTH FROM str) - str から先頭と末尾の空白文字を削除します。

trim(LEADING FROM str) - str から先頭の空白文字を削除します。

trim(TRAILING FROM str) - str から末尾の空白文字を削除します。

trim(trimStr FROM str) - str から先頭と末尾の trimStr 文字を削除します。

trim(BOTH trimStr FROM str) - str から先頭と末尾の trimStr 文字を削除します。

trim(LEADING trimStr FROM str) - str から先頭の trimStr 文字を削除します。

trim(TRAILING trimStr FROM str) - str から末尾の trimStr 文字を削除します。

引数

  • str - 文字列式
  • trimStr - トリムするトリム文字列文字。デフォルト値は単一のスペースです。
  • BOTH, FROM - 文字列の両端から文字列文字をトリミングすることを指定するキーワードです
  • LEADING, FROM - 文字列の左端から文字列文字をトリミングすることを指定するキーワードです
  • TRAILING, FROM - 文字列の右端から文字列文字をトリミングすることを指定するキーワードです

> SELECT trim('    SparkSQL   ');
 SparkSQL
> SELECT trim(BOTH FROM '    SparkSQL   ');
 SparkSQL
> SELECT trim(LEADING FROM '    SparkSQL   ');
 SparkSQL
> SELECT trim(TRAILING FROM '    SparkSQL   ');
     SparkSQL
> SELECT trim('SL' FROM 'SSparkSQLS');
 parkSQ
> SELECT trim(BOTH 'SL' FROM 'SSparkSQLS');
 parkSQ
> SELECT trim(LEADING 'SL' FROM 'SSparkSQLS');
 parkSQLS
> SELECT trim(TRAILING 'SL' FROM 'SSparkSQLS');
 SSparkSQ

開始 1.5.0


trunc

trunc(date, fmt) - 書式モデル fmt で指定された単位に切り捨てられた日の時間部分を持つ date を返します。

引数

  • date - 日付値または有効な日付文字列
  • fmt - 切り捨てられる単位を表す形式
    • "YEAR"、"YYYY"、"YY" - date が属する年の最初の日付に切り捨てます
    • "QUARTER" - date が属する四半期の最初の日付に切り捨てます
    • "MONTH"、"MM"、"MON" - date が属する月の最初の日付に切り捨てます
    • "WEEK" - date が属する週の月曜日に切り捨てます

> SELECT trunc('2019-08-04', 'week');
 2019-07-29
> SELECT trunc('2019-08-04', 'quarter');
 2019-07-01
> SELECT trunc('2009-02-12', 'MM');
 2009-02-01
> SELECT trunc('2015-10-27', 'YEAR');
 2015-01-01

開始 1.5.0


try_add

try_add(expr1, expr2) - expr1expr2 の合計を返し、オーバーフローの場合の結果は null になります。許容される入力型は、+ 演算子と同じです。

> SELECT try_add(1, 2);
 3
> SELECT try_add(2147483647, 1);
 NULL
> SELECT try_add(date'2021-01-01', 1);
 2021-01-02
> SELECT try_add(date'2021-01-01', interval 1 year);
 2022-01-01
> SELECT try_add(timestamp'2021-01-01 00:00:00', interval 1 day);
 2021-01-02 00:00:00
> SELECT try_add(interval 1 year, interval 2 year);
 3-0

開始 3.2.0


try_aes_decrypt

try_aes_decrypt(expr, key[, mode[, padding[, aad]]]) - これは aes_decrypt の特殊バージョンであり、同じ操作を実行しますが、復号化を実行できない場合にエラーを発生させる代わりに NULL 値を返します。

> SELECT try_aes_decrypt(unhex('6E7CA17BBB468D3084B5744BCA729FB7B2B7BCB8E4472847D02670489D95FA97DBBA7D3210'), '0000111122223333', 'GCM');
 Spark SQL
> SELECT try_aes_decrypt(unhex('----------468D3084B5744BCA729FB7B2B7BCB8E4472847D02670489D95FA97DBBA7D3210'), '0000111122223333', 'GCM');
 NULL

開始 3.5.0


try_avg

try_avg(expr) - グループの値から計算された平均を返し、オーバーフローの場合の結果は null になります。

> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
 2.0
> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
 1.5
> SELECT try_avg(col) FROM VALUES (interval '2147483647 months'), (interval '1 months') AS tab(col);
 NULL

開始 3.3.0


try_divide

try_divide(dividend, divisor) - dividend/divisor を返します。常に浮動小数点除算を実行します。expr2 が 0 の場合、結果は常に null になります。dividend は数値または間隔である必要があります。divisor は数値である必要があります。

> SELECT try_divide(3, 2);
 1.5
> SELECT try_divide(2L, 2L);
 1.0
> SELECT try_divide(1, 0);
 NULL
> SELECT try_divide(interval 2 month, 2);
 0-1
> SELECT try_divide(interval 2 month, 0);
 NULL

開始 3.2.0


try_element_at

try_element_at(array, index) - 指定された(1から始まる)インデックスにある配列の要素を返します。インデックスが0の場合、Sparkはエラーをスローします。インデックスが0未満の場合、最後から最初の要素にアクセスします。インデックスが配列の長さを超える場合、関数は常にNULLを返します。

try_element_at(map, key) - 指定されたキーに対応する値を返します。キーがマップに含まれていない場合、関数は常にNULLを返します。

> SELECT try_element_at(array(1, 2, 3), 2);
 2
> SELECT try_element_at(map(1, 'a', 2, 'b'), 2);
 b

開始 3.3.0


try_multiply

try_multiply(expr1, expr2) - expr1 * expr2 を返し、オーバーフローが発生した場合は結果はNULLになります。使用可能な入力タイプは、* 演算子と同じです。

> SELECT try_multiply(2, 3);
 6
> SELECT try_multiply(-2147483648, 10);
 NULL
> SELECT try_multiply(interval 2 year, 3);
 6-0

開始 3.3.0


try_subtract

try_subtract(expr1, expr2) - expr1 - expr2 を返し、オーバーフローが発生した場合は結果はNULLになります。使用可能な入力タイプは、- 演算子と同じです。

> SELECT try_subtract(2, 1);
 1
> SELECT try_subtract(-2147483648, 1);
 NULL
> SELECT try_subtract(date'2021-01-02', 1);
 2021-01-01
> SELECT try_subtract(date'2021-01-01', interval 1 year);
 2020-01-01
> SELECT try_subtract(timestamp'2021-01-02 00:00:00', interval 1 day);
 2021-01-01 00:00:00
> SELECT try_subtract(interval 2 year, interval 1 year);
 1-0

開始 3.3.0


try_sum

try_sum(expr) - グループの値から計算された合計を返します。オーバーフローが発生した場合は結果はNULLになります。

> SELECT try_sum(col) FROM VALUES (5), (10), (15) AS tab(col);
 30
> SELECT try_sum(col) FROM VALUES (NULL), (10), (15) AS tab(col);
 25
> SELECT try_sum(col) FROM VALUES (NULL), (NULL) AS tab(col);
 NULL
> SELECT try_sum(col) FROM VALUES (9223372036854775807L), (1L) AS tab(col);
 NULL

開始 3.3.0


try_to_binary

try_to_binary(str[, fmt]) - これは to_binary の特別なバージョンであり、同じ操作を実行しますが、変換を実行できない場合はエラーを発生させる代わりにNULL値を返します。

> SELECT try_to_binary('abc', 'utf-8');
 abc
> select try_to_binary('a!', 'base64');
 NULL
> select try_to_binary('abc', 'invalidFormat');
 NULL

開始 3.3.0


try_to_number

try_to_number(expr, fmt) - 文字列 'expr' を文字列形式 fmt に基づいて数値に変換します。文字列 'expr' が期待される形式と一致しない場合はNULLを返します。形式はto_number関数と同じセマンティクスに従います。

> SELECT try_to_number('454', '999');
 454
> SELECT try_to_number('454.00', '000.00');
 454.00
> SELECT try_to_number('12,454', '99,999');
 12454
> SELECT try_to_number('$78.12', '$99.99');
 78.12
> SELECT try_to_number('12,454.8-', '99,999.9S');
 -12454.8

開始 3.3.0


try_to_timestamp

try_to_timestamp(timestamp_str[, fmt]) - timestamp_str 式を fmt 式で解析してタイムスタンプに変換します。関数は、ANSI SQLモードの有効/無効に関わらず、無効な入力の場合は常にNULLを返します。デフォルトでは、fmt が省略された場合、タイムスタンプへのキャスト規則に従います。結果のデータ型は、構成 spark.sql.timestampType の値と一致します。

引数

  • timestamp_str - タイムスタンプに解析される文字列。
  • fmt - 従うべきタイムスタンプ形式パターン。有効な日付と時刻の形式パターンについては、日付と時刻のパターンを参照してください。

> SELECT try_to_timestamp('2016-12-31 00:12:00');
 2016-12-31 00:12:00
> SELECT try_to_timestamp('2016-12-31', 'yyyy-MM-dd');
 2016-12-31 00:00:00
> SELECT try_to_timestamp('foo', 'yyyy-MM-dd');
 NULL

開始 3.4.0


typeof

typeof(expr) - 入力のデータ型に対するDDL形式の型文字列を返します。

> SELECT typeof(1);
 int
> SELECT typeof(array(1));
 array<int>

開始 3.0.0


ucase

ucase(str) - str のすべての文字を大文字に変更して返します。

> SELECT ucase('SparkSql');
 SPARKSQL

開始 1.0.1


unbase64

unbase64(str) - base64文字列 str をバイナリに変換します。

> SELECT unbase64('U3BhcmsgU1FM');
 Spark SQL

開始 1.5.0


unhex

unhex(expr) - 16進数 expr をバイナリに変換します。

> SELECT decode(unhex('537061726B2053514C'), 'UTF-8');
 Spark SQL

開始 1.5.0


unix_date

unix_date(date) - 1970-01-01からの日数を返します。

> SELECT unix_date(DATE("1970-01-02"));
 1

開始 3.1.0


unix_micros

unix_micros(timestamp) - 1970-01-01 00:00:00 UTCからのマイクロ秒数を返します。

> SELECT unix_micros(TIMESTAMP('1970-01-01 00:00:01Z'));
 1000000

開始 3.1.0


unix_millis

unix_millis(timestamp) - 1970-01-01 00:00:00 UTCからのミリ秒数を返します。上位の精度は切り捨てられます。

> SELECT unix_millis(TIMESTAMP('1970-01-01 00:00:01Z'));
 1000

開始 3.1.0


unix_seconds

unix_seconds(timestamp) - 1970-01-01 00:00:00 UTCからの秒数を返します。上位の精度は切り捨てられます。

> SELECT unix_seconds(TIMESTAMP('1970-01-01 00:00:01Z'));
 1

開始 3.1.0


unix_timestamp

unix_timestamp([timeExp[, fmt]]) - 現在または指定された時間のUNIXタイムスタンプを返します。

引数

  • timeExp - 日付/タイムスタンプまたは文字列。提供されない場合、デフォルトは現在の時刻です。
  • fmt - 従うべき日付/時刻形式パターン。 timeExp が文字列でない場合は無視されます。デフォルト値は "yyyy-MM-dd HH:mm:ss" です。有効な日付と時刻の形式パターンについては、日付と時刻のパターン を参照してください。

> SELECT unix_timestamp();
 1476884637
> SELECT unix_timestamp('2016-04-08', 'yyyy-MM-dd');
 1460041200

開始 1.5.0


upper

upper(str) - str のすべての文字を大文字に変更して返します。

> SELECT upper('SparkSql');
 SPARKSQL

開始 1.0.1


url_decode

url_decode(str) - 特定のエンコーディングスキームを使用して、 'application/x-www-form-urlencoded' 形式の str をデコードします。

引数

  • str - デコードする文字列式

> SELECT url_decode('https%3A%2F%2Fspark.apache.org');
 https://spark.dokyumento.jp

開始 3.4.0


url_encode

url_encode(str) - 特定のエンコーディングスキームを使用して、文字列を 'application/x-www-form-urlencoded' 形式に変換します。

引数

str - 変換する文字列式

> SELECT url_encode('https://spark.dokyumento.jp');
 https%3A%2F%2Fspark.apache.org

開始 3.4.0


user

user() - 現在の実行コンテキストのユーザー名。

> SELECT user();
 mockingjay

開始 3.2.0


uuid

uuid() - 汎用一意識別子 (UUID) 文字列を返します。値は正規のUUID 36文字の文字列として返されます。

> SELECT uuid();
 46707d92-02f4-4817-8116-a4c3b23e6266

この関数は非決定的です。

開始 2.3.0


var_pop

var_pop(expr) - グループの値から計算された母集団分散を返します。

> SELECT var_pop(col) FROM VALUES (1), (2), (3) AS tab(col);
 0.6666666666666666

開始 1.6.0


var_samp

var_samp(expr) - グループの値から計算された標本分散を返します。

> SELECT var_samp(col) FROM VALUES (1), (2), (3) AS tab(col);
 1.0

開始 1.6.0


variance

variance(expr) - グループの値から計算された標本分散を返します。

> SELECT variance(col) FROM VALUES (1), (2), (3) AS tab(col);
 1.0

開始 1.6.0


version

version() - Sparkのバージョンを返します。文字列には2つのフィールドがあり、最初のフィールドはリリースバージョン、2番目のフィールドはgitリビジョンです。

> SELECT version();
 3.1.0 a6d6ea3efedbad14d99c24143834cd4e2e52fb40

開始 3.0.0


weekday

weekday(date) - 日付/タイムスタンプの曜日を返します (0 = 月曜日、1 = 火曜日、...、6 = 日曜日)。

> SELECT weekday('2009-07-30');
 3

開始 2.4.0


weekofyear

weekofyear(date) - 指定された日付の年の週を返します。週は月曜日に始まり、週1は3日以上のある最初の週とみなされます。

> SELECT weekofyear('2008-02-20');
 8

開始 1.5.0


when

CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4]* [ELSE expr5] END - expr1 = true の場合、expr2 を返します。それ以外の場合、expr3 = true の場合は expr4 を返します。それ以外の場合は expr5 を返します。

引数

  • expr1, expr3 - 分岐条件式はすべてブール型である必要があります。
  • expr2, expr4, expr5 - 分岐値式とelse値式はすべて同じ型であるか、共通の型に強制変換可能である必要があります。

> SELECT CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;
 1.0
> SELECT CASE WHEN 1 < 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;
 2.0
> SELECT CASE WHEN 1 < 0 THEN 1 WHEN 2 < 0 THEN 2.0 END;
 NULL

開始 1.0.1


width_bucket

width_bucket(value, min_value, max_value, num_bucket) - value が、min_value から max_value の範囲で、num_bucket バケットを持つ等幅ヒストグラムで割り当てられるバケット番号を返します。"

> SELECT width_bucket(5.3, 0.2, 10.6, 5);
 3
> SELECT width_bucket(-2.1, 1.3, 3.4, 3);
 0
> SELECT width_bucket(8.1, 0.0, 5.7, 4);
 5
> SELECT width_bucket(-0.9, 5.2, 0.5, 2);
 3
> SELECT width_bucket(INTERVAL '0' YEAR, INTERVAL '0' YEAR, INTERVAL '10' YEAR, 10);
 1
> SELECT width_bucket(INTERVAL '1' YEAR, INTERVAL '0' YEAR, INTERVAL '10' YEAR, 10);
 2
> SELECT width_bucket(INTERVAL '0' DAY, INTERVAL '0' DAY, INTERVAL '10' DAY, 10);
 1
> SELECT width_bucket(INTERVAL '1' DAY, INTERVAL '0' DAY, INTERVAL '10' DAY, 10);
 2

開始 3.1.0


window

window(time_column, window_duration[, slide_duration[, start_time]]) - タイムスタンプを指定する列に基づいて、行を1つ以上の時間ウィンドウにバケット化します。ウィンドウの開始は包括的ですが、ウィンドウの終了は排他的です。例えば、12:05はウィンドウ[12:05,12:10)に含まれますが、[12:00,12:05)には含まれません。ウィンドウはマイクロ秒単位の精度をサポートできます。月単位のウィンドウはサポートされていません。詳細な説明と例については、構造化ストリーミングガイドドキュメントの「イベント時間のウィンドウ操作」を参照してください。

引数

  • time_column - 時間でウィンドウ化するためのタイムスタンプとして使用する列または式。時間列はTimestampTypeである必要があります。
  • window_duration - "interval value"で表されるウィンドウの幅を指定する文字列。(詳細についてはインターバルリテラルを参照してください。)期間は固定の長さであり、カレンダーに従って時間とともに変化しないことに注意してください。
  • slide_duration - "interval value"で表されるウィンドウのスライド間隔を指定する文字列。新しいウィンドウは、slide_duration ごとに生成されます。window_duration 以下である必要があります。この期間も同様に絶対的であり、カレンダーに従って変化しません。
  • start_time - ウィンドウ間隔を開始するための1970-01-01 00:00:00 UTCに対するオフセット。たとえば、1時間ごとのタンブリングウィンドウが、1時間後15分から開始されるようにする場合、たとえば12:15〜13:15、13:15〜14:15 ... start_time15 minutes として指定します。

> SELECT a, window.start, window.end, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:06:00'), ('A2', '2021-01-01 00:01:00') AS tab(a, b) GROUP by a, window(b, '5 minutes') ORDER BY a, start;
  A1    2021-01-01 00:00:00 2021-01-01 00:05:00 2
  A1    2021-01-01 00:05:00 2021-01-01 00:10:00 1
  A2    2021-01-01 00:00:00 2021-01-01 00:05:00 1
> SELECT a, window.start, window.end, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:06:00'), ('A2', '2021-01-01 00:01:00') AS tab(a, b) GROUP by a, window(b, '10 minutes', '5 minutes') ORDER BY a, start;
  A1    2020-12-31 23:55:00 2021-01-01 00:05:00 2
  A1    2021-01-01 00:00:00 2021-01-01 00:10:00 3
  A1    2021-01-01 00:05:00 2021-01-01 00:15:00 1
  A2    2020-12-31 23:55:00 2021-01-01 00:05:00 1
  A2    2021-01-01 00:00:00 2021-01-01 00:10:00 1

開始 2.0.0


window_time

window_time(window_column) - ウィンドウのイベント時間値に使用できる時間/セッションウィンドウ列から時間値を抽出します。抽出された時間は (window.end - 1) であり、集計ウィンドウが排他的な上限を持つことを反映しています- [start, end) 詳細な説明と例については、構造化ストリーミングガイドドキュメントの「イベント時間のウィンドウ操作」を参照してください。

引数

  • window_column - 時間/セッションウィンドウを表す列。

> SELECT a, window.start as start, window.end as end, window_time(window), cnt FROM (SELECT a, window, count(*) as cnt FROM VALUES ('A1', '2021-01-01 00:00:00'), ('A1', '2021-01-01 00:04:30'), ('A1', '2021-01-01 00:06:00'), ('A2', '2021-01-01 00:01:00') AS tab(a, b) GROUP by a, window(b, '5 minutes') ORDER BY a, window.start);
  A1    2021-01-01 00:00:00 2021-01-01 00:05:00 2021-01-01 00:04:59.999999  2
  A1    2021-01-01 00:05:00 2021-01-01 00:10:00 2021-01-01 00:09:59.999999  1
  A2    2021-01-01 00:00:00 2021-01-01 00:05:00 2021-01-01 00:04:59.999999  1

開始 3.4.0


xpath

xpath(xml, xpath) - XPath式に一致するxmlのノード内の値の文字列配列を返します。

> SELECT xpath('<a><b>b1</b><b>b2</b><b>b3</b><c>c1</c><c>c2</c></a>','a/b/text()');
 ["b1","b2","b3"]

開始 2.0.0


xpath_boolean

xpath_boolean(xml, xpath) - XPath式がtrueと評価されるか、一致するノードが見つかった場合はtrueを返します。

> SELECT xpath_boolean('<a><b>1</b></a>','a/b');
 true

開始 2.0.0


xpath_double

xpath_double(xml, xpath) - double値を返します。一致するものが見つからない場合は値ゼロ、一致するものが見つかったが値が数値でない場合はNaNを返します。

> SELECT xpath_double('<a><b>1</b><b>2</b></a>', 'sum(a/b)');
 3.0

開始 2.0.0


xpath_float

xpath_float(xml, xpath) - float値を返します。一致するものが見つからない場合は値ゼロ、一致するものが見つかったが値が数値でない場合はNaNを返します。

> SELECT xpath_float('<a><b>1</b><b>2</b></a>', 'sum(a/b)');
 3.0

開始 2.0.0


xpath_int

xpath_int(xml, xpath) - 整数値を返します。一致するものが見つからない場合は値ゼロ、一致するものが見つかったが値が数値でない場合は値ゼロを返します。

> SELECT xpath_int('<a><b>1</b><b>2</b></a>', 'sum(a/b)');
 3

開始 2.0.0


xpath_long

xpath_long(xml, xpath) - long整数値を返します。一致するものが見つからない場合は値ゼロ、一致するものが見つかったが値が数値でない場合は値ゼロを返します。

> SELECT xpath_long('<a><b>1</b><b>2</b></a>', 'sum(a/b)');
 3

開始 2.0.0


xpath_number

xpath_number(xml, xpath) - double値を返します。一致するものが見つからない場合は値ゼロ、一致するものが見つかったが値が数値でない場合はNaNを返します。

> SELECT xpath_number('<a><b>1</b><b>2</b></a>', 'sum(a/b)');
 3.0

開始 2.0.0


xpath_short

xpath_short(xml, xpath) - short整数値を返します。一致するものが見つからない場合は値ゼロ、一致するものが見つかったが値が数値でない場合は値ゼロを返します。

> SELECT xpath_short('<a><b>1</b><b>2</b></a>', 'sum(a/b)');
 3

開始 2.0.0


xpath_string

xpath_string(xml, xpath) - XPath式に一致する最初のxmlノードのテキストコンテンツを返します。

> SELECT xpath_string('<a><b>b</b><c>cc</c></a>','a/c');
 cc

開始 2.0.0


xxhash64

xxhash64(expr1, expr2, ...) - 引数の64ビットハッシュ値を返します。ハッシュシードは42です。

> SELECT xxhash64('Spark', array(123), 2);
 5602566077635097486

開始 3.0.0


year

year(date) - 日付/タイムスタンプの年コンポーネントを返します。

> SELECT year('2016-07-30');
 2016

開始 1.5.0


zip_with

zip_with(left, right, func) - 2つの指定された配列を要素ごとに関数を使用して単一の配列にマージします。一方の配列が短い場合、関数を適用する前に、長い配列の長さに一致するように末尾にnullが追加されます。

> SELECT zip_with(array(1, 2, 3), array('a', 'b', 'c'), (x, y) -> (y, x));
 [{"y":"a","x":1},{"y":"b","x":2},{"y":"c","x":3}]
> SELECT zip_with(array(1, 2), array(3, 4), (x, y) -> x + y);
 [4,6]
> SELECT zip_with(array('a', 'b', 'c'), array('d', 'e', 'f'), (x, y) -> concat(x, y));
 ["ad","be","cf"]

開始 2.4.0


|

expr1 | expr2 - expr1expr2 のビット単位ORの結果を返します。

> SELECT 3 | 5;
 7

開始 1.4.0


||

expr1 || expr2 - expr1expr2 の連結を返します。

> SELECT 'Spark' || 'SQL';
 SparkSQL
> SELECT array(1, 2, 3) || array(4, 5) || array(6);
 [1,2,3,4,5,6]

配列に対する || は2.4.0から利用可能です。

開始 2.3.0


~

~ expr - expr のビット単位NOTの結果を返します。

> SELECT ~ 0;
 -1

開始 1.4.0