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 重新撰寫程式代碼以使用 datetime2CURRENT_TIMESTAMP 函式。 僅支援常數做為預設值,因此current_timestamp無法定義為默認條件約束。 如果您需要從時間戳類型數據行移轉數據列版本值,請使用 BINARY(8) 或 VARBINARY(8) 作為 NOT NULL 或 NULL 數據列版本值。
xml varchar
用戶定義型別 可能時,請轉換回原生資料類型。
預設值 預設值僅支援常值和常數。

下一步

如需開發數據表的詳細資訊,請參閱 數據表概觀