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

SQL 方言

Foundry SQL は、おおむね ANSI に準拠した Spark SQL ↗ のサブセットです。

クイックリファレンス

一般的な操作

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 -- テーブルを作成する CREATE TABLE `/path/to/table` (id INT, name STRING); -- データを挿入する INSERT INTO `/path/to/table` VALUES (1, 'foo'), (2, 'bar'); -- 基本的なクエリ SELECT * FROM `/path/to/table` WHERE id = 1; -- テーブルを結合する SELECT a.*, b.name FROM `/path/to/table1` a LEFT JOIN `/path/to/table2` b ON a.id = b.id; -- 集計 SELECT category, COUNT(*), AVG(price) FROM `/path/to/products` GROUP BY category HAVING COUNT(*) > 10; -- ウィンドウ関数 SELECT name, salary, RANK() OVER (ORDER BY salary DESC) as rank FROM `/path/to/employees`; -- CTE(共通テーブル式) WITH summary AS ( SELECT category, SUM(amount) as total FROM `/path/to/sales` GROUP BY category ) SELECT * FROM summary WHERE total > 1000;

よく使う関数

カテゴリー関数
集計count(), sum(), avg(), min(), max(), count(DISTINCT col), collect_set()
文字列upper(), lower(), trim(), concat(), concat_ws(), contains(), split(), substr()
日付/時刻current_date(), current_timestamp(), date_add(), date_diff(), to_date(), year(), month(), day()
数学abs(), round(), ceil(), floor(), pow(), sqrt(), mod()
配列array(), array_contains(), array_size(), array_distinct(), explode(), flatten()
条件付きCASE WHEN ... THEN ... END, coalesce(), nullif(), regexp_like(), regexp_extract()
ウィンドウROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD()

テーブル参照

Copied!
1 2 3 4 5 6 7 8 -- パスによる指定 SELECT * FROM `/path/to/table`; -- RID による指定 SELECT * FROM `ri.rid.for.table.1234`; -- ブランチを指定 SELECT * FROM `/path/to/table`.branch_master;

構文に関する重要な注意事項

  • サブクエリは必ず括弧で囲む必要があります。
  • 作成されるテーブルはデフォルトで Iceberg ですが、USING <format> 構文で変更できます。
  • INSERT、UPDATE、DELETE に対応しているのは Iceberg テーブルのみです。

テーブルの作成

CREATE [ OR REPLACE ] TABLE table_identifier [ ( col_name1 col_type1, ... ) ] [ USING table_format ] [ PARTITIONED BY ( expr [, ...] ) ] [ TBLPROPERTIES ( 'key'='value' [, ...] ) ] [ AS select_statement ]

PARTITIONED BY は Iceberg テーブルでのみ利用できます。TBLPROPERTIES は Iceberg テーブルのプロパティ ↗を設定します。

値を指定しない場合は、テーブル形式は Iceberg になります。有効なテーブル形式は次のとおりです。

  • Iceberg: iceberg
  • Parquet: parquet
  • Avro: avro
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 -- 例 CREATE TABLE `/path/to/table` AS SELECT * FROM `/path/to/table`; CREATE TABLE `/path/to/table` USING parquet AS SELECT * FROM `/path/to/table`; CREATE TABLE `/path/to/table` ( id INT, name STRING ); CREATE OR REPLACE TABLE `/path/to/table` (id INT, name STRING); CREATE TABLE `/path/to/table` (id INT, ts TIMESTAMP) PARTITIONED BY (days(ts)); CREATE TABLE `/path/to/table` (id INT) TBLPROPERTIES ('write.format.default'='parquet'); CREATE TABLE `/path/to/table` PARTITIONED BY (id) AS SELECT * FROM `/path/to/source`;

テーブルの変更

Iceberg テーブルは、INSERT、UPDATE、DELETE 文によるデータの追加に対応しています。Iceberg 以外のテーブルは、現在テーブルの変更に対応していません。

挿入

INSERT [ INTO ] table_identifier { VALUES ( { value | NULL } [ , ... ] ) [ , ( ... ) ] | query }
Copied!
1 2 3 4 -- 例 INSERT INTO `/path/to/table` VALUES (1, 'foo'), (2, 'bar'); INSERT INTO `/path/to/table` SELECT id, name FROM `/path/to/table2`;

更新

UPDATE table_identifier
SET column_name = value [, ...]
[ WHERE condition ]
Copied!
1 2 3 4 5 6 7 -- 例 UPDATE `/path/to/table` SET col = 'new value'; UPDATE `/path/to/table` SET col = 'new value' WHERE col = 'old value';

削除

DELETE FROM table_identifier WHERE condition
Copied!
1 DELETE FROM `/path/to/table` WHERE col = 'to delete'

メタデータを変更する

Iceberg テーブルは、ALTER TABLE 構文によるスキーマとメタデータの変更に対応しています。詳細については、Iceberg Spark DDL ドキュメント ↗を参照してください。

列の操作

ALTER TABLE table_identifier ADD COLUMN col_name col_type [COMMENT 'comment']
ALTER TABLE table_identifier ADD COLUMNS (col_name col_type [COMMENT 'comment'], ...)
ALTER TABLE table_identifier DROP COLUMN col_name
ALTER TABLE table_identifier DROP COLUMNS (col_name, ...)
ALTER TABLE table_identifier RENAME COLUMN old_name TO new_name
ALTER TABLE table_identifier ALTER COLUMN col_name TYPE new_type
ALTER TABLE table_identifier ALTER COLUMN col_name COMMENT 'comment'
ALTER TABLE table_identifier ALTER COLUMN col_name SET NOT NULL
ALTER TABLE table_identifier ALTER COLUMN col_name DROP NOT NULL
Copied!
1 2 3 4 5 6 -- 例 ALTER TABLE `/path/to/table` ADD COLUMN new_col STRING; ALTER TABLE `/path/to/table` ADD COLUMNS (col1 INT, col2 STRING COMMENT 'description'); ALTER TABLE `/path/to/table` DROP COLUMN old_col; ALTER TABLE `/path/to/table` RENAME COLUMN old_name TO new_name; ALTER TABLE `/path/to/table` ALTER COLUMN col2 TYPE BIGINT;

パーティションフィールド

ALTER TABLE table_identifier ADD PARTITION FIELD expr [AS alias]
ALTER TABLE table_identifier DROP PARTITION FIELD expr
ALTER TABLE table_identifier REPLACE PARTITION FIELD old_expr WITH new_expr [AS alias]
Copied!
1 2 3 4 5 -- 例 ALTER TABLE `/path/to/table` ADD PARTITION FIELD days(ts); ALTER TABLE `/path/to/table` ADD PARTITION FIELD bucket(16, id) AS id_bucket; ALTER TABLE `/path/to/table` DROP PARTITION FIELD days(ts); ALTER TABLE `/path/to/table` REPLACE PARTITION FIELD days(ts) WITH hours(ts);

