ドキュメントの検索
karat

+

K

APIリファレンス ↗

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

構文とサポートされている関数

Expression board の使い方に関しては、Expression board の使い方を参照してください。このドキュメントは、Contour の豊富な表現言語を使って、タイプ、操作、および関数のリファレンスとして使えるリソースです。


データ型

式で以下のデータ型を使用できます。

String(文字列)

文字列はシングルクォートで表現されます。

'これは文字列です'

これは文字列です

文字列内のシングルクォートをエスケープするには、2 つ目のシングルクォートを追加します。

'私は''文字列です'

私は文字列です

|| 演算子を使って、文字列として列を連結します。

"性別" || "婚姻状況"

定数と列を連結することもできます。

'$' || ("給与列"/1000.0) || 'k'

Integer(整数)

整数は浮動小数点数ではない数値です。

5

Double(倍精度浮動小数点数)

倍精度浮動小数点数は以下のようになります。

5.7

Boolean(真偽値)

真偽値は true または false のいずれかです。真偽値は大文字と小文字を区別しません。

Date(日付)

YYYY-MM または YYYY-MM-DD 形式の文字列を日付としてキャストできます。

CAST('2016-12-06' AS DATE)

文字列をタイムスタンプとしてキャストすることもできます。

CAST('2016-12-06` `01:12:34' AS TIMESTAMP)

タイムスタンプで操作を行う場合、最初にタイムスタンプを long にキャストするか、ミリ秒単位の精度が必要な場合は double にキャストするのが最も簡単です。これにより、UNIX 時間での秒数が得られます。

例えば、「開始」と「終了」の 2 つのタイムスタンプ列がある場合、2 つの時間の間の分数を求めるために、次の式を使用できます。

(CAST("終了" as LONG) - CAST("開始" as LONG)) / 60.

long をタイムスタンプにキャストすると、long 値が秒単位であると仮定されます。データがミリ秒単位の場合は、キャストする前に 1000 で割ります。


操作

次のセクションでは、式で使用できる操作とその優先順位について概説します。

算術演算

数値列(整数または倍精度浮動小数点数)を他の数値列または定数で加算、減算、乗算、除算します:+, -, *, /

  • "チップ額" / "運賃"
  • "直径" * 3.14

比較演算

任意の型の列を他の列や定数と比較して、>(より大きい)、>=(以上)、<(未満)、<=(以下)を使用します。結果はブール値の列になります。

  • "年齢" > "平均年齢"
  • "合計距離" < 5

等価比較

2 つの列が同じ値を持っているかどうかを == で確認し、異なる値を持っているかどうかを != で確認します。

  • "出生地" == "居住地"

列の値を定数と比較することもできます。

  • "性別" == 'M'
文字列の比較

2 つの文字列を比較する際には、辞書順が使用されます。これは、数字を含む文字列を比較する場合に直感的でないことがあります。例えば:

  • 'アリゲーター' < 'ボート' => TRUE なぜなら 'ア' の符号は 'ボ' よりも小さいから
  • 'アライアンス' < 'アリゲーター' => TRUE なぜなら 'a' は 'g' よりも小さいから
  • 'ズー' < 'アルファ' => TRUE なぜなら 'ズ' は 'ア' よりも小さいから
  • 'ズー' < 'ズオロジスト' => TRUE なぜなら一方の文字列が他方の接頭辞である場合、短い方がより小さいと見なされるから
  • '1' < '2' => TRUE なぜなら文字列文字 '1' は文字列文字 '2' よりも小さいから
  • '10' < '2' => TRUE なぜなら最初の文字列文字 '1' は文字列文字 '2' よりも小さいから; これは整数 10 と 2 ではなく、文字列 '10' と '2' の比較です
  • '10' < '20' => TRUE なぜなら '1' は '2' よりも小さいから
Spark SQL との動作の違い

