CREATE TABLE

適用対象: Azure Synapse Analytics Analytics Platform System (PDW)

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

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

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

Note

SQL Server および Azure SQL プラットフォームの場合は、「CREATE TABLE」にアクセスして、目的の製品バージョンを選択します。 Microsoft Fabric のウェアハウスの詳細については、「CREATE TABLE (Fabric)」を参照してください。

Note

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 = HASH ( [distribution_column_name [, ...n]] ) 
      | 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 の専用 SQL プール内の一時テーブル」を参照してください。

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 つまたは複数のキー列の名前を指定します。 詳細については、「 Rowstore テーブル」を参照してください。

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

テーブル分散オプション

最適な分散メソッドを選択する方法および分散テーブルを使用する方法については、Azure Synapse Analytics での専用 SQL プールを使った分散テーブルの設計に関する記事をご覧ください。

実際のワークロードに基づいて推奨される最適な分散戦略については、Synapse SQL の Distribution Advisor (プレビュー) に関する記事をご覧ください。

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

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) 最大 8 列のハッシュ値に基づいて行を分散し、ベース テーブル データのより均等な分散を可能にし、時間の経過と共にデータ スキューを減らし、クエリのパフォーマンスを向上させます。

Note

  • 複数列分散 (MCD) 機能を有効にするには、このコマンドを使ってデータベースの互換レベルを 50 に変更します。 データベース互換性レベルの設定の詳細については、「 ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)を参照してください。 例: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • 複数列分散 (MCD) 機能を無効にするには、このコマンドを実行してデータベースの互換レベルを AUTO に変更します。 例: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; 既存の MCD テーブルは維持されますが、読み取り不可になります。 MCD テーブルに対するクエリでは、次のエラーが返されます: Related table/view is not readable because it distributes data on multiple columns and multi-column distribution is not supported by this product version or this feature is disabled.
    • MCD テーブルに再びアクセスできるようにするには、もう一度機能を有効にします。
    • MCD テーブルにデータを読み込むには、CTAS ステートメントを使用します。データ ソースは Synapse SQL テーブルである必要があります。
  • MCD テーブルを作成するためのスクリプトの生成 (SQL Server Management Studio) は、現在、SSMS バージョン 19 以降のバージョンでサポートされています。

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

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

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

テーブル パーティションの使用の詳細については、「専用 SQL プールでのテーブルのパーティション分割」を参照してください。

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 でサポートされている任意のデータ型の列に作成できます。

ユーザーは、テーブル column_store_order_ordinal 並べ替えられた列と順序付けの列について、 sys.index_columns の列に対してクエリを実行できます。

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

データの種類

Azure Synapse Analytics では、最も一般的に使用されるデータ型をサポートしています。 データ型とその使用方法をよく理解するには、Azure Synapse Analytics のテーブルのデータ型に関するページを参照してください。

Note

SQL Server と同様に、1 行あたり 8060 バイトの制限があります。 これは、多数の列を持つテーブルや、 nvarchar(max)varbinary(max)などの大きなデータ型を持つ列のブロックの問題になる可能性があります。 8060 バイトの制限に違反する挿入または更新は、エラー コード 511 または 611 になります。 詳細については、「ページとエクステントのアーキテクチャ ガイド」を参照してください。

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

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

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

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

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

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 になります。

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

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

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

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

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

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

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

制限事項

  • ディストリビューション列の DEFAULT 制約を定義することはできません。
  • テーブル名を 128 文字よりも長くできません。
  • 列名を 128 文字よりも長くできません。

メジャー グループ

パーティション列には、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 という名前の既定の制約があり、既定値は 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. 複数の列にハッシュ分散されたテーブルを作成する (プレビュー)

次の例では、前の例と同じテーブルを作成します。 ただし、このテーブルの場合、行は分散されます (idzipCode 列)。 テーブルはクラスター化列ストア インデックスを使用して作成されており、ヒープまたは行ストア クラスター化インデックスよりパフォーマンスとデータ圧縮が優れています。

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id, zipCode), 
    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'  
      ))
  );  

適用対象:Microsoft Fabric の ウェアハウス

Microsoft Fabric のウェアハウス内に新しいテーブルを作成します。

詳細については、「Microsoft Fabric のウェアハウスでテーブルを作成する」を参照してください。

注意

