CREATE TABLE (Azure Synapse Analytics)

適用対象: はいAzure Synapse Analytics はいParallel Data Warehouse

Azure Synapse Analytics または Analytics Platform System (PDW) で新しいテーブルを作成します。

テーブルについて、またテーブルの使用方法について理解するには、Azure Synapse Analytics のテーブルに関するページを参照してください。

注意

この記事の Azure Synapse Analytics に関する解説は、特に記載のない限り、Azure Synapse Analytics と Analytics Platform System (PDW) の両方に適用されます。

注意

Azure Synapse Analytics のサーバーレス SQL プールでは、外部 および 一時テーブルのみがサポートされます。

記事リンク アイコン Transact-SQL 構文表記規則

構文

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[;]  

<column_options> ::=
    [ COLLATE Windows_collation_name ]
    [ NULL | NOT NULL ] -- default is NULL
    [ IDENTITY [ ( seed, increment ) ]
    [ <column_constraint> ]

<column_constraint>::=
    {
        DEFAULT constant_expression
        | PRIMARY KEY NONCLUSTERED NOT ENFORCED -- Applies to Azure Synapse Analytics only
        | UNIQUE NOT ENFORCED -- Applies to Azure Synapse Analytics only
    }

<table_option> ::=
    {
       CLUSTERED COLUMNSTORE INDEX -- default for Azure Synapse Analytics 
      | CLUSTERED COLUMNSTORE INDEX ORDER (column [,...n])  
      | HEAP --default for Parallel Data Warehouse
      | CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
    }  
    {
        DISTRIBUTION = HASH ( distribution_column_name )
      | DISTRIBUTION = ROUND_ROBIN -- default for Azure Synapse Analytics
      | DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
    }
    | PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT  
        FOR VALUES ( [ boundary_value [,...n] ] ) )

<data type> ::=
      datetimeoffset [ ( n ) ]  
    | datetime2 [ ( n ) ]  
    | datetime  
    | smalldatetime  
    | date  
    | time [ ( n ) ]  
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | money  
    | smallmoney  
    | bigint  
    | int   
    | smallint  
    | tinyint  
    | bit  
    | nvarchar [ ( n | max ) ]  -- max applies only to Azure Synapse Analytics 
    | nchar [ ( n ) ]  
    | varchar [ ( n | max )  ] -- max applies only to Azure Synapse Analytics  
    | char [ ( n ) ]  
    | varbinary [ ( n | max ) ] -- max applies only to Azure Synapse Analytics  
    | binary [ ( n ) ]  
    | uniqueidentifier  

引数

database_name
新しいテーブルを格納するデータベースの名前です。 既定値は現在のデータベースです。

schema_name
テーブルのスキーマです。 "スキーマ" の指定は省略可能です。 空白の場合は、既定のスキーマが使用されます。

table_name
新しいテーブルの名前です。 ローカルの一時テーブルを作成するには、テーブル名の先頭に # を付けます。 一時テーブルの説明とガイダンスについては、Azure Synapse Analytics の一時テーブルに関するページを参照してください。

column_name
テーブルの列の名前です。

列のオプション

COLLATE Windows_collation_name
式の照合順序を指定します。 SQL Server でサポートされている Windows 照合順序のいずれかを指定する必要があります。 SQL Server でサポートされている Windows 照合順序の一覧については、「Windows 照合順序名 (Transact-SQL)」を参照してください。

NULL | NOT NULL
列で NULL 値を許可するかどうかを指定します。 既定では、 NULLです。

[ CONSTRAINT constraint_name ] DEFAULT constant_expression
列の既定値を指定します。

引数 説明
constraint_name (省略可能) 制約の名前です。 制約名は、データベース内で一意です。 名前は、他のデータベース内で再利用できます。
constant_expression 列の既定値です。 式は、リテラル値または定数である必要があります。 たとえば、'CA'4 などの定数式は許可されます。 2+3CURRENT_TIMESTAMP などの定数式は許可されません。

テーブル構造のオプション

テーブルの種類を選択する方法の詳細については、Azure Synapse Analytics でのテーブルのインデックス作成に関するページを参照してください。

CLUSTERED COLUMNSTORE INDEX

クラスター化列ストア インデックスとしてテーブルを格納します。 クラスター化列ストア インデックスは、テーブルのすべてのデータに適用されます。 この動作は Azure Synapse Analytics の既定の動作です。

