Trino (Presto) とは
- Presto:Hive クエリ処理の遅さを解決するために Facebook で開発された OSS
- Trino:Presto から名称変更
Hive と Trino の違い
アーキテクチャ
Quely Language
Trino SQL
予約語と同じ名前のフィールドにアクセス
例えば ORDER BY
句で使う order
という名前のフィールドが data
に含まれる場合:
SELECT
data."order"
FROM
db.my_table
値の操作
別の型にキャスト
SELECT
*
FROM
db.my_table
ORDER BY
CAST(sales_priority AS INTEGER)
この書き方だと、整数型にキャストしたいフィールドに null や数字以外の文字列が含まれている場合、エラーになる。
エラーを避け、このような場合に null を返すには TRY_CAST
を使う:
TRY_CAST(sales_priority AS INTEGER)
配列操作
配列の長さ
SELECT
cardinality(my_array)
FROM
db.my_table
配列を flatten
SELECT
r.record_id
FROM
db.my_table
CROSS JOIN UNNEST(records) AS r
複数の配列型フィールド records
, records2
があり、
records
とrecords2
の長さが同じrecords
とrecords2
の要素のフィールド名が重複しない という条件を満たす時、複数の配列をまとめて flatten できる。
SELECT
r.record_id,
r.record2_id
FROM
db.my_table
CROSS JOIN UNNEST(records, records2) AS r
集約関数
GROUP BY
句でまとめたレコードに対する集約関数。
COUNT
指定したフィールドの件数を集計。DISTINCT
をつけることで重複を排除して集計。
SELECT
category,
COUNT(record_id),
COUNT(DISTINCT record_id) -- 値の重複を排除して集計する場合
FROM
db.my_table
GROUP BY
category
ARRAY_AGG
指定したフィールドを配列として取得。
ORDER BY
句でソート済み配列にできるDISTINCT
で重複を除いて配列にできる
SELECT
category,
COUNT(record_id),
COUNT(record_id ORDER BY record_id), -- ソート済み配列として取得
COUNT(DISTINCT record_id ORDER BY record_id) -- ソート済み重複なし配列として取得
FROM
db.my_table
GROUP BY
category