Create a Date-formatted string from a datetime string in a query for Azure Stream Analytics
Azure Stream Analytics のクエリ内で DateTime フォーマットの文字列から Date フォーマットの文字列を生成する
Azure Stream Analytics で入力から出力にデータを受け渡す際に、入力データを加工して新たな列を作りたいことがあります。よくある例としては、いわゆる DateTime 型の文字列(yyyy-MM-ddTHH:mm:ss) から Date 型の文字列 (yyyy-MM-dd) を生成することが挙げられると思います。
しかしながら、 T-SQL 構文のサブセット である Stream Analytics クエリ言語 としては、 CONVERT 関数 をサポートしていないことに注意が必要です。
そこで、 Stream Analytics のクエリ内で上記を行いたい場合にどのような書き方ができるかを、以下に紹介します。
書き方
説明の前提として、 record.arrayvalue.time から いわゆる DateTime 型のフォーマットの文字列を取得することができるものとします。
LEFT 関数
最もシンプルに記述することができます。
1 | LEFT(record.arrayvalue.time, 10) |
注意点としては以下の通りです。
record.arrayvalue.timeについて、先頭の10文字が いわゆるDate型のフォーマット (yyyy-MM-dd) であること- これを満たさない場合、当然ですが、予期せぬ文字列が生成されます。
以下は気にしなくて構いません。
record.arrayvalue.timeが文字列であるかどうか- 数値であっても、エラーにはならず、文字列に変換して処理してくれます。
- そもそも文字列でなかったら
DateTime型になりませんが。
- そもそも文字列でなかったら
- 数値であっても、エラーにはならず、文字列に変換して処理してくれます。
SUBSTRING 関数
LEFT 関数の別解です。
1 | SUBSTRING(record.arrayvalue.time, 1, 10) |
注意点等は LEFT 関数と同じです。
CONCAT または CONCAT_WS 関数
上記に挙げた方法と比較すると非常に冗長ですが、一つのやり方として示します。
1 | CONCAT_WS('-', |
他に以下のような書き方も可能です。
1 | CONCAT_WS('-', |
1 | CONCAT_WS('-', |
1 | CONCAT_WS('-', |
注意点としては、以下の通りです。
record.arrayvalue.timeについて、いわゆるDateTime型のフォーマット (yyyy-MM-ddTHH:mm:ss) の文字列であること- エラーハンドリングのため
TRYではなくTRY_CASTを使い、TRYではエラーになる状況でTRY_CASTでNULLにするようにしていますが、そもそもrecord.arrayvalue.timeがnvarchar(max)にすらキャストできない何かだとしたら、使用している他の関数等でエラーになります。
- エラーハンドリングのため
まとめ
Azure Stream Analytics のクエリ内で、いわゆる DateTime フォーマットの文字列から Date フォーマットの文字列を生成する方法を 3つ紹介しました。
原則、 LEFT 関数を使うのが最も短くシンプルに記述できます。
もし Azure Stream Analytics への入力データが DateTime フォーマットではない日付である可能性があるのであれば、 CONCAT_WS 関数を使ったやり方が良いケースもあるでしょう。
See also
- ISO 8601 - Wikipedia
- LEFT (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- SUBSTRING (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- CONCAT_WS (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- TRY_CAST (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- レプリケート (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- RIGHT (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- YEAR (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- MONTH (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- DAY (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn
- DATEPART (Azure Stream Analytics) - Stream Analytics Query | Microsoft Learn