Как создать запрос таблицы лидеров с помощью Kinesis Analytics

Я пытаюсь проверить концепцию таблицы лидеров в реальном времени, используя аналитику kinesis, и пытаюсь использовать их пример для начала работы, пример временного периода с потоком данных демонстрационного биржевого тикера. Однако я получаю сообщение об ошибке Leading column in ORDER BY must be monotonic, когда пытаюсь смоделировать сортировку таблицы лидеров по цене.

SELECT from and INSERT into like a TABLE
    -- PUMP: an entity used to continuously 'SELECT ... FROM' a source STREAM, and INSERT SQL results into an output STREAM
    -- Create output stream, which can be used to send to a destination
    CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (ticker_symbol VARCHAR(4), price REAL);
    -- Create a pump which continuously selects from a source stream (SOURCE_SQL_STREAM_001)
    -- performs an aggregate count that is grouped by columns ticker over a 10-second tumbling window
    -- and inserts into output stream (DESTINATION_SQL_STREAM)
    CREATE OR REPLACE  PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
    -- Aggregate function COUNT|AVG|MAX|MIN|SUM|STDDEV_POP|STDDEV_SAMP|VAR_POP|VAR_SAMP)
    SELECT STREAM  ticker_symbol, price
    FROM "SOURCE_SQL_STREAM_001"
    ORDER BY price desc
    -- Uses a 10-second tumbling time window
    GROUP BY ticker_symbol, price, FLOOR(("SOURCE_SQL_STREAM_001".ROWTIME - TIMESTAMP '1970-01-01 00:00:00') SECOND / 10 TO SECOND);

person MonkeyBonkey    schedule 06.07.2018    source источник


Ответы (1)


Согласно документации , ORDER BY должен быть не только монотонным, но и основанным на времени:

Потоковый запрос может использовать ORDER BY, если его ведущее выражение основано на времени и является монотонным.

В вашем случае вы, похоже, вычисляете метку времени в своей группе GROUP BY, но вам придется либо добавить тот же расчет в ORDER BY (или, возможно, найти способ сделать это в SELECT и дать ему псевдоним столбца ).

person devonlazarus    schedule 13.07.2018