HEAP テーブルをヒープとして格納します。 この動作は Analytics Platform System (PDW) の既定の動作です。

CLUSTERED INDEX ( index_column_name [ ,...n ] )
1 つまたは複数のキー列を含むクラスター化インデックスとしてテーブルを格納します。 この動作は、行によってデータを格納します。 index_column_name を使用して、インデックスに 1 つまたは複数のキー列の名前を指定します。 詳細については、「全般的な解説」の「行ストア テーブル」を参照してください。

LOCATION = USER_DB このオプションは非推奨です。 この構文は容認されますが、現在は不要であり、動作にも影響しません。

テーブル分散オプション

最適な分散メソッドを選択する方法および分散テーブルを使用する方法を理解するには、Azure Synapse Analytics でテーブルを分散する方法に関するページを参照してください。

DISTRIBUTION = HASH ( distribution_column_name ) distribution_column_name に格納された値をハッシュすることにより、各行を 1 つの分散に割り当てます。 これは決定的アルゴリズムであり、常に同じ値が同じ分散にハッシュされることを意味します。 NULL を持つ行はすべて同じディストリビューションに割り当てられるので、ディストリビューション列は NOT NULL として定義する必要があります。

DISTRIBUTION = ROUND_ROBIN 行をラウンド ロビン方式ですべてのディストリビューションに均等に分散させます。 この動作は Azure Synapse Analytics の既定の動作です。

DISTRIBUTION = REPLICATE テーブルの 1 つのコピーを各コンピューティング ノードに格納します。 Azure Synapse Analytics の場合、テーブルは各コンピューティング ノード上のディストリビューション データベースに格納されます。 Analytics Platform System (PDW) の場合、テーブルはコンピューティング ノードにまたがる SQL Server ファイルグループに格納されます。 この動作は Analytics Platform System (PDW) の既定の動作です。

テーブル パーティションのオプション

テーブル パーティションの使用の詳細については、Azure Synapse Analytics でのテーブルのパーティション分割に関するページを参照してください。

PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
1 つまたは複数のテーブルのパーティションを作成します。 これらのパーティションは横方向のテーブル スライスであり、テーブルがヒープ、クラスター化インデックス、またはクラスター化列ストア インデックスのいずれで格納されているかに関係なく、行のサブセットに対して操作を適用できます。 ディストリビューション列とは異なり、テーブルのパーティションは、各行が格納されるディストリビューションを決定しません。 代わりに、テーブルのパーティションでは、行をグループ化して、各ディストリビューション内に格納する方法が決定されます。

引数 説明
partition_column_name Azure Synapse Analytics で行をパーティション分割するのに使用する列を指定します。 この列は、どのようなデータ型でもかまいません。 Azure Synapse Analytics では、パーティション列の値が昇順に並べ替えられます。 小さい順に並べる場合は、RANGE 指定の LEFT から RIGHT に並べられます。
RANGE LEFT 左側 (値が小さくなっていく) のパーティションに属する境界値を指定します。 既定値は LEFT です。
RANGE RIGHT 左側 (値が大きくなっていく) のパーティションに属する境界値を指定します。
FOR VALUES ( boundary_value [,...n] ) パーティションの境界値を指定します。 boundary_value は定数式です。 NULL にすることはできません。 また、partition_column_name のデータ型に一致するか、またはそのデータ型に暗黙的に変換可能である必要があります。 さらに、暗黙的な変換時には切り詰めることができないため、値のサイズおよびスケールは partition_column_name のデータ型と一致しません。

PARTITION 句は指定したが、境界値を指定しない場合、Azure Synapse Analytics ではパーティションを 1 つ含むパーティション テーブルが作成されます。 必要に応じて、後でテーブルを 2 つのパーティションに分割できます。

境界値を 1 つ指定した場合、生成されるテーブルには 2 つのパーティションが含まれます。境界値よりも小さい値に対するパーティションと、境界値よりも大きい値に対するパーティションです。 非パーティション テーブルにパーティションを移動した場合、非パーティション テーブルはデータを受け取りますが、そのメタデータ内にパーティション境界は設定されません。

「例」セクションの「パーティション テーブルの作成」を参照してください。

クラスター化列ストア インデックスの順序付けオプション

