ハイブリッドテーブルを作成する

このトピックでは、Snowflakeで ハイブリッドテーブル を作成する概要について説明します。

ハイブリッドテーブルの作成

ハイブリッドテーブルは、 SQL コマンドを使用して次のいずれかの方法で作成できます。

-- Create hybrid table
CREATE OR REPLACE HYBRID TABLE icecream (
  id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1,
  col1 VARCHAR NOT NULL,
  col2 VARCHAR NOT NULL
);

-- Insert data into hybrid table
INSERT INTO icecream VALUES(1, 'A1', 'B1');
INSERT INTO icecream VALUES(2, 'A2', 'B2');
INSERT INTO icecream VALUES(3, 'A3', 'B3');
INSERT INTO icecream VALUES(4, 'A4', 'B4');

-- Update data in hybrid table
UPDATE icecream SET col2 = 'B3-updated' WHERE id = 3;

-- Delete data from hybrid table
DELETE FROM icecream WHERE id = 4;

-- Select data from hybrid table
SELECT * FROM icecream;
Copy
  • バリアント構文 CREATE HYBRID TABLE ... AS SELECT および CREATE HYBRID TABLE ... LIKE を使用します。 CREATE HYBRID TABLE をご参照ください。例:

CREATE OR REPLACE HYBRID TABLE table1 (
  employee_id INT PRIMARY KEY,
  department_id VARCHAR(200)
) as
SELECT * FROM table2;
Copy

データのロード

注釈

ハイブリッドテーブルを作成するには、セッションの現在のウェアハウスとして指定された実行中のウェアハウスが必要です。ハイブリッドテーブルの作成時に実行中のウェアハウスが指定されていないと、エラーが発生する場合があります。詳細については、 ウェアハウスでの作業 をご参照ください。

データステージまたは他のテーブルからコピーすることによって(つまり、CREATE TABLE ... AS SELECT、 COPY、または INSERT INTO ... SELECT を使用)、ハイブリッドテーブルにデータを一括ロードできますが、 CREATE TABLE ... AS SELECT ステートメントを使用してハイブリッドテーブルにデータを一括ロードすることを強くお勧めします。一括ロードはパフォーマンスが最適化されており、数百万件の記録をロードする多くの場合において、他のオプションよりも CREATE TABLE ... AS SELECT 操作が約10倍高速になります。

INSERT または COPY を介した一括ロードもサポートされていますが、大量のデータの場合はデータのロードが遅くなります。大規模なデータセットをロードする場合、長い待ち時間やタイムアウトが発生する可能性があります。最近ロードされたデータに対するクエリも遅くなります。近い将来、 COPY などの DML ステートメントの一括ロード最適化が計画されています。

注意

CREATE TABLE ...AS SELECT は外部キー制約をサポートしていません。ハイブリッドテーブルで外部キー制約を使用する必要がある場合は、 COPY または INSERT INTO ... SELECT などの別のオプションを使用する必要があります。

ソースデータがSnowflakeテーブルではなく外部ステージに存在する場合は、 COPY FROM @stage/data.csv ではなく CREATE TABLE ... AS SELECT * FROM @stage/data.csv を使用することで、より効率的なロード方法を活用できます。

CREATE TABLE ... AS SELECT を 使用しない 場合は、1分あたり最大約100万件の記録をロードできます。ただし、この近似値はテーブルの構造(記録のサイズなどで、記録が大きいほどロードが遅くなります)に依存することに注意してください。ロード操作に時間がかかりすぎて失敗する場合は、より小さなデータセットでテストするか、ロードをより小さなチャンクに分割してください。

注釈

Snowflakeテーブルにデータをロードする他の方法(Snowpipeなど)は、現在サポートされていません。

ハイブリッドテーブルにインデックスを追加する

ハイブリッドテーブルの作成時に、すべてのキー、インデックス、制約を定義できます。例:

CREATE OR REPLACE HYBRID TABLE targethybridtable (
  col1 VARCHAR(32) PRIMARY KEY,
  col2 NUMBER(38,0) UNIQUE,
  col3  NUMBER(38,0),
    INDEX index_col3 (col3))
AS
  (SELECT
     col1,
     col2,
     col3
   FROM sourcetable);
Copy

既存のハイブリッドテーブルにインデックスを追加する場合は、ハイブリッドテーブルを再作成することをお勧めします。

オプションとして、 CREATE INDEX を使用して既存のハイブリッドテーブルにインデックスを作成できます。ワークロードに使用されている既存のハイブリッドテーブルにインデックスを追加する場合は、 CREATE INDEX を使用します。CREATE INDEX を使用すると、操作中にテーブルがロックされることなく、同時にインデックスを作成できます。

ハイブリッドテーブルには一意の主キーが必要です。ハイブリッドテーブルのデータは、この主キーによって順序付けられます。主キー以外の属性にセカンダリインデックスを追加して、その属性に沿った検索を高速化できます。インデックスを =>>=<<=IN 述語に活用することで、スキャンする記録数を削減できます。

注意

セカンダリインデックスを追加するには、ハイブリッドテーブルに SELECT 権限を付与されたロールを使用する必要があります。ハイブリッドテーブルのデータのビューにはアクセスでき、テーブル自体にはアクセスできない場合、セカンダリインデックスを追加できません。

特定の属性または複合属性グループに対する述語を含む一般的な繰り返しクエリがある場合は、パフォーマンスを向上させるために、その属性または属性グループにインデックスを追加することを検討してください。ただし、インデックスを使用する場合は次の点に注意してください。

  • インデックス内のデータのサブセットの追加コピーを保存すると、ストレージ消費量が増加します。

  • インデックスが同期的に維持されるため、 DMLs にオーバーヘッドが追加されます。