Основные возможности

Обзор возможностей

Возможность Поддерживается Примечания
Движок хранения исходной таблицы HEAP / MARS3
Тип распределения исходной таблицы Hash / Random / Segment Set Не поддерживает таблицы только для мастера или реплицированные таблицы в качестве исходных
Партитционирование исходной таблицы Поддерживается
Движок хранения потоковой таблицы HEAP / MARS3 / AO
Ключ распределения потоковой таблицы Разрешён пользовательский ключ распределения, может отличаться от ключа исходной таблицы Лучшей практикой является сохранение согласованности. Для агрегационных потоков совпадение ключей распределения позволяет выполнять локальные вычисления потока
Свойства хранения потоковой таблицы Поддерживается независимый выбор движка хранения, партитционирования и ключа распределения
Поддержка нескольких столбцов в исходной таблице Поддерживается Поддерживает исходные таблицы с ≥ 300 столбцами
Одна таблица → несколько потоков Поддерживается Несколько потоков одного уровня могут использовать одну и ту же исходную таблицу. «Одна таблица» означает одну и ту же исходную таблицу вверх по потоку
Обогащение измерений (JOIN) Поддерживается Поддерживает соединение с ≥ 10 таблицами измерений
Агрегация Поддерживается Поддерживает группировку по ≥ 32 полям. Внутренне несколько полей могут объединяться в составной тип для агрегации
DDL исходной таблицы Не поддерживается Создание индекса на исходной таблице не влияет на потоки вниз по потоку. Удаление индекса может привести к сбою выполнения потока
DDL потоковой таблицы Не поддерживается Операции DDL над столбцами потоковой таблицы не поддерживаются. При необходимости изменений пересоздайте поток. Примечание: если исходная таблица также подвергается изменениям DDL, рекомендуется пересоздание потока
Индексы потоковой таблицы Поддерживаются Индексы могут быть независимо созданы и поддерживаться на потоковых таблицах
Фильтрация измерений Поддерживается Поддерживаются условия фильтрации для таблиц измерений при выполнении JOIN при обогащении измерений
Поддержка отказоустойчивости Поддерживается Потоки продолжают работу после отказа сегмента. Однако небольшое количество транзакций вокруг времени переключения может быть потеряно
Накладные расходы по производительности Минимальное влияние на запись в исходную таблицу; результаты потока доступны в течение нескольких секунд
Обработка больших транзакций Поддерживается Внутренние оптимизации включают пакетную обработку и снижение использования памяти при декодировании журнала транзакций, что повышает стабильность при обработке больших транзакций. Однако использование потоковой обработки на таблицах, подверженных большим транзакциям, следует применять с осторожностью
Обработка исторических данных Поддерживается При создании потока используйте опцию WITH DATA для обработки существующих данных исходной таблицы. Если исходная таблица очень большая, это создаёт огромную транзакцию, блокирующую создание других потоков до завершения
JOIN между потоками Поддерживается Поддерживает неравенственные JOIN, исходные таблицы с разными ключами распределения и JOIN между исходными таблицами и потоками с разными ключами распределения

Дополнительные ограничения

  • Объекты потоков нельзя получить с помощью запросов JDBC-метаданных. Используйте специализированные SQL-запросы для их извлечения.
  • Создавать объекты потоков могут только суперпользователи.
  • В предложении SELECT определения потока не допускаются дублирующиеся имена столбцов. Особенно при использовании агрегатных функций в агрегационных потоках, присвойте уникальные псевдонимы, например, select avg(col1) as avg_col1, avg(col2) as avg_col2. Альтернативно используйте проекцию полей в предложении CREATE STREAM.
  • Избегайте прямых операций DML над потоковыми таблицами (управляется GUC mx_stream_internal_modify).
  • В определениях потоков не допускаются предложения WITH.
  • Ограничения агрегационных потоков:
    • В определении потока разрешено только одно предложение FROM STREAMING.
    • Ключ GROUP BY должен включать все ключи распределения соответствующей потоковой таблицы.
    • Глобальная агрегация без GROUP BY не допускается.
    • Предложение HAVING не поддерживается. Вложенные подзапросы с внешними WHERE не могут эмулировать HAVING.
    • Агрегированные выражения нельзя повторно использовать в других выражениях. Например, avg(col1)+1 недопустимо, но avg(col+1) разрешено.
  • Ограничения JOIN между потоками:
    • GROUP BY не допускается в вычислениях JOIN между потоками.
    • Поддерживаются только равенственные внутренние JOIN между двумя исходными таблицами. UNION, LEFT JOIN и JOIN с необрабатываемыми таблицами не поддерживаются.
    • Агрегатные функции, такие как DISTINCT, SUM, MAX, не допускаются.
    • Оконные функции не поддерживаются.
    • Предложение ORDER BY не поддерживается.
  • В многоуровневой потоковой обработке промежуточные потоки не могут быть агрегационными.

Вычисление одного потока

  • Один поток: Определение потока, в котором в предложении FROM STREAMING объявлен только один объект. Следующий пример также считается одним потоком:
CREATE TABLE t3 (id int, c1 text, ts timestamp); 

CREATE STREAM s3(id, c1, ts, arrive_s3) 
AS ( 
SELECT *, clock_timestamp() 
FROM STREAMING t3 WHERE id > 7 
UNION ALL 
SELECT *, clock_timestamp() 
FROM STREAMING t3 WHERE id < 3 
WITH NO DATA 
) 
DISTRIBUTED BY (arrive_s3);

Вычисление JOIN нескольких потоков

  • Несколько потоков: Определение потока, содержащее несколько предложений FROM STREAMING. Используется для динамического отслеживания данных из двух или более исходных таблиц и генерации новых результатов JOIN.