Contour の表現言語では、NULL との等価比較は以下のような動作をします。

  • NULL = 'DATA' => FALSE
  • NULL != 'DATA' => TRUE
  • NULL = NULL => TRUE
  • NULL != NULL => FALSE

ただし、Spark SQL では、これらの式はすべて NULL を返します。Contour の表現と Spark SQL を翻訳する際には、結果の整合性を保つために、この動作の違いを考慮する必要があります。

ブール比較

ブール論理で 1 つ以上の列を評価して、新しいブール値の列を導出します。

  • "年齢" >= 70 AND "性別" = 'M'

キャスティング

キャスティングを使って、列や式の型を変更できます。ブール値、整数、倍精度浮動小数点数、日付、タイムスタンプにキャストできます。

  • CAST("開始日" AS DATE)
  • CAST("開始時刻" AS TIMESTAMP)
  • CAST("参加者数" AS INTEGER)

Case/When/End

Case 文を使って、1 つの式で複数の可能性を評価できます。それぞれの文は順番に評価され、最初に真になるものの THEN 文が実行されます。

Copied!
1 2 3 4 5 CASE WHEN "age" < 13 THEN 'Child' -- "age"が13未満の場合、'Child'と表示 WHEN "age" > 19 THEN 'Adult' -- "age"が19より大きい場合、'Adult'と表示 ELSE 'Teenager' -- 上記のどれにも当てはまらない場合、'Teenager'と表示 END
Copied!
1 2 3 4 5 CASE MaritalStatus WHEN 'S' THEN 'Single' -- 'S'の場合、'Single'と表示 WHEN 'M' THEN 'Married' -- 'M'の場合、'Married'と表示 ELSE 'Unknown' -- 上記以外の場合、'Unknown'と表示 END

Like

指定されたパターンを行で検索します。詳細については、SQL LIKEのドキュメントを参照してください。

Null チェック

値が IS NULL または IS NOT NULL かどうかをチェックします。ブール値を返します。

事前順位

式内の操作の優先順位は、以下のリストに詳細に記載されており、最高の優先順位から最低の優先順位までの順序です。同じ行にある操作はすべて同じ優先順位を持ちます。

  1. +, -, NOT (単項)
  2. || (二項)
  3. *, /, % (二項)
  4. +, - (二項)
  5. <, <=, >, >= (二項)
  6. =, ==, !=', <>, IS, IS NOT, LIKE, RLIKE (二項)
  7. IS NULL, NOT NULL (単項)
  8. IN, NOT IN
  9. AND (二項)
  10. OR (二項)

関数

以下は、行式で使用可能な関数の完全なリストです。

数学・数値関数

  • ABS:絶対値を計算します。
  • CBRT:与えられた値の立方根を計算します。
  • CEIL:与えられた値の天井を計算します。
  • COS:与えられた値の余弦を計算します。
  • EXP:与えられた値の指数を計算します。
  • FACTORIAL:与えられた値の階乗を計算します。
  • FLOOR:与えられた値の床を計算します。
  • FORMAT_NUMBER:数値列 arg0 を「#,###,###.##」のような形式に丸め、arg1 小数点以下の桁数で丸めて文字列列として返します(注意:arg1 は整数リテラルでなければなりません)。
  • ISNAN:列が NaN の場合、およびその場合にのみ、true を返します。
  • LN:与えられた値の自然対数を計算します。
  • LOG:arg1 の対数を arg0 を基数として計算します(注意:arg0 は数値リテラルでなければなりません)。
  • POW:arg0 の値を arg1 のべき乗にした値を返します。
  • ROUND:arg0 の値を arg1 小数点以下の桁数に丸めた値を返します(注意:arg1 は整数リテラルでなければなりません)。
  • RTRIM:指定された文字列値の右端からスペースをトリムします。
  • SIN:与えられた列の正弦を計算します。
  • SQRT:指定された浮動小数点値の平方根を計算します。
  • TAN:与えられた値の正接を計算します。

