提交 2ced5f8b 编写于 作者: A alexey-milovidov 提交者: GitHub

Merge pull request #1180 from BayoNet/master

"INSERT" query and "strict_insert_defaults" parameter descripions
......@@ -8,7 +8,7 @@
ClickHouse:
* Полностью или частично хранить словари в оперативной памяти.
* Полностью или частично хранит словари в оперативной памяти.
* Периодически обновляет их и динамически подгружает отсутствующие значения. Т.е. словари можно подгружать динамически.
Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре :ref:`server_settings-dictionaries_config`.
......
.. _type_conversion_functions:
Функции преобразования типов
----------------------------
......
.. _interfaces:
Интерфейсы
==========
......
......@@ -316,3 +316,15 @@ input_format_skip_unknown_fields
output_format_json_quote_64bit_integers
---------------------------------------
Если значение истинно, то при использовании 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 генерирует исключение и обязывает пользователя передать данные в столбец.
\ No newline at end of file
......@@ -549,27 +549,39 @@ OPTIMIZE
Если указан ``PARTITION``, то оптимизация будет производиться только для указаной партиции.
Если указан ``FINAL``, то оптимизация будет производиться даже когда все данные уже лежат в одном куске.
.. _queries-insert:
INSERT
~~~~~~
Запрос имеет несколько вариантов.
Добавление данных.
Базовый формат запроса:
.. code-block:: sql
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 Values (v11, v12, v13), (v21, v22, v23), ...
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set
Например, следующий формат запроса идентичен базовому варианту INSERT ... VALUES:
.. code-block:: sql
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format ...
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ...
Вставка данных в произвольном указанном формате.
Сами данные идут после format, после всех пробельных символов до первого перевода строки, если он есть, включая его, или после всех пробельных символов, если переводов строки нет. Рекомендуется писать данные начиная со следующей строки (это важно, если данные начинаются с пробельных символов).
ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными. Рекомендуем при формировании запроса переносить данные на новую строку после операторов запроса (это важно, если данные начинаются с пробелов).
Пример:
......@@ -579,26 +591,38 @@ INSERT
11 Hello, world!
22 Qwerty
Подробнее про форматы данных смотрите в разделе "Форматы".
В разделе "Интерфейсы" описано, как можно вставлять данные отдельно от запроса, при использовании клиента командной строки или HTTP интерфейса.
С помощью консольного клиента или HTTP интерфейса можно вставлять данные отдельно от запроса. Как это сделать, читайте в разделе :ref:`interfaces`.
В запросе может быть опционально указан список столбцов для вставки. В этом случае, в остальные столбцы записываются значения по умолчанию.
Значения по умолчанию вычисляются из DEFAULT выражений, указанных в определении таблицы, или, если ``DEFAULT`` не прописан явно - используются нули, пустые строки. Если настройка ``strict_insert_defaults`` выставлена в 1, то все столбцы, для которых нет явных DEFAULT-ов, должны быть указаны в запросе.
Вставка результатов ``SELECT``
------------------------------
.. code-block:: sql
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
Вставка в таблицу результата запроса ``SELECT``.
Имена и типы данных результата выполнения SELECT-а должны точно совпадать со структурой таблицы, в которую вставляются данные, или с указанным списком столбцов.
Для изменения имён столбцов следует использовать синонимы (AS) в запросе ``SELECT``.
Для изменения типов данных следует использовать функции преобразования типов (смотрите раздел "Функции").
Соответствие столбцов определяется их позицией в секции SELECT. При этом, их имена в выражении SELECT и в таблице для INSERT, могут отличаться. При необходимости выполняется приведение типов данных, эквивалентное соответствующему оператору CAST.
Ни один из форматов данных не позволяет использовать в качестве значений выражения.
То есть, вы не можете написать ``INSERT INTO t VALUES (now(), 1 + 1, DEFAULT)``.
Все форматы данных кроме Values не позволяют использовать в качестве значений выражения, такие как ``now()``, ``1 + 2`` и подобные. Формат Values позволяет ограниченно использовать выражения, но это не рекомендуется, так как в этом случае для их выполнения используется неэффективный вариант кода.
Не поддерживаются другие запросы на модификацию части данных: ``UPDATE``, ``DELETE``, ``REPLACE``, ``MERGE``, ``UPSERT``, ``INSERT UPDATE``.
Впрочем, вы можете удалять старые данные с помощью запроса ``ALTER TABLE ... DROP PARTITION``.
Вы можете удалять старые данные с помощью запроса ``ALTER TABLE ... DROP PARTITION``.
Замечания о производительности
------------------------------
``INSERT`` сортирует входящие данные по первичному ключу и разбивает их на партиции по месяцам. Если вы вставляете данные за разные месяцы вперемешку, то это может значительно снизить производительность запроса ``INSERT``. Чтобы избежать этого:
* Добавляйте данные достаточно большими пачками. Например, по 100 000 строк.
* Группируйте данные по месацам самостоятельно перед загрузкой в ClickHouse.
Снижения производительности не будет, если:
* Данные поступают в режиме реального времени.
* Вы загружаете данные, которые как правило отсортированы по времени.
SELECT
~~~~~~
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册