資料類型 (Azure Stream Analytics)
在 Azure 串流分析中,每個記錄都有相關的資料類型。 資料類型描述 (,並限制) 該類型記錄可以保存的值集,或該類型的運算式可以產生。
請注意,它是具有類型而非資料行的記錄。 資料行的每個記錄都可以有不同的類型。 如果對大部分的應用程式而言,這會讓架構漂移案例和其他不尋常的輸入模式直接處理。
支援的資料類型
以下是支援的資料類型清單。
Data type | 說明 |
---|---|
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 以外的值。 |
Datetime | 定義以 24 小時制為基礎且相對於 UTC (時區位移 0) 的 (7 位數、100 奈秒有效位數) 與一天時間結合的日期。 |
bit | 整數,可接受值為 1、0 或 Null。 相容性 層級 1.2 和更新版本支援此功能。 |
記錄 (record) | 設定名稱/值組。 值必須是支援的資料類型。 |
array | 已排序的值集合。 值必須是支援的資料類型。 |
您可以聯結 (或比較 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) Null | (FLOAT) Null |
(FLOAT) 0.0 | (BIT) 0 |
(FLOAT) 任何其他值 | (BIT) 1 |
(FLOAT) Null | (BIT) Null |
類型對應和序列化格式
資料類型 | 中的 CSV | CSV 輸出 | 中的 JSON | JSON 輸出 | Avro in | Avro out |
---|---|---|---|---|---|---|
bigint | 轉換為 64 位元帶正負號整數的字串 | 使用作業文化特性轉換成字串的 64 位帶正負號整數 | number:轉換成 64 位帶正負號整數的整數; 布林值:在 相容性層級 1.1 和以下的 「false」 轉換成 0,「true」 會轉換成 1 |
數位:整數 | long 和 int 轉換成 64 位帶正負號的整數; 布林值:在 相容性層級 1.1 和以下 false 會轉換成 0,true 會轉換成 1 |
long |
float | 轉換為 64 位元帶正負號浮點數的字串 | 使用作業文化特性轉換成字串的 64 位帶正負號浮點數 | 數值:轉換為 64 位元帶正負號浮點數的分數 | 數值:分數 | 轉換為 64 位元帶正負號浮點數的 double 和 float | double |
nvarchar(max) | 字串 | 字串 | 字串 | 字串 | 字串 | 字串 |
datetime | 轉換為遵循 ISO 8601 標準之日期時間的字串 | 使用 ISO 8601 標準的字串 | 轉換為遵循 ISO 8601 標準之日期時間的字串 | 轉換為採用 ISO 8601 標準之字串的日期時間 | 轉換為遵循 ISO 8601 標準之日期時間的字串 | 轉換為採用 ISO 8601 標準之字串的日期時間 |
bit (相容性層級 1.2 和更新版本) | 字串 「true」、「false」 或 「null」 會轉換成整數值 1、0 或對應為 null | 轉換成字串 「true」 或 「false」 | 布林值:「false」 轉換成 0,「true」 轉換成 1 | 布林值:布林值 | 布林值:false 會轉換為 0,true 會轉換為 1 | boolean |
記錄 | N/A | 不支援的 「Record」 字串會輸出 | JSON 物件 | JSON 物件 | Avro 記錄類型 | Avro 記錄類型 |
array | N/A | 不支援輸出 「Array」 字串 | JSON 物件 | JSON 物件 | Avro 記錄類型 | Avro 記錄類型 |
注意
Parquet 不需要轉換資料類型。
寫入結構化資料存放區時的類型對應
資料類型 | SQL | Power BI | Azure Cosmos DB | PostgreSQL | Azure 資料總管 |
---|---|---|---|---|---|
bigint | Bigint、int、Smallint、Tinyint、all string types (Ntext、Nvarchar、char、...) | 是 | numeric:integer | BIGINT | dynamic, int, long |
float | float, real, decimal, numeric, all string types ( Ntext, Nvarchar, char, ...) | 是 | 數值:分數 | 雙精確度,數值。 限制為 1.78E+308 | 動態、實數、雙精度浮點數 |
nvarchar(max) | 所有字串類型 (Ntext、Nvarchar、char、uniqueidentifier...) | 是 | 字串 | 字元不同,文字 | 動態,字串 |
datetime | datetime、datetime2、datetimeoffset、所有字串類型 ( Ntext、Nvarchar、char、...) | 是 | 轉換為採用 ISO 8601 標準之字串的日期時間 | timestamp, time。 支援時區選項,但不會提供時區 | dynamic, string, datetime |
bit (相容性層級 1.2 和更新版本) | Bigint、int、Smallint、Tinyint、bit、all string types (Ntext、Nvarchar、char、...) | 是 | 布林值:1 會轉換成 true,0 轉換為 false | bit | dynamic、 bool |
記錄 | 不支援的 「Record」 字串會輸出 | 不支援的 「Record」 字串會輸出 | JSON 物件 | 不支援 | dynamic, bool, long, datetime, byte array, real, double, string |
array | 不支援輸出 「Array」 字串 | 不支援輸出 「Array」 字串 | JSON 物件 | 不支援 | 動態,字串 |