Внешние словари (mysql, строковый ключ)

200 views
Skip to first unread message

Tima Ber

unread,
Mar 2, 2017, 11:11:39 AM3/2/17
to ClickHouse
Приветствую!
В доке есть такое
https://clickhouse.yandex/reference_ru.html#Внешние словари
https://clickhouse.yandex/reference_ru.html#Функции для работы с внешними словарями

Подключил mysql, вот настройки для маппинга полей
http://joxi.ru/Grqx6zPTadzWAz
Ключ в mysql - '_id', является строкой.

Но в логе ошибок пишет
http://joxi.ru/EA4je98tWN0Pmb

Насколько я помню, в каком-то митапе или конференции, сообщалось, что в словари добавлена возможность использовать в качестве ключа не только числа.
Так ли это, может я что-то не так понял?


Alex Zatelepin

unread,
Mar 2, 2017, 12:32:07 PM3/2/17
to ClickHouse
В словарях есть (к сожалению, пока недокументированная) возможность задавать составные ключи. Ключом в таком случае является кортеж (tuple) из полей произвольных типов. Если сконфигурировать ключ из одного поля типа String, получится как раз то, что нужно.

Подробнее, в вашем случае:

Задаём layout=complex_key_hashed (другой вариант complex_key_cache, по смыслу они аналогичны hashed и cache):
<layout>
    <complex_key_hashed/>
</layout>

Ключ задаём не в элементе <id>, а в элементе <key>. Поля ключа задаются в таком же формате, как атрибуты словаря. В вашем случае получается:
<structure>
    <key>
        <attribute>
            <name>_id</name>
            <type>String</type>
        </attribute>
    </key>

    ...

Далее, в dictGet* в качестве ключа указываете tuple от строки:
SELECT dictGetString('my_dict', 'email', tuple('key'))

Tima Ber

unread,
Mar 2, 2017, 1:33:21 PM3/2/17
to ClickHouse
Спасибо, сейчас попробую


On Thursday, March 2, 2017 at 7:11:39 PM UTC+3, Tima Ber wrote:

Tima Ber

unread,
Mar 2, 2017, 1:52:18 PM3/2/17
to ClickHouse
Сработало http://prntscr.com/ef7xdv!
А ещё, в документации, когда копируешь xml для конфига словаря, в тексте есть невалиднные элементы http://prntscr.com/ef7yrp.
А тут http://prntscr.com/ef7z68 нет закрывающего символа


On Thursday, March 2, 2017 at 7:11:39 PM UTC+3, Tima Ber wrote:
Reply all
Reply to author
Forward
0 new messages