書き込み順序

ALTER TABLE table_identifier WRITE ORDERED BY col1 [ASC|DESC] [, ...]
ALTER TABLE table_identifier WRITE LOCALLY ORDERED BY col1 [ASC|DESC] [, ...]
ALTER TABLE table_identifier WRITE DISTRIBUTED BY PARTITION [LOCALLY ORDERED BY col1 [ASC|DESC] [, ...]]
ALTER TABLE table_identifier WRITE UNORDERED
Copied!
1 2 3 4 -- 例 ALTER TABLE `/path/to/table` WRITE ORDERED BY col1, col2 DESC; ALTER TABLE `/path/to/table` WRITE DISTRIBUTED BY PARTITION LOCALLY ORDERED BY col1; ALTER TABLE `/path/to/table` WRITE UNORDERED;

識別子フィールド

ALTER TABLE table_identifier SET IDENTIFIER FIELDS col1 [, ...]
ALTER TABLE table_identifier DROP IDENTIFIER FIELDS col1 [, ...]
Copied!
1 2 3 -- 例 ALTER TABLE `/path/to/table` SET IDENTIFIER FIELDS col1, col2; ALTER TABLE `/path/to/table` DROP IDENTIFIER FIELDS col1, col2;

テーブルのプロパティ

ALTER TABLE table_identifier SET TBLPROPERTIES ('key1'='value1' [, ...])
ALTER TABLE table_identifier UNSET TBLPROPERTIES ('key1' [, ...])
Copied!
1 2 3 4 -- 例 ALTER TABLE `/path/to/table` SET TBLPROPERTIES ('write.format.default'='parquet'); ALTER TABLE `/path/to/table` SET TBLPROPERTIES ('write.format.default'='parquet', 'write.parquet.compression-codec'='zstd'); ALTER TABLE `/path/to/table` UNSET TBLPROPERTIES ('write.format.default');

タグ

ALTER TABLE table_identifier CREATE TAG [IF NOT EXISTS] tag_name [AS OF VERSION snapshot_id] [RETAIN n DAYS]
ALTER TABLE table_identifier CREATE OR REPLACE TAG tag_name [AS OF VERSION snapshot_id] [RETAIN n DAYS]
ALTER TABLE table_identifier DROP TAG [IF EXISTS] tag_name
ALTER TABLE table_identifier REPLACE TAG tag_name [AS OF VERSION snapshot_id] [RETAIN n DAYS]
Copied!
1 2 3 4 5 6 -- 例 ALTER TABLE `/path/to/table` CREATE TAG v1 AS OF VERSION 42; ALTER TABLE `/path/to/table` CREATE TAG IF NOT EXISTS v1 AS OF VERSION 42 RETAIN 7 DAYS; ALTER TABLE `/path/to/table` CREATE OR REPLACE TAG v2 AS OF VERSION 100; ALTER TABLE `/path/to/table` DROP TAG IF EXISTS v1; ALTER TABLE `/path/to/table` REPLACE TAG v1 AS OF VERSION 50 RETAIN 14 DAYS;

ブランチ

ALTER TABLE table_identifier CREATE BRANCH [IF NOT EXISTS] branch_name [AS OF VERSION snapshot_id] [RETAIN n DAYS] [WITH SNAPSHOT RETENTION n SNAPSHOTS [n DAYS]]
ALTER TABLE table_identifier CREATE OR REPLACE BRANCH branch_name [AS OF VERSION snapshot_id] [RETAIN n DAYS] [WITH SNAPSHOT RETENTION n SNAPSHOTS [n DAYS]]
ALTER TABLE table_identifier DROP BRANCH [IF EXISTS] branch_name
ALTER TABLE table_identifier REPLACE BRANCH branch_name [AS OF VERSION snapshot_id] [RETAIN n DAYS]
Copied!
1 2 3 4 5 6 -- 例 ALTER TABLE `/path/to/table` CREATE BRANCH feature_branch; ALTER TABLE `/path/to/table` CREATE BRANCH IF NOT EXISTS my_branch AS OF VERSION 42 RETAIN 7 DAYS; ALTER TABLE `/path/to/table` CREATE OR REPLACE BRANCH my_branch AS OF VERSION 10; ALTER TABLE `/path/to/table` DROP BRANCH IF EXISTS old_branch; ALTER TABLE `/path/to/table` REPLACE BRANCH my_branch AS OF VERSION 5 RETAIN 30 DAYS;

トランザクションブロック

トランザクションブロックは、複数の文をまとめて、単一のアトミックなジョブとして実行します。

BEGIN;
statement1;
statement2;
...
COMMIT;

ルール:

  • BEGIN/COMMIT 内のすべての文は、単一のジョブでまとめて実行されます。
  • トランザクションブロックはネストできません。
  • トランザクションブロックには、書き込み文が1つ以上必要です。
  • COMMIT のない BEGIN、または BEGIN のない COMMIT は、パースエラーになります。
Copied!
1 2 3 4 5 6 7 8 9 10 11 -- テーブルの作成とデータの挿入をアトミックに実行する BEGIN; CREATE OR REPLACE TABLE `/path/to/table` (id INT, name STRING); INSERT INTO `/path/to/table` VALUES (1, 'foo'), (2, 'bar'); COMMIT; -- 別々のテーブルへの複数の挿入を単一のジョブとして実行する BEGIN; INSERT INTO `/path/to/table1` SELECT * FROM `/path/to/source`; INSERT INTO `/path/to/table2` SELECT * FROM `/path/to/source`; COMMIT;

クエリの構成

[ WITH with_query [ , ... ] ]
select_statement
  [ { UNION | INTERSECT | EXCEPT } select_statement, ... ]
  [ ORDER BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] } ]
  [ WINDOW { window_name AS ( window_spec ) [, ...] } ]
  [ LIMIT { ALL | expression } ]

WITH 句(共通テーブル式)

with_query は次のとおりです。

cte_name [ ( column_name [, ...] ) ] AS ( select_statement )
Copied!
1 2 3 4 5 6 7 -- 例 WITH sales_summary (cust_id, total_sales, order_count) AS ( SELECT customer_id, SUM(total_amount), COUNT(*) FROM `/data/orders` GROUP BY customer_id ) SELECT * FROM sales_summary WHERE total_sales > 10000;

SELECT 文

select_statement は次のとおりです。

SELECT [ ALL | DISTINCT ] { [ named_expression | regex_column_names | * ] [, ...] }
  FROM { from_item [, ...] }
  [ WHERE boolean_expression ]
  [ GROUP BY { ALL | { expression | ROLLUP(...) | CUBE(...) | GROUPING SETS(...) } [ , ... ] } ]
  [ HAVING boolean_expression ]
  [ LIMIT { ALL | expression } [ OFFSET expression ] ]

