INSERT VALUES
Содержание раздела
Запрос позволяет вставить новые записи и обновить существующие записи в логической таблице.
Существование записи в таблице определяется по значению первичного ключа. Если в таблице существует запись со значением первичного ключа, указанным в запросе, запись обновляется; иначе добавляется новая запись. Новые и существующие записи заполняются одинаково: поля, указанные в запросе, заполняются значениями из запроса, а пропущенные поля — значениями по умолчанию.
Запрос поддерживается для ADB, ADQM и ADP.
В отличие от UPSERT VALUES, запрос INSERT VALUES
полностью обновляет существующую запись. Для частичного обновления существующих записей следует использовать запрос UPSERT VALUES.
Для обновления большого объема данных следует использовать загрузку данных.
Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных. Вставка данных в логические и материализованные представления недоступна.
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
При успешном выполнении запроса записи вставляются в СУБД хранилища, в которых размещены данные логической таблицы. При фиксации изменений каждая вставленная запись становится актуальной записью таблицы, а предыдущая актуальная запись, если такая есть, становится архивной.
Месторасположение данных таблицы можно задавать запросами CREATE TABLE и DROP TABLE с ключевым словом DATASOURCE_TYPE
.
Все записи таблицы с одинаковым первичным ключом рассматриваются системой как различные исторические состояния одного объекта. Подробнее о версионировании см. в разделе Версионирование данных.
Если операция записи, запущенная запросом INSERT VALUES
, зависла, горячую дельту невозможно закрыть или откатить. В этом случае нужно повторить запрос. Действие перезапустит обработку операции, и после ее завершения можно будет закрыть или откатить дельту. Список незавершенных (в том числе — зависших) операций можно посмотреть с помощью запроса GET_WRITE_OPERATIONS.
Синтаксис
Вставка данных во все столбцы логической таблицы:
INSERT INTO [db_name.]table_name VALUES (value_list_1), (value_list_2), ...
Вставка данных только в некоторые столбцы логической таблицы (с заполнением остальных столбцов значениями, которые определены в СУБД хранилища как значения по умолчанию):
INSERT INTO [db_name.]table_name (column_list) VALUES (value_list_1), (value_list_2), ...
Параметры:
db_name
— имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию;table_name
— имя логической таблицы, в которую вставляются данные;column_list
— список имен столбцов логической таблицы. Имена указываются в круглых скобках через запятую. Список опционален, если количество и порядок вставляемых значений (в спискеvalue_list_N
) соответствуют количеству и порядку столбцов в логической таблице;value_list_N
— список значений, вставляемых в столбцы логической таблицы. Значения указываются в круглых скобках через запятую. Каждый такой список — это строка, вставляемая в таблицу.
Ограничения
- Выполнение запроса возможно только при наличии открытой дельты (см. BEGIN DELTA).
- Столбцы в запросе не могут иметь имена, зарезервированные для служебного использования:
sys_op
,sys_from
,sys_to
,sys_close_date
,bucket_id
,sign
.
Пример
Вставка данных во все столбцы таблицы
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- вставка трех записей в логическую таблицу sales
INSERT INTO sales
VALUES (100011, '2021-08-21 23:34:10', 'ABC0001', 2, 123, 'Покупка по акции "1+1"'),
(100012, '2021-08-22 10:05:56', 'ABC0001', 1, 234, 'Покупка без акций'),
(100113, '2021-08-22 13:17:47', 'ABC0002', 4, 123, 'Покупка по акции "Лето"');
-- закрытие дельты (фиксация изменений)
COMMIT DELTA;
Вставка данных в указанные столбцы таблицы
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- вставка двух записей в логическую таблицу sales (без опционального значения description)
INSERT INTO sales
(id, transaction_date, product_code, product_units, store_id)
VALUES (100014, '2021-08-23 09:34:10', 'ABC0003', 3, 123),
(100012, '2021-08-23 20:05:56', 'ABC0001', 6, 234);
-- закрытие дельты (фиксация изменений)
COMMIT DELTA;