クラスター化列ストア インデックス (CCI) は、Azure Synapse Analytics でテーブルを作成するための既定値です。 CCI 内のデータは、列ストアセグメントに圧縮される前に並べ替えられることはありません。 ORDER を指定して CCI を作成すると、データは並べ替えられてからインデックス セグメントに追加されるため、パフォーマンスが向上することがあります。 詳細については、「順序指定クラスター化列ストア インデックスを使用したパフォーマンス チューニング」を参照してください。

順序付けされた CCI は、文字列型の列を除く Azure Synapse Analytics でサポートされている任意のデータ型の列に作成できます。

ユーザーは、sys.index_columnscolumn_store_order_ordinal 列に対して、テーブルが順序付けられている列とその順序でクエリを実行できます。

詳細については、「順序指定クラスター化列ストア インデックスを使用したパフォーマンス チューニング」を参照してください。

データ型

Azure Synapse Analytics では、最も一般的に使用されるデータ型をサポートしています。 以下に、サポートされるデータ型を一覧し、その詳細説明および格納バイトを示します。 データ型とその使用方法をよく理解するには、Azure Synapse Analytics のテーブルのデータ型に関するページを参照してください。

データ型変換のテーブルについては、「CAST および CONVERT (Transact-SQL)」の「暗黙的な変換」セクションを参照してください。

注意

詳細については、「日付と時刻のデータ型および関数(Transact-SQL)」を参照してください。

datetimeoffset [ ( n ) ]
n の既定値は 7 です。

datetime2 [ ( n ) ]
datetime と同じ。ただし、秒の小数部の値を指定することができます。 n の既定値は 7 です。

n Precision スケール
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6
7 27 7

datetime
グレゴリオ暦カレンダーに従って、19 から 23 文字で日の日付と時刻を格納します。 日付には、年、月、日を含めることができます。 時刻には、時、分、秒が含まれます。オプションで、秒の小数部の 3 桁の数字を表示できます。 ストレージ サイズは 8 バイトです。

smalldatetime
日付と時刻を格納します。 ストレージ サイズは 4 バイトです。

date
グレゴリオ暦カレンダーに従い、最大 10 文字の年、月、日を使用して日付を格納します。 ストレージ サイズは 3 バイトです。 日付は、整数として保存されます。

time [ ( n ) ]
n の既定値は 7 です。

float [ ( n ) ]
浮動小数点数値データで使用するための概数値のデータ型です。 浮動小数点データは概数であるため、データ型の範囲に含まれるすべての値を正確に表せるわけではありません。 n では、float の仮数を指数表記で格納するために使用するビット数を指定します。 n によって、有効桁数と記憶域のサイズが決まります。 n を指定する場合、1 から 53 までの値にする必要があります。 n の既定値は 53 です。

n Precision ストレージ サイズ
1 から 24 7 桁 4 バイト
25 から 53 15 桁 8 バイト

Azure Synapse Analytics では、n は次の 2 つの値のいずれかの値として扱われます。 1<= n <= 24 の場合、n24 として処理されます。 25 <= n <= 53 の場合、n53 として処理されます。

Azure Synapse Analytics float データ型は、n1 から 53 の値をとるすべてのケースにおいて ISO 標準に準拠しています。 倍精度のシノニムは float(53) です。

real [ ( n ) ]
実数の定義は、浮動小数点数と同じです。 real の ISO シノニムは、float(24) です。

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
固定長の有効桁数と小数点以下保持桁数を持つ数値を格納します。

有効桁数 (precision)
小数点の右側と左側に保持できる桁数を合計した、10 進数の最大桁数。 有効桁数の値は、138 (最大有効桁数) にする必要があります。 既定の有効桁数は 18 です。

scale
小数点の右側にとることのできる 10 進数の最大桁数。 Scale は、0precision とする必要があります。 scale を指定できるのは、precision が指定されている場合のみです。 既定の scale は0 です。したがって、0 <= scale <= precision となります。 ストレージの最大サイズは有効桁数によって異なります。

Precision ストレージのバイト数
1-9 5
10 から 19 9
20 から 28 13
29 から 38 17

money | smallmoney
通貨値を表すデータ型。

データ型 ストレージのバイト数
money 8
smallmoney 4

bigint | int | smallint | tinyint
整数データを使用する実数データ型です。 次の表では記憶域を示します。

データ型 ストレージのバイト数
bigint 8
int 4
smallint 2
tinyint 1

