"INSERT" query descripion is updated. Information on performance of query is added.

Session parameter "strict_insert_defaults" is desribed.
This commit is contained in:
2017-08-31 16:17:51 +03:00
parent 2c5c42a917
commit 47ff950420
5 changed files with 63 additions and 19 deletions

View File

@ -8,7 +8,7 @@
ClickHouse: ClickHouse:
* Полностью или частично хранить словари в оперативной памяти. * Полностью или частично хранит словари в оперативной памяти.
* Периодически обновляет их и динамически подгружает отсутствующие значения. Т.е. словари можно подгружать динамически. * Периодически обновляет их и динамически подгружает отсутствующие значения. Т.е. словари можно подгружать динамически.
Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре :ref:`server_settings-dictionaries_config`. Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре :ref:`server_settings-dictionaries_config`.

View File

@ -1,3 +1,5 @@
.. _type_conversion_functions:
Функции преобразования типов Функции преобразования типов
---------------------------- ----------------------------

View File

@ -1,3 +1,5 @@
.. _interfaces:
Интерфейсы Интерфейсы
========== ==========

View File

@ -316,3 +316,15 @@ input_format_skip_unknown_fields
output_format_json_quote_64bit_integers output_format_json_quote_64bit_integers
--------------------------------------- ---------------------------------------
Если значение истинно, то при использовании JSON* форматов UInt64 и Int64 числа выводятся в кавычках (из соображений совместимости с большинством реализаций JavaScript), иначе - без кавычек. Если значение истинно, то при использовании JSON* форматов UInt64 и Int64 числа выводятся в кавычках (из соображений совместимости с большинством реализаций JavaScript), иначе - без кавычек.
.. _settings-strict_insert_defaults:
strict_insert_defaults
----------------------
Строгое присвоение значений по умолчанию при добавлении данных.
Если при выполнении запроса :ref:`queries-insert` данные для столбца не заданы, то ClickHouse присваивает полям значения по умолчанию. Значения по умолчанию определяются свойством ``DEFAULT`` для каждого столбца в настройках таблицы. Если для столбца не определен ``DEFAULT``, то когда:
* ``strict_insert_defaults=0`` - полям столбца присваиваются нули и пустые строки.
* ``strict_insert_defaults=1`` - ClickHouse генерирует исключение и обязывает пользователя передать данные в столбец.

View File

