ChemE
ChemE

Reputation: 11

Azure Stream Analytics Query Returns 0 rows

I have data coming in from KEPServerEx with nested lists, so I need to CROSS APPLY to send individual values to my blob from the incoming stream. I had the query working for a few minutes utilizing this post (iterate nested list in json msg by cql stream analytics) but can no longer get a correct output.

A message looks like this:

[
  {
    "timestamp": 1575933997508,
    "values": [
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 5,
        "q": 1,
        "t": 1575933987573
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 196,
        "q": 1,
        "t": 1575933988076
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 56,
        "q": 1,
        "t": 1575933988570
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 104,
        "q": 1,
        "t": 1575933989077
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 24,
        "q": 1,
        "t": 1575933989567
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 177,
        "q": 1,
        "t": 1575933990069
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 168,
        "q": 1,
        "t": 1575933990575
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 113,
        "q": 1,
        "t": 1575933991067
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 189,
        "q": 1,
        "t": 1575933991572
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 96,
        "q": 1,
        "t": 1575933992075
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 15,
        "q": 1,
        "t": 1575933992567
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 179,
        "q": 1,
        "t": 1575933993074
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 22,
        "q": 1,
        "t": 1575933993569
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 98,
        "q": 1,
        "t": 1575933994073
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 9,
        "q": 1,
        "t": 1575933994575
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 142,
        "q": 1,
        "t": 1575933995071
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 54,
        "q": 1,
        "t": 1575933995576
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 174,
        "q": 1,
        "t": 1575933996070
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 188,
        "q": 1,
        "t": 1575933996567
      },
      {
        "id": "Channel1.Device1.RANDOM1",
        "v": 45,
        "q": 1,
        "t": 1575933997073
      }
    ]
  }
]

The query I used to successfully split the above message list of values into individual values is:

SELECT
    event.timestamp as messageTS,
    [values].ArrayValue.id,
    [values].ArrayValue.v,
    [values].ArrayValue.t as valueTS
FROM
    brewingmqtt AS event
CROSS APPLY getarrayelements(event.eachvalue) AS [values]

Unfortunately, this is now giving me 0 rows return when performing a test and I cannot figure out what I am missing.

Upvotes: 1

Views: 198

Answers (1)

Jay Gong
Jay Gong

Reputation: 23782

Why you set eachvalue in getArrayElements function? Your sample data indicates that it should be [values]. I tested the sql based on your sample data and it works for me.

SELECT
    event.timestamp as messageTS,
    [values].ArrayValue.id,
    [values].ArrayValue.v,
    [values].ArrayValue.t as valueTS
FROM
    brewingmqtt AS event
CROSS APPLY getarrayelements(event.[values]) AS [values]

Output:

enter image description here

Upvotes: 1

Related Questions