From 4573c2431edcd136a6635f5ecb6efb2cd37a0dc5 Mon Sep 17 00:00:00 2001 From: Denny Crane Date: Sat, 28 May 2022 16:59:55 -0300 Subject: [PATCH] Update external-dicts-dict-layout.md --- .../external-dicts-dict-layout.md | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md index 12628bb2df1..efc817ecd44 100644 --- a/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md +++ b/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout.md @@ -21,7 +21,7 @@ sidebar_label: "Хранение словарей в памяти" - При обращении к словарю, который не удалось загрузить. - При ошибке запроса к `cached`-словарю. -Список внешних словарей и их статус можно посмотреть в таблице `system.dictionaries`. +Список внешних словарей и их статус можно посмотреть в таблице [system.dictionaries](../../../operations/system-tables/dictionaries.md). Общий вид конфигурации: @@ -48,6 +48,32 @@ LAYOUT(LAYOUT_TYPE(param value)) -- layout settings ... ``` +Ключ словаря имеет тип [UInt64], `complex-key*` словари позволяют произвольный тип ключа (составной, и из разных типов). + +[UInt64] ключи в XML словарях задаются тегом ``. +```xml +... + + + key_column + +... +``` + +Cоставные ключи в XML словарях задаются тегом `` +``` +... + + + + country_code + String + + +... +``` + + ## Способы размещения словарей в памяти {#ways-to-store-dictionaries-in-memory} - [flat](#flat) @@ -98,6 +124,8 @@ LAYOUT(FLAT(INITIAL_ARRAY_SIZE 50000 MAX_ARRAY_SIZE 5000000)) Словарь полностью хранится в оперативной памяти в виде хэш-таблиц. Словарь может содержать произвольное количество элементов с произвольными идентификаторами. На практике количество ключей может достигать десятков миллионов элементов. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). + Если `preallocate` имеет значение `true` (по умолчанию `false`), хеш-таблица будет предварительно определена (это ускорит загрузку словаря). Используйте этот метод только в случае, если: - Источник поддерживает произвольное количество элементов (пока поддерживается только источником `ClickHouse`). @@ -125,6 +153,8 @@ LAYOUT(HASHED(PREALLOCATE 0)) Аналогичен `hashed`, но при этом занимает меньше места в памяти и генерирует более высокую загрузку CPU. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). + Для этого типа размещения также можно задать `preallocate` в значении `true`. В данном случае это более важно, чем для типа `hashed`. Пример конфигурации: @@ -181,6 +211,8 @@ LAYOUT(COMPLEX_KEY_SPARSE_HASHED()) Словарь полностью хранится в оперативной памяти. Каждый атрибут хранится в массиве. Ключевой атрибут хранится в виде хеш-таблицы, где его значение является индексом в массиве атрибутов. Словарь может содержать произвольное количество элементов с произвольными идентификаторами. На практике количество ключей может достигать десятков миллионов элементов. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). + Поддерживаются все виды источников. При обновлении данные (из файла, из таблицы) считываются целиком. Пример конфигурации: @@ -220,6 +252,7 @@ LAYOUT(COMPLEX_KEY_HASHED_ARRAY()) Словарь хранится в оперативной памяти в виде хэш-таблицы с упорядоченным массивом диапазонов и соответствующих им значений. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). Этот способ размещения работает также как и hashed и позволяет дополнительно к ключу использовать дипазоны по дате/времени (произвольному числовому типу). Пример: таблица содержит скидки для каждого рекламодателя в виде: @@ -355,6 +388,8 @@ RANGE(MIN StartDate MAX EndDate); Словарь хранится в кэше, состоящем из фиксированного количества ячеек. Ячейки содержат часто используемые элементы. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). + При поиске в словаре сначала просматривается кэш. На каждый блок данных, все не найденные в кэше или устаревшие ключи запрашиваются у источника с помощью `SELECT attrs... FROM db.table WHERE id IN (k1, k2, ...)`. Затем, полученные данные записываются в кэш. Если ключи не были найдены в словаре, то для обновления кэша создается задание и добавляется в очередь обновлений. Параметры очереди обновлений можно устанавливать настройками `max_update_queue_size`, `update_queue_push_timeout_milliseconds`, `query_wait_timeout_milliseconds`, `max_threads_for_updates` @@ -414,6 +449,8 @@ LAYOUT(CACHE(SIZE_IN_CELLS 1000000000)) Похож на `cache`, но хранит данные на SSD, а индекс в оперативной памяти. Все параметры, относящиеся к очереди обновлений, могут также быть применены к SSD-кэш словарям. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). + ``` xml @@ -446,7 +483,7 @@ LAYOUT(SSD_CACHE(BLOCK_SIZE 4096 FILE_SIZE 16777216 READ_BUFFER_SIZE 1048576 Словарь не хранит данные локально и взаимодействует с источником непосредственно в момент запроса. -Ключ словаря имеет тип `UInt64`. +Ключ словаря имеет тип [UInt64](../../../sql-reference/data-types/int-uint.md). Поддерживаются все виды [источников](external-dicts-dict-sources.md), кроме локальных файлов.