注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
式ボードの概要については、式ボードの使用ガイドを参照してください。このドキュメントは、Contour の豊富な式言語を使用するための資料であり、データ型、操作、関数のリファレンスとして使用できます。
式では、次のデータ型を使用できます。
文字列は単一引用符で囲んで表します。
'This is a string'
これは文字列です
文字列内の単一引用符をエスケープするには、単一引用符をもう1つ追加します。
'I''m a string'
私は文字列です
|| 演算子を使用して、列を文字列として連結します。
"Gender" || "MaritalStatus"
列と定数を連結することもできます。
'$' || ("salaryColumn"/1000.0) || 'k'
Integer は浮動小数点数ではない数値です。
5
Double は浮動小数点数です。
5.7
ブール変数は true または false のいずれかです。ブール変数では大文字と小文字が区別されません。
YYYY-MM または YYYY-MM-DD 形式の文字列を日付にキャストできます。
CAST('2016-12-06' AS DATE)
文字列をタイムスタンプにキャストすることもできます。
CAST('2016-12-06 01:12:34' AS TIMESTAMP)
タイムスタンプを使って操作を行う場合は、まずタイムスタンプを Long にキャストするか、ミリ秒単位の精度が必要な場合は Double にキャストすると簡単です。これにより、UNIX 時間の秒数になります。
たとえば、「start」と「end」という2つのタイムスタンプ列があるとします。2つの時刻の間の分数を求めるには、次の式を使用できます。
(CAST("end" as LONG) - CAST("start" as LONG)) / 60。
Long をタイムスタンプにキャストする場合、Long の値は秒単位であると想定されます。データがミリ秒単位の場合は、キャストする前に1000で除算します。
次のセクションでは、式で使用できる操作とその優先順位の概要を説明します。
数値列(Integer または Double)に対して、ほかの数値列または定数を使って加算、減算、乗算、除算を行います:+、-、*、/
"tipAmount" / "fare""diameter" * 3.14>(より大きい)、>=(以上)、<(より小さい)、<=(以下)を使用して、任意のデータ型の列をほかの列や定数と比較します。結果はブール値の列になります。
"age" > "averageAge""totalDistance" < 52つの文字列を比較する場合、Contour は辞書順を使用します。数値を含む文字列を比較する場合、直感に反する結果になることがあります。たとえば、次のようになります。
'Alligator' < 'Boat' => TRUE となります。'A' のエンコード値が 'B' のエンコード値より小さいためです。'Alliance' < 'Alligator' => TRUE となります。'a' が 'g' より小さいためです。'Zoo' < 'alpha' => TRUE となります。'Z' が 'a' より小さいためです。'Zoo' < 'Zoologist' => TRUE となります。一方の文字列がもう一方の接頭辞である場合、短い方が小さいと見なされるためです。'1' < '2' => TRUE となります。文字列の文字 '1' が文字列の文字 '2' より小さいためです。'10' < '2' => TRUE となります。最初の文字列の文字 '1' が文字列の文字 '2' より小さいためです。これは文字列 '10' と '2' の比較であり、整数10と2の比較ではありません。'10' < '20' => TRUE となります。'1' が '2' より小さいためです。== を使用して、行の2つの列に同じ値があるかを確認するか、!= を使用して異なる値があるかを確認します。
"cityOfBirth" == "cityOfResidence"列の値を定数と比較することもできます。
"Gender" == 'M'Contour の式言語では、NULL との等価比較は次のように動作します。
NULL = 'DATA' => FALSENULL != 'DATA' => TRUENULL = NULL => TRUENULL != NULL => FALSEただし、Spark SQL では、これらの式はすべて NULL を返します。Contour の式と Spark SQL の間で変換する場合、一貫した結果を生成するには、この動作の違いを考慮することが重要です。
ブールロジックを使って1列以上を評価し、新しいブール値の列を導出します。
"Age" >=70 AND "Gender" = 'M'キャストを使用すると、列または式のデータ型を変更できます。ブール値、Integer、Double、日付、タイムスタンプにキャストできます。
CAST("startDate" AS DATE)CAST("startTime" AS TIMESTAMP)CAST("numParticipants" AS INTEGER)Case 文を使用すると、1つの式で複数の条件を評価できます。各文は順番に評価され、最初に true と評価された文の THEN 文が実行されます。
Copied!1 2 3 4 5CASE WHEN "age" < 13 THEN 'Child' WHEN "age" > 19 THEN 'Adult' ELSE 'Teenager' END
Copied!1 2 3 4 5CASE MaritalStatus WHEN 'S' THEN 'Single' WHEN 'M' THEN 'Married' ELSE 'Unknown' END
列内で指定されたパターンを検索します。詳しくは、SQL LIKE ↗ のドキュメントを参照してください。
値が IS NULL または IS NOT NULL であるかを確認します。ブール値を返します。
次のリストは、式内の操作の優先順位を高い順に示しています。同じ行にある操作はすべて同じ優先順位です。
列の式で利用可能なすべての関数を以下に示します。
name 列を参照する例では、その列に値 Jane が含まれていることを前提としています。
firstName が Jane、lastName が Doe の場合、CONCAT("firstName", "lastName") は JaneDoe を返します。firstName が Jane、lastName が Doe の場合、CONCAT_WS(' ', "firstName", "lastName") は Jane Doe を返します。salary が 1234.5 の場合、FORMAT_STRING('%.2f', "salary") は 1234.50 を返します。LENGTH("name") は 4 を返します。wordA が kitten、wordB が sitting の場合、LEVENSHTEIN("wordA", "wordB") は 3 を返します。LOWER("name") は jane を返します。id が 42 の場合、LPAD("id", 5, '0') は 00042 を返します。name が Jane の場合、LTRIM("name") は Jane を返します(先頭の空白が削除されます)。email が jane@example.com の場合、REGEXP_EXTRACT("email", '([^@]+)@', 1) は jane を返します。phone が 555-1234 の場合、REGEXP_REPLACE("phone", '[^0-9]', '') は 5551234 を返します。REVERSE("name") は enaJ を返します。code が AB の場合、RPAD("code", 5, '*') は AB*** を返します。fullName が Jane Doe の場合、SPLIT("fullName", ' ') は配列 ['Jane', 'Doe'] を返します。SUBSTRING("name", 1, 3) は Jan を返します。name が Jane の場合、TRIM("name") は Jane を返します。UPPER("name") は JANE を返します。相対日付の導出に関する詳細と例については、相対日付の導出に関するリファレンスドキュメントを参照してください。
配列関数に関する詳細と例については、配列関数に関するリファレンスドキュメントを参照してください。
null の場合は -1 を返します。ウィンドウ関数で ROW_NUMBER、FIRST、LAST、ARRAY_AGG、または ARRAY_AGG_DISTINCT を使用する場合は、非決定性に注意してください。列 A でパーティション分割し、列 B で並べ替える場合を考えます。同じ列 A の値に対して、列 B の値が同じ行が複数あると、これらのウィンドウ関数の結果は非決定論的になる可能性があります。つまり、同じ入力データとロジックでも、異なる結果が生成される場合があります。
ウィンドウ関数には OVER 句が必要です。詳細と例については、ウィンドウ関数に関するリファレンスドキュメントを参照してください。
集計関数は、集計式およびウィンドウ関数で使用できます。
$.field$['field']