共用方式為


CREATE TABLE

適用於:Azure Synapse Analytics Analytics Platform System (PDW)

CREATE TABLE (Azure Synapse Analytics)

在 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中建立新的資料表。

若要了解資料表和其使用方式,請參閱 Azure Synapse Analytics 中的資料表

本文中關於 Azure Synapse Analytics 的討論也適用於 Azure Synapse Analytics 和 Analytics Platform System (PDW),除非另有說明。

注意

針對 SQL Server 和 Azure SQL 平臺,請流覽 CREATE TABLE 並選取所需的產品版本。 如需 Microsoft Fabric 中的 SQL 資料庫,請參閱 CREATE TABLE。 如需在 Microsoft Fabric 中倉儲的參考,請流覽 CREATE TABLE (Fabric)

注意

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

資料表資料行的名稱。

資料行選項

COLLATEWindows_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 ] )
將資料表儲存為具有一或多個索引鍵資料行的叢集索引。 此行為會依資料列儲存資料。 使用 index_column_name 指定索引中一或多個索引鍵資料行的名稱。 如需詳細資訊,請參閱 數據列存放區數據表

LOCATION = USER_DB 此選項已淘汰。 在語法上仍會接受,但已不再需要且不會再影響行為。

資料表散發選項

若要了解如何選擇最佳的散發方法並使用分散式資料表,請參閱在 Azure Synapse Analytics 中使用專用 SQL 集區設計分散式資料表

如需根據工作負載採用最佳散發策略的相關建議,請參閱 Azure Synapse SQL Distribution Advisor (預覽)

DISTRIBUTION = HASH ( distribution_column_name ) 透過對儲存在 distribution_column_name 中的值進行雜湊處理,將每個資料列指派給一個發佈。 演算法具有確定性,這表示其一律會將相同值進行雜湊處理至相同的散發。 散發資料行應定義為 NOT NULL,因為擁有 NULL 的所有資料列都會指派給相同散發。

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) 根據最多八個資料行的雜湊值散發資料列,可以更平均地分佈基底資料表資料,減少隨著時間而產生的資料扭曲並改善查詢效能。

注意

  • 若要啟用多重數據行散發 (MCD) 功能,請使用此命令將資料庫的相容性層級變更為 50。 如需設定資料庫相容性層級的詳細資訊,請參閱 ALTER DATABASE SCOPED CONFIGURATION。 例如: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 數據表目前支援 SSMS 第 19 版和更新版本。

DISTRIBUTION = ROUND_ROBIN 以循環配置資源方式將資料列平均散發到所有發佈中。 這是 Azure Synapse Analytics 的預設行為。

DISTRIBUTION = REPLICATE 在每個計算節點上儲存一份資料表的複本。 針對 Azure Synapse Analytics,資料表會儲存在每個計算節點的散發資料庫中。 針對 Analytics Platform System (PDW),資料表是儲存在 Compute 節點範圍的 SQL Server 檔案群組中。 這是 Analytics Platform System (PDW) 的預設行為。

資料表資料分割選項

如需使用資料表資料分割的指導方針,請參閱專用 SQL 集區中的資料分割資料表

PARTITION(partition_column_name RANGE [RIGHT LEFT | ] FOR VALUES[ boundary_value [,... n] ] ))
建立一或多個資料表資料分割。 這些資料分割是水平資料表配量,可讓您將作業套用至資料列子集,無論資料表是儲存為堆積、叢集索引,或叢集資料行存放區索引。 和散發資料行不同,資料表資料分割不會決定每個資料列儲存所在的散發。 反之,資料表資料分割會決定資料列在每個散發內的分組方式和儲存方式。

引數 說明
partition_column_name 指定 Azure Synapse Analytics 用來分割數據列的數據行。 此資料行可以是任何資料類型。 Azure Synapse Analytics 會以遞增順序排序資料分割資料行值。 從低到高順序會以 LEFT 規格由 RIGHTRANGE 排序。
RANGE LEFT 指定屬於左邊 (較低的值) 資料分割的界限值。 預設值為 LEFT。
RANGE RIGHT 指定屬於右邊 (較高的值) 資料分割的界限值。
FOR VALUES ( boundary_value [,...n] ) 指定資料分割的界限值。 boundary_value 是常數運算式。 不得為 NULL。 它必須符合或可以隱含轉換為 partition_column_name 的資料類型。 無法在進行隱含轉換期間截斷,因此值的大小和級別不會和 partition_column_name 的資料類型相符



如果您指定 PARTITION 子句,但未指定界限值,Azure Synapse Analytics 會建立具有一個數據分割的分割數據表。 如果適用,您隨後可以將資料表分割成兩個資料分割。



如果您指定一個界限值,產生的資料表會有兩個資料分割,一個用於低於界限值的值,一個用於高於界限值的值。 如果您將分割區移至非數據分割數據表,則非數據分割數據表會接收數據,但不會在其元數據中具有分割區界限。

