Description of <allow_databes> was improved.

Description of distributed_product_mode was improved.
Some decorative edits was made.
This commit is contained in:
BayoNet 2017-05-05 11:15:30 +03:00
parent f6454e561c
commit edffa02b49
4 changed files with 87 additions and 71 deletions

View File

@ -89,3 +89,9 @@
Затем указывается используемая квота (смотрите раздел "Квоты"). Вы можете указать квоту по умолчанию - ``default``. Она настроена в конфиге по умолчанию так, что только считает использование ресурсов, но никак их не ограничивает. Квота может называться как угодно; одна и та же квота может быть указана для разных пользователей - в этом случае, подсчёт использования ресурсов делается для каждого пользователя по отдельности. Затем указывается используемая квота (смотрите раздел "Квоты"). Вы можете указать квоту по умолчанию - ``default``. Она настроена в конфиге по умолчанию так, что только считает использование ресурсов, но никак их не ограничивает. Квота может называться как угодно; одна и та же квота может быть указана для разных пользователей - в этом случае, подсчёт использования ресурсов делается для каждого пользователя по отдельности.
Также в необязательном разделе ``<allow_databases>`` можно указать перечень баз, к которым у пользователя будет доступ. По умолчанию пользователю доступны все базы. Можно указать базу данных ``default``, в этом случае пользователь получит доступ к базе данных по умолчанию. Также в необязательном разделе ``<allow_databases>`` можно указать перечень баз, к которым у пользователя будет доступ. По умолчанию пользователю доступны все базы. Можно указать базу данных ``default``, в этом случае пользователь получит доступ к базе данных по умолчанию.
Доступ к БД ``system`` всегда считается разрешённым (так как эта БД используется для выполнения запросов).
Пользователь может получить список всех БД и таблиц в них с помощью запросов ``SHOW`` или системных таблиц, даже если у него нет доступа к отдельным ДБ.
Доступ к БД не связан с настройкой :ref:`query_complexity_readonly`. Невозможно дать полный доступ к одной БД и ``readonly`` к другой.

View File

