✅ 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 物件 | 不支援 | 動態,字串 |