注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
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;
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 になります。有効なテーブル形式は次のとおりです。
icebergparquetavroCopied!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!1DELETE 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 内のすべての文は、単一のジョブでまとめて実行されます。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_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_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 3SELECT 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_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 ヒントは、クエリエンジンに追加の指示を与えます。ヒントは次の構文で指定します。
/*+ hint1, hint2(opts...) */
現在、次のヒントに対応しています。
adhoc:1回限りの書き込みを実行し、アクティブな定義を変更せずに、追加の SQL 定義として保持します。Copied!1 2/*+ adhoc */ CREATE OR REPLACE TABLE `/path/to/table` AS SELECT * FROM `/path/to/source`;
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 2SHOW 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) | 文字列が部分文字列を含む場合は true | SELECT 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 の場合に true | SELECT bool_and(active) FROM table | 対応 | 利用できません |
bool_or(condition) | いずれかの値が true の場合に true | SELECT bool_or(active) FROM table | 対応 | 利用できません |
bit_and(col) | null 以外のすべての整数値のビット単位 AND | SELECT bit_and(flags) FROM table | 対応 | 利用できません |
bit_or(col) | null 以外のすべての整数値のビット単位 OR | SELECT bit_or(flags) FROM table | 対応 | 利用できません |
bit_xor(col) | null 以外のすべての整数値のビット単位 XOR | SELECT 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);
| 関数 | 説明 | 例 | 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, REGEXP | Java 正規表現の部分一致。NOT RLIKE で否定できます | WHERE name RLIKE '^[A-Z].*' | 対応 | 非対応 |
EXISTS | サブクエリが行を返す場合に true | WHERE 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 を使用してください。
Copied!1 2 3 4CASE WHEN condition THEN result [WHEN condition THEN result] [ELSE result] END
Copied!1 2 3 4 5 6 7 8 9 10 11INTERVAL { 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 | オントロジー |
|---|---|---|---|
BOOLEAN | BOOLEAN | 対応 | 対応 |
SHORT | SHORT | 対応 | 対応 |
INT | INT | 対応 | 対応 |
LONG | LONG | 対応 | 対応 |
FLOAT | FLOAT | 対応 | 対応 |
DOUBLE | DOUBLE | 対応 | 対応 |
DATE | DATE | 対応 | 対応 |
TIMESTAMP | TIMESTAMP | 対応 | 対応 |
TIMESTAMP_NTZ | TIMESTAMP_NTZ | 対応 | 対応 |
STRING | STRING | 対応 | 対応 |
BINARY | BINARY | 対応 | 非対応 |
DECIMAL | DECIMAL | 対応 | 対応 |
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 17CREATE 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> );