CREATE TABLE
适用于: Azure Synapse Analytics 分析平台系统 (PDW)
在 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 中的仓库的参考,请访问 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 池设计分布式表。
有关基于工作负载使用的最佳分发策略的建议,请参阅 Synapse SQL 分发顾问(预览版)。
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 表。
- 目前,SSMS 版本 19 及更高版本支持生成脚本来创建 MCD 表。
DISTRIBUTION = ROUND_ROBIN
:以轮循机制在所有分发上均匀地分发行。 这是 Azure Synapse Analytics 的默认行为。
DISTRIBUTION = REPLICATE
:将表的一个副本存储在每个 Compute 节点上。 对于 Azure Synapse Analytics,表存储在每个 Compute 节点上的分发数据库上。 对于 Analytics Platform System (PDW),表存储在跨 Compute 节点的 SQL Server 文件组中。 这是 Analytics Platform System (PDW) 的默认行为。
表分区选项
有关使用表分区的指南,请参阅在专用 SQL 池中对表进行分区。
PARTITION
( partition_column_name RANGE
[ LEFT
| RIGHT
] FOR VALUES
( [ boundary_value [,...n] ] ))
创建一个或多个表分区。 这些分区是水平表切片,可便于向行的子集应用操作,无论表是作为堆、聚集索引还是聚集列存储索引进行存储。 与分发列不同,表分区不确定存储每行的分发。 表分区决定行如何分组并存储在每个分发中。
参数 | 说明 |
---|---|
partition_column_name | 指定 Azure Synapse Analytics 用于对行进行分区的列。 此列可以是任何数据类型。 Azure Synapse Analytics 按升序对分区列值进行排序。 在 LEFT 规范中,由低到高的排序是从 RIGHT 到 RANGE 。 |
RANGE 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 中的数据在压缩到列存储段之前,不会进行排序。 使用 ORDER 创建 CCI 时,先对数据进行排序,然后再将其添加到索引段中,这样可以提高查询性能。 有关详细信息,请查看使用有序聚集列存储索引进行性能调整。
可以在 Azure Synapse Analytics 支持的任何数据类型的列(字符串列除外)上创建有序的 CCI。
用户可以查询 column_store_order_ordinal
表中排序的列 sys.index_columns
或列以及排序顺序中的序列。
有关详细信息,请查看使用有序聚集列存储索引进行性能调整。
数据类型
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 Analyticsfloat
数据类型从 到 之间的所有 n 值均符合 ISO 标准1
53
。 double precision 的同义词是 float(53)
。
real
[ ( n ) ]
real 的定义与 float 相同。 real
的 ISO 同义词为 float(24)
。
decimal
[ ( precision [ , scale ] ) ] | [ ( precision [ , scale ] ) ]numeric
存储固定的精度和小数位数。
精度
可存储的小数位数的最大总数,位于小数点的两侧。 该精度的取值范围必须为 1
到最大精度 38
。 默认精度为 18
。
scale
小数点右边可以存储的十进制数字的最大位数。 小数位数的取值范围必须为 到精度0
。 只有指定了精度,才能指定小数位数 。 默认确定位数为 0
;因此,0
<= 确定位数<= 精度。 最大存储大小基于精度而变化。
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
可以取值为 1
、0
或 `NULL 的 integer 数据类型。 Azure Synapse Analytics 可优化 bit 列的存储。 如果表中的 bit 列为 8 列或更少,这些列作为 1 个字节存储。 如果 bit 列为 9 到 16 列,这些列作为 2 个字节存储,以此类推。
nvarchar
[ ( n | max
) ] 可变长度的 Unicode 字符数据。 n 的取值范围为 1 至 4,000。 max
指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小(以字节为单位)是所输入字符个数的两倍 + 2 个字节。 已输入数据的长度可以为 0 个字符。 长度 max
仅适用于 Azure Synapse Analytics。
nchar
[ ( n ) ]
固定长度 Unicode 字符数据,长度为 n 个字节。 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 ) ]
固定长度非 Unicode 字符数据,长度为 n 个字节。 n 的取值范围必须为 1
到 8000
。 存储大小为 n 字节。 n 的默认值为 1
。
varbinary
[ ( n ) ] 可变长度二进制数据。 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 使用 60 个分发。 在 Analytics Platform System (PDW) 中,分发的数目取决于 Compute 节点的数目。
每个分发包含所有的表分区。 例如,如果有 60 个分发和 4 个表分区,再加上一个空分区,则会有 300 个分区 (5 x 60= 300)。 如果该表是一个群集列存储索引,每个分区将有一个列存储索引,这意味着你将拥有 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_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. 指定列的 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”的本地临时表。 此表的指定名称包含三个部分(以 # 开头)。
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. 创建已复制的表
以下示例创建一个类似于前面示例的已复制表。 将已复制表全部复制到每个 Compute 节点。 通过每个 Compute 节点上的副本,可以减少查询的数据移动。 此示例是使用 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 分区。 它指定了四个分区边界值,所以有五个分区。
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:列 <= 10
- 分区 2:10 < 列 <= 20
- 分区 3:20 < 列 <= 30
- 分区 4:30 < 列 <= 40
- 分区 5:40 < 列
如果将此同一个表分区为 RANGE RIGHT 而非 RANGE LEFT(默认),数据将分类到以下分区中:
- 分区 1:列 < 10
- 分区 2:10 <= 列 < 20
- 分区 3:20 <= 列 < 30
- 分区 4:30 <= 列 < 40
- 分区 5:40 <= 列
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 中的仓库中创建新表。
有关详细信息,请参阅在 Microsoft Fabric 中的仓库上创建表。
注意
有关 Azure Synapse Analytics 和 Analytics Platform System (PDW) 的参考,请访问 CREATE TABLE (Azure Synapse Analytics)。 有关 SQL Server 和 Azure SQL 平台,请访问 CREATE TABLE,并从版本下拉列表中选择所需的产品版本。
语法
-- 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 ) ]
| char [ ( n ) ]
| varbinary [ ( n ) ]
| uniqueidentifier
参数
database_name
将包含新表的数据库的名称。 默认为当前数据库。
schema_name
表的架构。 可选择指定架构 。 如果是空白,将使用默认架构。
table_name
新表的名称。
column_name
表列的名称。
列选项
NULL
| NOT NULL
指定列中是否允许使用 NULL
值。 默认为 NULL
。
数据类型
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 指定用于存储科学记数法中 尾数的字节数float
。 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 Analyticsfloat
数据类型从 到 之间的所有 n 值均符合 ISO 标准1
53
。 double precision 的同义词是 float(53)
。
real
[ ( n ) ]
real 的定义与 float 相同。 real
的 ISO 同义词为 float(24)
。
decimal
[ ( precision [ , scale ] ) ] | [ ( precision [ , scale ] ) ]numeric
存储固定的精度和小数位数。
精度
可存储的小数位数的最大总数,位于小数点的两侧。 该精度的取值范围必须为 1
到最大精度 38
。 默认精度为 18
。
scale
小数点右边可以存储的十进制数字的最大位数。 小数位数的取值范围必须为 到精度0
。 只有指定了精度,才能指定小数位数 。 默认确定位数为 0
;因此,0
<= 确定位数<= 精度。 最大存储大小基于精度而变化。
Precision | 存储字节数 |
---|---|
1-9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
bigint
| int
| smallint
使用整数数据的精确数字数据类型。 存储如下表所示。
数据类型 | 存储字节数 |
---|---|
bigint |
8 |
int |
4 |
smallint |
2 |
bit
可以取值为 1
、0
或 `NULL 的 integer 数据类型。 Azure Synapse Analytics 可优化 bit 列的存储。 如果表中的 bit 列为 8 列或更少,这些列作为 1 个字节存储。 如果 bit 列为 9 到 16 列,这些列作为 2 个字节存储,以此类推。
varchar
[ ( n ) ] 可变长度非 Unicode 字符数据,长度为 n 个字节。 n 的取值范围必须为 1
到 8000
。 存储大小是输入数据的实际长度加 2 个字节。 n 的默认值为 1
。
char
[ ( n ) ]
固定长度 Unicode 字符数据,长度为 n 个字节。 n 的取值范围必须为 1
到 8000
。 存储大小为 n 字节。 n 的默认值为 1
。
varbinary
[ ( n ) ] 可变长度二进制数据。 n 的取值范围为 1
到 8000
。 存储大小是输入数据的实际长度加 2 个字节。 n 的默认值为 7。
uniqueidentifier
16 字节 GUID。
权限
Microsoft Fabric 中的权限不同于 Azure Synapse Analytics 的权限。
用户必须是 Fabric 工作区中的管理员、成员或参与者角色的成员。
限制和局限
- 表名不能大于 128 个字符。
- Microsoft Fabric 中的仓库中的表名不能包含字符
/
或\
结尾。.
- 列名不能大于 128 个字符。
- 每个表最多包含 1,024 列。
- 仓库中支持的默认排序规则Latin1_General_100_BIN2_UTF8。 还可以 创建不区分大小写 (CI) 排序规则的仓库 - Latin1_General_100_CI_AS_KS_WS_SC_UTF8。
注解
仓库中的 Transact-SQL 功能有限。 有关详细信息,请参阅 Microsoft Fabric 中的 TSQL 外围应用。
锁定行为
对表采用 Schema-Modification 锁,对 DATABASE 采用共享锁,对 SCHEMA 采用架构稳定性锁。