CREATE STREAM
Описание
Создаёт Table Stream на внутренней таблице с включённым changelog. Table Stream хранит смещение обработки для каждой партиции базовой таблицы; SELECT ... FROM <stream> читает изменения с момента последней обработки, а INSERT INTO ... SELECT ... FROM <stream> обрабатывает их и продвигает смещения. Описание этой возможности см. в разделе Основы Table Stream.
Эта возможность доступна начиная с версии 5.0.0 и является экспериментальной. Для её использования в конфигурации FE должны быть заданы enable_feature_changelog = true и enable_table_stream = true.
Синтаксис
CREATE STREAM [IF NOT EXISTS] [<db_name>.]<stream_name>
ON TABLE [<db_name>.]<table_name>
[COMMENT '<comment>']
[PROPERTIES ("<key>" = "<value>" [, ...])]
Обязательные параметры
1. <stream_name>
Идентификатор (имя) Stream. Он должен быть уникальным в пределах своей базы данных и не должен совпадать с именем таблицы или представления. Правила именования идентификатора такие же, как для имён таблиц.
2. <table_name>
Базовая таблица. Это должна быть внутренняя таблица с включённым changelog (
"changelog.enable" = "true"); она может находиться в другой базе данных, чем Stream.
Необязательные параметры
1. <db_name>
База данных Stream или базовой таблицы; по умолчанию используется текущая база данных.
2. IF NOT EXISTS
Не выдавать ошибку, если Stream с таким именем уже существует.
3. <comment>
Комментарий к Stream; позднее его можно изменить с помощью
ALTER STREAM ... SET COMMENT.
4. PROPERTIES
| Свойство | Значения / по умолчанию | Описание |
|---|---|---|
type | append_only / min_delta / detailпо умолчанию min_delta | Тип обработки изменений. append_only выдаёт только вставленные строки; min_delta выдаёт итоговое изменение для каждого ключа между двумя операциями обработки; detail выдаёт каждое изменение построчно. Для min_delta и detail базовая таблица должна быть таблицей Unique Key Merge-on-Write с включённым changelog.need_historical_value; для таблиц Duplicate Key min_delta обрабатывается как append_only |
show_initial_rows | true / falseпо умолчанию false | Выдавать ли данные, уже существующие на момент создания Stream, в виде изменений. При значении true первое чтение возвращает все текущие данные базовой таблицы (тип изменения APPEND), а после их обработки Stream переходит в инкрементальный режим |
После создания нельзя изменить ни одно из этих свойств.
Требования к правам доступа
Пользователь, выполняющий эту команду SQL, должен иметь как минимум следующие права:
| Право | Объект | Примечания |
|---|---|---|
| CREATE_PRIV | База данных Stream | |
| SELECT_PRIV | Базовая таблица |
Примечания по использованию
- Если для базовой таблицы не включён changelog, оператор завершается с ошибкой
Base Olap table ... need to enable changelog for table stream. - Если
typeимеет значениеmin_delta(или не указан) и базовая таблица не соответствует требованиям, оператор завершается с ошибкойMIN_DELTA table stream requires base mow table to enable changelog.need_historical_value=true. - Недопустимое значение
typeприводит к ошибкеnot supported type: <value>. CREATE OR REPLACE STREAMпока не поддерживается.- Столбцы Stream соответствуют текущим видимым столбцам базовой таблицы и автоматически синхронизируются после выполнения
ADD COLUMN/DROP COLUMNдля базовой таблицы.
Примеры
-
Создание Stream с типом по умолчанию (
min_delta) для таблицыorders, обрабатывающего только изменения, появившиеся после его создания:CREATE STREAM orders_stream ON TABLE orders; -
Создание Stream типа
append_onlyс выдачей существующих данных базовой таблицы в качестве начальных изменений:CREATE STREAM IF NOT EXISTS events_stream ON TABLE events
COMMENT 'append-only events'
PROPERTIES (
"type" = "append_only",
"show_initial_rows" = "true"
); -
Создание Stream в базе данных
etlс базовой таблицей в базе данныхods:CREATE STREAM etl.orders_stream ON TABLE ods.orders
PROPERTIES ("type" = "detail");