データ型 (Azure Stream Analytics)
Azure Stream Analytics では、各レコードに関連するデータ型があります。 データ型は、その型のレコードが保持できる値のセット、またはその型の式が生成できる値のセットを記述 (および制約) します。
列ではなく型を持つレコードであることに注意してください。 列の各レコードには、異なる型を指定できます。 ほとんどのアプリケーションで透過的な場合は、スキーマ ドリフト シナリオやその他の通常とは異なる型指定パターンを簡単に処理できます。
サポートされるデータ型
サポートされているデータ型の一覧を次に示します。
データの種類 | 説明 |
---|---|
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 Stream Analytics に固有のものではありませんが、すべての浮動小数点数の実装で発生します。 |
nvarchar(max) | Unicode 文字で構成されるテキスト値。 注: max 以外の値はサポートされていません。 |
DATETIME | 24 時間制のクロックに基づき、UTC (タイム ゾーン オフセット 0) を基準とする秒の小数部 (7 桁、100 ナノ秒の有効桁数) を持つ時刻と組み合わせた日付を定義します。 |
bit | 1、0、または NULL の値を受け取ることができる整数。 これは 互換性レベル 1.2 以降でサポートされています。 |
レコード (record) | 名前と値のペアのセット。 値はサポートされているデータ型である必要があります。 |
array | 順序が付けられた値の集合。 値はサポートされているデータ型である必要があります。 |
bigint と float データ型を結合 (または比較) できます。 これは、表現できない非常に大きな bigint 値の場合を除き、すべてのケースで正しく機能します。
注意
範囲外の bigint データ型を読み取ると、Azure Stream Analytics でサポートされている Stream Analytics ジョブは、 エラー メッセージ InputDeserializationError を使用してイベントを逆シリアル化できません。 データを事前に処理して文字列に変換できます。 1 つのオプションは、Azure 関数を使用してデータを前処理し、このような大きな整数を文字列に変換することです。
型の変換
データ型の変換を制御する規則を次 に示します。
- 入力の読み取りと出力の書き込み操作中に精度が低下しない変換は暗黙的であり、常に成功します
- 出力書き込み操作内の精度の損失とオーバーフローは、構成されたエラー ポリシー ([ドロップ] または [再試行] に設定) によって処理されます
- 出力書き込み操作中に発生する型変換エラーは、エラー ポリシーによって処理されます
- 入力読み取り操作中に発生した型変換エラーにより、ジョブがイベントを削除する
精度の低下は、値を float に変換する際に発生する可能性があります。 これは、Azure Stream Analytics に固有のものではなく、一般に float データ型に固有です。 そのため、エラーとは見なされません。 すべての桁を節約する必要がある場合は、データを文字列として読み取る必要があります。
データのキャスト
ストリーミング SQL 言語には、データのデータ型の監視と調整に役立つ 4 つの関数があります。
- CAST : 1 つの列を特定の型にキャストします。変換エラーが発生した場合、ジョブは失敗します
-
TRY_CAST : 1 つの列を特定の型にキャストします。エラーは NULL として許容されます。 最適な使用方法については 、入力の検証 に関するページを参照してください
TRY_CAST
- CREATE TABLE : 入力に対して 1 つの明示的なスキーマを定義します。 変換エラーが発生した行がストリームから削除される
- GetType : 列の型を返します
ほとんどのユース ケースでは、 TRY_CASTを使用することをお勧めします。 この関数は、出力の種類を確認することでダウンストリーム処理を保護します。一方、エラーの値を NULL に置き換えることでデータが失われるのを防ぎます。 行は削除されず、元の値は引き続き別の列に投影できます。
強力な保証を得るために、推奨されるオプションは CREATE TABLE を使用することです。 この方法を使用すると、特定の入力のスキーマをジョブに通知でき、逸脱のリスクはありません。 トレードオフは、特定の入力に対して 1 つのスキーマのみを定義でき、準拠していない行は削除されるという点です。
可能であれば、他の関数で暗黙的に (サイレントに) 行うのではなく、これらの関数を介してすべてのキャスト操作を明示的に実行する必要があります。 これにより、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 に変換されます |
number: integer | long と int は 64 ビット符号付き整数に変換されます。 ブール値: 互換性レベル 1.1 以下の false は 0 に変換され、true は 1 に変換されます |
long |
float | 64 ビットの符号付き浮動小数点数に変換された文字列 | ジョブ カルチャを使用して文字列に変換された 64 ビット符号付き浮動小数点数 | number: 64 ビット符号付き浮動小数点数に変換された分数 | number: 分数 | 64 ビットの符号付き浮動小数点数に変換された double および float | double |
nvarchar(max) | string | string | string | string | string | string |
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 に変換されます | ブール値: ブール値 | Boolean: false は 0 に変換され、true は 1 に変換されます | boolean |
record | 該当なし | サポートされていません。"Record" 文字列が出力されます | JSON オブジェクト | JSON オブジェクト | Avro record 型 | Avro record 型 |
array | N/A | サポートされていません。"配列" 文字列が出力されます | JSON オブジェクト | JSON オブジェクト | Avro record 型 | Avro record 型 |
注意
Parquet にはデータ型の変換は必要ありません。
構造化データ ストアへの書き込み時の型マッピング
データ型 | SQL | Power BI | Azure Cosmos DB | PostgreSQL | Azure Data Explorer |
---|---|---|---|---|---|
bigint | bigint、int、smallint、tinyint、すべての文字列型 (ntext、nvarchar、char、...) | はい | numeric: integer | bigint | dynamic、int、long |
float | float、real、decimal、numeric、すべての文字列型 (ntext、nvarchar、char、...) | はい | number: 分数 | 倍精度、数値。 1.78E+308 に制限 | 動的、リアル、ダブル |
nvarchar(max) | すべての文字列型 (ntext、nvarchar、char、uniqueidentifier...) | yes | string | 文字の変化、テキスト | dynamic、string |
datetime | datetime、datetime2、datetimeoffset、すべての文字列型 (ntext、nvarchar、char、...) | はい | ISO 8601 標準を使用して文字列に変換された日時 | timestamp、time。 タイムゾーン オプションはサポートされていますが、タイム ゾーンは提供されません | dynamic、string、datetime |
bit (互換性レベル 1.2 以降) | bigint、int、smallint、tinyint、bit、すべての文字列型 (ntext、nvarchar、char、...) | はい | boolean: 1 は true に変換され、0 は false に変換されます | bit | dynamic、bool |
record | サポートされていません。"Record" 文字列が出力されます | サポートされていません。"Record" 文字列が出力されます | JSON オブジェクト | サポートされていません | dynamic、bool、long、datetime、byte 配列、real、double、string |
array | サポートされていません。"配列" 文字列が出力されます | サポートされていません。"配列" 文字列が出力されます | JSON オブジェクト | サポートされていません | dynamic、string |