bit
10、または `NULL の値をとる整数型です。 Azure Synapse Analytics はビット列の記憶域を最適化します。 テーブル内のビット列が 8 個以下の場合、列は 1 バイトとして格納されます。 ビット列が 9 から 16 個の場合、列は 2 バイトとして格納されます。以下同様です。

nvarchar [ ( n | max ) ] -- max は Azure Synapse Analytics にのみ適用されます。
可変長の Unicode 文字データ。 n 1 ~ 4000 の値を指定できます。 max は最大格納サイズが 2^31-1 バイト (2 GB) であることを示します。 記憶域のサイズは、入力文字数の 2 倍のバイト数に 2 バイトを足した値です。 入力データの長さは 0 文字でもかまいません。

nchar [ ( n ) ]
n 文字の長さを持つ、固定長の Unicode 文字データです。 n には 14000 の値を指定する必要があります。 ストレージのサイズは、n の 2 倍のバイト数です。

varchar [ ( n | max ) ] -- max は Azure Synapse Analytics にのみ適用されます。
n バイトの長さを持つ、可変長の Unicode 以外の文字データです。 n には 18000 の値を指定する必要があります。 max は最大記憶域サイズが 2^31-1 バイト (2 GB) であることを示します。記憶領域のサイズは、入力されたデータの実際の長さに 2 バイトを加えたものとなります。

char [ ( n ) ]
n バイトの長さを持つ、固定長の Unicode 以外の文字データです。 n には 18000 の値を指定する必要があります。 ストレージのサイズは n バイトです。 n の既定値は 1 です。

varbinary [ ( n | max ) ] -- max は Azure Synapse Analytics にのみ適用されます。
可変長 binary データ。 n には、18000 の値を指定できます。 max は最大格納サイズが 2^31-1 バイト (2 GB) であることを示します。 記憶領域のサイズは、入力されたデータの実際の長さに 2 バイトを加えたものとなります。 n の既定値は 7 です。

binary [ ( n ) ]
n バイトの長さを持つ、固定長のバイナリ データです。 n には、18000 の値を指定できます。 ストレージのサイズは n バイトです。 n の既定値は 7 です。

uniqueidentifier
16 バイトの GUID です。

アクセス許可

テーブルを作成するには、db_ddladmin 固定データベース ロールでの権限、または次の権限が必要です。

  • データベースに対する CREATE TABLE 権限
  • テーブルを含めるスキーマに対する ALTER SCHEMA 権限

パーティション テーブルを作成するには、db_ddladmin 固定データベース ロールでの権限、または次の権限が必要です。

  • ALTER ANY DATASPACE 権限

ローカル一時テーブルを作成するログインでは、テーブルに対する CONTROLINSERTSELECTUPDATE の各権限が受け入れられます。

全般的な解説

最小値と最大値については、Azure Synapse Analytics の容量制限に関するページを参照してください。

テーブルのパーティションの数を決定する

各ユーザー定義テーブルは、複数の小さなテーブルに分割され、ディストリビューションと呼ばれる個々の場所に格納されるます。 Azure Synapse Analytics では 60 のディストリビューションが使用されます。 Analytics Platform System (PDW) において、ディストリビューションの数はコンピューティング ノードの数によって異なります。

各ディストリビューションには、すべてのテーブル パーティションが含まれます。 たとえば、60 のディストリビューションと 4 つのテーブル パーティションに加えて 1 つの空のパーティションがある場合は、300 のパーティションが存在することになります (5 x 60= 300)。 テーブルがクラスター化列ストア インデックスである場合、パーティションごとに列ストア インデックスが 1 つ存在することになります。つまり、列ストア インデックスの数は 300 になります。

列ストア インデックスの利点を活用する上で十分な行が各列ストア インデックスに含まれるようにするために、使用するテーブル パーティションの数を少なくすることをお勧めします。 詳細については、Azure Synapse Analytics でのテーブルのパーティション分割に関するページと Azure Synapse Analytics でのテーブルのインデックス作成に関するページを参照してください。

行ストア テーブル (ヒープまたはクラスター化インデックス)

行ストア テーブルは、行単位で格納されるテーブルです。 ヒープまたはクラスター化インデックスが該当します。 Azure Synapse Analytics では、ページ圧縮によってすべての行ストア テーブルを作成します。この動作はユーザーが構成できる設定ではありません。

列ストア テーブル (列ストア インデックス)

列ストア テーブルは、列単位で格納されるテーブルです。 列ストア インデックスは、列ストア テーブルに格納されているデータを管理する技術です。 クラスター化列ストア インデックスはデータの配布方法には影響しません。むしろ、各ディストリビューションへのデータの格納方法に影響します。

行ストア テーブルを列ストア テーブルに変更するには、テーブル上の既存のインデックスをすべて削除してから、クラスター化列ストア インデックスを作成します。 例については、「CREATE COLUMNSTORE INDEX (Transact-SQL)」を参照してください。

詳細と例については、次の記事をご覧ください。

制限事項と制約事項

ディストリビューション列の DEFAULT 制約を定義することはできません。

メジャー グループ

パーティションを使用する場合、パーティション列には、Unicode のみの照合順序は設定できません。 たとえば、次のステートメントは失敗します。

CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))

boundary_valuepartition_column_name 内のデータ型に暗黙的に変換する必要があるリテラル値である場合は、矛盾が発生します。 リテラルは Azure Synapse Analytics システム ビューを通して表示されますが、変換後の値は Transact-SQL の操作で使用されます。

一時テーブル

で始まるグローバル一時テーブルはサポートされていません。

ローカル一時テーブルには、次のような制限事項と制約があります。

  • 現在のセッションにのみ表示されます。 Azure Synapse Analytics では、セッションの終了時にローカル一時テーブルを自動的に削除します。 明示的に削除するには、DROP TABLE ステートメントを使用します。
  • 名前を変更することはできません。
  • パーティションまたはビューを持つことはできません。
  • それらのアクセス許可を変更することはできません。 ローカル一時テーブルでは、GRANTDENY、および REVOKE ステートメントは使用できません。
  • データベース コンソール コマンドは、一時テーブルに対してはブロックされます。
  • バッチ内で複数のローカル一時テーブルを使用する場合、各テーブルの名前は一意でなければなりません。 複数のセッションが同じバッチを実行していて、同じローカル一時テーブルを作成する場合、Azure Synapse Analytics の内部では、ローカル一時テーブルごとに一意の名前を維持するために、ローカル一時テーブル名に数値サフィックスを追加します。

ロック動作

テーブルでは排他的ロックを取得します。 DATABASE、SCHEMA、SCHEMARESOLUTION オブジェクトでは、共有ロックを取得します。

列の例

A. 列の照合順序を指定します。

次の例では、テーブル MyTable を 2 つの異なる列照合順序で作成します。 既定では、列 mycolumn1 の既定の照合順序は Latin1_General_100_CI_AS_KS_WS となります。 列 mycolumn2 の照合順序は Frisian_100_CS_AS となります。

CREATE TABLE MyTable   
  (  
    mycolumnnn1 nvarchar,  
    mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

B. 列に対して DEFAULT 制約を指定する

次の例では、列に対して既定値を指定する構文を示します。 colA 列には constraint_colA という名前の DEFAULT 制約があり、既定値は 0 です。

CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

一時テーブルの例

C. ローカル一時テーブルを作成します。

次の例は、#myTable という名前のローカル一時テーブルを作成します。 テーブルは、3 つの部分で構成される名前によって指定され、# で始まります。

CREATE TABLE AdventureWorks.dbo.#myTable
  (  
   id int NOT NULL,  
   lastName varchar(20),  
   zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

テーブル構造の例

D. クラスター化列ストア インデックスを持つテーブルを作成する

次の例では、クラスター化列ストア インデックスを持つ分散テーブルを作成します。 各ディストリビューションは、列ストアとして格納されます。

クラスター化列ストア インデックスは、データの配布方法には影響しません。データは常に行によって配布されます。 クラスター化列ストア インデックスは、各ディストリビューション内でのデータの格納方法に影響します。

  CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH   
  (   
    DISTRIBUTION = HASH ( colB ),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

E. 順序付けされたクラスター化列ストア インデックスを作成する

以下の例は、順序付けされたクラスター化列ストア インデックスを作成する方法を示しています。 インデックスは SHIPDATE で順序付けされます。

CREATE TABLE Lineitem  
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))  
AS  
SELECT * FROM ext_Lineitem

テーブルの分散例

F. ROUND_ROBIN テーブルを作成する

次の例では、3 つの列を含みパーティションのない ROUND_ROBIN テーブルを作成します。 データはすべてのディストリビューションに分散されます。 テーブルは CLUSTERED COLUMNSTORE INDEX で作成されており、ヒープまたは行ストア クラスター化インデックスより、パフォーマンスとデータ圧縮が優れています。

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX );  

G. ハッシュ分散テーブルを作成する

次の例では、前の例と同じテーブルを作成します。 ただし、このテーブルの場合、行は ROUND_ROBIN テーブルのようにランダムに分散されるのではなく、(id 列上に) 配布されます。 テーブルは CLUSTERED COLUMNSTORE INDEX で作成されており、ヒープまたは行ストア クラスター化インデックスより、パフォーマンスとデータ圧縮が優れています。

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),   
    CLUSTERED COLUMNSTORE INDEX  
  );  

H. レプリケート テーブルを作成します。

次の例では、前の例のようなレプリケート テーブルを作成します。 レプリケート テーブルは、各計算ノードに完全にコピーされます。 各計算ノードにこのコピーがあれば、クエリにおけるデータ移動を減らすことができます。 この例は CLUSTERED INDEX を使用して作成され、ヒープよりもデータの圧縮率が高くなっています。 ヒープでは、適切な CLUSTERED COLUMNSTORE INDEX 圧縮を実現するための十分な列が含まれていない場合があります。

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX (lastName)  
  );  

テーブル パーティションの例

I. パーティション テーブルを作成します。

次の例では、例 A で示したのと同じテーブルを作成し、id 列に RANGE LEFT パーティションを追加します。 4 つのパーティション境界値が指定されており、5 つのパーティションが作成されます。

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
  (
  
    PARTITION ( id RANGE LEFT FOR VALUES (10, 20, 30, 40 )),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

この例では、データは次のパーティションに並べ替えられます。

  • パーティション 1: col <= 10
  • パーティション 2:10 < col <= 20
  • パーティション 3:20 < col <= 30
  • パーティション 4:30 < col <= 40
  • パーティション 5:40 < col

この同じテーブルを RANGE LEFT (既定値) ではなく RANGE RIGHT でパーティション分割したとすると、データは次のパーティションに並べ替えられます。

  • パーティション 1: col < 10
  • パーティション 2:10 <= col < 20
  • パーティション 3:20 <= col < 30
  • パーティション 4:30 <= col < 40
  • パーティション 5:40 <= col

J. パーティションが 1 つのパーティション テーブルを作成する

次の例では、1 つのパーティションを持つパーティション テーブルを作成します。 境界値は指定されていないため、結果は 1 つのパーティションになります。

CREATE TABLE myTable (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
    (
      PARTITION ( id RANGE LEFT FOR VALUES ( )),  
      CLUSTERED COLUMNSTORE INDEX  
    )  
;  

K. 日付のパーティション分割でテーブルを作成する

次の例では、myTable という名前の新しいテーブルを作成し、date 列に基づいてパーティション分割を行います。 RANGE RIGHT を使用し、境界値として日付を使用することで、各パーティションにデータの月が格納されます。

CREATE TABLE myTable (  
    l_orderkey      bigint,
    l_partkey       bigint,
    l_suppkey       bigint,
    l_linenumber    bigint,
    l_quantity      decimal(15,2),  
    l_extendedprice decimal(15,2),  
    l_discount      decimal(15,2),  
    l_tax           decimal(15,2),  
    l_returnflag    char(1),  
    l_linestatus    char(1),  
    l_shipdate      date,  
    l_commitdate    date,  
    l_receiptdate   date,  
    l_shipinstruct  char(25),  
    l_shipmode      char(10),  
    l_comment       varchar(44))  
WITH
  (
    DISTRIBUTION = HASH (l_orderkey),  
    CLUSTERED COLUMNSTORE INDEX,  
    PARTITION ( l_shipdate  RANGE RIGHT FOR VALUES
      (  
        '1992-01-01','1992-02-01','1992-03-01','1992-04-01','1992-05-01',
        '1992-06-01','1992-07-01','1992-08-01','1992-09-01','1992-10-01',
        '1992-11-01','1992-12-01','1993-01-01','1993-02-01','1993-03-01',
        '1993-04-01','1993-05-01','1993-06-01','1993-07-01','1993-08-01',
        '1993-09-01','1993-10-01','1993-11-01','1993-12-01','1994-01-01',
        '1994-02-01','1994-03-01','1994-04-01','1994-05-01','1994-06-01',
        '1994-07-01','1994-08-01','1994-09-01','1994-10-01','1994-11-01',
        '1994-12-01'  
      ))
  );  

関連項目

CREATE TABLE AS SELECT (Azure Synapse Analytics)
DROP TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL)
sys.index_columns (Transact-SQL)