@ -549,27 +549,39 @@ OPTIMIZE
Если указан ``PARTITION``, то оптимизация будет производиться только для указаной партиции. Если указан ``PARTITION``, то оптимизация будет производиться только для указаной партиции.
Если указан ``FINAL``, то оптимизация будет производиться даже когда все данные уже лежат в одном куске. Если указан ``FINAL``, то оптимизация будет производиться даже когда все данные уже лежат в одном куске.
.. _queries-insert:
INSERT INSERT
~~~~~~ ~~~~~~
Запрос имеет несколько вариантов.
Добавление данных.
Базовый формат запроса:
.. code-block:: sql .. code-block:: sql
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ... INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
Вставляет в таблицу table строчки с перечисленными значениями. В запросе можно указать список столбцов для вставки ``[(c1, c2, c3)]``. В этом случае, в остальные столбцы записываются:
Запрос полностью аналогичен запросу вида:
* Значения, вычисляемые из ``DEFAULT`` выражений, указанных в определении таблицы.
* Нули и пустые строки, если ``DEFAULT`` не определены.
Если :ref:`strict_insert_defaults=1 <settings-strict_insert_defaults>`, то столбцы, для которых не определены ``DEFAULT``, необходимо перечислить в запросе.
В INSERT можно передавать данные любого :ref:`формата <formats>`, который поддерживает ClickHouse. Для этого формат необходимо указать в запросе в явном виде:
.. code-block:: sql
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set
Например, следующий формат запроса идентичен базовому:
.. code-block:: sql .. code-block:: sql
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ... INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ...
.. code-block:: sql ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными. Рекомендуем при формировании запроса переносить данные на новую строку после операторов запроса (это критически важно, если данные начинаются с пробелов).
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format ...
Вставка данных в произвольном указанном формате.
Сами данные идут после format, после всех пробельных символов до первого перевода строки, если он есть, включая его, или после всех пробельных символов, если переводов строки нет. Рекомендуется писать данные начиная со следующей строки (это важно, если данные начинаются с пробельных символов).
Пример: Пример:
@ -579,26 +591,42 @@ INSERT
11 Hello, world! 11 Hello, world!
22 Qwerty 22 Qwerty
Подробнее про форматы данных смотрите в разделе "Форматы". С помощью консольного клиента или HTTP интерфейса можно вставлять данные отдельно от запроса. Как это сделать, читайте в разделе :ref:`interfaces`.
В разделе "Интерфейсы" описано, как можно вставлять данные отдельно от запроса, при использовании клиента командной строки или HTTP интерфейса.
В запросе может быть опционально указан список столбцов для вставки. В этом случае, в остальные столбцы записываются значения по умолчанию.
Значения по умолчанию вычисляются из DEFAULT выражений, указанных в определении таблицы, или, если ``DEFAULT`` не прописан явно - используются нули, пустые строки. Если настройка ``strict_insert_defaults`` выставлена в 1, то все столбцы, для которых нет явных DEFAULT-ов, должны быть указаны в запросе. Вставка результатов ``SELECT``
------------------------------
.. code-block:: sql .. code-block:: sql
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ... INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
Вставка в таблицу результата запроса ``SELECT``. Имена и типы данных в результатах ``SELECT`` должны совпадать со структурой таблицы или с указанным списком столбцов. Если изначально структуры разные, то измените:
Имена и типы данных результата выполнения SELECT-а должны точно совпадать со структурой таблицы, в которую вставляются данные, или с указанным списком столбцов.
Для изменения имён столбцов следует использовать синонимы (AS) в запросе ``SELECT``. * Имена столбцов с помощью ``AS`` в запросе ``SELECT``.
Для изменения типов данных следует использовать функции преобразования типов (смотрите раздел "Функции"). * Типы данных с помощью :ref:`функций преобразования типов <type_conversion_functions>`.
Ни один из форматов данных не позволяет использовать в качестве значений выражения. Ни один из форматов данных не позволяет использовать в качестве значений выражения.
То есть, вы не можете написать ``INSERT INTO t VALUES (now(), 1 + 1, DEFAULT)``. То есть, вы не можете написать ``INSERT INTO t VALUES (now(), 1 + 1, DEFAULT)``.
Не поддерживаются другие запросы на модификацию части данных: ``UPDATE``, ``DELETE``, ``REPLACE``, ``MERGE``, ``UPSERT``, ``INSERT UPDATE``. Не поддерживаются другие запросы на модификацию части данных: ``UPDATE``, ``DELETE``, ``REPLACE``, ``MERGE``, ``UPSERT``, ``INSERT UPDATE``.
Впрочем, вы можете удалять старые данные с помощью запроса ``ALTER TABLE ... DROP PARTITION``. Вы можете удалять старые данные с помощью запроса ``ALTER TABLE ... DROP PARTITION``.
Замечания о производительности
------------------------------
``INSERT`` сортирует входящие данные по времени и разбивает их на порции по месяцам. Если вы вставляете данные, перемешанные по времени, то это может значительно снизить производительность запроса ``INSERT``. Чтобы избежать этого:
* Добавляйте данные большими объемами. Например, по 100K.
* Сортируйте данные по месацам самостоятельно перед загрузкой в ClickHouse.
Снижения производительности не будет, если:
* Данные поступают в режиме реального времени.
* Вы загружаете дампы, которые как правило отсортированы по времени.
SELECT SELECT
~~~~~~ ~~~~~~