CREATE INTERACTIVE TABLE¶
現在または指定のスキーマに新しいインタラクティブテーブルを作成するか、既存のテーブルを置き換えます。インタラクティブテーブルは、低レイテンシのインタラクティブなクエリ用に最適化されており、インタラクティブウェアハウスを使用してクエリを実行した場合に最高のパフォーマンスを提供します。
インタラクティブテーブルは、サポートする SQL 操作が標準のテーブルよりも限定されています。また、ダッシュボードやデータ駆動型 APIs など、同時実行性の高いリアルタイムクエリワークロード用に設計されています。
注釈
インタラクティブテーブルを作成するときは、最も時間的制約のあるクエリの WHERE 句で使用される1つ以上の列に対する CLUSTER BY 句を定義する必要があります。
次の CREATE INTERACTIVE TABLE バリアントを使用することもできます。
バリアント構文:静的インタラクティブテーブル (クエリから入力された静的インタラクティブテーブルを作成)
バリアント構文:動的インタラクティブテーブル (自動更新付きの動的インタラクティブテーブルを作成)
標準的なSnowflakeテーブルに使用される完全な CREATE TABLE 構文については、 CREATE TABLE をご参照ください。
Tip
インタラクティブテーブルを作成して使用する前に、 制限事項とユースケース についてよく理解しておく必要があります。インタラクティブテーブルは、選択的 WHERE 句を含むシンプルな SELECT ステートメントで最適に機能します。
- こちらもご参照ください。
CREATE WAREHOUSE、 ALTER WAREHOUSE、 SHOW TABLES、 SHOW WAREHOUSES、 DROP TABLE
構文¶
CREATE [ OR REPLACE ] INTERACTIVE TABLE [ IF NOT EXISTS ] <table_name>
CLUSTER BY ( <expr> [ , <expr> , ... ] )
[ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
[ WAREHOUSE = <warehouse_name> ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
AS <query>
必須パラメーター¶
table_nameインタラクティブテーブルの識別子(つまり、名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれている場合を除き、スペースや特殊文字を含めることはできません(例:
"My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
CLUSTER BY ( expr [ , expr , ... ] )必須です。 テーブル内の1つ以上の列または列式をクラスタリングキーとして指定します。最も時間的制約のあるクエリの WHERE 句で使用するクラスタリング列を選択します。これがクエリのパフォーマンスに大きな影響を与えるためです。
有効なクラスタリングキーの選択の詳細については、 クラスタリングキーとクラスタ化されたテーブル をご参照ください。
AS query必須です。 インタラクティブテーブルを入力する SELECT ステートメント を指定します。このクエリは、含まれている他のパラメーターに関係なく、CREATE INTERACTIVE TABLE ステートメントの最後で指定する必要があります
クエリは、CREATE TABLE AS SELECT(CTAS)パターンに従い、インタラクティブテーブルのデータとスキーマを定義します。
オプションのパラメーター¶
OR REPLACEスキーマに既にインタラクティブテーブルがある場合、それを置き換えることを指定します。これは、既存のテーブルで DROP TABLE を使用してから、同じ名前で新しいテーブルを作成することと同じです。
IF NOT EXISTSスキーマにインタラクティブテーブルがまだ存在しない場合にのみ作成するように指定します。同じ名前のテーブルが既に存在する場合、ステートメントは新しいテーブルを作成せずに成功します。
注釈
OR REPLACE 句と IF NOT EXISTS 句は相互に排他的であり、同じステートメントで両方を使用することはできません。
TARGET_LAG = 'num { seconds | minutes | hours | days }'インタラクティブテーブルの自動更新の最大ラグタイムを指定します。指定すると、インタラクティブテーブルは動的インタラクティブテーブルになり、ソースデータの指定されたラグタイム内にとどまるように自動的にリフレッシュされます。
最小値は60秒(1分)です。
単位が指定されていない場合、数値は秒を表します。
TARGET_LAG が指定されていない場合、テーブルは静的インタラクティブテーブルとして作成されます。
TARGET_LAG を指定する場合は、WAREHOUSE パラメーターも必要です。
WAREHOUSE = warehouse_nameTARGET_LAG が指定されている場合に必須です。 TARGET_LAG が設定されている場合にリフレッシュ操作に使用される標準ウェアハウスを指定します。これはインタラクティブウェアハウスではなく、標準ウェアハウスである必要があります。
COPY GRANTSCREATE OR REPLACE INTERACTIVE TABLE を使用してインタラクティブテーブルを置き換えるときに、元のテーブルからのアクセス権限を保持することを指定します
このパラメーターは、既存のテーブルから新しいテーブルに OWNERSHIP を除くすべての権限をコピーします。デフォルトでは、 CREATE INTERACTIVE TABLE ステートメントを実行するロールが新しいテーブルを所有します。
COMMENT = 'string_literal'インタラクティブテーブルのコメントを指定します。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
|---|---|---|
CREATE INTERACTIVE TABLE |
スキーマ |
スキーマにインタラクティブテーブルを作成するために必要です。 |
SELECT |
テーブル、外部テーブル、ビュー |
AS SELECT 句でクエリされるテーブルやビューについて必要です。 |
USAGE |
データベース、スキーマ |
インタラクティブテーブルを含むデータベースとスキーマについて必要です。 |
USAGE |
ウェアハウス |
WAREHOUSE パラメーターで指定されたウェアハウスについて必要です(TARGET_LAG を使用する場合)。 |
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
インタラクティブテーブルは、インタラクティブウェアハウスではなく、標準ウェアハウスを使用して作成する必要があります。
CLUSTER BY 句はすべてのインタラクティブテーブルについて必要であり、クエリのパフォーマンスに大きな影響を与えます。最も一般的な WHERE 句パターンに基づいて、クラスタリング列を慎重に選択します。
インタラクティブテーブルは、インタラクティブウェアハウス通じてクエリするときに最高のパフォーマンスを提供します。インタラクティブテーブルのパフォーマンスを最適化するには、次を実行します。
インタラクティブウェアハウスを作成します
ALTER WAREHOUSE ... ADD TABLES を使用して、インタラクティブテーブルをインタラクティブウェアハウスに関連付けます
インタラクティブウェアハウスを再開します
インタラクティブウェアハウスを使用してインタラクティブテーブルをクエリします
インタラクティブテーブルでサポートする SQL 操作のセットは、標準テーブルと比較して、限定されています。
WHERE 句を含む SELECT ステートメントは最適化されています。
シンプルな GROUP BY 操作はサポートされています。
DML 操作(INSERT、UPDATE、DELETE)はサポートされていません。DML 操作は INSERT OVERWRITE のみが許可されています。
複雑なクエリ操作は、パフォーマンスの向上が限定される場合があります。
動的インタラクティブテーブル(TARGET_LAG を使用)は、指定された標準ウェアハウスを使用して自動的に更新されます。ラグタイムは、データの鮮度とコンピューティングコストのバランスを取ります。
静的インタラクティブテーブルは、ソーステーブルの新しいデータで更新するために手動リフレッシュを行う必要があります。
インタラクティブテーブルには、クエリを高速化するために追加のメタデータとインデックス情報が格納されますが、これは圧縮されているため、ストレージサイズへの影響は最小限に抑えられます。
バリアント構文:静的インタラクティブテーブル¶
ソースクエリから一度だけ入力される、静的インタラクティブテーブルを作成します。
CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
CLUSTER BY ( <expr> [ , <expr> , ... ] )
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
AS <query>
静的インタラクティブテーブルは自動的にリフレッシュされず、ソースデータの変更を反映するためには手動でリフレッシュする必要があります。
バリアント構文:動的インタラクティブテーブル¶
指定されたラグタイムに基づいて自動的にリフレッシュされる動的インタラクティブテーブルを作成します。
CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
CLUSTER BY ( <expr> [ , <expr> , ... ] )
TARGET_LAG = '<num> { seconds | minutes | hours | days }'
WAREHOUSE = <warehouse_name>
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
AS <query>
動的インタラクティブテーブルは、リフレッシュ操作のために指定された標準ウェアハウスを使用して、ソースデータの指定された TARGET_LAG 内に収まるように自動的にリフレッシュされます。
例¶
次の例は、インタラクティブテーブルを作成するさまざまな方法と、データのソースの指定およびデータの更新方法を示します。
基本的な静的インタラクティブテーブル¶
既存の注文データから静的インタラクティブテーブルを作成し、最適なクエリパフォーマンスのためにカスタマーと日付でクラスタリングします。
CREATE INTERACTIVE TABLE orders_interactive
CLUSTER BY (customer_id, order_date)
COMMENT = 'Interactive table for real-time order analytics'
AS
SELECT customer_id, order_date, product_id, quantity, total_amount
FROM orders_staging
WHERE order_date >= '2024-01-01';
自動更新付きの動的インタラクティブテーブル¶
ほぼリアルタイムの売上概要を提供するために、5分ごとにリフレッシュする動的インタラクティブテーブルを作成します。
CREATE INTERACTIVE TABLE sales_summary_interactive
CLUSTER BY (region, product_category)
TARGET_LAG = '5 minutes'
WAREHOUSE = refresh_warehouse
COMMENT = 'Real-time sales dashboard data'
AS
SELECT
region,
product_category,
SUM(sales_amount) as total_sales,
COUNT(*) as transaction_count,
AVG(sales_amount) as avg_sale
FROM sales_data
GROUP BY region, product_category;
複雑なクエリのための複数列クラスタリング¶
さまざまなクエリパターン用に最適化された複数列のクラスタリングを持つインタラクティブテーブルを作成します。
CREATE INTERACTIVE TABLE customer_analytics_interactive
CLUSTER BY (customer_tier, region, signup_date)
TARGET_LAG = '10 minutes'
WAREHOUSE = analytics_warehouse
AS
SELECT
customer_id,
customer_tier,
region,
signup_date,
total_orders,
lifetime_value,
last_order_date
FROM customer_metrics
WHERE customer_tier IN ('GOLD', 'PLATINUM', 'DIAMOND');
既存のインタラクティブテーブルの置き換え¶
既存のインタラクティブテーブルを更新されたクラスタリングとリフレッシュ設定に置き換えます。
CREATE OR REPLACE INTERACTIVE TABLE product_performance_interactive
CLUSTER BY (category, brand, launch_date)
TARGET_LAG = '2 minutes'
WAREHOUSE = fast_refresh_warehouse
COPY GRANTS
AS
SELECT
product_id,
category,
brand,
launch_date,
units_sold,
revenue,
customer_rating
FROM product_sales_view
WHERE launch_date >= DATEADD('month', -6, CURRENT_DATE());