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 |
使用者定義型別 | 可能時,請轉換回原生資料類型。 |
預設值 | 預設值僅支援常值和常數。 |
相關內容
如需開發數據表的詳細資訊,請參閱 開發概觀。