FIELD
関数構文:
FIELD(<val> T, <val1> T, <val2> T, ...)
サポートエンジン:Presto
使用説明:val1、val2…リスト内のvalのインデックスを返します。見つからない場合は0を返します。
サポート対象はすべてのプリミティブ型で、str.equals(x)を使用して引数を比較します。valがNULLの場合、戻り値は0です。
戻り値の型:integer
例:
select field('world', 'say', 'hello', 'world');
3
COALESCE
関数構文:
COALESCE(<expr1> T, <expr2> T)
サポートエンジン:SparkSQL、Presto
使用説明:存在する場合、最初の空でないパラメータを返します。それ以外の場合はnullを返します。
戻り値の型:integer
例:
> SELECT coalesce(NULL, 1, NULL);
1
EXPLODE
関数構文:
EXPLODE(<expr> array<T>|map<K, V>)
サポートエンジン:SparkSQL
使用説明:array型のexprの要素を複数の行に分割するか、またはmap型のexprを複数の行と列に分割します。配列の要素にはデフォルトの列名colを使用し、マップの要素にはkeyとvalueを使用します。
戻り値の型:row(col T) | row(key K, value V)
例:
SELECT explode(array(10, 20));
10
20
EXPLODE_OUTER
関数構文:
EXPLODE_OUTER(<expr> array<T>|map<K, V>)
サポートエンジン:SparkSQL
使用説明:array型のexprの要素を複数の行に分割するか、またはmap型のexprを複数の行と列に分割します。配列の要素にはデフォルトの列名colを使用し、マップの要素にはkeyとvalueを使用します。
戻り値の型:row(col T) | row(key K, value V)
例:
SELECT explode_outer(array(10, 20));
10
20
GREATEST
関数構文:
GREATEST(<expr1> T, <expr2> T, ...>)
サポートエンジン:SparkSQL、Presto
使用説明:すべての引数の中で最大値を返し、空値はスキップします。
戻り値の型:T
例:
> SELECT greatest(10, 9, 2, 4, 3);
10
IF
関数構文:
IF(<expr1> boolean, <expr2> T, <expr3> U)
サポートエンジン:SparkSQL、Presto
使用説明:expr1の評価結果がtrueの場合、expr2を返し、それ以外の場合はexpr3を返します。
戻り値の型:T|U
例:
> SELECT if(1 < 2, 'a', 'b');
a
INLINE
関数構文:
INLINE(a array<struct<f1:T1,...,fn:Tn>>)
サポートエンジン:SparkSQL
使用説明:構造体配列をテーブルに分解します。デフォルトでは列名col1、col2などが使用されます。
戻り値の型:row(T1, ..., Tn)
例:
> SELECT inline(array(struct(1, 'a'), struct(2, 'b')));
1 a
2 b
INLINE_OUTER
関数構文:
INLINE_OUTER(a array<struct<f1:T1,...,fn:Tn>>)
サポートエンジン:SparkSQL
使用説明:構造体配列をテーブルに分解します。デフォルトでは列名col1、col2などが使用されます。
戻り値の型:row(T1, ..., Tn)
例:
> SELECT inline(array(struct(1, 'a'), struct(2, 'b')));
1 a
2 b
IN
関数構文:
<expr1> IN(<expr2> T, <expr3> T, ...)
サポートエンジン:SparkSQL、Presto
使用説明:expr1が任意のexprnと等しい場合、trueを返します。
戻り値の型:boolean
例:
> SELECT 1 in(1, 2, 3);
true
> SELECT 1 in(2, 3, 4);
false
ISNAN
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:exprがNaNの場合、trueを返し、それ以外の場合はfalseを返します。
戻り値の型:boolean
例:
> SELECT isnan(cast('NaN' as double));
true
IFNULL
関数構文:
IFNULL(<expr1> T, <expr2> U)
サポートエンジン:SparkSQL
使用説明:expr1がnullの場合、expr2を返し、それ以外の場合はexpr1を返します。
戻り値の型:T|U
例:
> SELECT ifnull(NULL, array('2'));
["2"]
ISNULL
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:exprがnullの場合、trueを返し、それ以外の場合はfalseを返します。
戻り値の型:boolean
例:
> SELECT isnull(1);
false
ISNOTNULL
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:exprがnullでない場合、trueを返し、それ以外の場合はfalseを返します。
戻り値の型:boolean
例:
> SELECT isnotnull(1);
true
LEAST
関数構文:
LEAST(<expr1> T, <expr2> T, ...)
サポートエンジン:SparkSQL、Presto
使用説明:すべての引数の中で最小値を返し、nullはスキップします。
戻り値の型:T
例:
> SELECT least(10, 9, 2, 4, 3);
2
NANVL
関数構文:
NANVL(<expr1> T, <expr2> U)
サポートエンジン:SparkSQL、Presto
使用説明:nanvl(expr1、expr2)、expr1がNaNでない場合はexpr1を返し、それ以外の場合はexpr2を返します。
戻り値の型:T|U
例:
> SELECT nanvl(cast('NaN' as double), 123);
123.0
NULLIF
関数構文:
NULLIF(<expr1> T, <expr2> U)
サポートエンジン:SparkSQL、Presto
使用説明:expr1がexpr2と等しい場合、nullを返し、それ以外の場合はexpr1を返します。
戻り値の型:T
例:
> SELECT nullif(2, 2);
NULL
NVL
関数構文:
NVL(<expr1> T, <expr2> U)
サポートエンジン:SparkSQL、Presto
使用説明:expr1がnullの場合、expr2を返し、それ以外の場合はexpr1を返します。
戻り値の型:T|U
例:
> SELECT nvl(NULL, array('2'));
["2"]
NVL2
関数構文:
NVL2(<expr1> T1, <expr2> T2, <expr3> T3)
サポートエンジン:SparkSQL、Presto
使用説明:expr1がnullでない場合、expr2を返し、それ以外の場合はexpr3を返します。
戻り値の型:T2|T3
例:
> SELECT nvl2(NULL, 2, 1);
1
POSEXPLODE
関数構文:
POSEXPLODE(<expr> array<T>|map<K, V>)
サポートエンジン:SparkSQL
使用説明:array型のexprの要素を複数の行に分割するか、またはmap型のexprを複数の行と列に分割します。位置を表す列名posを使用し、配列の要素にはデフォルトの列名colを使用し、マップの要素にはkeyとvalueを使用します。
戻り値の型:row(pos integer, col T)|row(row integer, key K, value V)
例:
> SELECT posexplode(array(10,20));
0 10
1 20
POSEXPLODE_OUTER
関数構文:
POSEXPLODE_OUTER(<expr> array<T>|map<K, V>)
サポートエンジン:SparkSQL
使用説明:array型のexprの要素を複数の行に分割するか、またはmap型のexprを複数の行と列に分割します。位置を表す列名posを使用し、配列の要素にはデフォルトの列名colを使用し、マップの要素にはkeyとvalueを使用します。
戻り値の型:row(pos integer, col T)|row(row integer, key K, value V)
例:
> SELECT posexplode_outer(array(10,20));
0 10
1 20
STACK
関数構文:
STACK(<n> integer, <expr0> T0, ..., <expr1> T1)
サポートエンジン:SparkSQL
使用説明:stack(n, expr1, ..., exprk) - expr1, ..., exprkをn行に分割します。デフォルトでは列名col0、col1などが使用されます。
戻り値の型:row(col0 T0, ..., coln Tn)
例:
> SELECT stack(2, 1, 2, 3);
1 2
3 NULL
ASSERT_TRUE
関数構文:
ASSERT_TRUE(<expr> boolean)
サポートエンジン:SparkSQL、Presto
使用説明:exprがtrueでない場合、例外をスローします。
戻り値の型:boolean
例:
> SELECT assert_true(0 < 1);
NULL
RAISE_ERROR
関数構文:
RAISE_ERROR(<error> string)
サポートエンジン:SparkSQL、Presto
使用説明:expr例外をスローします。
戻り値の型:string
例:
> SELECT raise_error('custom error message');
java.lang.RuntimeException
custom error message
SPARK_PARTITION_ID
関数構文:
サポートエンジン:SparkSQL
使用説明:現在のパーティションidを返します。
戻り値の型:integer
例:
> SELECT spark_partition_id();
0
関数構文:
サポートエンジン:SparkSQL
使用説明:読み取り中のファイル名を返します。利用できない場合は空の文字列を返します。
戻り値の型:string
例:
> SELECT input_file_name();
関数構文:
INPUT_FILE_BLOCK_START()
サポートエンジン:SparkSQL
使用説明:読み取り中のブロックの開始オフセットを返します。利用できない場合は-1を返します。
戻り値の型:integer
例:
> SELECT input_file_block_start();
-1
関数構文:
INPUT_FILE_BLOCK_LENGTH()
サポートエンジン:SparkSQL
使用説明:読み取り中のブロックの長さを返します。利用できない場合は-1を返します。
戻り値の型:integer
例:
> SELECT input_file_block_length();
-1
MONOTONICALLY_INCREASING_ID
関数構文:
MONOTONICALLY_INCREASING_ID()
サポートエンジン:SparkSQL
使用説明:単調増加する64ビット整数を返します。生成されたIDは単調増加かつ一意であることが保証されますが、連続的ではありません。現在の実装では、パーティションIDを上位31ビットに配置し、下位33ビットで各パーティション内のレコード番号を表します。データフレームのパーティションが10億未満で、各パーティションのレコードが80億未満であると仮定しています。この関数は、その結果がパーティションIDに依存するため、非決定的です。
戻り値の型:bigint
例:
> SELECT monotonically_increasing_id();
0
CURRENT_DATABASE
関数構文:
サポートエンジン:SparkSQL
使用説明:現在のデータベースを返します。
戻り値の型:string
例:
> SELECT current_database();
default
CURRENT_CATALOG
関数構文:
サポートエンジン:SparkSQL
使用説明:現在のcatalogを返します
戻り値の型:string
例:
> SELECT current_catalog();
spark_catalog
CURRENT_USER
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:現在のユーザーを返します。
戻り値の型:string
例:
REFLECT
関数構文:
REFLECT(<class> string, <method> string[, <arg1> T1[, <arg2> T2, ...]])
サポートエンジン:SparkSQL、Presto
使用説明:リフレクションを持つメソッドを呼び出します。
戻り値の型:string
例:
> select reflect('java.lang.Math', 'abs', -1);
1
JAVA_METHOD
関数構文:
JAVA_METHOD(<class> string, <method> string[, <arg1> T1[, <arg2> T2, ...]])
サポートエンジン:SparkSQL、Presto
使用説明:リフレクションを持つメソッドを呼び出します。
戻り値の型:string
例:
> select JAVA_METHOD('java.lang.Math', 'abs', -1);
1
VERSION
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:エンジンのバージョンを返します。
戻り値の型:string
例:
> select VERSION()
3.0.0 rce61711a5fa54ab34fc74d86d521ecaeea6b072a
TYPEOF
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:exprのデータ型を返します
戻り値の型:string
例:
> SELECT typeof(1);
int
> SELECT typeof(array(1));
array<int>
CAST
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:exprをtypeタイプに変換します
戻り値の型:<type>
例:
> SELECT cast('10' as int);
10
BOOLEAN
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:exprをbooleanタイプに変換します
戻り値の型:boolean
例:
> SELECT boolean(1);
true
BIGINT
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:強制型変換をbigintに
戻り値の型:bigint
例:
BINARY
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:BINARYへの強制型変換
戻り値の型:binary
例:
DOUBLE
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:doubleへの強制型変換
戻り値の型:double
例:
FLOAT
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:floatへの強制型変換
戻り値の型:float
例:
INT
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:integer型への強制型変換
戻り値の型:integer
例:
SMALLINT
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:強制型変換をsmallintに
戻り値の型:smallint
例:
select typeof(smallint(1));
smallint
STRING
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:stringへの強制型変換
戻り値の型:string
例:
> select typeof(string(1));
string
TINYINT
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:強制型変換をtinyintに
戻り値の型:tinyint
例:
> select typeof(tinyint(1));
tinyint
DECIMAL
関数構文:
サポートエンジン:SparkSQL、Presto
使用説明:decimalへの強制型変換
戻り値の型:decimal
例:
> select typeof(decimal(1));
decimal(10, 0)
GET_IDCARD_BIRTHDAY
関数構文:
GET_IDCARD_BIRTHDAY(<string> idcardno)
サポートエンジン:SparkSQL
使用説明:身分証明書番号から生年月日を取得する
idcardno:必須、string タイプ、15桁または18桁の身分証明書番号でなければなりません。身分証明書の合理性を検証します。null以外の他の型の入力は許可されません。入力がnullの場合、nullを返します。
戻り値の型:date
例(以下のテスト用身分証明書番号はランダムなサンプルであり、正しい身分証明書番号を表すものではありません)
> SELECT get_idcard_birthday('421081199001011222');
1990-01-01
GET_IDCARD_SEX
関数構文:
GET_IDCARD_SEX(<string> idcardno)
サポートエンジン:SparkSQL
使用説明:身分証明書番号から性別を取得する
idcardno:必須、string タイプ、15桁または18桁の身分証明書番号でなければなりません。身分証明書の合理性を検証します。null以外の他の型の入力は許可されません。入力がnullの場合、nullを返します。
戻り値の型:string
例:(以下のテスト用身分証明書番号はランダムなサンプルであり、正しい身分証明書番号を表すものではありません)
> SELECT get_idcard_birthday('421081199001011222');
GET_IDCARD_AGE
関数構文:
GET_IDCARD_AGE(<string> idcardno)
サポートエンジン:SparkSQL
使用説明:身分証明書番号から年齢を取得する
idcardno:必須、string タイプ、15桁または18桁の身分証明書番号でなければなりません。身分証明書の合理性を検証します。null以外の他の型の入力は許可されません。入力がnullの場合、nullを返します。
戻り値の型:int
例:(以下のテスト用身分証明書番号はランダムなサンプルであり、正しい身分証明書番号を表すものではありません)
> SELECT get_idcard_age('421081197001021233');
53
MAX_PT
関数構文:
MAX_PT(<const string> tableFullName)
サポートエンジン:SparkSQL
使用説明:指定されたパーティションテーブルの最大値を取得します
tableFullName:必須、string タイプ、定数値である必要があります。そうでない場合はエラーが発生します。tableFullName は catalog.db.table の3つの部分で構成され、catalog と db を省略すると現在のセッションの設定がデフォルトで使用されます。完全な記述を推奨します。
入力されたテーブルがパーティションテーブルでない場合、エラーが発生します。
この関数はデータがある最大のパーティションのみを返します。データの有無はメタデータセンターに関わるため、外部テーブルの場合、ANALYZE ステートメントを実行してパーティションの統計情報をメタデータに報告したかどうかに注意する必要があります。
パーティション値は辞書順に並べ替えて最大値を取得します。複数レベルのパーティションがある場合、第一レベルのパーティションのみをソート対象とします。
戻り値の型:string
例:
> SELECT max_pt('test.tableName');
20231024
> select * from test.tableName where dt=max_pt('test.tableName');
select * from test.tableName where dt='20231014'; と同等です。
TRANS_ARRAY
関数構文:
TRANS_ARRAY(<int> numKeys, <string> separator, <key1>, <key2>, ..., <col1>, <col2>, ...)
サポートエンジン:SparkSQL
使用説明:指定された複数の列colsを分割して転置し、複数の行に変換します。また、転置のキーとして一部の列keysを指定することもサポートしています。
numKeys:int 型、必須、転置用のキー列の数を示し、0以上でなければなりません。
separator:string タイプ、必須項目。colsが文字列の場合、separatorに基づいて分割する必要があります。colsが配列の場合、このパラメータは任意の値を入力できます。
keys:任意のタイプ、数はnumKeysによって決定されます。
cols:文字列型または配列型で、指定された列からkeysを除いたすべてがcolsと見なされます。つまり、分割および転置される列です。すべてのcolsの型は同じでなければなりません。つまり、すべてが文字列、またはすべてが配列、あるいは特殊なケースとして文字列と文字列配列の2種類の組み合わせもサポートされます。colsがない場合、1行のみ出力されます。
注意1:keysとcolsの数の合計は0より大きくなければなりません。
注意2:colsを分割した後の長さが等しくない場合、最終的に転置後の行数は最も長い列に合わせ、他の列はNULLで補完されます。
戻り値の型:任意の型。keysの型は変更されず、colsの型は文字列または配列の要素型です。
例:
> SELECT trans_array(1, ',', key, trans1, trans2) as (key, col1, col2) from values ('1', '2,3', array('4', '5')) as tab (key, trans1, trans2);
1 2 4
1 3 5
> SELECT trans_array(0, ',', key, trans1, trans2) as (key, col1, col2) from values ('1', '2,3', array('4')) as tab (key, trans1, trans2);
1 2 4
NULL 3 NULL
> SELECT trans_array(3, ',', key, trans1, trans2) as (key, col1, col2) from values ('1', '2,3', array('4', '5')) as tab (key, trans1, trans2);
12,3 [4,5]
TRANS_COLS
関数構文:
TRANS_COLS(<int> numKeys, <key1>, <key2>, ..., <col1>, <col2>, ...)
サポートエンジン:SparkSQL
使用説明:指定された複数の列colsを転置し、複数の行に変換します。また、転置のキーとして一部の列keysを指定することもサポートしています。
numKeys:int型、必須、転置用のkeys列の数を示し、0以上でなければなりません。
keys:任意のタイプ、数はnumKeysによって決定されます。
cols:任意のタイプ、指定された列からkeysを除いたすべてがcolsと見なされます、つまり転置する列です。すべてのcolsのタイプは同じでなければなりません。colsがない場合、1行のみ出力されます。
注意:keysとcolsの数の合計は0より大きくなければなりません。
戻り値の型:任意の型。出力には、転置されたすべての行における行番号を示すidx列が含まれ、keysの型は変更されず、colsの型も変更されません。
例:
> SELECT trans_cols(1,sid,ip1,ip2) as (idx, sid, ip) from values ('s1','0.0.0.0','1.1.1.1') as tab(sid,ip1,ip2);
1 s1 0.0.0.0
2 s1 1.1.1.1
SAMPLE
関数構文:
SAMPLE(<int/long> totalParts[, <int/long> pointParts][, <col1>, <col2>, ...])
サポートエンジン:SparkSQL
使用方法:サンプリング関数を使用して、グローバルまたは指定された列のハッシュ値をtotalPartsに分割し、指定された第pointPartsの結果を返します。
totalParts:int/long型、必須、分割する必要がある総パーティション数を示します。
pointParts:int/long型、任意、返すデータの何番目の部分を選択するかを示し、デフォルト値は1で、totalParts以下である必要があります。
cols:任意のタイプ、任意指定、データを分割する際のキーとして任意の列を指定可能。これらの列のハッシュ値に基づいて分割されます。
注1:colsが指定されていない場合、または現在指定されているcolsがすべてNULLの場合、データの偏りを防ぐために、ハッシュ値の代わりにランダム値を使用して計算します。一方、colsが指定されている場合、1列でもNULLでない列があると、ハッシュ値の計算およびパーティション結果に影響を与えます。
注意2:ハッシュ値とランダム値のシードが固定されているため、データの順序が一致すれば、繰り返し実行しても単一パーティション内のサンプリングデータは同じになります。小ファイルの結合が行われるシナリオでは、サンプリング順序が変化する可能性があるため、この場合は列を指定してサンプリングすることをお勧めします。
戻り値の型:boolean、trueはサンプリング済み、falseはサンプリング未実施を表します。
例:
> select * from values (1, 'm1'), (2, 't2'), (3, 'z3') as tab(dt, uid) where sample(3, 1);
2 t2
→ select * from values (1, 'm1'), (2, 't2'), (3, 'z3') as tab(dt, uid) where sample(3, 1, dt);
2 t2
3 z3
TO_CHAR
関数構文:
TO_CHAR(<boolean|int|long|double|decimal> data [, <string> format])
TO_CHAR(<date|timestamp> data, string format)
サポートエンジン:SparkSQL
使用説明1:指定されたテンプレートに従って数値をフォーマットします。formatは省略可能で、その場合は数値を直接文字列に変換します。それ以外の場合、formatの定義は以下の通りです:
'0' または '9': 数字のプレースホルダー。文字列の先頭の場合、0がプレースホルダーのとき数字がない場合は0で置き換え、9がプレースホルダーのとき数字がない場合はスペースで置き換える。文字列の末尾の場合、数字がない場合は一律0で置き換える。
'.' または 'D': 小数点のプレースホルダーで、1回のみ出現できます。
「、」または「G」:カンマ、例えば百、百万のプレースホルダーで、左右は必ず0-9の数字でなければなりません。
'$': ドル記号、1回のみ出現可能。
'S' または 'MI': 負号と正号のプレースホルダーで、文字列の先頭または末尾に最大1回のみ出現できます。
'PR': 文字列の末尾に一度だけ出現することが許可され、入力データが負の符号の場合、数字を正に変換して山括弧を追加します。
使用説明2:指定されたテンプレートに従って日付または時刻をフォーマットします。formatは省略不可で、定義は以下の通りです:
yyyyMMdd HH:mm:ss.SSSの任意の文字で構成されるテンプレート。
使用説明3:TO_CHARは最初の引数の型を暗黙的に変換することをサポートします。最初の引数がstring型の場合、関数はデフォルトでtimestampに変換され、テンプレートに従って日付または時刻をフォーマットするロジックが実行されます。
戻り値の型:string型
例:
> select to_char(124.23);
124.23
> select to_char(124.23, '00999.9999');
<space><space>124.2300
> select to_char(4124.23, '9,999.99');
4,124.23
> select to_char(-124.23, '999.99S');
124.23-
> select to_char(-4124.23, '$9,999.99PR');
<$4,124.23>
> select to_char(date '2016-12-31 12:34:56', 'yyyyMMddHHmmss');
20161231123456