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) 。
語法
-- 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+3 、CURRENT_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 規格由 RIGHT 到 RANGE 排序。 |
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,則其值必須介於 1
與 53
之間。 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 數據類型符合 n 從 1
到 53
的所有值 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
一種整數資料類型,其值有 1
、0
或 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 必須是從 1
到 4000
之間的值。 儲存體大小是 n 個位元組的兩倍。
varchar
[ ( n | max
) ] 可變長度、非 Unicode 字元數據,長度為 n 個字節。 n 必須是從 1
到 8000
之間的值。 max
表示儲存體大小上限是 2^31-1 個位元組 (2 GB)。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 長度 max
僅適用於 Azure Synapse Analytics。
char
[ ( n ) ]
長度為 n 位元組的固定長度非 Unicode 字元資料。 n 必須是從 1
到 8000
之間的值。 儲存體大小是 n 位元組。 n 的預設值是 1
。
varbinary
[ ( n | max
) ] 可變長度的二進位資料。 n 可以是從 1
到 8000
之間的值。 max
表示儲存體大小上限是 2^31-1 個位元組 (2 GB)。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 n 的預設值是 7。 長度 max
僅適用於 Azure Synapse Analytics。
binary
[ ( n ) ]
長度為 n 位元組的固定長度二進位資料。 n 可以是從 1
到 8000
之間的值。 儲存體大小是 n 位元組。 n 的預設值是 7
。
uniqueidentifier
這是 16 位元組的 GUID。
權限
建立資料表時需要 db_ddladmin
固定資料庫角色的權限,或:
- 資料庫的
CREATE TABLE
權限 ALTER SCHEMA
數據表架構的許可權
建立資料分割資料表時需要 db_ddladmin
固定資料庫角色的權限,或
ALTER ANY DATASPACE
權限
建立本機暫存資料表的登入會接收資料表的 CONTROL
、INSERT
、SELECT
和 UPDATE
權限。
備註
如需 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 陳述式。
- 無法將其重新命名。
- 不能有資料分割或檢視。
- 無法變更其權限。
GRANT
、DENY
和REVOKE
陳述式無法與本機暫存資料表搭配使用。 - 系統會針對暫存資料表封鎖資料庫主控台命令。
- 如果在批次內使用超過一個本機暫存資料表,每個資料表都必須有唯一的名稱。 如果在同一批次中執行多個工作階段,並建立相同的本機暫存資料表,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. 建立在多個資料行上哈希散發的資料表 (預覽)
以下範例會建立和上一個範例相同的資料表。 不過,在此資料表中,資料列會散發 (在 id
和 zipCode
資料行上)。 資料表是使用叢集資料行存放區索引建立的,可提供比堆積或資料列存放區叢集索引更好的效能和資料壓縮。
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'
))
);
相關內容
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)。
語法
-- 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)。
下列支援的數據類型清單包含其詳細數據和記憶體位元組。
datetime2
( n )
根據公曆,以 19 到 26 個字元儲存一天中的日期和時間。 日期可以包含年、月和日。 時間包含小時、分鐘、秒。 作為選項,您可以根據 n 參數儲存和顯示零到六位數的小數秒。 儲存體大小是 8 位元組。 n 必須是從 0
到 6
之間的值。
注意
沒有預設的有效位數與其他 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 必須是從 0
到 6
之間的值。
float
[ ( n ) ]
用來搭配浮點數值資料使用的近似數字資料類型。 浮點數資料是近似的,這表示並非資料類型範圍內的所有值都能夠精確地表示。 n 指定用來以科學表示法儲存浮點數的位數。 n 可決定有效位數和儲存體大小。 如果指定 n,則其值必須介於 1
與 53
之間。 n 的預設值是 53
。
注意
沒有預設的有效位數與其他 SQL 平台一樣。 您必須提供從 0
到 6
的有效位數值。
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 數據類型符合 n 從 1
到 53
的所有值 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
一種整數資料類型,其值有 1
、0
或 NULL 幾種。 Azure Synapse Analytics 會將位元資料行的儲存最佳化。 如果資料表中的 bit 資料行小於或等於 8 個,這些資料行會儲存為 1 個位元組。 如果有 9 到 16 個 bit 資料行,則儲存為 2 個位元組,依此類推。
varchar
[ ( n | MAX
) ] 可變長度、長度為 n 個字節的 Unicode 字元數據。 n 必須是從 1
到 8000
之間的值。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 n 的預設值是 1
。 數據 varchar(MAX)
行最多可在倉儲中儲存 1 MB 的文字。
注意
varchar(MAX)
在倉儲中處於預覽狀態。 如需詳細資訊,請參閱 Microsoft Fabric 中的資料類型。
char
[ ( n ) ]
長度為 n 個字組的固定長度 Unicode 字元數據。 n 必須是從 1
到 8000
之間的值。 儲存體大小是 n 位元組。 n 的預設值是 1
。
varbinary
[ ( n | MAX
) ] 可變長度的二進位資料。 n 可以是從 1
到 8000
之間的值。 儲存體大小是輸入資料的實際長度再加上 2 位元組。 n 的預設值是 7。
數據 varbinary(MAX)
行最多可以將 1 MB 的數據儲存在倉儲中。
注意
varbinary(MAX)
在倉儲中處於預覽狀態。 如需詳細資訊,請參閱 Microsoft Fabric 中的資料類型。
uniqueidentifier
這是 16 位元組的 GUID。
權限
Microsoft Fabric 中的許可權與 Azure Synapse Analytics 的許可權不同。
用戶必須是 Fabric 工作區中管理員、成員或參與者角色的成員。
限制
- 數據表名稱不能大於 128 個字元。
- Microsoft Fabric 中 Warehouse 中的數據表名稱不能包含字元
/
或\
結尾為.
。 - 數據行名稱不能大於 128 個字元。
- 數據表每個數據表最多有1,024個數據行。
- 倉儲中支援的預設定序為
Latin1_General_100_BIN2_UTF8
。 您也可以 建立不區分大小寫 (CI) 定序的倉儲 - Latin1_General_100_CI_AS_KS_WS_SC_UTF8。
備註
倉儲中有有限的 Transact-SQL 功能。 如需詳細資訊,請參閱 Microsoft Fabric 中的 TSQL 介面區。
鎖定行為
取得數據表的架構修改鎖定、資料庫的共享鎖定,以及SCHEMA的架構穩定性鎖定。