Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Stream AnalyticsのCollectTop関数の罠?

$
0
0

ちょっとはまったことがあったのでメモです。

Stream Analyticsには、指定した並び順で並び替えたTopいくつかを返すCollectTop関数というものがあります。

CollectTOP

こいつでCollectTop(1)とかやって一番上の1件だけ取ろうと目論んでたら同率一位が複数件あると複数件かえしてくれましたorz ということで、絶対1件ほしいときはCollectTopに指定する並び順を絶対に1つだけになるように気を付けないといけないなということを学んだ今日この頃でした。

どうしても1つ、以下のようにArrayIndexで0番目にきたものだけにWHEREで絞るのも手です。

[{"id": 1,
        "value": 10,
        "time": "2015-09-01T15:00:00.0000000Z"},
    {"id": 1,
        "value": 10,
        "time": "2015-09-01T15:00:00.0000000Z"},
    {"id": 12,
        "value": 10,
        "time": "2015-09-01T15:00:00.0000000Z"},
]

こんなInputに対して

WITH Step1 AS (
    SELECT
        CollectTop(1) OVER(ORDERBY value) AS Tops
    FROM
        Input TIMESTAMP BY Time
    GROUPBY TumblingWindow(second, 1), id
)
SELECT
    flat.ArrayValue.Value.id,
    flat.ArrayValue.Value.value,
    flat.ArrayValue.Value.time
FROM
    Step1 s1 CROSS APPLY GetElements(s1.Tops) AS flat
WHERE
    flat.ArrayIndex = 0

こんなクエリで、id:1とid:12の値が一軒ずつとれるようになります。


Viewing all articles
Browse latest Browse all 1387

Trending Articles