[アップデート] Amazon RedshiftがMERGE、ROLLUP、CUBE、GROUPING SETS等、SQL 機能の拡張をサポートしました!(Preview) #reinvent
データアナリティクス事業本部のコンサルティングチームの石川です。Amazon Redshiftは、MERGE、ROLLUP、CUBE、GROUPING SETS等、SQL 機能の拡張をサポートしました!本日は、Previewでの各新機能について解説します。
SQL 機能の拡張の概要
MERGE、ROLLUP、CUBE、GROUPING SETSを新たにサポートすることによって、多次元分析アプリケーションの構築と、急速に変化するデータ追加が簡素化されます。
また、JSON および PARQUET ソース ファイルからネストされたデータを取り込むときに、より大きな半構造化データ サイズ (最大 16 MB) のサポートを拡張するようになりました。他のデータ ウェアハウス システムから Amazon Redshift に移行する場合のコード変換作業が軽減され、パフォーマンスが向上します。
これらのPreview新機能をお試しになるためには
Provisioned Clusterでお試しになるには、画面上部の[Create preview cluster]ボタンから作成画面に遷移します。
Prewiew trackは、preview_2022
を選択します。
MERGEの解説
構文
MERGE INTO target_table USING source_table [ [ AS ] alias ] ON match_condition WHEN MATCHED THEN { UPDATE SET col_name = { expr } [,...] | DELETE } WHEN NOT MATCHED THEN INSERT [ ( col_name [,...] ) ] VALUES ( { expr } [, ...] )
MERGEの実行例
主キー列に重複する値がある場合、MERGE は重複する値を削除できます。MERGE ステートメントの前に、target_table に 101 の ID 値を持つ 2 つの異なる行がありますが、名前の値は異なります。MERGE ステートメントの後、ID が 101 の行が 1 つだけ残ります。
dev=# CREATE TABLE target (id INT, name CHAR(10), PRIMARY KEY(id)); CREATE TABLE dev=# CREATE TABLE source (id INT, name CHAR(10)); CREATE TABLE dev=# INSERT INTO target VALUES (101, 'Bob'), (101, 'John'), (102, 'Susan'); INSERT 0 3 dev=# INSERT INTO source VALUES (101, 'Tony'), (103, 'Alice'); INSERT 0 2 dev=# MERGE INTO target USING source ON target.id = source.id WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name); INSERT 0 2 dev=# SELECT * FROM target; id | name -----+------------ 101 | Tony 102 | Susan 103 | Alice (3 rows)
その他
執筆時点(2022/11/29)では、ROLLUP、CUBE、GROUPING SETSのマニュアルなどがありませんでした。Aggregation extensions (preview)に記載があると教えてもらいました。改めて解説します。
速報ありがとうございます!
CUBE, ROLLUPなどのドキュメンテーションはこちらご参照ください!https://t.co/kZpiHe2Lui— J.Ozono (@jostandard) November 29, 2022
最後に
多次元分析アプリケーションの構築や、トランザクションとUPSERTなしにシンプルにデータの更新追加が可能になるMERGEを紹介しました。ROLLUP、CUBE、GROUPING SETSなど、気になる機能もありますので、後日解説します!