@ -1,5 +1,5 @@
Ограничения на сложность запроса Ограничения на сложность запроса
===================== ================================
Ограничения на сложность запроса - часть настроек. Ограничения на сложность запроса - часть настроек.
Используются, чтобы обеспечить более безопасное исполнение запросов из пользовательского интерфейса. Используются, чтобы обеспечить более безопасное исполнение запросов из пользовательского интерфейса.
Почти все ограничения действуют только на SELECT-ы. Почти все ограничения действуют только на SELECT-ы.
@ -15,8 +15,10 @@
``any (только для group_by_overflow_mode)`` - продолжить агрегацию по ключам, которые успели войти в набор, но не добавлять новые ключи в набор. ``any (только для group_by_overflow_mode)`` - продолжить агрегацию по ключам, которые успели войти в набор, но не добавлять новые ключи в набор.
.. _query_complexity_readonly:
readonly readonly
------- --------
При значении 0 можно выполнять любые запросы. При значении 0 можно выполнять любые запросы.
При значении 1 можно выполнять только запросы на чтение (например, SELECT и SHOW). Запросы на запись и изменение настроек (INSERT, SET) запрещены. При значении 1 можно выполнять только запросы на чтение (например, SELECT и SHOW). Запросы на запись и изменение настроек (INSERT, SET) запрещены.
При значении 2 можно выполнять запросы на чтение (SELECT, SHOW) и изменение настроек (SET). При значении 2 можно выполнять запросы на чтение (SELECT, SHOW) и изменение настроек (SET).
@ -26,7 +28,7 @@ readonly
При использовании метода GET HTTP интерфейса, автоматически выставляется readonly = 1. То есть, для запросов, модифицирующие данные, можно использовать только метод POST. Сам запрос при этом можно отправлять как в теле POST-а, так и в параметре URL. При использовании метода GET HTTP интерфейса, автоматически выставляется readonly = 1. То есть, для запросов, модифицирующие данные, можно использовать только метод POST. Сам запрос при этом можно отправлять как в теле POST-а, так и в параметре URL.
max_memory_usage max_memory_usage
-------------- ----------------
Максимальное количество потребляемой памяти при выполнении запроса на одном сервере. По умолчанию - 10 GB. Максимальное количество потребляемой памяти при выполнении запроса на одном сервере. По умолчанию - 10 GB.
Настройка не учитывает объём свободной памяти или общий объём памяти на машине. Настройка не учитывает объём свободной памяти или общий объём памяти на машине.
@ -41,134 +43,134 @@ max_memory_usage
Потребление оперативки не полностью учитывается для состояний агрегатных функций min, max, any, anyLast, argMin, argMax от аргументов String и Array. Потребление оперативки не полностью учитывается для состояний агрегатных функций min, max, any, anyLast, argMin, argMax от аргументов String и Array.
max_rows_to_read max_rows_to_read
--------------- ----------------
Следующие ограничения могут проверяться на каждый блок (а не на каждую строку). То есть, ограничения могут быть немного нарушены. Следующие ограничения могут проверяться на каждый блок (а не на каждую строку). То есть, ограничения могут быть немного нарушены.
При выполнении запроса в несколько потоков, следующие ограничения действуют в каждом потоке по-отдельности. При выполнении запроса в несколько потоков, следующие ограничения действуют в каждом потоке по-отдельности.
Максимальное количество строчек, которое можно прочитать из таблицы при выполнении запроса. Максимальное количество строчек, которое можно прочитать из таблицы при выполнении запроса.
max_bytes_to_read max_bytes_to_read
------------- -----------------
Максимальное количество байт (несжатых данных), которое можно прочитать из таблицы при выполнении запроса. Максимальное количество байт (несжатых данных), которое можно прочитать из таблицы при выполнении запроса.
read_overflow_mode read_overflow_mode
------------- ------------------
Что делать, когда количество прочитанных данных превысило одно из ограничений: throw или break. По умолчанию: throw. Что делать, когда количество прочитанных данных превысило одно из ограничений: throw или break. По умолчанию: throw.
max_rows_to_group_by max_rows_to_group_by
------------- --------------------
Максимальное количество уникальных ключей, получаемых в процессе агрегации. Позволяет ограничить потребление оперативки при агрегации. Максимальное количество уникальных ключей, получаемых в процессе агрегации. Позволяет ограничить потребление оперативки при агрегации.
group_by_overflow_mode group_by_overflow_mode
--------------- ----------------------
Что делать, когда количество уникальных ключей при агрегации превысило ограничение: throw, break или any. По умолчанию: throw. Что делать, когда количество уникальных ключей при агрегации превысило ограничение: throw, break или any. По умолчанию: throw.
Использование значения any позволяет выполнить GROUP BY приближённо. Качество такого приближённого вычисления сильно зависит от статистических свойств данных. Использование значения any позволяет выполнить GROUP BY приближённо. Качество такого приближённого вычисления сильно зависит от статистических свойств данных.
max_rows_to_sort max_rows_to_sort
-------------- ----------------
Максимальное количество строк до сортировки. Позволяет ограничить потребление оперативки при сортировке. Максимальное количество строк до сортировки. Позволяет ограничить потребление оперативки при сортировке.
max_bytes_to_sort max_bytes_to_sort
------------- -----------------
Максимальное количество байт до сортировки. Максимальное количество байт до сортировки.
sort_overflow_mode sort_overflow_mode
------------ ------------------
Что делать, если количество строк, полученное перед сортировкой, превысило одно из ограничений: throw или break. По умолчанию: throw. Что делать, если количество строк, полученное перед сортировкой, превысило одно из ограничений: throw или break. По умолчанию: throw.
max_result_rows max_result_rows
------------- ---------------
Ограничение на количество строк результата. Проверяются также для подзапросов и на удалённых серверах при выполнении части распределённого запроса. Ограничение на количество строк результата. Проверяются также для подзапросов и на удалённых серверах при выполнении части распределённого запроса.
max_result_bytes max_result_bytes
------------- ----------------
Ограничение на количество байт результата. Аналогично. Ограничение на количество байт результата. Аналогично.
result_overflow_mode result_overflow_mode
-------------- --------------------
Что делать, если объём результата превысил одно из ограничений: throw или break. По умолчанию: throw. Что делать, если объём результата превысил одно из ограничений: throw или break. По умолчанию: throw.
Использование break по смыслу похоже на LIMIT. Использование break по смыслу похоже на LIMIT.
max_execution_time max_execution_time
-------------- -------------------
Максимальное время выполнения запроса в секундах. Максимальное время выполнения запроса в секундах.
На данный момент не проверяется при одной из стадий сортировки а также при слиянии и финализации агрегатных функций. На данный момент не проверяется при одной из стадий сортировки а также при слиянии и финализации агрегатных функций.
timeout_overflow_mode timeout_overflow_mode
--------------- ---------------------
Что делать, если запрос выполняется дольше max_execution_time: throw или break. По умолчанию: throw. Что делать, если запрос выполняется дольше max_execution_time: throw или break. По умолчанию: throw.
min_execution_speed min_execution_speed
-------------- -------------------
Минимальная скорость выполнения запроса в строчках в секунду. Проверяется на каждый блок данных по истечении timeout_before_checking_execution_speed. Если скорость выполнения запроса оказывается меньше, то кидается исключение. Минимальная скорость выполнения запроса в строчках в секунду. Проверяется на каждый блок данных по истечении timeout_before_checking_execution_speed. Если скорость выполнения запроса оказывается меньше, то кидается исключение.
timeout_before_checking_execution_speed timeout_before_checking_execution_speed
--------------- ---------------------------------------
Проверять, что скорость выполнения запроса не слишком низкая (не меньше min_execution_speed), после прошествия указанного времени в секундах. Проверять, что скорость выполнения запроса не слишком низкая (не меньше min_execution_speed), после прошествия указанного времени в секундах.
max_columns_to_read max_columns_to_read
-------------- -------------------
Максимальное количество столбцов, которых можно читать из таблицы в одном запросе. Если запрос требует чтения большего количества столбцов - кинуть исключение. Максимальное количество столбцов, которых можно читать из таблицы в одном запросе. Если запрос требует чтения большего количества столбцов - кинуть исключение.
max_temporary_columns max_temporary_columns
---------------- ---------------------
Максимальное количество временных столбцов, которых необходимо одновременно держать в оперативке, в процессе выполнения запроса, включая константные столбцы. Если временных столбцов оказалось больше - кидается исключение. Максимальное количество временных столбцов, которых необходимо одновременно держать в оперативке, в процессе выполнения запроса, включая константные столбцы. Если временных столбцов оказалось больше - кидается исключение.
max_temporary_non_const_columns max_temporary_non_const_columns
--------------------- -------------------------------
То же самое, что и max_temporary_columns, но без учёта столбцов-констант. То же самое, что и max_temporary_columns, но без учёта столбцов-констант.
Стоит заметить, что столбцы-константы довольно часто образуются в процессе выполнения запроса, но расходуют примерно нулевое количество вычислительных ресурсов. Стоит заметить, что столбцы-константы довольно часто образуются в процессе выполнения запроса, но расходуют примерно нулевое количество вычислительных ресурсов.
max_subquery_depth max_subquery_depth
------------- ------------------
Максимальная вложенность подзапросов. Если подзапросы более глубокие - кидается исключение. По умолчанию: 100. Максимальная вложенность подзапросов. Если подзапросы более глубокие - кидается исключение. По умолчанию: 100.
max_pipeline_depth max_pipeline_depth
----------- ------------------
Максимальная глубина конвейера выполнения запроса. Соответствует количеству преобразований, которое проходит каждый блок данных в процессе выполнения запроса. Считается в пределах одного сервера. Если глубина конвейера больше - кидается исключение. По умолчанию: 1000. Максимальная глубина конвейера выполнения запроса. Соответствует количеству преобразований, которое проходит каждый блок данных в процессе выполнения запроса. Считается в пределах одного сервера. Если глубина конвейера больше - кидается исключение. По умолчанию: 1000.
max_ast_depth max_ast_depth
----------- -------------
Максимальная вложенность синтаксического дерева запроса. Если превышена - кидается исключение. Максимальная вложенность синтаксического дерева запроса. Если превышена - кидается исключение.
На данный момент, проверяются не во время парсинга а уже после парсинга запроса. То есть, во время парсинга может быть создано слишком глубокое синтаксическое дерево, но запрос не будет выполнен. По умолчанию: 1000. На данный момент, проверяются не во время парсинга а уже после парсинга запроса. То есть, во время парсинга может быть создано слишком глубокое синтаксическое дерево, но запрос не будет выполнен. По умолчанию: 1000.
max_ast_elements max_ast_elements
----------- ----------------
Максимальное количество элементов синтаксического дерева запроса. Если превышено - кидается исключение. Максимальное количество элементов синтаксического дерева запроса. Если превышено - кидается исключение.
Аналогично, проверяется уже после парсинга запроса. По умолчанию: 10 000. Аналогично, проверяется уже после парсинга запроса. По умолчанию: 10 000.
max_rows_in_set max_rows_in_set
---------- ---------------
Максимальное количество строчек для множества в секции IN, создаваемого из подзапроса. Максимальное количество строчек для множества в секции IN, создаваемого из подзапроса.
max_bytes_in_set max_bytes_in_set
----------- ----------------
Максимальное количество байт (несжатых данных), занимаемое множеством в секции IN, создаваемым из подзапроса. Максимальное количество байт (несжатых данных), занимаемое множеством в секции IN, создаваемым из подзапроса.
set_overflow_mode set_overflow_mode
----------- -----------------
Что делать, когда количество данных превысило одно из ограничений: throw или break. По умолчанию: throw. Что делать, когда количество данных превысило одно из ограничений: throw или break. По умолчанию: throw.
max_rows_in_distinct max_rows_in_distinct
----------- --------------------
Максимальное количество различных строчек при использовании DISTINCT. Максимальное количество различных строчек при использовании DISTINCT.
max_bytes_in_distinct max_bytes_in_distinct
-------------- ---------------------
Максимальное количество байт, занимаемых хэш-таблицей, при использовании DISTINCT. Максимальное количество байт, занимаемых хэш-таблицей, при использовании DISTINCT.
distinct_overflow_mode distinct_overflow_mode
------------ ----------------------
Что делать, когда количество данных превысило одно из ограничений: throw или break. По умолчанию: throw. Что делать, когда количество данных превысило одно из ограничений: throw или break. По умолчанию: throw.
max_rows_to_transfer max_rows_to_transfer
----------- --------------------
Максимальное количество строчек, которых можно передать на удалённый сервер или сохранить во временную таблицу, при использовании GLOBAL IN. Максимальное количество строчек, которых можно передать на удалённый сервер или сохранить во временную таблицу, при использовании GLOBAL IN.
max_bytes_to_transfer max_bytes_to_transfer
----------- ---------------------
Максимальное количество байт (несжатых данных), которых можно передать на удалённый сервер или сохранить во временную таблицу, при использовании GLOBAL IN. Максимальное количество байт (несжатых данных), которых можно передать на удалённый сервер или сохранить во временную таблицу, при использовании GLOBAL IN.
transfer_overflow_mode transfer_overflow_mode
--------- ----------------------
Что делать, когда количество данных превысило одно из ограничений: throw или break. По умолчанию: throw. Что делать, когда количество данных превысило одно из ограничений: throw или break. По умолчанию: throw.