Furnace のクエリでは、GROUP BY ALL を使用すると、SELECT リスト内のすべての非集計式でグループ化できます。

Copied!
1 2 3 SELECT region, product, SUM(revenue) FROM `/data/sales` GROUP BY ALL;

名前付き式

named_expression は次のいずれかです。

任意のエイリアスを持つ式:

expression [ AS alias ]
Copied!
1 2 3 4 -- 例 SELECT count(*) AS total_count FROM `/path/to/table`; SELECT name, salary * 1.1 AS adjusted_salary FROM `/path/to/employees`;

ウィンドウ関数:

window_function() OVER ( window_spec )
window_function() OVER window_name

window_spec は次のとおりです。

[ PARTITION BY expression [, ...] ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ]
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 -- 例 SELECT name, ROW_NUMBER() OVER (ORDER BY salary DESC) as rank FROM `/path/to/employees`; SELECT category, product_id, ROW_NUMBER() OVER (PARTITION BY category ORDER BY price DESC) as category_rank FROM `/path/to/products`; -- 名前付きウィンドウを使用する SELECT customer_id, order_date, total, ROW_NUMBER() OVER w as order_sequence FROM `/path/to/orders` WINDOW w AS (PARTITION BY customer_id ORDER BY order_date);

FROM 句

from_item は次のいずれかです。

テーブル参照

テーブルは、ファイルシステムのパスまたはリソース識別子 (RID) で参照できます。どちらも任意でブランチを指定でき、特定の Iceberg ブランチをクエリできます。特殊文字を含むブランチ名は、バッククォートでエスケープする必要があります。

{ `/path/to/table`[.branch_<branch name>] | `ri.rid.for.table.1234`[.branch_<branch name>] }
Copied!
1 2 3 4 5 6 7 8 9 10 -- 例 SELECT * FROM `/path/to/table`; SELECT * FROM `/path/to/table`.branch_master; SELECT * FROM `/path/to/table` WHERE id = 1; SELECT * FROM `ri.rid.for.table.1234`; SELECT * FROM `ri.rid.for.table`.`branch_abc\xyz`;

VERSION AS OF 構文を使用すると、特定のバージョンへのタイムトラベルクエリを実行できます。Iceberg テーブルにはスナップショットIDを、Foundry データセットにはトランザクション RID を使用します。

Copied!
1 2 3 4 -- 例 SELECT * FROM `/path/to/table` VERSION AS OF `ri.foundry.main.transaction.1234`; SELECT * FROM `/path/to/table` VERSION AS OF 1234567;

Foundry データセットでは、VERSION BETWEEN ... AND ... を使用して、トランザクションの範囲内で追加された行を読み取れます。このクエリは、開始トランザクションより後から終了トランザクションまでに追加された行を返します。開始境界のトランザクションは含まれず、終了境界のトランザクションは含まれます。両方の境界には、スナップショットIDではなくトランザクション RID を指定する必要があります。

Copied!
1 2 3 -- txn.1234 より後から txn.5678 まで(txn.5678 を含む)に追加された行 SELECT * FROM `/path/to/table` VERSION BETWEEN `ri.foundry.main.transaction.1234` AND `ri.foundry.main.transaction.5678`;

Iceberg テーブルでは VERSION BETWEEN を利用できません。ほかのタイムトラベル構文には、現在対応していません。

結合

relation
  { CROSS | LEFT [ OUTER ] | RIGHT [ OUTER ] | FULL [ OUTER ] }
  JOIN relation
  ON boolean_expression
Copied!
1 2 3 4 -- 例 SELECT * FROM `/path/to/table` LEFT JOIN `/path/to/table2` ON id = id2; SELECT * FROM `/path/to/table` RIGHT OUTER JOIN `/path/to/table2` ON id = id2;

サブクエリ

( select_statement )
Copied!
1 2 3 4 5 6 7 8 9 -- 例 SELECT * FROM (SELECT * FROM `/path/to/table`); SELECT * FROM (SELECT * FROM `/path/to/table`) WHERE id = 1; SELECT * FROM ( VALUES (9001, 1001, 1, DATE '2023-06-01', 'credit_card', 1329.98, 'completed', TIMESTAMP '2023-06-01 11:00:00') ) AS orders(order_id, customer_id, product_id, order_date, payment_method, total, status, created_at);

サブクエリは_必ず_括弧で囲む必要があります。Spark SQL では常に必須というわけではありませんが、Foundry では必須です。

完全なクエリの例

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 -- 結合と絞り込みを含む複雑なクエリ SELECT DISTINCT o.order_id, c.name, o.total_amount, p.category FROM `/data/orders` o LEFT JOIN `/data/customers` c ON o.customer_id = c.id CROSS JOIN (SELECT product_id, category FROM `/data/products` WHERE category = 'Electronics') p ON o.product_id = p.product_id WHERE o.order_date > DATE '2024-01-01' AND o.total_amount > 1000.0 ORDER BY o.total_amount DESC LIMIT 100; -- HAVING 句を使用した集計 SELECT c.name, COUNT(o.order_id) as order_count, SUM(o.total_amount) as total_spent FROM `/data/customers` c LEFT JOIN `/data/orders` o ON c.id = o.customer_id GROUP BY c.name HAVING COUNT(o.order_id) > 0; -- 複数の結合を含む UNION クエリ SELECT emp_id, name, dept, 'Active' AS status FROM `/hr/employees` e LEFT OUTER JOIN `/hr/departments` d ON e.dept_id = d.id WHERE e.active = true UNION SELECT emp_id, name, dept, 'Inactive' AS status FROM (SELECT * FROM `/hr/employees` WHERE termination_date < current_timestamp()) e RIGHT JOIN `/hr/departments` d ON e.dept_id = d.id WHERE e.active = false ORDER BY dept ASC, status DESC NULLS LAST;

SQL ヒント

SQL ヒントは、クエリエンジンに追加の指示を与えます。ヒントは次の構文で指定します。

/*+ hint1, hint2(opts...) */

現在、次のヒントに対応しています。

  • adhoc:1回限りの書き込みを実行し、アクティブな定義を変更せずに、追加の SQL 定義として保持します。
Copied!
1 2 /*+ adhoc */ CREATE OR REPLACE TABLE `/path/to/table` AS SELECT * FROM `/path/to/source`;

Iceberg 参照

Foundry SQL は、メタデータをクエリするための Iceberg 参照に対応しています。公式ドキュメント ↗を確認してください。

Copied!
1 2 3 4 -- 例 SELECT * FROM `/path/to/table/`.files; SELECT * FROM `/path/to/table/`.snapshots;

