Synapse SQL 中的數據表數據類型
在本文中,您會發現在 Synapse SQL 專用集區中定義資料表數據類型的建議。
資料類型
Synapse SQL 專用集區支援最常用的數據類型。 如需支持的數據類型清單,請參閱 CREATE TABLE 語句中的數據類型 。 如需 Synapse SQL Serverless,請參閱在 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 不支援的數據類型,並提供替代選項,而不是不支援的數據類型。
不支援的資料類型 | 因應措施 |
---|---|
幾何 | varbinary |
地理位置 | varbinary |
hierarchyid | nvarchar(4000) |
image | varbinary |
text | varchar |
ntext | nvarchar |
sql_variant | 將資料行分割成數個強型別資料行。 |
table | 轉換成臨時表,或考慮使用 CETAS 將數據儲存至記憶體。 |
timestamp | 重新撰寫程式代碼以使用 datetime2 和 CURRENT_TIMESTAMP 函式。 僅支援常數做為預設值,因此current_timestamp無法定義為默認條件約束。 如果您需要從時間戳類型數據行移轉數據列版本值,請使用 BINARY(8) 或 VARBINARY(8) 作為 NOT NULL 或 NULL 數據列版本值。 |
xml | varchar |
用戶定義型別 | 可能時,請轉換回原生資料類型。 |
預設值 | 預設值僅支援常值和常數。 |
下一步
如需開發數據表的詳細資訊,請參閱 數據表概觀。