Azure Synapse Analytics および Analytics Platform System (PDW) の詳細については、「CREATE TABLE (Azure Synapse Analytics)」を参照してください。 SQL Server と Azure SQL プラットフォームの場合は、 CREATE TABLE にアクセスし バージョンドロップダウン リストから目的の製品バージョンを選択します。

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 ]
    )  
[;]  

<column_options> ::=
    [ NULL | NOT NULL ] -- default is NULL

<data type> ::=
      datetime2 ( n )   
    | date  
    | time ( n )   
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | bigint  
    | int   
    | smallint  
    | bit  
    | varchar [ ( n | MAX ) ] 
    | char [ ( n ) ]  
    | varbinary [ ( n | MAX ) ] 
    | uniqueidentifier  

引数

database_name

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

schema_name

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

table_name

新しいテーブルの名前です。

column_name

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

列のオプション

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

データ型

Microsoft Fabric では、最も一般的に使用されるデータ型をサポートしています。 詳細については、「Microsoft Fabric のデータ型」を参照してください。

Note

SQL Server と同様に、1 行あたり 8060 バイトの制限があります。 これは、多数の列を持つテーブルや、 varchar(8000)varbinary(8000)などの大きなデータ型を持つ列のブロックの問題になる可能性があります。 8060 バイトの制限に違反する挿入または更新は、エラー コード 511 または 611 になります。 詳細については、「ページとエクステントのアーキテクチャ ガイド」を参照してください。

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

サポートされるデータ型の以下の一覧には、詳細と格納バイト数が含まれます。

datetime2 ( n )
グレゴリオ暦カレンダーに従って、19 から 26 文字で日の日付と時刻を格納します。 日付には、年、月、日を含めることができます。 時間には、時間、分、秒が含まれます。 オプションとして、n パラメーターに基づき、秒の小数部に対して 0 - 6 桁の数字を格納して表示できます。 ストレージ サイズは 8 バイトです。 n には 06 の値を指定する必要があります。

注意

他の SQL プラットフォームのような既定の精度はありません。 0 から 6 の精度の値を指定する必要があります。

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

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

time ( n )
n には 06 の値を指定する必要があります。

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

注意

他の SQL プラットフォームのような既定の精度はありません。 0 から 6 の精度の値を指定する必要があります。

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

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

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

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

varchar [ ( n | MAX ) ] 長さ n バイトの可変長の Unicode 文字データです。 n には 18000 の値を指定する必要があります。 記憶領域のサイズは、入力されたデータの実際の長さに 2 バイトを加えたものとなります。 n の既定値は 1 です。 varchar(MAX)列には、Warehouse に最大 1 MB のテキストを格納できます。

Note

varchar(MAX) は、Warehouse のプレビュー段階にあります。 詳細については、「Microsoft Fabric のデータ型」を参照してください。

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

varbinary [ ( n | MAX ) ] 可変長バイナリ データです。 n には、18000 の値を指定できます。 記憶領域のサイズは、入力されたデータの実際の長さに 2 バイトを加えたものとなります。 n の既定値は 7 です。
varbinary(MAX)列には、Warehouse に最大 1 MB のデータを格納できます。

Note

varbinary(MAX) は、Warehouse のプレビュー段階にあります。 詳細については、「Microsoft Fabric のデータ型」を参照してください。

uniqueidentifier
16 バイトの GUID です。

アクセス許可

Microsoft Fabric のアクセス許可は、Analytics Azure Synapse のアクセス許可とは異なります。

ユーザーは、Fabric ワークスペースの管理者、メンバー、または共同作成者ロールのメンバーである必要があります。

制限事項

  • テーブル名は 128 文字を超えることはできません。
  • Microsoft Fabric の Warehouse のテーブル名には、 / または \ の文字を含めたり、 .で終わったりすることはできません。
  • 列名は 128 文字を超えることはできません。
  • テーブルには、テーブルあたり最大 1,024 列があります。
  • Warehouse でサポートされている既定の照合順序は Latin1_General_100_BIN2_UTF8です。 大文字と小文字を区別しない (CI) 照合順序 (Latin1_General_100_CI_AS_KS_WS_SC_UTF8) を使用してウェアハウスをすることもできます。

解説

ウェアハウスの Transact-SQL 機能は限られています。 詳細については、「Microsoft Fabric での TSQL セキュリティ、外部からのアクセス」を参照してください。

ロック動作

テーブルに対する Schema-Modification ロック、DATABASE に対する共有ロック、SCHEMA に対する Schema-Stability ロックを取得します。