适用于:
Azure Synapse Analytics
分析平台系统 (PDW)
讯享网
在 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中创建新表。
若要了解表以及如何使用它们,请参阅 Azure Synapse Analytics 中的表。
除非另有说明,否则本文中有关 Azure Synapse Analytics 的讨论适用于 Azure Synapse Analytics 和 Analytics Platform System (PDW)。
Transact-SQL 语法约定
讯享网
database_name
将包含新表的数据库的名称。 默认为当前数据库。
schema_name
表的架构。 可选择指定架构 。 如果是空白,将使用默认架构。
table_name
新表的名称。 若要创建本地临时表,请在表名前加上 。 有关临时表的说明和指南,请参阅 Azure Synapse Analytics 中的专用 SQL 池中的临时表。
column_name
表列的名称。
Windows_collation_name
指定表达式的排序规则。 此排序规则必须是 SQL Server 支持的 Windows 排序规则之一。 有关 SQL Server 支持的 Windows 排序规则列表,请参阅 Windows 排序规则名称(Transact-SQL)。
[ constraint_name ] constant_expression
指定默认列值。
有关选择表类型的指南,请参阅为 Azure Synapse Analytics 中的表编制索引。
将表存储为聚集列存储索引。 聚集列存储索引应用于所有表数据。 这是 Azure Synapse Analytics 的默认行为。
:将表存储为堆。 这是 Analytics Platform System (PDW) 的默认行为。
:此选项已遭弃用。 虽然在语法上可接受,但已不再需要它,而且它也不再影响行为。
若要了解如何选择**分发方法并使用分布式表,请参阅在 Azure Synapse Analytics 中使用专用 SQL 池设计分布式表。
有关基于工作负载使用的**分发策略的建议,请参阅 Synapse SQL 分发顾问(预览版)。
(distribution_column_name ):通过哈希处理 distribution_column_name 中存储的值,将每行都分配到一个分发。 算法是确定性的。也就是说,它总是将相同的值哈希到相同的分发。 应将分发列定义为 NOT NULL,因为所有包含 NULL 值的行都分配到相同的分发。
根据最多八列的哈希值分布行,从而更均匀地分布基表数据,减少随着时间推移出现的数据倾斜并提高查询性能。
:以轮循机制在所有分发上均匀地分发行。 这是 Azure Synapse Analytics 的默认行为。
:将表的一个副本存储在每个 Compute 节点上。 对于 Azure Synapse Analytics,表存储在每个 Compute 节点上的分发数据库上。 对于 Analytics Platform System (PDW),表存储在跨 Compute 节点的 SQL Server 文件组中。 这是 Analytics Platform System (PDW) 的默认行为。
有关使用表分区的指南,请参阅在专用 SQL 池中对表进行分区。
( partition_column_name [ | ] ( [ boundary_value [,...n] ] ))
创建一个或多个表分区。 这些分区是水平表切片,可便于向行的子集应用操作,无论表是作为堆、聚集索引还是聚集列存储索引进行存储。 与分发列不同,表分区不确定存储每行的分发。 表分区决定行如何分组并存储在每个分发中。
如果你指定 子句,但不指定边界值,Azure Synapse Analytics 会创建包含一个分区的已分区表。 如果适用,稍后可以将表拆分成两个分区。
如果指定一个边界值,生成的表格有两个分区;一个用于低于边界值的值,另一个用于高于边界值的值。 如果你将分区移到未分区表中,未分区表会接收数据,但它的元数据中不会有分区边界。
有关示例,请参阅 “创建分区表”。
聚集列存储索引 (CCI) 是用于在 Azure Synapse Analytics 中创建表的默认索引。 CCI 中的数据在压缩到列存储段之前,不会进行排序。 使用 ORDER 创建 CCI 时,先对数据进行排序,然后再将其添加到索引段中,这样可以提高查询性能。 有关 Azure Synapse Analytics 中有序聚集列存储索引的详细信息,请参阅 使用有序聚集列存储索引进行性能优化。
可以在 Azure Synapse Analytics 支持的任何数据类型的列(字符串列除外)上创建有序的 CCI。
用户可以查询 表中排序的列 或列以及排序顺序中的序列。
有关详细信息,请查看使用有序聚集列存储索引进行性能调整。