文字列関数

  • CONCAT:複数の入力文字列列を1つの文字列列に連結します。
  • CONCAT_WS:与えられたセパレータを使用して、複数の入力文字列列を1つの文字列列に連結します(注意:arg0 は文字列リテラルでなければなりません)。
  • FORMAT_STRING:Java Formatterに従って引数を書式化し、文字列列として結果を返します。
  • LENGTH:与えられた文字列またはバイナリ列の長さを計算します。
  • LEVENSHTEIN:2つの与えられた文字列列のレーベンシュタイン距離を計算します。
  • LOWER:文字列列を小文字に変換します。
  • LPAD:文字列列 arg0 を左詰めで長さ arg1 までパディングし、文字列 arg2 で返します(注意:arg1 は整数リテラルで、arg2 は文字列リテラルでなければなりません)。
  • LTRIM:指定された文字列値の左端からスペースをトリムします。
  • REGEXP_EXTRACT:文字列列 arg0 を正規表現 arg1 に一致させ、特定のグループ arg2 (1 インデックス) を抽出します。正規表現が一致しなかった場合、または指定されたグループが一致しなかった場合、空の文字列が返されます(注意:arg1 は文字列リテラルで、arg2 は整数リテラルでなければなりません)。
  • REGEXP_REPLACE:arg0 のすべての部分文字列を arg1 と一致させ、arg2 で置き換えます。
  • REVERSE:文字列列を逆にして新しい文字列列として返します。
  • RPAD:文字列列 arg0 を右詰めで長さ arg1 までパディングし、文字列 arg2 で返します(注意:arg1 は整数リテラルで、arg2 は文字列リテラルでなければなりません)。
  • SPLIT:文字列列 arg0 を正規表現文字列 arg1 の周りで分割します(注意:arg1 は文字列リテラルでなければなりません)。
  • SUBSTRING:arg0 の部分文字列で、インデックス arg1 (1 インデックス) で始まり、長さ arg2 のもの(注意:arg1 および arg2 は整数リテラルでなければなりません)。
  • TRIM:指定された文字列列の両端からスペースをトリムします。
  • UPPER:文字列列を大文字に変換します。

日付/時刻関数