イントロスペクション

SHOW FUNCTIONS を使用すると、Foundry SQL が対応している関数を一覧表示できます。この文は、name、kind(scalar、aggregate、window のいずれか)、signature の3列を返します。任意の LIKE パターンを指定すると、関数名で絞り込めます。% は任意の文字列に一致し、_ は1文字に一致します。

Copied!
1 2 SHOW FUNCTIONS; SHOW FUNCTIONS LIKE 'abs%';

関数

関数を使用すると、より複雑な方法でデータを加工できます。以下の各関数の詳細については、Spark SQL ドキュメント ↗を参照してください。

配列関数

関数説明例Furnaceオントロジー
array(expr, ...)指定された要素で配列を作成しますSELECT array(1, 2, 3)対応利用できません
array_distinct(array)配列から重複する値を削除しますSELECT array_distinct(tags) FROM table対応利用できません
array_intersect(array1, array2)両方の配列に含まれる要素を重複なしで返しますSELECT array_intersect(arr1, arr2) FROM table対応利用できません
array_union(array1, array2)いずれかの配列に含まれる要素を重複なしで返しますSELECT array_union(arr1, arr2) FROM table対応利用できません
array_except(array1, array2)array1 に含まれ、array2 に含まれない要素を返しますSELECT array_except(arr1, arr2) FROM table対応利用できません
array_join(array, delimiter [, nullReplacement])区切り文字を使って配列の要素を連結しますSELECT array_join(tags, ',') FROM table対応対応
array_max(array)配列の最大値を返しますSELECT array_max(ARRAY(1, 5, 3))対応利用できません
array_min(array)配列の最小値を返しますSELECT array_min(ARRAY(1, 5, 3))対応利用できません
array_position(array, element)最初に出現する位置を返します(1始まり、見つからない場合は0)SELECT array_position(tags, 'item') FROM table対応利用できません
array_remove(array, element)一致するすべての要素を削除しますSELECT array_remove(tags, 'old') FROM table対応利用できません
array_size(array)配列の要素数を返しますSELECT array_size(tags) FROM table対応対応
array_contains(array, value)配列に値が含まれる場合は true を返しますSELECT array_contains(tags, 'new') FROM table対応対応
array_repeat(element, count)要素を count 回繰り返した配列を作成しますSELECT array_repeat('x', 5)対応利用できません
arrays_overlap(array1, array2)配列に共通する null 以外の要素がある場合は true を返しますSELECT arrays_overlap(arr1, arr2) FROM table対応利用できません
flatten(arrayOfArrays)ネストされた配列を単一の配列に平坦化しますSELECT flatten(nested_arrays) FROM table対応利用できません
sequence(start, stop, step)整数のシーケンスを生成しますSELECT sequence(1, 10, 2)対応利用できません
shuffle(array)配列の要素をランダムに並べ替えますSELECT shuffle(tags) FROM table対応利用できません
slice(array, start, length)start から length 分の配列の部分集合を返しますSELECT slice(tags, 1, 2) FROM table対応利用できません
sort_array(array[, ascendingOrder])配列を昇順(デフォルト)または降順に並べ替えますSELECT sort_array(tags) FROM table対応利用できません
array_sort(array)null を最後に配置し、配列を昇順に並べ替えますSELECT array_sort(tags) FROM table対応利用できません
get(array, index)指定されたインデックスの要素を返します(0始まり)SELECT get(tags, 0) FROM table対応対応
element_at(array, index)指定されたインデックスの要素を返します(1始まり、負の値は末尾から数えます)SELECT element_at(tags, 1) FROM table対応利用できません
size(array)配列の要素数を返します(マップも受け付けます)SELECT size(tags) FROM table対応対応
cardinality(array)配列の要素数を返します(マップも受け付けます)SELECT cardinality(tags) FROM table対応対応
explode(array)配列の要素ごとに新しい行を生成しますSELECT explode(tags) FROM table対応対応

マップ関数

関数説明例Furnaceオントロジー
map(key1, value1, key2, value2, ...)キーと値のペアからマップを作成しますSELECT map('a', 1, 'b', 2)対応利用できません
map_keys(map)マップのキーの配列を返しますSELECT map_keys(attributes) FROM table対応利用できません
map_values(map)マップの値の配列を返しますSELECT map_values(attributes) FROM table対応利用できません
element_at(map, key)指定されたキーの値を返しますSELECT element_at(attributes, 'color') FROM table対応利用できません
size(map)マップのエントリー数を返します(配列も受け付けます)SELECT size(attributes) FROM table対応利用できません
cardinality(map)マップのエントリー数を返します(配列も受け付けます)SELECT cardinality(attributes) FROM table対応利用できません

構造体関数

関数説明例Furnaceオントロジー
struct(expr1, expr2, ...)式から構造体を作成しますSELECT struct('red', 'large', 2.0)対応利用できません

日付とタイムスタンプの関数

