Compartir a través de

Synapse SQL 中的表数据类型

本文包含关于在 Synapse SQL 专用池中定义表数据类型的建议。

数据类型

Synapse SQL 专用池支持最常用的数据类型。 有关受支持数据类型的列表,请参阅 CREATE TABLE 语句中的数据类型。 对于 Synapse SQL 无服务器,请参阅在 Azure Synapse Analytics 中使用无服务器 SQL 池查询存储文件如何在 Azure Synapse Analytics 中通过无服务器 SQL 池使用 OPENROWSET 这两篇文章

最大限度地减小行长度

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

  • 避免使用较大默认长度定义字符列。 例如,如果最长的值是 25 个字符,则将列定义为 VARCHAR(25)。
  • 仅需要 VARCHAR 时请避免使用 NVARCHAR。
  • 尽可能使用 NVARCHAR(4000) 或 VARCHAR(8000),而非 NVARCHAR(MAX) 或 VARCHAR(MAX)。
  • 避免使用小数位数为 0(零)的浮点数和小数。 这些应为 TINYINT、SMALLINT、INT 或 BIGINT。

注意

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

识别不支持的数据类型

如果从另一个 SQL 数据库迁移数据库,可能会遇到 Synapse 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')
 OR  y.[is_user_defined] = 1;

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

下面的列表显示了 Synapse SQL 不支持的数据类型,同时提供可替代不支持的数据类型的可用数据类型。

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

后续步骤

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