相対日付を導出する方法や例についての詳細は、相対日付の導出に関するリファレンスドキュメントで入手できます。

  • ADD_MONTHS:arg1 ヵ月後の arg0 を返します(注意:arg1 は整数リテラルでなければなりません)。
  • CURRENT_DATE:現在の日付を日付列として返します。これらの値は、パスが再計算されたときにのみ更新されます。ボード間での値の不整合を避けるために、パスを毎日更新することをお勧めします。
  • CURRENT_TIMESTAMP:現在のタイムスタンプをタイムスタンプ列として返します。これらの値は、パスが再計算されたときにのみ更新されます。
  • CURRENT_UNIX_TIMESTAMP:現在のタイムスタンプを秒単位の数値として返します。これらの値は、パスが再計算されたときにのみ更新されます。
  • DATE_ADD:arg1 日後の arg0 を返します(注意:arg1 は整数リテラルでなければなりません)。
  • DATE_FORMAT:日付/タイムスタンプ arg0 を arg1 で指定された形式の文字列に変換します(注意:arg1 は文字列リテラルでなければなりません)。
  • DATE_SUB:arg0 の日付を arg1 日前に戻し、Java SimpleDateFormat に従って返します(注意:arg1 は整数リテラルでなければなりません)。
  • DATE_TRUNC:arg1 を arg0 の形式で指定された単位に切り捨てた日付/タイムスタンプを返します。
  • DATE_DIFF:arg1 から arg0 までの日数を返します。
  • DAY_OF_MONTH:指定された日付/タイムスタンプ/文字列から月の日を整数として抽出します。
  • DAY_OF_WEEK:指定された日付/タイムスタンプ/文字列から週の日を整数として抽出します。日曜日の場合は1から土曜日の場合は7までの範囲です。
  • DAY_OF_YEAR:指定された日付/タイムスタンプ/文字列から年の日を整数として抽出します。
  • FROM_UTC_TIMESTAMP:タイムスタンプ列 arg0 が UTC の特定の時刻に対応していると仮定して、その時刻に対応する与えられたタイムゾーン arg1 の別のタイムスタンプを返します(注意:arg1 は文字列リテラルでなければなりません)。
  • HOUR:指定された日付/タイムスタンプ/文字列から時間を整数として抽出します。
  • LAST_DAY:日付列が与えられた場合、その日付が属する月の最終日を返します。
  • MINUTE:指定された日付/タイムスタンプ/文字列から分を整数として抽出します。
  • MONTH:指定された日付/タイムスタンプ/文字列から月を整数として抽出します。
  • MONTHS_BETWEEN:日付 arg0 と arg1 の間の月数を返します。
  • QUARTER:指定された日付/タイムスタンプ/文字列から四半期を整数として抽出します。
  • SECOND:指定された日付/タイムスタンプ/文字列から秒を整数として抽出します。
  • TO_UNIX_TIMESTAMP:時間文字列 arg0 を指定されたパターン文字列 arg1 に変換し、失敗した場合は null を返します(注意:arg1 は文字列リテラルでなければなりません)。
  • TO_UTC_TIMESTAMP:タイムスタンプ列 arg0 が与えられたタイムゾーン arg1 の特定の時刻に対応していると仮定して、その時刻に対応する UTC の別のタイムスタンプを返します(注意:arg1 は文字列リテラルでなければなりません)。
  • WEEK_OF_YEAR:指定された日付/タイムスタンプ/文字列から ISO 週 の番号を整数として抽出します。
  • YEAR:指定された日付/タイムスタンプ/文字列から年を整数として抽出します。

配列関数

配列関数に関する詳細や例については、配列関数に関するリファレンスドキュメントで入手できます。

  • ARRAY:すべての入力列から配列を作成します。
  • ARRAY_CONTAINS:配列列 arg0 が値 arg1 を含む場合、true を返します(注意:arg1 はリテラルでなければなりません)。
  • ARRAY_GET_AT_INDEX:配列列 arg0 からインデックス arg1 (1 インデックス) の要素を返します(注意:arg1 は整数リテラルでなければなりません)。この関数の結果を後続のボードで使用するには、明示的にキャストしてください。
  • ARRAY_LENGTH:与えられた配列の長さを返します。入力が null の場合、-1 を返します。
  • ARRAY_JOIN:配列列 arg0 をセパレータ文字列 arg1 で結合した文字列を返します(注意:arg1 は文字列リテラルでなければなりません)。
  • ARRAY_SORT:入力配列 arg0 を昇順にソートする場合は arg1 が true、降順にソートする場合は arg1 が false です(注意:arg1 はブールリテラルでなければなりません)。
警告

ROW_NUMBERFIRSTLASTARRAY_AGGARRAY_AGG_DISTINCT をウィンドウ関数で使用する際は、非決定性に注意してください。列 A をパーティション化し、列 B を並べ替えることを想像してください。列 A の同じ値に対して、列 B の値が同じ複数の行がある場合、これらのウィンドウ関数の結果は非決定的になる可能性があります。つまり、同じ入力データとロジックが与えられた場合に異なる結果を生成する可能性があります。

ウィンドウ関数

