CREATE TABLE

适用于: Azure Synapse Analytics 分析平台系统 (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 分析中的无服务器 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 中有序聚集列存储索引的详细信息,请参阅 使用有序聚集列存储索引进行性能优化。

可以在 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 Analytics 浮点型数据类型符合来自 n 1 53的所有值的 ISO 标准。 双精度的同义词是 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 容量限制

确定表分区的数目

每个用户定义表划分为多个较小的表,这些表存储在称为“分发”的不同位置上。 Azure Synapse Analytics 使用 60 个分发。 在 Analytics Platform System (PDW) 中,分发的数目取决于 Compute 节点的数目。

每个分发包含所有的表分区。 例如,如果有 60 个分发和 4 个表分区,再加上一个空分区,则会有 300 个分区 (5 x 60= 300)。 如果该表是一个群集列存储索引,每个分区将有一个列存储索引,这意味着你将拥有 300 个列存储索引。

我们建议使用更少的表分区,确保每个列存储索引具有足够的行以充分利用列存储索引的优势。 有关 Azure Synapse Analytics 中的详细信息,请参阅 Azure Synapse Analytics 中专用 SQL 池表上的分区表和专用 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 中所示相同的表,并添加对列的RANGE LEFTid分区。 它指定了四个分区边界值,所以有五个分区。

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 中的仓库

CREATE TABLE (Fabric 数据仓库)

在 Microsoft Fabric 中的仓库中创建新表。

有关详细信息,请参阅在 Microsoft Fabric 中的仓库上创建表

注意

有关 Microsoft Fabric 中的 SQL 数据库,请参阅 CREATE TABLE。 对于 SQL Server 和 Azure SQL 平台,请访问 CREATE TABLE ,并从版本下拉列表中选择所需的产品版本。 有关 Azure Synapse Analytics 和 Analytics Platform System (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)。

以下受支持的数据类型的列表包含其详细信息和存储字节。

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 指定用于以科学表示法存储浮点数的位数。 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 浮点型数据类型符合来自 n 1 53的所有值的 ISO 标准。 双精度的同义词是 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。 该 varchar(MAX) 列最多可在仓库中存储 1 MB 的文本。

注意

varchar(MAX) 在 Warehouse 中处于预览状态。 有关详细信息,请参阅 Microsoft Fabric 中的数据类型

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

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

注意

varbinary(MAX) 在 Warehouse 中处于预览状态。 有关详细信息,请参阅 Microsoft Fabric 中的数据类型

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 采用架构稳定性锁。