Azure Synapse Analytics 支持最常用的数据类型。 要更好地理解数据类型以及如何使用它们,请参阅 Azure Synapse Analytics 中表的数据类型。
有关数据类型转换的表,请参阅 CAST 和 CONVERT (Transact-SQL) 的“隐式转换”部分。 有关详细信息,请参阅日期和时间数据类型和函数(Transact-SQL)。
以下受支持的数据类型的列表包含其详细信息和存储字节:
Azure Synapse Analytics 将 n 视为下列两个可能值之一 。 如果 <= n<= ,将 n 视为 。 如果 <= n<= ,将 n 视为 。
Azure Synapse Analytics 浮点型数据类型符合来自 n 的所有值的 ISO 标准。 双精度的同义词是 float(53)。
[ ( precision [ , scale ] ) ] | [ ( precision [ , scale ] ) ]
存储固定的精度和小数位数。
精度
可存储的小数位数的最大总数,位于小数点的两侧。 该精度的取值范围必须为 到最大精度 。 默认精度为 。
scale
小数点右边可以存储的十进制数字的最大位数。 小数位数的取值范围必须为 到精度 。 只有指定了精度,才能指定小数位数 。 默认确定位数为 ;因此,<= 确定位数<= 精度。 最大存储大小基于精度而变化。
[ ( n | ) ] 可变长度的 Unicode 字符数据。 n 的取值范围为 1 至 4,000。 指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小(以字节为单位)是所输入字符个数的两倍 + 2 个字节。 已输入数据的长度可以为 0 个字符。 长度 仅适用于 Azure Synapse Analytics。
[ ( n | ) ] 长度可变的非 Unicode 字符数据,长度为 n 字节。 n 的取值范围必须为 到 。 指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小是输入数据的实际长度加 2 个字节。 长度 仅适用于 Azure Synapse Analytics。
[ ( n ) ] 可变长度二进制数据。 n 的取值范围为 到 。 指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小是输入数据的实际长度加 2 个字节。 n 的默认值为 7。 长度 仅适用于 Azure Synapse Analytics。
创建表需要 固定数据库角色的权限,或者:
- 数据库的 权限
- 对表架构的权限
创建已分区表需要 固定数据库角色的权限,或者
- 权限
创建本地临时表的登录名在该表上获取 和 权限。
有关 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)。

有关详细信息,请参阅以下文章:
- 列存储索引的新增功能
- 为 Azure Synapse Analytics 中的表编制索引
- 列存储索引:概述
- 无法对分发列定义 DEFAULT 约束。
- 表名不能超过 128 个字符。
- 列名不能超过 128 个字符。
分区列无法使用仅 Unicode 排序规则。 例如,以下语句将失败:
讯享网
如果 boundary_value 是必须隐式转换为 partition_column_name 中数据类型的文本值,会出现差异。 通过 Azure Synapse Analytics 系统视图显示文本值,但转换后的值用于 Transact-SQL 操作。
不支持以 开头的全局临时表。
本地临时表具有以下限制和约束:
- 它们仅对当前会话可见。 在会话末尾 Azure Synapse Analytics 会自动删除它们。 若要显式删除它们,请使用 DROP TABLE 语句。
- 无法重命名它们。
- 它们不得有分区或视图。
- 无法更改它们的权限。 、 和 语句无法用于本地临时表。
- 为临时表阻止数据库控制台命令。
- 如果批处理中使用多个本地临时表,每个临时表都必须具有唯一的名称。 如果多个会话正在运行同一批处理并创建相同的本地临时表,Azure Synapse Analytics 会以内部方式为本地临时表名追加一个数字后缀,为每个本地临时表保留唯一的名称。
对表采用排他锁。 在 DATABASE、SCHEMA、SCHEMARESOLUTION 对象上采用共享锁。
在以下示例中,使用两种不同的列排序规则创建表 。 默认情况下,列 具有默认的排序规则 Latin1_General_100_CI_AS_KS_WS。 列 具有排序规则 Frisian_100_CS_AS。
以下示例显示了为列指定默认值的语法。 colA 列有一个名为 constraint_colA 的默认约束以及一个默认值 0。
讯享网
下面的示例创建名为“#myTable”的本地临时表。 此表的指定名称包含三个部分(以 # 开头)。
以下示例创建一个具有聚集列存储索引的分布式表。 将每个分发存储为一个列存储。
聚集列存储索引不影响数据的分发方式;数据始终按行分发。 聚集列存储索引影响数据在每个分发中的存储方式。
讯享网
下面的示例展示了如何创建有序聚集列存储索引。 索引的排序依据 。
以下示例创建 ROUND_ROBIN 表,其中包含三列并且没有分区。 数据分布在所有分发中。 该表是使用 CLUSTERED COLUMNSTORE INDEX 创建的,它能提供比堆或行存储聚集索引更好的性能和数据压缩。
讯享网
以下示例创建与上面的示例相同的表。 但是,对于此表,行为分布式( 和 列)。 该表是使用聚集列存储索引创建的,它能提供比堆或行存储聚集索引更好的性能和数据压缩。
以下示例创建一个类似于前面示例的已复制表。 将已复制表全部复制到每个 Compute 节点。 通过每个 Compute 节点上的副本,可以减少查询的数据移动。 此示例是使用 CLUSTERED INDEX 进行创建,可实现比堆更好的数据压缩。 堆可能没有足够的行来实现良好的 CLUSTERED COLUMNSTORE INDEX 压缩。
讯享网
以下示例创建与示例 A 中所示相同的表,并添加对列的分区。 它指定了四个分区边界值,所以有五个分区。
在此示例中,数据将分类到以下分区中:
- 分区 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 <= 列
以下示例使用一个分区创建已分区表。 它不指定任何边界值,所以有一个分区。
讯享网
以下示例创建一个名为 的新表,并在 列上进行分区。 使用 RANGE RIGHT 和日期作为边界值,它将在每个分区中放置一个月的数据。
- CREATE TABLE AS SELECT
- DROP TABLE (Transact-SQL)
- ALTER TABLE (Transact-SQL)
- sys.index_columns (Transact-SQL)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170098.html