ウィンドウ関数には OVER 句が必要です。詳細および例については、ウィンドウ関数に関するリファレンスドキュメントを参照してください。

  • CUME_DIST:ウィンドウパーティション内の値の累積分布を返します。つまり、現在の行よりも下にある行の割合です。
  • DENSE_RANK:ウィンドウパーティション内の行の順位を、ギャップなしで返します。
  • EXPLODE:指定された配列列の各要素に対して新しい行を作成し、null の行を削除します。後続のボードで列を使用するには、明示的にキャストしてください。
  • EXPLODE_OUTER:指定された配列列の各要素に対して新しい行を作成します。後続のボードで列を使用するには、明示的にキャストしてください。
  • FIRST:グループ内の最初の値を返します。
  • LAG:現在の行の前にある arg1 行の列 arg0 の値を返し、現在の行の前に arg1 行未満がある場合は null を返します。例えば、arg1 が1の場合、ウィンドウパーティション内の任意のポイントで前の行を返します(注意:arg1 は整数リテラルでなければなりません)。
  • LAST:グループ内の最後の値を返します。
  • LEAD:現在の行の後にある arg1 行の列 arg0 の値を返し、現在の行の後に arg1 行未満がある場合は null を返します。例えば、arg1 が1の場合、ウィンドウパーティション内の任意のポイントで次の行を返します(注意:arg1 は整数リテラルでなければなりません)。
  • NTILE:順序付けされたウィンドウパーティション内の n タイルグループ ID(arg0 を含む)を返します。例えば、arg0 が 4 の場合、最初の四分の 1 の行には 1 の値が、2 四分の 1 には 2 の値が、3 四分の 1 には 3 の値が、最後の四分の 1 には 4 の値が与えられます(注意:arg0 は整数リテラルでなければなりません)。
  • PERCENT_RANK:ウィンドウパーティション内の行の相対ランク(つまり、パーセンタイル)を返します。
  • RANK:ウィンドウパーティション内の行の順位を返します。
  • ROW_NUMBER:ウィンドウパーティション内で 1 から始まる連続した番号を返します。

集計関数

集計関数は、集計式およびウィンドウ関数で使用できます。

  • ARRAY_AGG:入力列から集計された値の配列を返します。
  • ARRAY_AGG_DISTINCT:入力列から重複しない集計された値の配列を返します。
  • AVG:グループ内の値の平均を返します。
  • COUNT:グループ内のアイテムの数を返します。
  • COUNT_DISTINCT:グループ内のアイテムの数を返します(注意:式ボードの集計オプションでのみ使用できます。新しい列を追加フィルター、または列の置換では使用できません)。
  • CORR:2つの列のピアソン相関係数を返します。
  • MAX:グループ内の式の最大値を返します。
  • MEAN:グループ内の値の平均を返します。
  • MIN:グループ内の式の最小値を返します。
  • STDDEV:グループ内の式の標本標準偏差を返します。
  • SUM:式のすべての値の合計を返します。
  • SUM_DISTINCT:式の異なる値の合計を返します(注意:ウィンドウ関数では使用できません)。
  • VARIANCE:グループ内の値の無偏分散を返します。

その他の関数

  • COALESCE:すべての入力が null でない最初の列を返し、すべての入力が null の場合は null を返します。
  • GREATEST:値のリストの最大値を返し、null 値をスキップします。
  • HASH:指定された列のハッシュコードを計算し、結果を int 列として返します。
  • ISNULL:列が null の場合、およびその場合にのみ、true を返します。
  • LEAST:値のリストの最小値を返し、null 値をスキップします。
  • MD5:バイナリ列の MD5 ダイジェストを計算し、値を 32 文字の 16 進数文字列として返します。
  • MONOTONICALLY_INCREASING_ID:単調増加する ID を返します。これらの値は、パスが計算されるたびに変更される可能性があります。
  • SHA1:バイナリ列の SHA-1 ダイジェストを計算し、値を 40 文字の 16 進数文字列として返します。
  • GET_JSON_OBJECT:指定された JSON パス に基づいて JSON 文字列から JSON オブジェクトを抽出し、抽出された JSON オブジェクトの JSON 文字列を返します。これには以下の例があります。
    • $.field
    • $['field']