資料類型 (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 物件 不支援 動態,字串