如需範例,請參閱 建立數據分割數據表

已排序的叢集數據行存放區索引選項

叢集資料行存放區索引 (CCI) 是在 Azure Synapse Analytics 中建立資料表的預設值。 CCI 中的數據在壓縮成數據行存放區區段之前,不會排序。 建立具有順序的 CCI 時,資料會先進行排序,再新增至索引區段,且可改善查詢效能。 如需 Azure Synapse Analytics 中已排序叢集數據行存放區索引的詳細資訊,請參閱 使用已排序的叢集數據行存放區索引進行效能微調。

已排序的 CCI 可以建立在 Azure Synapse Analytics 支援的任何資料類型的資料行上,但不包括字串資料行。

用戶可以查詢 中的數據sys.index_columns行,以取得column_store_order_ordinal數據表排序的數據行,以及排序順序中的順序。

瀏覽使用已排序叢集資料行存放區索引的效能微調以取得詳細資料。

資料類型

Azure Synapse Analytics 支援最常用的資料類型。 若要進一步了解資料類型和使用方式,請參閱 Azure Synapse Analytics 中的資料表資料類型

注意

類似於 SQL Server,每個資料列限制為 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 個字元儲存日期和時間。 日期可以包含年、月和日。 時間包含小時、分鐘、秒。 您可以選擇為小數部分的秒數顯示三個位數。 儲存體大小是 8 位元組。

smalldatetime
儲存日期和時間。 儲存體大小是 4 位元組。

date
根據西曆使用最多 10 個字元儲存年、月和日的日期。 儲存體大小是 3 位元組。 日期會儲存為整數。

time [ ( n ) ]
n 的預設值是 7

float [ ( n ) ]
用來搭配浮點數值資料使用的近似數字資料類型。 浮點數資料是近似的,這表示並非資料類型範圍內的所有值都能夠精確地表示。 n 指定用來以科學記號標記法儲存 float 之尾數的位元數。 n 可決定有效位數和儲存體大小。 如果指定 n,則其值必須介於 153 之間。 n 的預設值是 53

n Precision 儲存體大小
1-24 7 位數 4 個位元組
25-53 15 位數 8 個位元組

Azure Synapse Analytics 會將 n 當做兩個可能值的其中一個來處理。 如果 1<= n<= 24,則將 n 當作 24 來處理。 如果 25<= n<= 53,則將 n 當作 53 來處理。

Azure Synapse Analytics float 數據類型符合 n153的所有值 ISO 標準。 雙精確度的同義字是 float(53)。

real [ ( n ) ]
real 的定義和 float 相同。 real 的 ISO 同義字是 float(24)

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
儲存固定有效位數和小數位數的數字。

有效位數
可以在小數點任一端儲存的小數字數總數上限。 有效位數必須是從 1 到最大有效位數 38 之間的值。 預設有效位數是 18

scale
小數點右側所能儲存的最大十進位數。 小數位數必須是從 0有效位數 之間的值。 只有在已指定 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
使用整數資料的 Exact-number 資料類型。 下表會顯示儲存體。

資料類型 儲存體位元組
bigint 8
int 4
smallint 2
tinyint 1

bit
一種整數資料類型,其值有 10 或 NULL 幾種。 Azure Synapse Analytics 會將位元資料行的儲存最佳化。 如果資料表中的 bit 資料行小於或等於 8 個,這些資料行會儲存為 1 個位元組。 如果有 9 到 16 個 bit 資料行,則儲存為 2 個位元組,依此類推。

nvarchar [ ( n | max ) ] 可變長度 Unicode 字元數據。 n 可以是從 1 到 4000 之間的值。 max 表示儲存體大小上限是 2^31-1 個位元組 (2 GB)。 儲存體大小 (以位元組為單位) 是輸入字元數的兩倍再加上 2 位元組。 輸入的資料長度可以是 0 個字元。 長度 max 僅適用於 Azure Synapse Analytics。

nchar [ ( n ) ]
長度為 n 個字元的固定長度 Unicode 字元資料。 n 必須是從 14000 之間的值。 儲存體大小是 n 個位元組的兩倍。

varchar [ ( n | max ) ] 可變長度、非 Unicode 字元數據,長度為 n 個字節。 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 容量限制

判斷數據表分割區的數目

每個使用者定義的資料表都會分割成多個較小資料表,儲存在稱為散發的個別位置。 Azure Synapse Analytics 使用 60 個散發套件。 在 Analytics Platform System (PDW) 中,散發套件的數目取決於計算節點的數目。

每個散發都會包含所有資料表資料分割。 例如,如果有 60 個散發和四個資料表分割區加上一個空的分割區,將會有 300 個分割區 (5 x 60 = 300)。 如果數據表是叢集數據行存放區索引,則每個分割區會有一個數據行存放區索引,這表示您將有 300 個數據行存放區索引。

