こんにちは私は、ストリームアナリティクスのJSON入力の配列プロパティから特定の項目を選択し、それらをJSON出力の配列プロパティとして返すことができるのだろうかと思います。ストリームアナリティクスは配列プロパティの項目をフィルタリングできますか?
私の例でそれをより明確にする - 私は、バンドルの名前、バージョンと状態と、デバイス上で実行されているOSGI bundlesのリストを送信します。 (私はコンテンツの残りの部分を省略。)サンプルメッセージ:
{"bundles":[{"name":"org.eclipse.osgi","version":"3.5.1.R35x_v20090827","state":32},{"name":"slf4j.log4j12","version":"1.6.1","state":4}]}
経由ストリームAnalyticsを私はアクティブなバンドル(状態== 32)のための1つのJSON出力(イベントハブ)を作成し、さまざまに残りを入れたいです出力。これらのイベントハブのコンテンツは後で処理されます。しかし、処理では、オリジナルのデバイスIDも必要です。そのため、IoTHubメッセージプロパティから取得します。
は、だから私のクエリは次のようになります。
WITH Step1 AS
(
SELECT
IoTHub.ConnectionDeviceId AS deviceId,
bundles as bundles
FROM
iotHubMessages
)
SELECT
messages.deviceId AS deviceId,
bundle.ArrayValue.name AS name,
bundle.ArrayValue.version AS version
INTO
active
FROM
Step1 as messages
CROSS APPLY GetArrayElements(messages.bundles) AS bundle
WHERE
bundle.ArrayValue.state = 32
SELECT
messages.deviceId AS deviceId,
bundle.ArrayValue.name AS name,
bundle.ArrayValue.version AS version
INTO
other
FROM
Step1 as messages
CROSS APPLY GetArrayElements(messages.bundles) AS bundle
WHERE
bundle.ArrayValue.state != 32
DEVICEID、名とバージョンアクティブ出力でプロパティを含む元の配列の各アイテムの行がある。この方法。したがって、のdeviceIdプロパティが複数回コピーされます。これは、メッセージ内の追加データを意味します。私は元のJSON入力に似ているdeviceIdプロパティと1つの配列プロパティバンドルを持つJSONを好むでしょう。
{"deviceid":"javadevice","bundles":[{"name":"org.eclipse.osgi","version":"3.5.1.R35x_v20090827"}]}
そして他:アクティブ同様
{"deviceid":"javadevice","bundles":[{"name":"slf4j.log4j12","version":"1.6.1"}]}
は、これを実現する方法はありますか? - 配列の項目をフィルターに掛け、入力と同じ形式で配列として戻します。 (私のコードではプロパティの数は変わりますが、それは必要ではありません)
ありがとうございました!
おかげさまで、以前は分かりませんでした** Collect()**機能のおかげで、別のクエリで使用することもできます。ただし、結果配列の各項目(および結果全体のプロパティ)には_deviceid_プロパティの重複があります。私の目標はデータを保存することだったので、これは悲しいことに私のニーズを満たしておらず、ソリューションの半分に過ぎません。 - / –