CREATE SNAPSHOT TABLE
Содержание раздела
- Связанные запросы
- Как работает запрос
- Синтаксис
- Варианты ответа
- Ограничения
- Примеры
Поддерживается в версиях: 7.6.
Запрос создает снапшот-таблицу в логической БД.
Снапшот-таблицы можно размещать только в ADP-датасорсах.
Снапшот-таблицу также можно создать запросом CREATE TABLE с опцией auto.history.records.enable=false.
Связанные запросы
- ALTER TABLE ADD COLUMN,
- ALTER TABLE RENAME COLUMN,
- ALTER TABLE DROP COLUMN,
- ALTER TABLE RENAME,
- DROP TABLE,
- ALTER TABLE ADD DATASOURCE,
- ALTER TABLE ADD RETENTION,
- ALTER TABLE DROP RETENTION.
Как работает запрос
Регистрация запроса
Каждое создание таблицы записывается в журнал, который доступен с помощью запроса GET_CHANGES.
Обработка запроса
Запрос попадает в очередь операций и обрабатывается в порядке его поступления в очередь.
Успешный результат
При успешном выполнении запроса система создает:
- снапшот-таблицу в логической схеме данных;
- соответствующие физические таблицы в датасорсах хранилища данных;
- tslog-журнал таблицы в сервисной БД.
Запрос с LOGIСAL_ONLY не создает физические таблицы, но в остальном выполняется также.
Неуспешный результат
При ошибке исполнения корректного запроса система блокирует все последующие DDL-запросы в логической БД. О снятии такой блокировки см. в разделе Снятие блокировки DDL-запросов.
Синтаксис
CREATE SNAPSHOT TABLE [ IF NOT EXISTS ] [db_name.]table_name (
column_name data_type [ NULL | NOT NULL ],
[ ... , ]
[ PRIMARY KEY (column_name[, ... ] ) ]
)
[ DATASOURCE_TYPE ('destination_datasource'[, ... ]) ]
[ RETENTION ('source_datasource', retention_period) ]
[ ... ]
OPTIONS ('
[ set.strict.consistency.enable={ false | true }; ]
[ set.delete.tracking.enable={ false | true }; ]
[ set.on.conflict.do ={ update | error | nothing }; ]
')
[ LOGICAL_ONLY ]
Параметры:
db_name-
Имя логической базы данных, в которой создается таблица. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name-
Имя создаваемой таблицы, уникальное среди логических сущностей логической БД.
column_name-
Имя столбца таблицы.
data_type-
Тип данных столбца
column_name. Возможные значения см. в разделе Логические типы данных.
Ключевое слово IF NOT EXISTS
Включает проверку наличия сущности с таким именем до попытки создания снапшот-таблицы. Если ключевое слово указано в запросе, успешный ответ возвращается при наличии или успешном создании снапшот-таблицы, иначе — только при успешном создании снапшот-таблицы.
Ключевое слово PRIMARY KEY (column_name[, ... ])
Задает список столбцов, входящих в первичный ключ таблицы.
Если ключевое слово отсутствует, для таблицы поддерживается только добавление записей — обновление и удаление записей недоступно.
Ключевое слово DATASOURCE_TYPE ('datasource_name'[, ... ])
Задает имена датасорсов для размещения данных таблицы.
Имена датасорсов должны соответствовать конфигурации.
Если ключевое слово не указано:
- для таблицы используются все ADP-датасорсы — если хранилище состоит только из датасорсов типа ADP;
- выдается ошибка — иначе.
Ключевое слово RETENTION ('source_datasource', retention_period)
Задает retention-правило таблицы. Для каждого датасорса таблицы можно настроить свое правило.
Снапшот-таблицы не поддерживают retention-правила, направленные на остужение данных.
Если отсутствует, информация об удаленных записях таблицы хранится бессрочно.
Параметры:
source_datasource-
Имя датасорса-источника, для которого добавляется правило. Должно соответствовать конфигурации.
retention_period-
Срок хранения информации об удаленных записях в датасорсе-источнике. Указывается в секундах.
При значении 0 данные удаляются при каждом исполнении retention-правила.
Ключевое слово OPTIONS ('option=value[; ... ]')
Задает список дополнительных опций (option) и их значений (value).
Опция set.strict.consistency.enable={ false | true }
Определяет, используется ли строгий уровень консистентности при чтении данных из таблицы.
Возможные значения:
true— да, гарантируется уровень консистентности Linearizability;false— нет, используется уровень консистентности Casual.
Если опция не задана, для таблицы сохраняется значение параметра конфигурации SNAPSHOT_TABLE_STRICT_CONSISTENCY_ENABLED (по умолчанию — false).
Опция set.delete.tracking.enable={ false | true }
Определяет, поддерживает ли таблица отслеживание удаления записей. Опция несовместима с set.on.conflict.do=error и set.on.conflict.do=nothing.
Возможные значения:
true— да, при удалении записи помечаются как удаленные (sys_op = 1) и остаются доступными для чтения с использованием FOR SYSTEM_TIME RAW и FOR SYSTEM_TIME FINISHED IN/CN/TS;false— нет, при удалении записи удаляются окончательно.
Используйте опцию со значением true, если необходимо получать информацию об удаленных записях таблицы (например, для обновления материализованных представлений или передачи во внешние сервисы с помощью подписок). В остальных случаях используйте опцию со значением false.
Если опция не задана, для таблицы сохраняется текущее значение параметра конфигурации SNAPSHOT_TABLE_DELETE_TRACKING_ENABLED (по умолчанию — true).
Опция set.on.conflict.do={ update | error | nothing }
Определяет способ обработки записей, конфликтующих с текущими записями таблицы по первичному ключу, при загрузке и обновлении данных. Применяется только для таблиц с первичным ключом.
Возможные значения:
update— текущие записи обновляются значениями из запроса;error— при наличии хотя бы одной записи с дубликатом первичного ключа все изменения по запросу отбрасываются и операция записи завершается с ошибкой;nothing— записи с дубликатами первичного ключа игнорируются, а остальные применяются (вставляются как новые или удаляются — в зависимости от запроса).
Опции set.on.conflict.do=error и set.on.conflict.do=nothing несовместимы с set.delete.tracking.enable=true.
В снапшот-таблицах с опциями set.on.conflict.do=error и set.on.conflict.do=nothing невозможно обновление текущих записей.
Если опция не задана, для таблицы сохраняется текущее значение параметра конфигурации SNAPSHOT_TABLE_ON_CONFLICT_DO (по умолчанию — update).
Ключевое слово LOGICAL_ONLY
Позволяет создать таблицу только на логическом уровне (в логической схеме данных), не обновляя физическую схему в хранилище данных.
Если ключевое слово не указано, таблица создается на логическом и физическом уровнях.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
Ограничения выполнения
- Выполнение запроса недоступно, если установлен запрет на изменение сущностей.
Ограничения имен
- Имена таблицы и ее столбцов должны соответствовать соглашениям об именах.
- Имена столбцов должны быть уникальны в рамках таблицы.
Ограничения retention-правил
- Retention-правила доступны только для снапшот-таблиц с включенным отслеживанием удаления записей.
- Retention-правила снапшот-таблиц могут только удалять информацию об удаленных записях; охлаждение этой информации не поддерживается.
Ограничения опций
- Опция
set.on.conflict.doнедоступна для снапшот-таблиц без первичного ключа. - Опция
set.delete.tracking.enable=trueнесовместима с опциямиset.on.conflict.do=errorиset.on.conflict.do=nothing.
Другие ограничения
- Датасорсы снапшот-таблиц могут быть только типа ADP.
- Снапшот-таблицы без первичного ключа поддерживают только добавление записей, не поддерживая обновление и удаление.
- В снапшот-таблицах с опциями
set.on.conflict.do=errorиset.on.conflict.do=nothingневозможно обновление текущих записей. - Информационная схема обновляется асинхронно, поэтому созданная таблица может не сразу появиться в информационной схеме.
Примеры
Снапшот-таблица без дополнительных опций
-- значения опций для таблицы берутся из конфигурации
CREATE SNAPSHOT TABLE marketing.stores_snapshot (
id BIGINT NOT NULL,
category VARCHAR(256) NOT NULL,
region VARCHAR(256) NOT NULL,
address VARCHAR(256) NOT NULL,
description VARCHAR(256),
PRIMARY KEY (id, region)
)
DATASOURCE_TYPE ('adp', 'adp2')
Снапшот-таблица со строгим уровнем консистентности данных и без отслеживания удалений
-- опция set.on.conflict.do не задана — для таблицы сохраняется значение параметра конфигурации SNAPSHOT_TABLE_ON_CONFLICT_DO
CREATE SNAPSHOT TABLE marketing.sales_snapshot (
id BIGINT NOT NULL,
transaction_date TIMESTAMP NOT NULL,
product_code VARCHAR(256) NOT NULL,
product_units BIGINT NOT NULL,
store_id BIGINT NOT NULL,
description VARCHAR(256),
PRIMARY KEY (id)
)
DATASOURCE_TYPE ('adp', 'adp2')
OPTIONS ('
set.delete.tracking.enable=false;
set.strict.consistency.enable=true;
')
Снапшот-таблица с пропуском дубликатов PK и без отслеживания удалений
-- опция set.strict.consistency.enable не задана — для таблицы сохраняется значение параметра конфигурации SNAPSHOT_TABLE_STRICT_CONSISTENCY_ENABLED
CREATE SNAPSHOT TABLE marketing.sales_snapshot_on_conflict_do_nothing (
id BIGINT NOT NULL,
transaction_date TIMESTAMP NOT NULL,
product_code VARCHAR(256) NOT NULL,
product_units BIGINT NOT NULL,
store_id BIGINT NOT NULL,
description VARCHAR(256),
PRIMARY KEY (id)
)
DATASOURCE_TYPE ('adp', 'adp2')
OPTIONS ('
set.delete.tracking.enable=false;
set.on.conflict.do=nothing;
')