共用方式為


數據類型

✅ Azure 串流分析 ✅ 網狀架構事件串流

每個記錄都有相關的數據類型。 數據類型描述一組值,該類型的記錄可以保存或該型別的表達式可以產生。

請注意,這是具有類型而非數據行的記錄。 數據行的每個記錄都可以有不同的類型。 如果對於大多數應用程式而言,這會讓架構漂移案例和其他不尋常的類型模式直接處理,這將會是透明的。

支援的數據類型

以下是支持的數據類型清單。

資料類型 說明
Bigint 範圍 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 的整數(9,223,372,036,854,775,807)。
float 範圍中的浮點數 - 1.79E+308 到 -2.23E-308、0 和 2.23E-308 到 1.79E+308。 浮點十進位值通常沒有確切的二進位表示法。 可能會遺失精確度。 這不是 Azure 串流分析特有的,而是在所有浮點數實作中發生。
nvarchar(max) 由 Unicode 字元組成的文字值。 注意:不支援 max 以外的值。
日期時間 定義以24小時制和相對於UTC時間(時區位移0)為基礎的小數秒(7位數、100奈秒精確度)結合的日期。
位元 整數,可接受 1、0 或 NULL 的值。 這在 相容性層級 1.2 和更新版本中受到支援。
資料列 一組名稱/值組。 值必須是支持的數據類型。
陣列 值的已排序集合。 值必須是支持的數據類型。

您可以聯結 (或比較) bigint 和 float 數據類型。 在所有情況下,它都會正常運作,但無法表示的非常大型 bigint 值的情況除外。

備註

當讀取超出範圍的 bigint 數據類型時,Azure 串流分析支援,您的串流分析作業將無法使用錯誤訊息還原串行化事件: InputDeserializationError。 您可以預先處理數據,並將其轉換成字串。 其中一個選項是使用 Azure 函式預先處理數據,並將這類大型整數轉換成字串。

類型轉換

以下是管理 資料類型轉換的規則:

  • 在輸入讀取和輸出寫入作業期間沒有有效位數遺失的轉換是隱含的,而且一律會成功
  • 輸出寫入作業內的精確度遺失和溢位是由設定的錯誤原則處理(設定為Drop或 Retry)
  • 錯誤原則會處理輸出寫入作業期間發生的類型轉換錯誤
  • 輸入讀取作業期間發生的類型轉換錯誤會導致作業卸除事件

將值轉換成 float 時,可能會遺失精確度。 它並非專屬於 Azure 串流分析,而是一般適用於 float 數據類型。 因此,它不會被視為錯誤。 在需要保存每個數字的情況下,數據應該讀取為字串。

轉換數據

串流 SQL 語言中有四個函式可用於觀察和調整您數據的數據類型。

  • CAST :將單一數據行轉換成指定的類型 - 在轉換錯誤的情況下,作業將會失敗
  • TRY_CAST :將單一數據行轉換成指定的類型 - 錯誤會以 NULL 的形式傳遞。 如需最佳使用方式,請參閱輸入驗證TRY_CAST
  • CREATE TABLE :定義輸入的單一明確架構。 具有轉換錯誤的數據列會從數據流中移除
  • GetType :傳回數據行的類型

在大部分的使用案例中,建議的選項是使用 TRY_CAST。 此函式會藉由確保輸出類型來保護下游處理,同時藉由以 NULL 取代錯誤值來防止資料遺失。 數據列不會卸除,而且原始值仍可投影在另一個數據行中。

對於強式保證,建議的選項是使用 CREATE TABLE。 此方法允許通知指定輸入的架構作業,且沒有偏差風險。 取捨在於只有單一架構可以在指定的輸入上定義,而且將會卸除不符合規範的數據列。

可能的話,所有轉型作業都應該透過這些函式明確完成,而不是在其他函式中以隱含方式(無訊息方式)完成。 這可避免 SQL 資料庫等強型別輸出的類型不符、非預期的行為和插入錯誤。 如需如何保護主要查詢邏輯免於發生這類錯誤,請參閱 輸入驗證

