INSERT VALUES
Содержание раздела
- Особенности вставки данных в партиционированные таблицы и партиции
- Особенности вставки данных в standalone-таблицы
- Как работает запрос
- Перезапуск и отмена операций
- Статистика обработки запросов
- Синтаксис
- Варианты ответа
- Ограничения
- Примеры
- Вставка данных во все столбцы логической таблицы
- Вставка данных в указанные столбцы логической таблицы
- Вставка данных в логическую таблицы вне дельты
- Вставка данных во все столбцы прокси-таблицы
- Вставка данных во все столбцы standalone-таблицы
- Вставка данных в указанные столбцы standalone-таблицы
- Вставка данных во все столбцы партиционированной таблицы
- Вставка данных во все столбцы партиции
- Перезапуск операции по вставке записей
Поддерживается в версиях: 6.6 / 6.5 / 6.4 / 6.3 / 6.2 / 6.1 / 6.0 / 5.8 / 5.7 / 5.6 / 5.5 / 5.4 / 5.3 / 5.2.
Запрос вставляет записи в указанную таблицу: логическую таблицу, прокси-таблицу или standalone-таблицу.
Запрос предназначен для добавления новых записей в любые поддерживаемые таблицы, а также для обновления записей в логических таблицах. Запрос не предназначен для обновления записей в прокси-таблицах и standalone-таблицах, так как результат зависит от типа датасорса, куда вставляется запись.
При вставке данных в прокси-таблицы и standalone-таблицы следует учитывать ограничения таблиц целевой СУБД.
В отличие от UPSERT VALUES, запрос INSERT VALUES
полностью обновляет существующие записи логической таблицы. Чтобы частично обновить существующие записи, используйте UPSERT VALUES.
Чтобы вставить большой объем данных, используйте загрузку данных.
Вставка записей в логические и материализованные представления недоступна.
Особенности вставки данных в партиционированные таблицы и партиции
Одновременная запись данных (загрузка, вставка и удаление) в партиционированную таблицу и ее партиции недоступна: возможна либо запись в партиционированную таблицу, либо параллельная запись напрямую в любое количество партиций этой таблицы.
При записи данных напрямую в партицию другие партиции таблицы остаются доступны для записи данных.
Подробнее о партиционировании см. в разделе Партиционирование данных.
Особенности вставки данных в standalone-таблицы
Синтаксис вставки в standalone-таблицу подразумевает использование внешней writable-таблицы, которая указывает на standalone-таблицу.
Как работает запрос
Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных.
При добавлении или обновлении записи все поля, указанные в запросе, заполняются значениями из запроса, а пропущенные поля — значениями по умолчанию.
Вставка в логические таблицы
Записи вставляются в логическую таблицу следующим образом: если в текущей версии данных таблицы есть запись со значением первичного ключа, указанным в запросе, запись обновляется; иначе добавляется новая запись.
Вставка в партиционированные таблицы и партиции
При вставке данных в партиционированную таблицу система распределяет записи по соответствующим партициям. Если для записи не нашлось партиции с подходящим диапазоном партиционирования, эта запись игнорируется.
При вставке данных напрямую в партицию вставляются только те записи, в которых значение ключа партиционирования соответствует одному из диапазонов партиционирования этой партиции.
Вставка в прокси-таблицы и standalone-таблицы
Записи загружаются в прокси-таблицу или standalone-таблицу следующим образом:
- если в таблице еще нет записи со значением первичного ключа, указанным в запросе, добавляется новая запись;
- иначе результат зависит от правил целевой СУБД — может вернуться ошибка или загрузиться запись с дублирующим первичным ключом.
Перезапуск и отмена операций
Незавершенную операцию по вставке данных можно перезапустить, повторив исходный запрос с ключевым словом RETRY, или отменить.
Подробнее о способах обработки незавершенных операций см. в разделе Управление операциями записи.
Статистика обработки запросов
Запросы INSERT VALUES
учитываются в категории WRITE
статистики обработки запросов. Статистика доступна с помощью запроса GET_ENTITY_STATISTICS и GET-методов получения статистики.
Синтаксис
Вставка данных во все столбцы таблицы:
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), ...
Перезапуск операции по вставке данных:
RETRY INSERT INTO [db_name.]table_name [(column_list)] VALUES (value_list_1), (value_list_2), ...
Параметры:
db_name
-
Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.
table_name
-
Имя таблицы, в которую вставляются данные. Возможные значения:
- имя логической таблицы,
- имя прокси-таблицы,
- имя внешней writable-таблицы, указывающей на нужную standalone-таблицу.
Логическая таблица может быть любого вида.
column_list
-
Список имен столбцов таблицы, куда вставляются данные. Имена перечисляются в круглых скобках через запятую. Список опционален, если количество и порядок вставляемых значений (в списке
value_list_N
) соответствуют количеству и порядку столбцов в таблице.
Ключевое слово VALUES
Ключевое слово VALUES
задает список значений строк, вставляемых в таблицу. Каждый элемент списка (value_list_N
) — это одна строка, вставляемая в таблицу, где значения столбцов перечислены через запятую.
Ключевое слово RETRY
Ключевое слово RETRY
перезапускает обработку незавершенной операции записи со статусом «Выполняется» и доступно в запросах только к логическим таблицам. Запрос с RETRY
должен полностью повторять содержимое предыдущего запроса, создавшего перезапускаемую операцию записи.
Если ключевое слово не указано, система создает и обрабатывает новую операцию.
Подробнее обо всех способах перезапуска и отмены операций см. в разделе Управление операциями записи.
Варианты ответа
В ответе возвращается:
- объект ResultSet c одной записью, содержащей столбец
sysCn
, при успешном выполнении запроса; - исключение при неуспешном выполнении запроса.
Столбец sysCn
содержит следующее значение:
- номер выполненной операции записи — при вставке данных в логическую таблицу;
- пустое значение — при вставке данных в прокси-таблицу или во внешнюю writable-таблицу.
Ограничения
Ограничения выполнения
- Выполнение запроса недоступно, если есть незавершенная операция по изменению схемы.
- Не допускается параллельное выполнение идентичных запросов.
Ограничения сущностей
- Вставка данных в логические и материализованные представления недоступна.
Ограничения партиционирования
- При вставке данных в партиционированную таблицу все записи, для которых нет подходящей партиции, игнорируются.
- Одновременная запись данных (загрузка, вставка и удаление) в партиционированную таблицу и ее партиции недоступна.
Другие ограничения
- Ключевое слово
RETRY
недоступно в запросах к прокси-таблицам и standalone-таблицам. - При обработке запроса все неактивные датасорсы пропускаются без возврата ошибки. Ошибка возвращается, если не осталось ни одного активного датасорса, подходящего для исполнения запроса.
Примеры
Вставка данных во все столбцы логической таблицы
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- вставка трех записей в логическую таблицу sales
INSERT INTO sales
VALUES (300011, '2021-08-21 23:34:10', 'ABC0001', 2, 123, 'Покупка по акции "1+1"'),
(300012, '2021-08-22 10:05:56', 'ABC0001', 1, 234, 'Покупка без акций'),
(300113, '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 (300014, '2021-08-23 09:34:10', 'ABC0003', 3, 123),
(300012, '2021-08-23 20:05:56', 'ABC0001', 6, 234);
-- закрытие дельты
COMMIT DELTA;
Вставка данных в логическую таблицы вне дельты
-- вставка двух записей в логическую таблицу sales вне дельты
INSERT INTO marketing.sales
VALUES (900011, '2021-07-11 23:34:10', 'ABC0004', 2, 123, 'Покупка по акции "1+1"'),
(900012, '2021-07-23 10:05:56', 'ABC0017', 5, 234, 'Покупка без акций')
Вставка данных во все столбцы прокси-таблицы
-- вставка трех записей в прокси-таблицу
INSERT INTO marketing.payments_proxy
VALUES (100, 111111, 'AC', 12002.53, 'RUB', 'Check number 12345'),
(101, 222222, 'AG', 450.00, 'RUB', 'Check number 4583'),
(102, 333333, 'AG', 2630.30, 'RUB', 'Check number 3753')
Вставка данных во все столбцы standalone-таблицы
-- вставка записей в standalone-таблицу, на которую указывает внешняя writable-таблица agreements_ext_write_adp
INSERT INTO marketing.agreements_ext_write_adp
VALUES (100, 111111, 'AB12345', '2022-02-01', '2022-02-02', '2024-02-02', 'Договор с ООО "Квадрат"'),
(101, 222222, 'AB67890', '2022-02-11', '2022-02-12', '2025-02-12', 'Договор с ООО "Круг"');
Вставка данных в указанные столбцы standalone-таблицы
-- вставка записей в standalone-таблицу, на которую указывает внешняя writable-таблица agreements_ext_write_adp,
-- без некоторых опциональных значений
INSERT INTO marketing.agreements_ext_write_adp (id, client_id, number, signature_date)
VALUES (102, 333333, 'AB11111', '2022-01-01');
Вставка данных во все столбцы партиционированной таблицы
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- вставка трех записей в партиционированную таблицу sales_partitioned
INSERT INTO sales_partitioned
VALUES (500011, '2023-01-11 23:34:10', 'ABC0001', 2, 123, 'Покупка по акции "1+1"'),
(500012, '2023-01-18 10:05:56', 'ABC0001', 1, 234, 'Покупка без акций'),
(500113, '2023-02-22 13:17:47', 'ABC0002', 4, 123, 'Покупка по акции "Лето"');
-- закрытие дельты
COMMIT DELTA;
Вставка данных во все столбцы партиции
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- вставка трех записей в партицию sales_jan_2023
---- последняя запись будет проигнорирована, так как дата транзакции в ней не принадлежит партиции sales_jan_2023
INSERT INTO sales_jan_2023
VALUES (500011, '2023-01-11 23:34:10', 'ABC0001', 2, 123, 'Покупка по акции "1+1"'),
(500012, '2023-01-18 10:05:56', 'ABC0001', 1, 234, 'Покупка без акций'),
(500113, '2023-02-22 13:17:47', 'ABC0002', 4, 123, 'Покупка по акции "Лето"');
-- закрытие дельты
COMMIT DELTA;
Перезапуск операции по вставке записей
-- выбор логической базы данных sales в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- вставка записи в логическую таблицу sales (без опционального значения description)
INSERT INTO sales
(id, transaction_date, product_code, product_units, store_id)
VALUES (300015, '2021-10-15 10:11:01', 'ABC0003', 1, 123);
-- перезапуск обработки операции по вставке записи
RETRY INSERT INTO sales
(id, transaction_date, product_code, product_units, store_id)
VALUES (300015, '2021-10-15 10:11:01', 'ABC0003', 1, 123);
-- закрытие дельты
COMMIT DELTA;