関数説明例Furnaceオントロジー
current_timestamp()現在のタイムスタンプを返しますSELECT current_timestamp()対応利用可能
current_date()現在の日付を返しますSELECT current_date()対応利用可能
now()現在のタイムスタンプを返します(current_timestamp のエイリアス)SELECT now()対応利用できません
add_months(date, num_months)日付に月数を追加しますadd_months(order_date, 3)対応利用できません
date_add(expr, num_days)日付に日数を追加しますdate_add(order_date, 7)対応利用可能
date_format(expr, format)日付またはタイムスタンプを文字列として書式設定しますSELECT date_format(TIMESTAMP '2024-01-15 10:30:00', 'yyyy-MM-dd')対応利用可能
date_sub(expr, num_days)日付から日数を減算しますdate_sub(order_date, 7)対応利用可能
from_unixtime(expr [, format])Unix タイムスタンプをタイムスタンプに変換しますfrom_unixtime(1609459200)対応利用できません
unix_timestamp([expr] [, format])タイムスタンプを Unix タイムスタンプに変換しますunix_timestamp(current_timestamp())対応利用できません
day(date)日付から月内の日を抽出しますSELECT day(order_date) FROM table対応利用可能
hour(timestamp)タイムスタンプから時を抽出しますSELECT hour(order_timestamp) FROM table対応利用できません
minute(timestamp)タイムスタンプから分を抽出しますSELECT minute(order_timestamp) FROM table対応利用できません
month(date)日付から月を抽出しますSELECT month(order_date) FROM table対応利用可能
quarter(date)日付から四半期を抽出しますSELECT quarter(order_date) FROM table対応利用可能
second(timestamp)タイムスタンプから秒を抽出しますSELECT second(order_timestamp) FROM table対応利用できません
year(date)日付から年を抽出しますSELECT year(order_date) FROM table対応利用可能
date_trunc(unit, timestamp)タイムスタンプを指定された単位に切り詰めますSELECT date_trunc('day', current_timestamp())対応利用できません
trunc(date, fmt)日付を YEAR、QUARTER、MONTH、または WEEK の粒度に切り詰めますSELECT trunc(order_date, 'MM')対応利用できません
to_date(str [, format])文字列を日付に変換しますSELECT to_date('2024-01-15')対応利用できません
to_timestamp(expr [, format])タイムスタンプに変換しますSELECT to_timestamp('2024-01-15 10:30:00')対応利用できません
timestamp(expr)短縮形式でタイムスタンプにキャストしますSELECT timestamp('2024-01-15 10:30:00')対応利用できません
from_utc_timestamp(ts, tz)UTC タイムスタンプを指定されたタイムゾーンで解釈しますSELECT from_utc_timestamp(ts, 'America/Los_Angeles')対応利用できません
to_utc_timestamp(ts, tz)指定されたタイムゾーンのタイムスタンプを UTC に変換しますSELECT to_utc_timestamp(ts, 'America/Los_Angeles')対応利用できません
dayofmonth(date)日付から月内の日を抽出します(day のエイリアス)SELECT dayofmonth(order_date) FROM table対応利用できません
dayofweek(date)曜日を返します(1 = 日曜日、7 = 土曜日)SELECT dayofweek(order_date) FROM table対応利用できません
weekday(date)曜日を返します(0 = 月曜日、6 = 日曜日)SELECT weekday(order_date) FROM table対応利用できません
dayofyear(date)年内の通算日を返します(1~366)SELECT dayofyear(order_date) FROM table対応利用できません
weekofyear(date)ISO に基づく年内の週番号を返しますSELECT weekofyear(order_date) FROM table対応利用できません
last_day(date)日付が属する月の最終日を返しますSELECT last_day(order_date) FROM table対応利用できません
next_day(start_date, day_of_week)start_date より後で、指定された曜日に該当する最初の日付を返しますSELECT next_day(order_date, 'Mon') FROM table対応利用できません
date_diff(date1, date2)2つの日付を減算しますSELECT date_diff('2020-01-01', '2020-01-02')対応利用可能
months_between(ts1, ts2 [, roundOff])2つのタイムスタンプ間の月数を小数部分も含めて返します(roundOff が false でない限り、小数点以下8桁に丸めます)SELECT months_between('1997-02-28 10:30:00', '1996-10-30')対応利用できません
timestamp_seconds(seconds)UTC エポックからの秒数からタイムスタンプを返します(小数値も受け付けます)SELECT timestamp_seconds(1230219000)対応利用できません
timestamp_millis(millis)UTC エポックからのミリ秒数からタイムスタンプを返しますSELECT timestamp_millis(1230219000123)対応利用できません
timestamp_micros(micros)UTC エポックからのマイクロ秒数からタイムスタンプを返しますSELECT timestamp_micros(1230219000123123)対応利用できません
unix_seconds(timestamp)1970-01-01 UTC からの秒数を返します(秒より細かい部分は切り詰めます)SELECT unix_seconds(current_timestamp())対応利用できません
unix_millis(timestamp)1970-01-01 UTC からのミリ秒数を返します(ミリ秒より細かい部分は切り詰めます)SELECT unix_millis(current_timestamp())対応利用できません
unix_micros(timestamp)1970-01-01 UTC からのマイクロ秒数を返しますSELECT unix_micros(current_timestamp())対応利用できません

数学関数

関数説明例Furnaceオントロジー
abs(x)絶対値SELECT abs(-5)対応非対応ではなく対応
acos(x)逆余弦SELECT acos(0.5)対応利用できません
asin(x)逆正弦SELECT asin(0.5)対応利用できません
atan(x)逆正接SELECT atan(1)対応利用できません
atan2(y, x)y/x の逆正接SELECT atan2(1, 1)対応利用できません
cbrt(x)立方根SELECT cbrt(27)対応利用できません
ceil(x)最も近い整数へ切り上げますSELECT ceil(3.7)対応対応
ceiling(x)最も近い整数へ切り上げますSELECT ceiling(3.7)対応対応
cos(x)余弦SELECT cos(pi())対応利用できません
cosh(x)双曲線余弦SELECT cosh(0)対応利用できません
degrees(x)ラジアンを度に変換しますSELECT degrees(pi())対応利用できません
e()ネイピア数SELECT e()対応利用できません
exp(x)e の x 乗SELECT exp(1)対応利用できません
floor(x)最も近い整数へ切り下げますSELECT floor(3.7)対応対応
isnan(x)x が NaN の場合は true(null 入力の場合は false を返します)SELECT isnan(price) FROM table対応利用できません
nanvl(x, y)x が NaN でなければ x を返し、NaN の場合は y を返しますSELECT nanvl(price, 0) FROM table対応利用できません
ln(x)自然対数SELECT ln(e())対応利用できません
log(base, x)指定した底の対数SELECT log(2, 8)対応利用できません
log10(x)底が10の対数SELECT log10(100)対応利用できません
log2(x)底が2の対数SELECT log2(8)対応利用できません
mod(n, m)剰余(余り)SELECT mod(10, 3)対応対応
pi()円周率の定数SELECT pi()対応利用できません
pow(x, p)x の p 乗SELECT pow(2, 3)対応利用できません
power(x, p)x の p 乗SELECT power(2, 3)対応対応
radians(x)度をラジアンに変換しますSELECT radians(180)対応利用できません
rand([seed])0から1の間の乱数値。任意のシードは Spark では使用されますが、Trino では無視されます。SELECT rand()対応利用できません
random([seed])0から1の間の乱数値。任意のシードは Spark では使用されますが、Trino では無視されます。SELECT random()対応利用できません
round(x, d)小数点以下 d 桁に四捨五入しますSELECT round(3.7, 1)対応対応
sign(x)符号関数 (-1, 0, 1)SELECT sign(-5)対応利用できません
sin(x)正弦SELECT sin(pi() / 2)対応利用できません
sinh(x)双曲線正弦SELECT sinh(0)対応利用できません
sqrt(x)平方根SELECT sqrt(16)対応対応
tan(x)正接SELECT tan(pi() / 4)対応利用できません
tanh(x)双曲線正接SELECT tanh(0)対応利用できません
bin(x)Long 値の2進数文字列表現(負の値は64ビットの2の補数を使用します)SELECT bin(13)対応利用できません

文字列関数

