你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Tip
Microsoft Fabric Data Warehouse是数据湖基础上的企业规模关系仓库,具有未来就绪的体系结构、内置 AI 和新功能。 如果不熟悉数据仓库,请从Fabric Data Warehouse开始。 现有的指定 SQL 池工作负荷可以升级到 Fabric,以跨数据科学、实时分析和报告访问新功能。
本文包含关于在 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 | 重写代码来使用 datetime2 和 CURRENT_TIMESTAMP 函数。 仅支持常量作为默认值,因此,不能将 current_timestamp 定义为默认约束。 如果需要从 timestamp 类型的列迁移行版本值,请为 NOT NULL 或 NULL 的行版本值使用 BINARY(8) 或 VARBINARY(8)。 |
| xml | varchar |
| 用户定义的类型 | 尽可能转换回原始数据类型。 |
| 默认值 | 默认值仅支持文本和常量。 |
相关内容
有关开发表的详细信息,请参阅开发概述。