mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 16:42:05 +00:00
"INSERT" query descripion is updated. Information on performance of query is added.
Session parameter "strict_insert_defaults" is desribed.
This commit is contained in:
parent
2c5c42a917
commit
47ff950420
@ -8,7 +8,7 @@
|
||||
|
||||
ClickHouse:
|
||||
|
||||
* Полностью или частично хранить словари в оперативной памяти.
|
||||
* Полностью или частично хранит словари в оперативной памяти.
|
||||
* Периодически обновляет их и динамически подгружает отсутствующие значения. Т.е. словари можно подгружать динамически.
|
||||
|
||||
Конфигурация внешних словарей находится в одном или нескольких файлах. Путь к конфигурации указывается в параметре :ref:`server_settings-dictionaries_config`.
|
||||
|
@ -1,3 +1,5 @@
|
||||
.. _type_conversion_functions:
|
||||
|
||||
Функции преобразования типов
|
||||
----------------------------
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
.. _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 генерирует исключение и обязывает пользователя передать данные в столбец.
|
@ -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 format_name data_set
|
||||
|
||||
Например, следующий формат запроса идентичен базовому:
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ...
|
||||
|
||||
.. code-block:: sql
|
||||
|
||||
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format ...
|
||||
|
||||
Вставка данных в произвольном указанном формате.
|
||||
Сами данные идут после format, после всех пробельных символов до первого перевода строки, если он есть, включая его, или после всех пробельных символов, если переводов строки нет. Рекомендуется писать данные начиная со следующей строки (это важно, если данные начинаются с пробельных символов).
|
||||
ClickHouse отсекает все пробелы и один перенос строки (если он есть) перед данными. Рекомендуем при формировании запроса переносить данные на новую строку после операторов запроса (это критически важно, если данные начинаются с пробелов).
|
||||
|
||||
Пример:
|
||||
|
||||
@ -579,26 +591,42 @@ 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`` должны совпадать со структурой таблицы или с указанным списком столбцов. Если изначально структуры разные, то измените:
|
||||
|
||||
* Имена столбцов с помощью ``AS`` в запросе ``SELECT``.
|
||||
* Типы данных с помощью :ref:`функций преобразования типов <type_conversion_functions>`.
|
||||
|
||||
Ни один из форматов данных не позволяет использовать в качестве значений выражения.
|
||||
То есть, вы не можете написать ``INSERT INTO t VALUES (now(), 1 + 1, DEFAULT)``.
|
||||
|
||||
Не поддерживаются другие запросы на модификацию части данных: ``UPDATE``, ``DELETE``, ``REPLACE``, ``MERGE``, ``UPSERT``, ``INSERT UPDATE``.
|
||||
Впрочем, вы можете удалять старые данные с помощью запроса ``ALTER TABLE ... DROP PARTITION``.
|
||||
Вы можете удалять старые данные с помощью запроса ``ALTER TABLE ... DROP PARTITION``.
|
||||
|
||||
|
||||
Замечания о производительности
|
||||
------------------------------
|
||||
|
||||
``INSERT`` сортирует входящие данные по времени и разбивает их на порции по месяцам. Если вы вставляете данные, перемешанные по времени, то это может значительно снизить производительность запроса ``INSERT``. Чтобы избежать этого:
|
||||
|
||||
* Добавляйте данные большими объемами. Например, по 100K.
|
||||
* Сортируйте данные по месацам самостоятельно перед загрузкой в ClickHouse.
|
||||
|
||||
Снижения производительности не будет, если:
|
||||
|
||||
* Данные поступают в режиме реального времени.
|
||||
* Вы загружаете дампы, которые как правило отсортированы по времени.
|
||||
|
||||
|
||||
|
||||
SELECT
|
||||
~~~~~~
|
||||
|
Loading…
Reference in New Issue
Block a user