関数説明例Furnaceオントロジー
chr(n)Unicode コードポイントに対応する文字を返しますSELECT chr(65)対応利用できません
char(n)コードポイントに対応する文字を返します(chr のエイリアス)SELECT char(65)対応利用できません
contains(str, substr)文字列が部分文字列を含む場合は trueSELECT contains('hello', 'ell')対応対応
concat_ws(sep, str1, ...)区切り文字を挟んで文字列を連結しますSELECT concat_ws(',', 'a', 'b')対応利用できません
concat(str1, ...)文字列を連結しますSELECT concat('a', 'b')対応対応
length(str)文字数で表した文字列の長さSELECT length('hello')対応対応
len(str)文字列の長さ(length のエイリアス)。文字列またはバイナリを受け付けますSELECT len('hello')対応利用できません
char_length(str)文字列の長さ(length のエイリアス)SELECT char_length('hello')対応対応
character_length(str)文字列の長さ(length のエイリアス)SELECT character_length('hello')対応対応
bit_length(expr)文字列またはバイナリデータのビット長(文字列の場合は UTF-8 のバイト長に8を掛けた値)SELECT bit_length('Spark SQL')対応利用できません
octet_length(expr)文字列(UTF-8)またはバイナリのバイト長SELECT octet_length('Spark SQL')対応利用できません
format_number(num, places_or_format)数値を小数点以下 N 桁に四捨五入して '#,###.##' のように書式設定するか、ユーザー指定の小数書式パターンで書式設定しますSELECT format_number(12332.123456, 4)対応利用できません
lower(str)小文字に変換しますSELECT lower('HELLO')対応対応
lcase(str)小文字に変換します(lower のエイリアス)SELECT lcase('HELLO')対応利用できません
upper(str)大文字に変換しますSELECT upper('hello')対応対応
ucase(str)大文字に変換します(upper のエイリアス)SELECT ucase('hello')対応利用できません
initcap(str)各単語の先頭の文字を大文字にしますSELECT initcap('hello world')対応利用できません
lpad(str, len, pad)指定した長さになるまで文字列の左側を埋めますSELECT lpad('hi', 5, 'x')対応利用できません
rpad(str, len, pad)指定した長さになるまで文字列の右側を埋めますSELECT rpad('hi', 5, 'x')対応利用できません
ltrim(str)先頭の空白を削除しますSELECT ltrim(' hello')対応利用できません
rtrim(str)末尾の空白を削除しますSELECT rtrim('hello ')対応利用できません
trim(str)先頭と末尾の空白を削除しますSELECT trim(' hello ')対応対応
replace(str, search, replace)一致する箇所をすべて置換しますSELECT replace('hello', 'l', 'x')対応対応
reverse(str)文字列の順序を反転します(配列にも使用できます)SELECT reverse('hello')対応利用できません
right(str, len)文字列の右端から len 文字SELECT right('hello', 3)対応利用できません
substr(str, pos, len)部分文字列を抽出しますSELECT substr('hello', 2, 3)対応対応
substring(str, pos, len)部分文字列を抽出しますSELECT substring('hello', 2, 3)対応対応
substring_index(str, delim, count)区切り文字が count 回出現する位置より前の部分文字列(負の値の場合は末尾から数えます)SELECT substring_index('a.b.c.d', '.', 2)対応利用できません
split(str, delimiter)文字列を分割して配列にしますSELECT split('a,b,c', ',')対応利用できません
split_part(str, delimiter, index)分割した文字列から指定の部分を取得します(1始まり)SELECT split_part('a,b,c', ',', 2)対応利用できません
instr(str, substr)部分文字列の位置を検索します(1始まり、見つからない場合は0)SELECT instr('hello', 'll')対応利用できません
locate(substr, str [, pos])pos から部分文字列の位置を検索します(1始まり、見つからない場合は0)SELECT locate('ll', 'hello')対応利用できません
position(substr IN str)部分文字列の位置を検索します(SQL 標準構文)SELECT position('ll' IN 'hello')対応利用できません
startswith(str, prefix)文字列が指定した接頭辞で始まるかどうかを確認しますSELECT startswith('hello', 'he')対応対応
luhn_check(str)Luhn アルゴリズムを使用して文字列を検証しますSELECT luhn_check('79927398713')対応利用できません

条件関数

関数説明例Furnaceオントロジー
coalesce(expr1, expr2, ...)null ではない最初の式を返しますSELECT coalesce(col, 'default')対応非対応ではなく対応
nullif(expr1, expr2)expr1 が expr2 と等しい場合は null を返し、それ以外の場合は expr1 を返しますSELECT 100.0 / nullif(count, 0)対応対応
if(cond, then, else)cond が true の場合は then を返し、それ以外の場合は else を返しますSELECT if(price > 100, 'high', 'low')対応対応
nvl(expr1, expr2)expr1 が null である場合は expr2 を返し、それ以外の場合は expr1 を返しますSELECT nvl(col, 'default')対応利用できません
ifnull(expr1, expr2)nvl のエイリアスですSELECT ifnull(col, 'default')対応利用できません
nvl2(expr1, expr2, expr3)expr1 が null ではない場合は expr2 を返し、それ以外の場合は expr3 を返しますSELECT nvl2(col, 'present', 'missing')対応利用できません
greatest(expr1, expr2, ...)null ではない最大の値です(すべての入力が null の場合にのみ null)SELECT greatest(a, b, c) FROM table対応対応
least(expr1, expr2, ...)null ではない最小の値です(すべての入力が null の場合にのみ null)SELECT least(a, b, c) FROM table対応対応
regexp_like(str, pattern)文字列が正規表現パターンに一致するかどうかを判定しますSELECT regexp_like('hello123', '[0-9]+')対応利用できません
regexp_extract(str, pattern)パターンに一致する最初の部分文字列を抽出しますSELECT regexp_extract('hello123', '[0-9]+')対応対応
regexp_extract_all(str, pattern)パターンに一致するすべての部分文字列を抽出しますSELECT regexp_extract_all('a1b2c3', '[0-9]+')対応利用できません
regexp_replace(str, pattern, replacement)一致するすべての部分を置換文字列に置き換えますSELECT regexp_replace('hello123', '[0-9]+', 'X')対応対応
regexp_count(str, pattern)文字列内でパターンが出現する回数を数えますSELECT regexp_count('a1b2c3', '[0-9]+')対応利用できません
rlike(str, regexp)文字列が Java の正規表現に一致する場合は true です(部分一致)SELECT rlike('hello123', '\\d+')対応利用できません
regexp(str, regexp)rlike のエイリアスですSELECT regexp('hello123', '\\d+')対応利用できません

ハッシュ関数

