FAQ
Q: Почему в CHYT есть клики, тогда как в обычном ClickHouse ничего похожего нет? Что такое клика?
A: Про это есть отдельная статья.
Q: Получаю одну из ошибок «DB::NetException: Connection refused», «DB::Exception: Attempt to read after eof: while receiving packet from». Что это значит?
A: Типично такое означает, что процесс CHYT внутри операции Vanilla аварийно завершился. Можно посмотреть в UI операции на счётчики числа aborted/failed джобов. Если есть недавние aborted-джобы по причине preemption, это значит, что клике не хватает ресурсов. Если есть недавние failed джобы, обратитесь к администратору системы.
Q: Получаю ошибку «Subquery exceeds data weight limit: XXX > YYY». Что это значит?
A: смотрите опцию max_data_weight_per_subquery
в документации по конфигурации клики.
Q: Как сохранять в таблицу?
A: Есть функции INSERT INTO и CREATE TABLE, Подробнее можно прочитать в разделе Отличие от ClickHouse.
Q: Как загрузить геословари в собственной клике?
A: При старте любой клики можно указать опцию --cypress-geodata-path
, которая позволяет указать путь к геословарям в Кипарисе. Подробнее про эту опцию можно прочитать в статье Как попробовать.
Q: CHYT умеет обрабатывать даты в формате TzDatetime?
A: CHYT умеет обрабатывать даты в формате TzDatetime ровно в той же мере, в какой обычный ClickHouse. Хранить данные придётся в виде строк или чисел и конвертировать при чтении-записи. Пример извлечения даты:
toDate(reinterpretAsInt64(reverse(unhex(substring(hex(payment_dt), 1, 8)))))
Q: Как переложить таблицу на SSD?
A: Для начала необходимо убедиться, что в вашем аккаунте в YTsaurus квота в медиуме ssd_blobs. Для этого можно на странице аккаунтов переключить тип медиума на ssd_blobs и ввести название своего аккаунта. Если квоты в медиуме ssd_blobs нет, то ее можно запросить через специальную форму.
После получения квоты на медиуме ssd_blobs необходимо изменить значение атрибута primary_medium
, данные будут в фоне переложены на соответствующий медиум. Подробнее можно прочитать в разделе про хранение.
Для статических таблиц можно форсировать перекладывание с помощью операции Merge:
yt set //home/dev/test_table/@primary_medium ssd_blobs
yt merge --mode auto --spec '{"force_transform"=true;}' --src //home/dev/test_table --dst //home/dev/test_table
Если таблица динамическая, для изменения медиума нужно предварительно отмонтировать таблицу,
установить атрибут, а затем смонтировать обратно:
yt unmount-table //home/dev/test_table --sync
yt set //home/dev/test_table/@primary_medium ssd_blobs
yt mount-table //home/dev/test_table --sync
Дополнительно ускорить перекладывание можно с помощью forced_compaction, однако использование этого метода создаёт большую нагрузку на кластер и крайне не рекомендуется.
Для проверки того, что таблица действительно изменила медиум можно воспользоваться командой:
$ yt get //home/dev/test_table/@chunk_media_statistics
{
"ssd_blobs" = {
"chunk_count" = 2126;
"uncompressed_data_size" = 9667220402266;
"compressed_data_size" = 4954465956017;
"data_weight" = 10764306825793;
"max_block_size" = 6584787;
};
}
Q: Поддерживается ли конструкция SAMPLE языка ClickHouse?
A: CHYT поддерживает конструкцию Sample. Отличие заключается в том, что CHYT игнорирует команду OFFSET ...
, таким образом нельзя получить выборку из другой части отобранных данных.
Пример:
SELECT count(*) FROM "//tmp/sample_table" SAMPLE 0.05;
SELECT count(*) FROM "//tmp/sample_table" SAMPLE 1/20;
SELECT count(*) FROM "//tmp/sample_table" SAMPLE 100500;
Q: Как мне получить имя таблицы в запросе?
A: Можно воспользоваться виртуальными колонками $table_name
и $table_path
. Подробнее про виртуальные колонки читайте в разделе Работа с таблицами YTsaurus.