Size: a a a

ClickHouse не тормозит

2021 March 23

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Андрей Радченко
Какой бы делимитер я не передал консольному клиенту, оно выдает эту ошибку. Гуишные клиенты грузят без ошибок, но долго. ЧЯДНТ?
мой-то пример работает?
источник

MD

Maxim Dzeckelev in ClickHouse не тормозит
Maxim Dzeckelev
Добрый день.
Помогите пожалуйста разобраться в MATERIALIZED VIEW
Проблама в том, выполнятеся фул скан всех партов представления, но мне бы хотелось этого избежать

сырые данные лежат подобным образом

CREATE TABLE IF NOT EXISTS v1_fts.local_ids
   ON CLUSTER cluster
(
   date        Date,
   id          UInt64,
   words       Array(UInt64)
)
   ENGINE = ReplicatedMergeTree(
            '/clickhouse/tables/{shard}/v1_fts/local_ids',
            '{replica}')
       PARTITION BY date
       ORDER BY (date, id)
       SETTINGS index_granularity = 8192;

распределеённая таблица

CREATE TABLE IF NOT EXISTS v1_fts.ids
   ON CLUSTER cluster
(
   date        Date,
   id          UInt64,
   words       Array(UInt64)
)
   ENGINE Distributed(cluster, v1_fts, local_ids, id);
   
Я бы хотел исполнять запрос подобного вида:
SELECT date, id
FROM
   (
    SELECT DISTINCT
        date,
        id
    FROM v1_fts.ids
        PREWHERE date = '2021-03-18' AND words hasAll(words, [16015426228996655908,1584244114596650083])
    ORDER BY id
    LIMIT 0,10);
но это фулскан из-за того что индекс не по words

делаю новую таблицу

CREATE TABLE v1_fts.local_words
   ON CLUSTER cluster
(
   date        Date,
   word        UInt64,
   words       Array(UInt64),
   id          UInt64
) ENGINE = ReplicatedMergeTree(
          '/clickhouse/tables/{shard}/v1_fts/local_words', '{replica}')
     PARTITION BY tuple()
     ORDER BY (date, word, words, id);

и mat view для нее

CREATE MATERIALIZED VIEW IF NOT EXISTS v1_fts.words_mv
           ON CLUSTER cluster
           TO v1_fts.local_words
AS
SELECT date,
      word,
      words
FROM v1_fts.local_ids
        ARRAY JOIN words AS word
GROUP BY (date, word, words, id);

и распределенная таблица для words

CREATE TABLE IF NOT EXISTS v1_fts.words
   ON CLUSTER cluster
(
   date        Date,
   word        UInt64,
   words       Array(UInt64),
   id          UInt64,
) ENGINE = Distributed(cluster, v1_fts, local_words, word);


заливаю новые данные в распределенную таблицу v1_fts.words небольшими кусками по 10000 строк, общее количкство строк порядка десяти миллинов.

выплняю модицированный запрос

SELECT date, id
FROM
   (
    SELECT DISTINCT
        date,
        id
    FROM v1_fts.words
        PREWHERE date = '2021-03-18' AND word IN (16015426228996655908,1584244114596650083) AND hasAll(words, [16015426228996655908,1584244114596650083])
    ORDER BY id
    LIMIT 0,10);
   
по логу я вижу, что выполнятеся фулскан таблицы v1_fts.local_words на всех шардах

Подскажите пожалуйста как организовать даные и избежать фулскан таблицы v1_fts.local_words в этом кейсе?
Сам себе отвечу на вопрос. Вдруг кому то поможет.
Мне помог вот этот документ
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf
если хочешь реорганизовать данные, то нужно "натравить" материализованное представление на распределённую таблицу, а не на локальную, тогда данные будут правильно организованы.
CREATE MATERIALIZED VIEW IF NOT EXISTS v1_fts.words_mv
           ON CLUSTER cluster
           TO v1_fts.words
AS
SELECT date,
      word,
      words
FROM v1_fts.ids
        ARRAY JOIN words AS word
GROUP BY (date, word, words, id);
источник

АР

Андрей Радченко... in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
мой-то пример работает?
Нет. Ваш пример - Code: 81, e.displayText() = DB::Exception: Database DAS doesn't exist (version 20.9.3.45 (official build))
Code: 60, e.displayText() = DB::Exception: Table DAS.jTranOff_2019_TranOffPost_nullable doesn't exist. (version 20.9.3.45 (official build))
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Андрей Радченко
Нет. Ваш пример - Code: 81, e.displayText() = DB::Exception: Database DAS doesn't exist (version 20.9.3.45 (official build))
Code: 60, e.displayText() = DB::Exception: Table DAS.jTranOff_2019_TranOffPost_nullable doesn't exist. (version 20.9.3.45 (official build))
поразительно
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
>https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf
Кстати я недавно пересмотрел старое видео Швакова, оказывается я все мысли и даже выражения спер оттуда, чудеса памяти.
источник

