注: 以下の翻訳の正確性は検証されていません。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 Checks

値がIS NULLまたはIS NOT NULLかどうかを確認します。ブール値を返します。

Precedence

表現内の操作の優先順位は、以下のリストに詳細に示されています。優先順位が高い順から低い順に並んでいます。同じ行にある操作はすべて同じ優先順位です。

  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(二項)

Functions

以下は列表現で利用可能な関数の完全なリストです。

Math & numerical functions

  • ABS: 絶対値を計算します。
  • CBRT: 指定された値の立方根を計算します。
  • CEIL: 指定された値の天井を計算します。
  • COS: 指定された値のコサインを計算します。
  • EXP: 指定された値の指数を計算します。
  • FACTORIAL: 指定された値の階乗を計算します。
  • FLOOR: 指定された値の床を計算します。
  • FORMAT_NUMBER: 数値の列arg0を‘#,###,###.##’のような形式にフォーマットし、arg1の小数点以下の桁数に丸め、結果を文字列の列として返します(注:arg1は整数リテラルである必要があります)。
  • ISNAN: 列がNaNの場合にのみtrueを返します。
  • LN: 指定された値の自然対数を計算します。
  • LOG: 基数arg0でarg1の対数を計算します(注:arg0は数値リテラルである必要があります)。
  • POW: arg0をarg1の累乗にした値を返します。
  • ROUND: arg0の値をarg1の小数点以下の桁数に丸めた値を返します(注:arg1は整数リテラルである必要があります)。
  • RTRIM: 指定された文字列の右端からスペースをトリムします。
  • SIN: 指定された列のサインを計算します。
  • SQRT: 指定された浮動小数点値の平方根を計算します。
  • TAN: 指定された値のタンジェントを計算します。

String functions

  • 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: 文字列の列を大文字に変換します。

Date/time functions

相対的な日付の導出に関する詳細および例は、相対的な日付の導出に関するリファレンスドキュメントに記載されています。

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

Array functions

Array関数に関する詳細および例は、Array関数に関するリファレンスドキュメントに記載されています。

  • 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を昇順で並べ替える場合はtrueを、降順で並べ替える場合はfalseを返します(注:arg1はブールリテラルである必要があります)。
Warning

ROW_NUMBER, FIRST, LAST, ARRAY_AGG, または ARRAY_AGG_DISTINCTをウィンドウ関数で使用する場合、非決定性に注意してください。列Aでパーティション分割し、列Bで並べ替えているとします。同じ列Aの値に対して、列Bに同じ値を持つ複数の行がある場合、これらのウィンドウ関数の結果は非決定的になる可能性があります - 同じ入力データと論理に対して異なる結果を生成する可能性があります。

Window functions

ウィンドウ関数は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: ウィンドウパーティション内で順序付けられたntileグループIDを返します(1からarg0を含む)。たとえば、arg0が4の場合、最初の四分の1の行は値1を取得し、2番目の四分の1の行は2を取得し、3番目の四分の1の行は3を取得し、最後の四分の1の行は4を取得します(注:arg0は整数リテラルである必要があります)。
  • PERCENT_RANK: ウィンドウパーティション内の行の相対順位(パーセンタイル)を返します。
  • RANK: ウィンドウパーティション内の行の順位を返します。
  • ROW_NUMBER: ウィンドウパーティション内で1から始まる連続番号を返します。

Aggregate functions

集計関数は集計表現やウィンドウ関数で使用できます。

  • ARRAY_AGG: 入力列の集計値の配列を返します。
  • ARRAY_AGG_DISTINCT: 入力列の一意の集計値の配列を返します。
  • AVG: グループ内の値の平均を返します。
  • COUNT: グループ内の項目数を返します。
  • COUNT_DISTINCT: グループ内の項目数を返します(注:Aggregateオプションでのみ使用できます。Add new columnフィルター処理する、またはReplace Columnでは使用できません)。
  • CORR: 2つの列のピアソン相関係数を返します。
  • MAX: グループ内の表現の最大値を返します。
  • MEAN: グループ内の値の平均を返します。
  • MIN: グループ内の表現の最小値を返します。
  • STDDEV: グループ内の表現の標本標準偏差を返します。
  • SUM: 表現内のすべての値の合計を返します。
  • SUM_DISTINCT: 表現内の一意の値の合計を返します(注:ウィンドウ関数では使用できません)。
  • VARIANCE: グループ内の値の不偏分散を返します。

Misc functions

  • 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']