View File

@ -2,10 +2,16 @@
distributed_product_mode distributed_product_mode
------------------------ ------------------------
Изменяет поведение :ref:`распределенных подзапросов <queries-distributed-subrequests>`. Изменяет поведение :ref:`распределенных подзапросов <queries-distributed-subrequests>`, т.е. в тех случаях, когда запрос содержит произведение распределённых таблиц.
ClickHouse применяет настройку в том случае, когда в подзапросах на любом уровне встретилась распределенная таблица, которая существует на локальном сервере и имеет больше одного шарда. ClickHouse применяет настройку в том случае, когда в подзапросах на любом уровне встретилась распределенная таблица, которая существует на локальном сервере и имеет больше одного шарда.
Условия применения:
* Только подзапросы для IN, JOIN.
* Только если в секции FROM используется распределённая таблица.
* Не используется в случае табличной функции :ref:`remote <table_functions-remote>`.
Возможные значения: Возможные значения:
.. list-table:: .. list-table::
@ -14,7 +20,7 @@ ClickHouse применяет настройку в том случае, ког
* - Значение * - Значение
- Поведение ClickHouse - Поведение ClickHouse
* - ``deny`` * - ``deny`` (по умолчанию)
- Генерирует исключение. - Генерирует исключение.
* - ``allow`` * - ``allow``
- Выполняет запрос без изменения логики. - Выполняет запрос без изменения логики.
@ -162,6 +168,8 @@ replace_running_query
Эта настройка, выставленная в 1, используется в Яндекс.Метрике для реализации suggest-а значений для условий сегментации. После ввода очередного символа, если старый запрос ещё не выполнился, его следует отменить. Эта настройка, выставленная в 1, используется в Яндекс.Метрике для реализации suggest-а значений для условий сегментации. После ввода очередного символа, если старый запрос ещё не выполнился, его следует отменить.
.. _settings-load_balancing:
load_balancing load_balancing
-------------- --------------
На какие реплики (среди живых реплик) предпочитать отправлять запрос (при первой попытке) при распределённой обработке запроса. На какие реплики (среди живых реплик) предпочитать отправлять запрос (при первой попытке) при распределённой обработке запроса.

