Azure Stream Analyticsのクエリで大文字小文字を区別しなくなった

このエントリは2021/08/24現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

例によって、以下の問い合わせを受けた。

問い合わせ

現在IoT HubからStream Analyticsを使ってイベントデータを集計しているのだが、Azure Portalで何かをした後、大文字・小文字混在のフィールド名を拾い上げるようなクエリの動作がかわり、結果で得られるフィールド名が全て小文字になってしまった。それまで大文字・小文字混在型で正しく表現できていたのだが、何がどうなったのかわからない。復旧することは可能か?どのように設定を変更すればよいか?

(本当かどうかはさておき)設定時に手が滑ったのかもしれない。そこで、いろいろためしてもらった。

  • クエリのテストではなく、実際の出力結果にも影響が及んでいるか? > Yes
  • AS句を付けて明示的にエイリアスを指定したとしても発生するか? > Yes
  • AS句でDouble-quoteを付けても同様か? > Yes

ということで、プラットフォーム側で何か設定が変わったように見える。クエリのフィールド名が変わると、出力するJSONの要素名やCSVのフィールド名も変わり、アプリケーションに影響してしまうので、困っていたらしい。

原因と解決策

この件はドキュメントにも明記されていて、互換性レベルが変更されたことが原因である(2021/08/24現在のデフォルトの互換性レベルは1.2)。

フィールド名の大文字と小文字の区別の保持
1.0 レベル: Azure Stream Analytics エンジンによる処理で、フィールド名が小文字に変更されました。
1.1 レベル: Azure Stream Analytics エンジンによる処理で、フィールド名の大文字と小文字の区別が保持されます。

Azure Stream Analytics ジョブの互換性レベル / Compatibility level for Azure Stream Analytics jobs
https://docs.microsoft.com/azure/stream-analytics/stream-analytics-compatibility-level

Persisting case-sensitivity for field names
1.0 level: Field names were changed to lower case when processed by the Azure Stream Analytics engine.
1.1 level: case-sensitivity is persisted for field names when they are processed by the Azure Stream Analytics engine.

Azure Stream Analytics ジョブの互換性レベル / Compatibility level for Azure Stream Analytics jobs
https://docs.microsoft.com/azure/stream-analytics/stream-analytics-compatibility-level

Azure Portalでは、【構成】 > 【互換性レベル】 で確認できる。これを1.0以外にすれば大文字小文字を区別するようになる。

実験・動作確認

以下のようなCSVファイルを用意する。フィールド名には大文字小文字を含んでいる。

互換性レベル1.0の状態で、このファイルに対してStream Analyticsでクエリを発行する(といっても、以下のように、CSV全体を出すだけ)と、結果のフィールド名では大文字・小文字を識別せず、全て小文字になってしまう。

対して互換性レベル1.1の場合だと、大文字・小文字を区別していることがわかる(互換性レベル1.2でも同様)。

結論

今回の問い合わせに対しては、以下のようなアドバイスを実施し、解決した。

  • 互換性レベルを確認し、1.0であれば1.1以上に設定

おそらく何かの拍子で(それこそ手が滑って)1.0に変更してしまい、保存してしまったよう・・・。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中