轉換成位

值將會以下列規則在 float 和 bit 之間轉換:

寄件者 發往
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT)零 (FLOAT)零
(FLOAT) 0.0 (BIT) 0
(FLOAT) 任何其他值 (BIT) 1
(FLOAT)零 (BIT)零

型別對應和串行化格式

數據類型 中的 CSV CSV 輸出 中的 JSON JSON 輸出 Avro 在 阿夫羅出局
bigint 字串轉換成64位帶正負號的整數 使用作業文化特性轉換成字串的64位帶正負號整數 number:整數轉換為 64 位帶正負號的整數;

布爾值:在 相容性層級 1.1 和以下的 “false” 轉換為 0,“true” 會轉換成 1
number:integer long 和 int 轉換成 64 位帶正負號的整數;

布爾值:在 相容性層級 1.1 和以下 false 會轉換成 0,true 會轉換成 1
浮動 轉換成64位帶正負號浮點數的字串 使用作業文化特性轉換成字串的64位帶正負號浮點數 number:分數轉換為64位帶正負號浮點數 number:fraction double 和 float 轉換為 64 位帶正負號浮點數 雙倍
nvarchar(max) 字串 字串 字串 字串 字串 字串
datetime 在 ISO 8601 標準之後轉換成 datetime 的字串 使用 ISO 8601 標準的字串 在 ISO 8601 標準之後轉換成 datetime 的字串 使用 ISO 8601 標準轉換成字串的 datetime 在 ISO 8601 標準之後轉換成 datetime 的字串 使用 ISO 8601 標準轉換成字串的 datetime
bit相容性層級 1.2 和更新版本) 字串 “true”、“false” 或 “null” 會轉換成整數值 1、0 或對應 Null 轉換成字串 “true” 或 “false” 布爾值:「false」 轉換為 0,“true” 轉換為 1 布爾值:布爾值 布爾值:false 轉換為 0,true 會轉換成 1 布爾值
記錄 N/A 不支援輸出 「Record」 字串 JSON 物件 JSON 物件 Avro 記錄類型 Avro 記錄類型
陣列 N/A 不支援輸出 「Array」 字串 JSON 物件 JSON 物件 Avro 記錄類型 Avro 記錄類型

備註

Parquet 不需要轉換數據類型。

寫入結構化數據存放區時的類型對應

數據類型 SQL Power BI Azure Cosmos DB PostgreSQL Azure Data Explorer
bigint bigint、int、smallint、tinyint、all string types(ntext、nvarchar、char、...) 是的 numeric:integer Bigint

如果資料行類型是smallint或integer,則會出現「二進位資料格式不正確」錯誤。
dynamic, int, long
浮動 float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) 是的 number:fraction 雙精確度,數值。 限制為 1.78E+308

如果列類型為實數,則會出現錯誤「二進位資料格式不正確」。
動態、實數、雙精度浮點數
nvarchar(max) 所有字串類型(ntext、nvarchar、char、uniqueidentifier...) 是的 字串 character varying, text 動態,字串
datetime datetime、datetime2、datetimeoffset、所有字串類型 (ntext、nvarchar、char、...) 是的 使用 ISO 8601 標準轉換成字串的 datetime UTC 時間戳記的 timestamptz,否則時間戳記 dynamic, string, datetime
bit相容性層級 1.2 和更新版本) bigint、int、smallint、tinyint、bit、all string types (ntext、nvarchar、char、...) 是的 布爾值:1 會轉換成 true,0 轉換為 false 位元 dynamic、 bool
記錄 不支援輸出 「Record」 字串 不支援輸出 「Record」 字串 JSON 物件 不支援 dynamic, bool, long, datetime, byte array, real, double, string
陣列 不支援輸出 「Array」 字串 不支援輸出 「Array」 字串 JSON 物件 不支援 動態,字串