ClickHouse/docs/ru/table_engines/dictionary.md
2017-12-18 20:54:10 +03:00

99 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<a name="table_engines-dictionary"></a>
# Dictionary
Движок `Dictionary` отображает данные словаря как таблицу ClickHouse.
К примеру у нас есть словарь `products` со следующим конфигом:
```xml
<dictionaries>
<dictionary>
<name>products</name>
<source>
<odbc>
<table>products</table>
<connection_string>DSN=some-db-server</connection_string>
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<flat/>
</layout>
<structure>
<id>
<name>product_id</name>
</id>
<attribute>
<name>title</name>
<type>String</type>
<null_value></null_value>
</attribute>
</structure>
</dictionary>
</dictionaries>
```
Проверяем:
```sql
:) select name, type, key, attribute.names, attribute.types, bytes_allocated, element_count,source from system.dictionaries where name = 'products';
SELECT
name,
type,
key,
attribute.names,
attribute.types,
bytes_allocated,
element_count,
source
FROM system.dictionaries
WHERE name = 'products'
┌─name─────┬─type─┬─key────┬─attribute.names─┬─attribute.types─┬─bytes_allocated─┬─element_count─┬─source──────────┐
products Flat UInt64 ['title'] ['String'] 23065376 175032 ODBC: .products
└──────────┴──────┴────────┴─────────────────┴─────────────────┴─────────────────┴───────────────┴─────────────────┘
```
В таком виде данные из словаря можно смотреть/использовать при помощи функций [dictGet*](../functions/ext_dict_functions.md).
Это бывает не всегда угодно, когда требуется выполнять JOIN операции или просто получить данные находящиеся сейчас в словаре.
Мы можем использовать джок таблицы `Dictionary` для отображения данных словаря в таблицу.
Синтаксис: `CREATE TABLE %table_name% (%fields%) engine = Dictionary(%dictionary_name%)`
Попробуем:
```sql
:) create table products (product_id UInt64, title String) Engine = Dictionary(products);
CREATE TABLE products
(
product_id UInt64,
title String,
)
ENGINE = Dictionary(products)
Ok.
0 rows in set. Elapsed: 0.004 sec.
```
Проверим что у нас в таблице?
```sql
:) select * from products limit 1;
SELECT *
FROM products
LIMIT 1
┌────product_id─┬─title───────────┐
152689 Некоторый товар
└───────────────┴─────────────────┘
1 rows in set. Elapsed: 0.006 sec.
```