関数説明例Furnaceオントロジー
md5(expr)MD5 の128ビットチェックサムを小文字の16進数文字列として返しますSELECT md5('Spark')対応利用できません
sha(expr)SHA-1 ハッシュを16進数文字列として返します(sha1 のエイリアス)SELECT sha('Spark')対応利用できません
sha1(expr)SHA-1 ハッシュを16進数文字列として返しますSELECT sha1('Spark')対応利用できません
sha2(expr, bitLength)SHA-2 ハッシュです(224、256、384、または512。0は256を意味します)。ビット長が無効な場合は null を返しますSELECT sha2('Spark', 256)対応利用できません
crc32(expr)CRC32 チェックサムを BIGINT として返しますSELECT crc32('Spark')対応利用できません
xxhash64(expr)シード42の xxHash64 チェックサムを BIGINT として返しますSELECT xxhash64('Spark')対応利用できません

変換関数

関数説明例Furnaceオントロジー
cast(expr AS type)値を指定されたデータ型に変換しますcast(count() AS float)対応対応
try_cast(expr AS type)値を指定されたデータ型に変換し、失敗した場合は null を返しますtry_cast('abc' AS int)対応利用できません

集計関数

関数説明例Furnaceオントロジー
count()すべての行の件数SELECT count() FROM table対応対応
count(DISTINCT col)列内の一意の値の件数SELECT count(DISTINCT id) FROM table対応単一プロパティの場合に対応
approx_count_distinct(col)一意の値の近似件数(HyperLogLog)SELECT approx_count_distinct(id) FROM table対応利用できません
sum(col)列内の値の合計SELECT sum(cost) FROM table対応対応
avg(col)列内の値の算術平均SELECT avg(weight) FROM table対応対応
mean(col)列内の値の算術平均(avg のエイリアス)SELECT mean(weight) FROM table対応利用できません
min(col)列内の最小値SELECT min(price) FROM table対応対応
max(col)列内の最大値SELECT max(price) FROM table対応対応
min_by(x, y)y の最小値に対応する x の値SELECT min_by(name, age) FROM table対応利用できません
max_by(x, y)y の最大値に対応する x の値SELECT max_by(name, age) FROM table対応利用できません
first(col[, ignoreNulls])グループ内の最初の値(常に null 許容)SELECT first(name) FROM table GROUP BY category対応利用できません
last(col[, ignoreNulls])グループ内の最後の値(常に null 許容)SELECT last(name) FROM table GROUP BY category対応利用できません
count_if(condition)条件が true である行の件数SELECT count_if(age > 18) FROM table対応利用できません
bool_and(condition)すべての値が true の場合に trueSELECT bool_and(active) FROM table対応利用できません
bool_or(condition)いずれかの値が true の場合に trueSELECT bool_or(active) FROM table対応利用できません
bit_and(col)null 以外のすべての整数値のビット単位 ANDSELECT bit_and(flags) FROM table対応利用できません
bit_or(col)null 以外のすべての整数値のビット単位 ORSELECT bit_or(flags) FROM table対応利用できません
bit_xor(col)null 以外のすべての整数値のビット単位 XORSELECT bit_xor(flags) FROM table対応利用できません
every(condition)すべての値が true の場合に true(bool_and のエイリアス)SELECT every(active) FROM table対応利用できません
stddev(col)標本標準偏差SELECT stddev(salary) FROM table対応対応
stddev_pop(col)母集団標準偏差SELECT stddev_pop(salary) FROM table対応対応
stddev_samp(col)標本標準偏差(stddev のエイリアス)SELECT stddev_samp(salary) FROM table対応対応
variance(col)標本分散SELECT variance(salary) FROM table対応利用できません
var_pop(col)母集団分散SELECT var_pop(salary) FROM table対応利用できません
var_samp(col)標本分散SELECT var_samp(salary) FROM table対応利用できません
corr(y, x)ピアソンの相関係数SELECT corr(sales, ads) FROM table対応利用できません
covar_pop(y, x)母集団共分散SELECT covar_pop(y, x) FROM table対応利用できません
covar_samp(y, x)標本共分散SELECT covar_samp(y, x) FROM table対応利用できません
skewness(col)歪度SELECT skewness(values) FROM table対応利用できません
regr_intercept(y, x)線形回帰の切片SELECT regr_intercept(y, x) FROM table対応利用できません
regr_slope(y, x)線形回帰の傾きSELECT regr_slope(y, x) FROM table対応利用できません
grouping(col)列が集計されている場合は1、それ以外は0を返します(ROLLUP/CUBE/GROUPING SETS とともに使用)SELECT grouping(category) FROM table GROUP BY ROLLUP(category)対応利用できません
collect_set(col)列内の一意の値の配列を返しますSELECT collect_set(name) FROM table GROUP BY category対応利用できません
collect_list(col)列内のすべての値の配列を返します(重複を保持)SELECT collect_list(name) FROM table GROUP BY category対応利用できません
percentile(col, p[, freq])割合 p(スカラーまたは配列)に対する列の正確なパーセンタイルSELECT percentile(salary, 0.5) FROM table対応利用できません
percentile_approx(col, p[, accuracy])近似パーセンタイル。入力のデータ型(数値、日付、タイムスタンプ、間隔)を保持しますSELECT percentile_approx(salary, ARRAY(0.25, 0.5, 0.75)) FROM table対応利用できません
approx_percentile(col, p[, accuracy])percentile_approx のエイリアスSELECT approx_percentile(salary, 0.5) FROM table対応利用できません

ウィンドウ関数

関数説明例Furnaceオントロジー
ROW_NUMBER()パーティション内で連続した行番号を割り当てますROW_NUMBER() OVER (ORDER BY col)対応対応
RANK()同順位がある場合に欠番が生じる順位RANK() OVER (ORDER BY salary DESC)対応対応
DENSE_RANK()同順位があっても欠番が生じない順位DENSE_RANK() OVER (ORDER BY salary DESC)対応対応
PERCENT_RANK()グループ内の値の百分率順位PERCENT_RANK() OVER (ORDER BY salary)対応利用できません
CUME_DIST()値の累積分布CUME_DIST() OVER (ORDER BY salary)対応利用できません
NTILE(n)行を n 個のバケットに分割しますNTILE(4) OVER (ORDER BY salary)対応利用できません
LAG(expr[, offset[, default]])前の行の値LAG(salary, 1) OVER (ORDER BY date)対応対応
LEAD(expr[, offset[, default]])次の行の値LEAD(salary, 1) OVER (ORDER BY date)対応対応
FIRST_VALUE(expr)ウィンドウフレーム内の最初の値FIRST_VALUE(salary) OVER (ORDER BY date)対応対応
LAST_VALUE(expr)ウィンドウフレーム内の最後の値LAST_VALUE(salary) OVER (ORDER BY date)対応対応
NTH_VALUE(expr, n)ウィンドウフレーム内の n 番目の値NTH_VALUE(salary, 2) OVER (ORDER BY date)対応対応
集計関数標準の集計関数(count、sum、avg、min、max、stddev、variance など)をウィンドウ関数として使用できますSUM(amount) OVER (PARTITION BY customer_id)対応count、sum、min、max、avg のみ