View File

@ -1,22 +1,22 @@
.. _table_functions-remote:
remote remote
------ ------
``remote('addresses_expr', db, table[, 'user'[, 'password']])`` Позволяет обратиться к удалённым серверам без создания таблицы типа ``Distributed``.
или Сигнатуры: ::
``remote('addresses_expr', db.table[, 'user'[, 'password']])`` remote('addresses_expr', db, table[, 'user'[, 'password']])
remote('addresses_expr', db.table[, 'user'[, 'password']])
- позволяет обратиться к удалённым серверам без создания таблицы типа Distributed.
``addresses_expr`` - выражение, генерирующее адреса удалённых серверов. ``addresses_expr`` - выражение, генерирующее адреса удалённых серверов. Это может быть просто один адрес сервера. Адрес сервера - это ``хост:порт``, или только ``хост``. Хост может быть указан в виде имени сервера, или в виде IPv4 или IPv6 адреса. IPv6 адрес указывается в квадратных скобках. Порт - TCP-порт удалённого сервера. Если порт не указан, используется ``tcp_port`` из конфигурационного файла сервера (по умолчанию - 9000).
Это может быть просто один адрес сервера. Адрес сервера - это хост:порт, или только хост. Хост может быть указан в виде имени сервера, или в виде IPv4 или IPv6 адреса. IPv6 адрес указывается в квадратных скобках. Порт - TCP-порт удалённого сервера. Если порт не указан, используется tcp_port из конфигурационного файла сервера (по умолчанию - 9000). .. important:: С IPv6-адресом обязательно указывать порт.
Замечание: в качестве исключения, при указании IPv6-адреса, обязательно также указывать порт. Примеры: ::
Примеры:
::
example01-01-1 example01-01-1
example01-01-1:9000 example01-01-1:9000
localhost localhost
@ -24,39 +24,39 @@ remote
[::]:9000 [::]:9000
[2a02:6b8:0:1111::11]:9000 [2a02:6b8:0:1111::11]:9000
Могут быть указаны адреса через запятую - в этом случае, запрос пойдёт на все указанные адреса (как на шарды с разными данными) и будет обработан распределённо. Адреса можно указать через запятую, в этом случае ClickHouse обработает запрос как распределённый, т.е. отправит его по всем указанным адресам как на шарды с разными данными.
Пример: ::
Пример:
::
example01-01-1,example01-02-1 example01-01-1,example01-02-1
Часть выражения может быть указана в фигурных скобках. Предыдущий пример может быть записан следующим образом: Часть выражения может быть указана в фигурных скобках. Предыдущий пример может быть записан следующим образом: ::
::
example01-0{1,2}-1 example01-0{1,2}-1
В фигурных скобках может быть указан диапазон (неотрицательных целых) чисел через две точки. В этом случае, диапазон раскрывается в множество значений, генерирующих адреса шардов. Если запись первого числа начинается с нуля, то значения формируются с таким же выравниванием нулями. Предыдущий пример может быть записан следующим образом: В фигурных скобках может быть указан диапазон (неотрицательных целых) чисел через две точки. В этом случае, диапазон раскрывается в множество значений, генерирующих адреса шардов. Если запись первого числа начинается с нуля, то значения формируются с таким же выравниванием нулями. Предыдущий пример может быть записан следующим образом: ::
::
example01-{01..02}-1 example01-{01..02}-1
При наличии нескольких пар фигурных скобок, генерируется прямое произведение соответствующих множеств. При наличии нескольких пар фигурных скобок, генерируется прямое произведение соответствующих множеств.
Адреса или их фрагменты в фигурных скобках, могут быть указаны через символ |. В этом случае, соответствующие множества адресов понимаются как реплики - запрос будет отправлен на первую живую реплику. При этом, реплики перебираются в порядке, согласно текущей настройке load_balancing. Адреса или их фрагменты в фигурных скобках можно указать через символ \|. В этом случае, соответствующие множества адресов понимаются как реплики - запрос будет отправлен на первую живую реплику. При этом, реплики перебираются в порядке, согласно текущей настройке :ref:`load_balancing <settings-load_balancing>`.
Пример: ::
Пример:
::
example01-{01..02}-{1|2} example01-{01..02}-{1|2}
В этом примере указано два шарда, в каждом из которых имеется две реплики. В этом примере указано два шарда, в каждом из которых имеется две реплики.
Количество генерируемых адресов ограничено некоторой константой - сейчас это 1000 штук. Количество генерируемых адресов ограничено константой - сейчас это 1000 штук.
Использование табличной функции remote менее оптимально, чем создание таблицы типа Distributed, так как в этом случае, соединения с серверами устанавливаются заново при каждом запросе, в случае задания имён хостов, делается резолвинг имён, а также не ведётся подсчёт ошибок при работе с разными репликами. При обработке большого количества запросов, всегда создавайте Distributed таблицу заранее, не используйте табличную функцию remote. Использование табличной функции ``remote`` менее оптимально, чем создание таблицы типа ``Distributed``, так как в этом случае, соединения с серверами устанавливаются заново при каждом запросе, в случае задания имён хостов, делается резолвинг имён, а также не ведётся подсчёт ошибок при работе с разными репликами. При обработке большого количества запросов, всегда создавайте ``Distributed`` таблицу заранее, не используйте табличную функцию ``remote``.
Табличная функция remote может быть полезна для следующих случаев: Табличная функция ``remote`` может быть полезна для следующих случаях:
* обращение на конкретный сервер в целях сравнения данных, отладки и тестирования; * обращение на конкретный сервер в целях сравнения данных, отладки и тестирования;
* запросы между разными кластерами ClickHouse в целях исследований; * запросы между разными кластерами ClickHouse в целях исследований;
* нечастых распределённых запросов, задаваемых вручную; * нечастых распределённых запросов, задаваемых вручную;
* распределённых запросов, где набор серверов определяется каждый раз заново. * распределённых запросов, где набор серверов определяется каждый раз заново.
Имя пользователя может быть не задано - тогда используется имя пользователя 'default'. Если пользователь не задан,то используется ``default``.
Пароль может быть не задан - тогда используется пустой пароль. Если пароль не задан, то используется пустой пароль.