我們建議使用較少的資料表資料分割,以確保每個資料行存放區索引都有足夠的資料列,以充分利用資料行存放區索引的優點。 如需 Azure Synapse Analytics 中的詳細資訊,請參閱 分割專用 SQL 集 區中的數據表和 Azure Synapse Analytics 中專用 SQL 集區數據表上的索引。

資料列存放區資料表 (堆積或叢集索引)

資料列存放區資料表是以資料列逐列順序儲存的資料表。 是堆積或叢集索引。 Azure Synapse Analytics 會建立具有頁面壓縮的所有資料列存放區資料表,使用者無法設定此行為。

資料行存放區資料表 (資料行存放區索引)

資料行存放區資料表是以資料行逐行順序儲存的資料表。 資料行存放區索引是資料管理技術,可管理資料行存放區資料表中儲存的資料。 叢集數據行存放區索引不會影響數據的散發方式。 相反地,它會影響數據在每個散發中儲存的方式。

若要將資料列存放區資料表變更為資料行存放區資料表,請卸除資料表中所有現有的索引,然後建立叢集資料行存放區索引。 如需範例,請參閱 CREATE COLUMNSTORE INDEX (Transact-SQL)

如需詳細資訊,請參閱這些文章:

限制

  • 您無法在散發資料行上定義預設條件約束。
  • 數據表名稱不能大於 128 個字元。
  • 數據行名稱不能大於 128 個字元。

資料分割

數據分割數據行不能有僅限 Unicode 的定序。 例如,下列語句失敗:

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

如果boundary_value是必須隱含轉換成partition_column_name中數據類型的常值,則會發生差異。 常值會透過 Azure Synapse Analytics 系統檢視顯示,但轉換後的值會用於 Transact-SQL 作業。

暫存資料表

不支持開頭 ## 為的全域臨時表。

本機暫存資料表具有下列限制事項:

  • 只有目前的工作階段才能看見它們。 Azure Synapse Analytics 會在工作階段結束時自動將其卸除。 若要明確地將它們卸除,請使用 DROP TABLE 陳述式。
  • 無法將其重新命名。
  • 不能有資料分割或檢視。
  • 無法變更其權限。 GRANTDENYREVOKE 陳述式無法與本機暫存資料表搭配使用。
  • 系統會針對暫存資料表封鎖資料庫主控台命令。
  • 如果在批次內使用超過一個本機暫存資料表,每個資料表都必須有唯一的名稱。 如果在同一批次中執行多個工作階段,並建立相同的本機暫存資料表,Azure Synapse Analytics 會在內部將一個數字尾碼附加到本機暫存資料表名稱,以維持每個本機暫存資料表都有唯一的名稱。

鎖定行為

在資料表上取得獨佔鎖定。 在 DATABASE、SCHEMA 和 SCHEMARESOLUTION 物件上取得共用鎖定。

資料行範例

A. 指定資料行定序

在以下範例中,資料表 MyTable 是使用兩個不同的資料行定序所建立的。 依照預設,資料行 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. 指定資料行的預設條件約束

以下範例說明指定資料行預設值的語法。 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 的本機暫存資料表。 指定的資料表使用三部分名稱,開頭為 #。

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 資料表

以下範例會建立一個具有三個資料行且沒有資料分割的 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 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數據分割。 它會指定四個資料分割界限值,結果會產生五個資料分割。

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 RIGHT,而不是 RANGE LEFT (預設),資料將排序到下列資料分割:

  • 資料分割 1:col < 10
  • 資料分割 2:10 <= col < 20
  • 資料分割 3:20 <= col < 30
  • 資料分割 4:30 <= col < 40
  • 資料分割 5:40 <= col

J. 建立具有一個資料分割的資料分割資料表

以下範例會建立具有一個資料分割的資料分割資料表。 不會指定任何界限值,從而產生單一資料分割。

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 中的倉儲

CREATE TABLE (網狀架構數據倉儲)

在 Microsoft Fabric 的倉儲中建立新的數據表。

如需詳細資訊,請參閱 在 Microsoft Fabric 中建立倉儲上的數據表。

注意

如需 Microsoft Fabric 中的 SQL 資料庫,請參閱 CREATE TABLE。 針對 SQL Server 和 Azure SQL 平臺,請流覽 CREATE TABLE ,並從 [版本] 下拉式清單中選取所需的產品版本。 如需 Azure Synapse Analytics 和分析平台系統 (PDW) 的參考,請造訪 CREATE TABLE (Azure Synapse Analytics)。

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 中的資料類型

注意

