CREATE SNAPSHOT TABLE

Содержание раздела
  1. Связанные запросы
  2. Как работает запрос
    1. Регистрация запроса
    2. Обработка запроса
    3. Успешный результат
    4. Неуспешный результат
  3. Синтаксис
    1. Ключевое слово IF NOT EXISTS
    2. Ключевое слово PRIMARY KEY (column_name[, ... ])
    3. Ключевое слово DATASOURCE_TYPE ('datasource_name'[, ... ])
    4. Ключевое слово RETENTION ('source_datasource', retention_period)
    5. Ключевое слово OPTIONS ('option=value[; ... ]')
      1. Опция set.strict.consistency.enable={ false | true }
      2. Опция set.delete.tracking.enable={ false | true }
      3. Опция set.on.conflict.do={ update | error | nothing }
    6. Ключевое слово LOGICAL_ONLY
  4. Варианты ответа
  5. Ограничения
    1. Ограничения выполнения
    2. Ограничения имен
    3. Ограничения retention-правил
    4. Ограничения опций
    5. Другие ограничения
  6. Примеры
    1. Снапшот-таблица без дополнительных опций
    2. Снапшот-таблица со строгим уровнем консистентности данных и без отслеживания удалений
    3. Снапшот-таблица с пропуском дубликатов PK и без отслеживания удалений

Поддерживается в версиях: 7.6.

Запрос создает снапшот-таблицу в логической БД.

Снапшот-таблицы можно размещать только в ADP-датасорсах.

Снапшот-таблицу также можно создать запросом CREATE TABLE с опцией auto.history.records.enable=false.

Как работает запрос

Регистрация запроса

Каждое создание таблицы записывается в журнал, который доступен с помощью запроса GET_CHANGES.

Обработка запроса

Запрос попадает в очередь операций и обрабатывается в порядке его поступления в очередь.

Успешный результат

При успешном выполнении запроса система создает:

Запрос с 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;
 ')