Azure Synapse Analytics 中专用 SQL 池(以前称为 SQL DW)的表数据类型

本文涵盖了在专用 SQL 池中定义表数据类型的建议。

支持的数据类型

专用 SQL 池(以前称为 SQL DW)支持最常用的数据类型。 有关受支持数据类型的列表,请参阅 CREATE TABLE 语句中的数据类型

最大限度地减小行长度

最大限度地减小数据类型大小可以缩短行长度,从而获得更好的查询性能。 使用适合数据的最小数据类型。

  • 避免使用较大默认长度定义字符列。 例如,如果最长的值是 25 个字符,则将列定义为 VARCHAR(25)。
  • 仅需要 VARCHAR 时请避免使用 NVARCHAR
  • 尽可能使用 NVARCHAR(4000) 或 VARCHAR(8000),而非 NVARCHAR(MAX) 或 VARCHAR(MAX)。

如果使用 PolyBase 外部表来加载表,则定义的表行长度不能超过 1 MB。 当数据长度可变的行超过 1 MB 时,可使用 BCP 而不是 PolyBase 加载行。

识别不支持的数据类型

如果从另一个 SQL 数据库迁移你的数据库,你可能会发现专用 SQL 池不支持的数据类型。 可以使用以下查询查明现有 SQL 架构不支持的数据类型:

SELECT  t.[name], c.[name], c.[system_type_id], c.[user_type_id], y.[is_user_defined], y.[name]
FROM sys.tables  t
JOIN sys.columns c on t.[object_id]    = c.[object_id]
JOIN sys.types   y on c.[user_type_id] = y.[user_type_id]
WHERE y.[name] IN ('geography','geometry','hierarchyid','image','text','ntext','sql_variant','xml')
 AND  y.[is_user_defined] = 1;

对不受支持的数据类型的解决方法

以下列表显示了专用 SQL 池(以前称为 SQL DW)不支持的数据类型,同时提供了不受支持的数据类型的有效替代数据类型。

不支持的数据类型 解决方法
geometry varbinary
geography varbinary
hierarchyid nvarchar(4000)
image varbinary
text varchar
ntext nvarchar
sql_variant 将列拆分成多个强类型化列。
table 转换成暂时表。
timestamp 重写代码来使用 datetime2CURRENT_TIMESTAMP 函数。 仅支持使用常量作为默认值,因此,不能将 current_timestamp 定义为默认约束。 如果需要从 timestamp 类型的列迁移行版本值,请为 NOT NULL 或 NULL 行版本值使用 BINARY(8) 或 VARBINARY(8)。
xml varchar
用户定义的类型 尽可能转换回本机数据类型。
默认值 默认值仅支持文本和常量。

后续步骤

有关开发表的详细信息,请参阅表概述