類似於 SQL Server,每個資料列限制為 8060 個位元組。 對於具有許多數據行的數據表,或具有大型數據類型的數據行,例如 varchar(8000)varbinary(8000),這可能會成為封鎖問題。 插入或更新違反 8060 個位元組限制,將會導致錯誤碼 511 或 611。 如需詳細資訊,請參閱分頁與範圍架構指南

如需數據類型轉換的數據表,請參閱 CAST 和 CONVERT (Transact-SQL)隱含轉換一節。 如需詳細資訊,請參閱日期和時間數據類型和函式(Transact-SQL)。

下列支援的數據類型清單包含其詳細數據和記憶體位元組。

datetime2n
根據公曆,以 19 到 26 個字元儲存一天中的日期和時間。 日期可以包含年、月和日。 時間包含小時、分鐘、秒。 作為選項,您可以根據 n 參數儲存和顯示零到六位數的小數秒。 儲存體大小是 8 位元組。 n 必須是從 06 之間的值。

注意

沒有預設的有效位數與其他 SQL 平台一樣。 您必須提供從 06的有效位數值。

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 位元組。 日期會儲存為整數。

timen
n 必須是從 06 之間的值。

float [ ( n ) ]
用來搭配浮點數值資料使用的近似數字資料類型。 浮點數資料是近似的,這表示並非資料類型範圍內的所有值都能夠精確地表示。 n 指定用來以科學表示法儲存浮點數的位數。 n 可決定有效位數和儲存體大小。 如果指定 n,則其值必須介於 153 之間。 n 的預設值是 53

注意

沒有預設的有效位數與其他 SQL 平台一樣。 您必須提供從 06的有效位數值。

n Precision 儲存體大小
1-24 7 位數 4 個位元組
25-53 15 位數 8 個位元組

Azure Synapse Analytics 會將 n 當做兩個可能值的其中一個來處理。 如果 1<= n<= 24,則將 n 當作 24 來處理。 如果 25<= n<= 53,則將 n 當作 53 來處理。

Azure Synapse Analytics float 數據類型符合 n153的所有值 ISO 標準。 雙精確度的同義字是 float(53)。

real [ ( n ) ]
real 的定義和 float 相同。 real 的 ISO 同義字是 float(24)

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
儲存固定有效位數和小數位數的數字。

有效位數
可以在小數點任一端儲存的小數字數總數上限。 有效位數必須是從 1 到最大有效位數 38 之間的值。 預設有效位數是 18

scale
小數點右側所能儲存的最大十進位數。 小數位數必須是從 0有效位數 之間的值。 只有在已指定 precision 的情況下,您才能指定 scale。 預設小數位數為 0,因此 0<= scale<= precision。 最大儲存體大小會隨著有效位數而不同。

Precision 儲存體位元組
1-9 5
10-19 9
20-28 13
29-38 17

bigint | int | smallint
使用整數資料的 Exact-number 資料類型。 下表會顯示儲存體。

資料類型 儲存體位元組
bigint 8
int 4
smallint 2

bit
一種整數資料類型,其值有 10 或 NULL 幾種。 Azure Synapse Analytics 會將位元資料行的儲存最佳化。 如果資料表中的 bit 資料行小於或等於 8 個,這些資料行會儲存為 1 個位元組。 如果有 9 到 16 個 bit 資料行,則儲存為 2 個位元組,依此類推。

varchar[ ( n | MAX ) ] 可變長度、長度為 n 個字節的 Unicode 字元數據。 n 必須是從 18000 之間的值。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 n 的預設值是 1。 數據 varchar(MAX) 行最多可在倉儲中儲存 1 MB 的文字。

注意

varchar(MAX) 在倉儲中處於預覽狀態。 如需詳細資訊,請參閱 Microsoft Fabric 中的資料類型

char [ ( n ) ]
長度為 n 個字組的固定長度 Unicode 字元數據。 n 必須是從 18000 之間的值。 儲存體大小是 n 位元組。 n 的預設值是 1

varbinary [ ( n | MAX ) ] 可變長度的二進位資料。 n 可以是從 18000 之間的值。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 n 的預設值是 7。
數據 varbinary(MAX) 行最多可以將 1 MB 的數據儲存在倉儲中。

注意

varbinary(MAX) 在倉儲中處於預覽狀態。 如需詳細資訊,請參閱 Microsoft Fabric 中的資料類型

uniqueidentifier
這是 16 位元組的 GUID。

權限

Microsoft Fabric 中的許可權與 Azure Synapse Analytics 的許可權不同。

用戶必須是 Fabric 工作區中管理員、成員或參與者角色的成員。

限制

備註

倉儲中有有限的 Transact-SQL 功能。 如需詳細資訊,請參閱 Microsoft Fabric 中的 TSQL 介面區。

鎖定行為

取得數據表的架構修改鎖定、資料庫的共享鎖定,以及SCHEMA的架構穩定性鎖定。