АР

Андрей Радченко... in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
поразительно
И как оно вообще может работать без передачи учетных данных при обращении к объектам? По хелпу у этого бинарника нет учетных данных.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Андрей Радченко
И как оно вообще может работать без передачи учетных данных при обращении к объектам? По хелпу у этого бинарника нет учетных данных.
у КХ только один бинарник. Все приложения это одно и тоже.
clickhouse-local создает базу данных в памяти, она живет пока выполняется процесс local, там не нужны учетные записи, туда нельзя подключится
источник

АР

Андрей Радченко... in ClickHouse не тормозит
Какой один бинарник? Я про clickhouse-local
источник

АР

Андрей Радченко... in ClickHouse не тормозит
До этого я использовал clickhouse-client
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Андрей Радченко
Какой один бинарник? Я про clickhouse-local
ls -l /usr/bin/clickhouse-local
lrwxrwxrwx 1 root root 10 Mar  3 09:15 /usr/bin/clickhouse-local -> clickhouse
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
я использовал clickhouse-local чтобы продемонстрировать что ^ поддерживается
источник

АР

Андрей Радченко... in ClickHouse не тормозит
Короче, кривой инструмент. С каким бы делимитером я бы не выгрузил таблицу, с этим делимитером я через ГУЙ гружу данные, консоль выдает одну и ту же ошибку, подставляя этот делимитер в сообщение.
источник

АР

Андрей Радченко... in ClickHouse не тормозит
Как этим вобще можно пользоваться?)
источник

АР

Андрей Радченко... in ClickHouse не тормозит
cat /opt/jtranoff_2019_1.csv | /usr/bin/clickhouse-client -u user --password 'pass' --database=DAS --format_csv_delimiter="^" --query="INSERT INTO DAS.jTranOff_2019 FORMAT CSV";
Здесь всё правильно - один из примеров?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Андрей Радченко
Короче, кривой инструмент. С каким бы делимитером я бы не выгрузил таблицу, с этим делимитером я через ГУЙ гружу данные, консоль выдает одну и ту же ошибку, подставляя этот делимитер в сообщение.
да, вот вам другой пример


create table csv (A String, B String) Engine=Memory;

cat x.csv
a^v
b^s

cat x.csv|clickhouse-client --format_csv_delimiter="^" --query="insert into csv format CSV"

SELECT * FROM csv

┌─A─┬─B─┐
│ a │ v │
│ b │ s │
└───┴───┘
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
т.е. проблема в самих данных garbage after Nullable(Date): "19^980^0.0"
источник

АР

Андрей Радченко... in ClickHouse не тормозит
Почему через гуй клиенты грузится?
источник

i

ivan in ClickHouse не тормозит
ivan
Добрый день! Не происходит вставка в одну из таблиц бд:
Code: 252. DB::Exception: Received from localhost:9000. DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts..
Вставка происходит 4-5 раз в день из csv на несколько тысяч строк. Руками попробовал скормить КХ csv на 17 строк - вышеупомянутая ошибка.
select * from system.merges - пусто
select * from system.replication_queue - пусто
select * from parts where table='<table_name>' - данных нет уже пару дней (столько живем с ошибкой)
select * from replicas - здесь обратил внимание, что данные по проблемной таблице отличаются от ее соседей. Привлекли внимание следующие параметры:
is_leader - 0 (у здоровых соседей 1)
absolute_delay - 1616488909 (у соседей 0. Полагаю, это задержка. Видимо репликация не происходит)
active_replicas - 0 (2 у соседей)
engine проблемной таблицы - ReplicatedSummingMergeTree, версия КХ - ClickHouse server version 20.9.2 revision 54439
Подскажите пожалуйста, в чем проблема и как исправить?
@den_crane, посмотрите пожалуйста
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
ivan
@den_crane, посмотрите пожалуйста
у вас КХ строчит ошибки в лог гигабайтами, покажите их, желательно весь /var/log/clickhouse-server/clickhouse-server.log выложить куда-нибудь
источник

i

ivan in ClickHouse не тормозит
Понял, сделаю
источник