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)

注意

Azure Synapse 分析中的无服务器 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 ] )
将表存储为具有一个或多个键列的聚集索引。 此行为按行存储数据。 在索引中使用 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 规范中,由低到高的排序是从 RIGHTRANGE
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,它必须是介于 之间的某个值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 Analyticsfloat 数据类型从 之间的所有 n 值均符合 ISO 标准153。 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
可以取值为 10 或 `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 的取值范围必须为 14000。 存储大小为 n 字节的两倍。

varchar [ ( n | max ) ] 长度可变的非 Unicode 字符数据,长度为 n 字节。 n 的取值范围必须为 18000max 指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小是输入数据的实际长度加 2 个字节。 长度 max 仅适用于 Azure Synapse Analytics。

char [ ( n ) ]
固定长度非 Unicode 字符数据,长度为 n 个字节。 n 的取值范围必须为 18000。 存储大小为 n 字节。 n 的默认值为 1

varbinary [ ( n ) ] 可变长度二进制数据。 n 的取值范围为 18000max 指示最大存储大小是 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) 中,分发的数目取决于 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 语句。
  • 无法重命名它们。
  • 它们不得有分区或视图。
  • 无法更改它们的权限。 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. 指定列的 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. 创建一个在多个列上哈希分布的表(预览版)

以下示例创建与上面的示例相同的表。 但是,对于此表,行为分布式(idzipCode 列)。 该表是使用聚集列存储索引创建的,它能提供比堆或行存储聚集索引更好的性能和数据压缩。

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 中的仓库中创建新表。

有关详细信息,请参阅在 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 ) ] 
    | 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 的取值范围必须为 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 个字节。 日期存储为整数。

time ( n )
n 的取值范围必须为 06

float [ ( n ) ]
用于表示浮点数值数据的近似数值数据类型。 浮点数据为近似值;也就是说,并非数据类型范围内的所有值都能精确地表示。 n 指定用于存储科学记数法中 尾数的字节数float。 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 Analyticsfloat 数据类型从 之间的所有 n 值均符合 ISO 标准153。 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
可以取值为 10 或 `NULL 的 integer 数据类型。 Azure Synapse Analytics 可优化 bit 列的存储。 如果表中的 bit 列为 8 列或更少,这些列作为 1 个字节存储。 如果 bit 列为 9 到 16 列,这些列作为 2 个字节存储,以此类推。

varchar [ ( n ) ] 可变长度非 Unicode 字符数据,长度为 n 个字节。 n 的取值范围必须为 18000。 存储大小是输入数据的实际长度加 2 个字节。 n 的默认值为 1

char [ ( n ) ]
固定长度 Unicode 字符数据,长度为 n 个字节。 n 的取值范围必须为 18000。 存储大小为 n 字节。 n 的默认值为 1

varbinary [ ( n ) ] 可变长度二进制数据。 n 的取值范围为 18000。 存储大小是输入数据的实际长度加 2 个字节。 n 的默认值为 7。

uniqueidentifier
16 字节 GUID。

权限

Microsoft Fabric 中的权限不同于 Azure Synapse Analytics 的权限。

用户必须是 Fabric 工作区中的管理员、成员或参与者角色的成员。

限制和局限

注解

仓库中的 Transact-SQL 功能有限。 有关详细信息,请参阅 Microsoft Fabric 中的 TSQL 外围应用

锁定行为

对表采用 Schema-Modification 锁,对 DATABASE 采用共享锁,对 SCHEMA 采用架构稳定性锁。