クラスター化列ストア テーブルが Azure SQL Data Warehouse の新しい既定値に

このポストは、11 月 30 日に投稿された Clustered Columnstore Tables are the New Default in Azure SQL Data Warehouse の翻訳です。

クラスター化列ストア インデックスは、Azure SQL Data Warehouse のデータを格納するうえで最も効率的な方法です。クラスター化列ストア インデックスが設定されたテーブルにデータを格納することで、クエリを最速で実行できるほか、データ圧縮率を最大限に向上できるため、ストレージ コストも抑制できます。今回、この最新のテクノロジをデータに適用するために、クラスター化列ストア インデックスが新たに Azure SQL Data Warehouse のテーブルの既定値に設定されました。

この変更により、CREATE TABLE (英語) および CREATE TABLE AS SELECT (英語) の構文が一部変更されます。今後は以下の例のようにクラスター化列ストア テーブルを作成します。

 CREATE TABLE myClusteredColumnstoreTable 
  (
    id int NOT NULL,
    lastName varchar(20),
    zipCode varchar(6)
  )
WITH
  ( 
    DISTRIBUTION = HASH (id)
  );

以前の既定値であるヒープ テーブルを作成する場合は、WITH 句に HEAP を追加します。たとえば、以下の DDL ではヒープ テーブルが作成されます。

 CREATE TABLE myHeapTable 
  (
    id int NOT NULL,
    lastName varchar(20),
    zipCode varchar(6)
  )
WITH
  ( 
    DISTRIBUTION = HASH (id), 
    HEAP
  );

データベースに含まれるテーブルの種類を確認する場合は、以下のクエリを実行します。

 SELECT
    a.name as schema_name, 
    b.name as table_name,
    c.type_desc as table_type,
    c.name as index_name
FROM
    sys.schemas a
    INNER JOIN sys.tables b
        ON a.schema_id = b.schema_id
    INNER JOIN sys.indexes c
        ON b.object_id = c.object_id
ORDER BY
    1, 2;

ヒープ テーブルをクラスター化列ストア テーブルに変換するには、CREATE CLUSTERED COLUMNSTORE INDEX を使用します。

 CREATE CLUSTERED COLUMNSTORE INDEX cciIndex ON myHeapTable;

クラスター化列ストア テーブルをヒープ テーブルに変換するには、DROP INDEX を使用します。

 DROP INDEX cciIndex ON myHeapTable;

今回の変更により、以下のような若干の影響が生じる可能性があります。

  1. 、データを迅速に読み込み、永続テーブルに移動することを主な目的として読み込み用のステージング テーブルを作成する場合には、ヒープ テーブルの方が適している場合があります。
  2. ヒープ テーブルでセカンダリ インデックスの利用を自動化している場合、クラスター化列ストア テーブルではセカンダリ インデックスがまだサポートされていないため、DDL に HEAP キーワードを追加することをお勧めします。