бесконечно рестартует, если в таблице есть materialized колонка, которая использует внешние словари, например так:
ALTER TABLE cpa.conversions ADD COLUMN IF NOT EXISTS program_name String materialized dictGet('cpa.offers_dictionary', 'program_name', offer_id);
Если добавить эту колонку в рантайме - все хорошо ровно до тех пор, пока не перезапускаем кликхаус. Как только кликхаус перезапускается - уходит в бесконечный ребут, в логе такая ошибка
2020.12.15 15:30:46.862995 [ 1 ] {} <Error> Application: DB::Exception: external dictionary 'cpa.offers_dictionary' not found: While processing CAST(dictGet('cpa.offers_dictionary', 'program_name', offer_id) AS program_name_tmp_alter11556195861598860332, 'String') AS program_name: default expression and column type are incompatible.: Cannot attach table cpa.conversions from metadata file /var/lib/clickhouse/store/3b0/3b0f373b-812b-42c7-9fdc-764521d5a7e3/conversions.sql from query ATTACH TABLE cpa.conversions UUID '1f0cefa2-4828-4cb2-a42b-8f7961907989' (conversion_id UInt64, click_id String, click_date Date, created_at DateTime, updated_at DateTime, publisher String, publisher_tracker_id UInt64, offer_id UInt64, sub_1 String, sub_2 String, sub_3 String, sub_4 String, sub_5 String, user_agent String, ip_address String, request_url String, redirect_url String, country_code String, country_name String, region_code String, region_name String, language String, isp_name String, device_type String, os_name String, os_version String, browser_name String, browser_version String, browser_minor_version String, publisher_revenue Int64, publisher_left_to_pay Int64, total_revenue Int64, system_revenue Int64, referrer_revenue Int64, referrer_left_to_pay Int64, conversion_status String, goal String, program_name String MATERIALIZED dictGet('cpa.offers_dictionary', 'program_name', offer_id), offer_name String MATERIALIZED dictGet('cpa.offers_dictionary', 'offer_name', offer_id), approve_date Date DEFAULT '1970-01-01', referrer String) ENGINE = MergeTree() PARTITION BY toYYYYMM(click_date) ORDER BY click_date SETTINGS index_granularity = 8192: while loading database cpa from path /var/lib/clickhouse/metadata/cpa
Есть тут какое то решение или у меня совсем маргинальный кейс ?
кейс не маргинальный это косяк ClickHouse mv -fv /var/lib/metadata/ваша_база/ваша_таблица.sql /tmp/ systemctl start clickhouse-server systemctl status clickhouse-server clickhouse-client --database <ваша база> < /tmp/ваша_таблица.sql
спасибо, делаю похожим образом
еще можно в sql файле попробовать вместо dictGet на dictGetString заменить... косяк в том что нету порядка иницализации таблиц и для того чтобы вывести типы получаемые через MATERIALIZED clickhouse при старте обращается к еще не проинициализированном словарю
думаю словари всегда инициализируются после таблиц...
Обсуждают сегодня