ウィンドウ関数には OVER 句が必須で、PARTITION BY と ORDER BY は任意です。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -- 例 SELECT id, name, ROW_NUMBER() OVER (ORDER BY name) as row_num FROM `/path/to/table`; SELECT category, name, price, ROW_NUMBER() OVER (PARTITION BY category ORDER BY price DESC) as rank_in_category FROM `/path/to/products`; SELECT order_id, customer_id, order_date, total_amount, SUM(total_amount) OVER (PARTITION BY customer_id ORDER BY order_date) as running_total, AVG(total_amount) OVER (PARTITION BY customer_id) as customer_avg, COUNT(*) OVER (PARTITION BY customer_id) as customer_order_count FROM `/path/to/orders`; SELECT id, amount, ROW_NUMBER() OVER w as sequence_num FROM `/path/to/transactions` WINDOW w AS (PARTITION BY customer_id ORDER BY transaction_date);

JSON 関数

関数説明例Furnaceオントロジー
get_json_object(json_str, path)JSONPath 式を使用して JSON 文字列から値を抽出しますSELECT get_json_object('{"a":1}', '$.a')対応非対応
json_array_length(json_str)JSON 配列の要素数を返しますSELECT json_array_length('[1,2,3]')対応非対応
json_object_keys(json_str)JSON オブジェクトのキーを配列として返しますSELECT json_object_keys('{"a":1,"b":2}')対応非対応
to_json(expr)構造体またはマップを JSON 文字列に変換しますSELECT to_json(map('a', 1))対応非対応

その他の関数

関数説明例Furnaceオントロジー
zorder()Iceberg の Z-order 最適化(Iceberg のみ)CALL zorder('table', 'col1,col2')対応非対応
typeof(expr)式の実行時のデータ型名を返しますSELECT typeof(price) FROM table対応非対応

地理空間関数

関数説明例Furnaceオントロジー
st_point(x, y)X、Y 座標からポイントジオメトリを作成しますSELECT st_point(-122.4, 37.8)対応非対応
st_contains(geom1, geom2)geom1 が geom2 を含む場合に true を返しますWHERE st_contains(boundary, location)対応非対応
st_equals(geom1, geom2)ジオメトリが空間的に等しい場合に true を返しますSELECT st_equals(point1, point2)対応非対応
st_geomfromgeojson(json)GeoJSON 文字列からジオメトリを作成しますSELECT st_geomfromgeojson('{"type":"Point","coordinates":[0,0]}')対応非対応
st_astext(geom)ジオメトリを Well-Known Text (WKT) 文字列として返しますSELECT st_astext(st_point(0, 0))対応非対応
st_h3cellids(geom, level, fullCover)ジオメトリを覆う H3 セルの配列を返しますSELECT st_h3cellids(st_point(0, 0), 8, true)対応非対応

ジオメトリ列は直接返せません。st_astext() を使用して WKT 形式に変換してください。

算術演算子

演算子説明例Furnaceオントロジー
+加算SELECT count() + 5対応対応
-減算SELECT count() - 1対応対応
*乗算SELECT sum(weight * 2)対応対応
/除算SELECT (avg(a) + avg(b)) / 2対応対応

ブール演算子

演算子説明例Furnaceオントロジー
=等しいWHERE id = 1対応対応
<>, !=等しくないWHERE status <> 'inactive'対応対応
<より小さいWHERE age < 18対応対応
<=以下WHERE price <= 100.0対応対応
>より大きいWHERE salary > 50000対応対応
>=以上WHERE score >= 90対応対応
AND論理積WHERE active = true AND verified = true対応対応
OR論理和WHERE status = 'new' OR status = 'pending'対応対応
NOT論理否定WHERE NOT deleted対応対応
INリスト内の値WHERE category IN ('A', 'B', 'C')対応対応
LIKEパターンマッチングWHERE name LIKE 'John%'対応対応
RLIKE, REGEXPJava 正規表現の部分一致。NOT RLIKE で否定できますWHERE name RLIKE '^[A-Z].*'対応非対応
EXISTSサブクエリが行を返す場合に trueWHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id)対応対応

その他の式

式説明例Furnaceオントロジー
CASE ... WHEN分岐式SELECT CASE WHEN mark >= 70 THEN 'A' WHEN mark >= 60 THEN 'B' ELSE 'C' END対応対応
INTERVAL時間間隔リテラルSELECT order_date + INTERVAL 30 DAY, WHERE created_at > current_timestamp() - INTERVAL 1 HOUR対応非対応

Ontology SQL は IF(condition, trueValue, falseValue) 関数に対応していません。代わりに CASE WHEN condition THEN trueValue ELSE falseValue END を使用してください。

Case-when 文

Copied!
1 2 3 4 CASE WHEN condition THEN result [WHEN condition THEN result] [ELSE result] END

日付/時刻の間隔

Copied!
1 2 3 4 5 6 7 8 9 10 11 INTERVAL { yearMonthIntervalQualifier | dayTimeIntervalQualifier } yearMonthIntervalQualifier { YEAR [TO MONTH] | MONTH } dayTimeIntervalQualifier { DAY [TO { HOUR | MINUTE | SECOND } ] | HOUR [TO { MINUTE | SECOND } ] | MINUTE [TO SECOND] | SECOND }
Copied!
1 2 3 4 5 -- 例 INTERVAL '1' YEAR INTERVAL '6' MONTH INTERVAL '25' DAY INTERVAL '6' YEAR TO MONTH

データ型

データ型Spark の対応するデータ型Furnaceオントロジー
BOOLEANBOOLEAN対応対応
SHORTSHORT対応対応
INTINT対応対応
LONGLONG対応対応
FLOATFLOAT対応対応
DOUBLEDOUBLE対応対応
DATEDATE対応対応
TIMESTAMPTIMESTAMP対応対応
TIMESTAMP_NTZTIMESTAMP_NTZ対応対応
STRINGSTRING対応対応
BINARYBINARY対応非対応
DECIMALDECIMAL対応対応
MAP<key, value>MAP<key, value>対応非対応
ARRAY<element_type>ARRAY<element_type>対応対応
STRUCT<field1_name: field1_type, field2_name: field2_type, …>STRUCT<field1_name: field1_type, field2_name: field2_type, …>対応対応
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE `/path/to/table` ( col1 BOOLEAN, col2 SHORT, col3 INT, col4 LONG, col5 FLOAT, col6 DOUBLE, col7 DATE, col8 TIMESTAMP, col9 TIMESTAMP_NTZ, col10 STRING, col11 BINARY, col12 DECIMAL(10, 2), col13 MAP<STRING, STRING>, col14 ARRAY<STRING>, col15 STRUCT<col1: STRING, col2: STRING> );