Size: a a a

ClickHouse не тормозит

2020 August 04

ДБ

Дмитрий Бережнов... in ClickHouse не тормозит
Artem Bochkov
Коллеги, приветствую!
Подскажите, в чем может быть проблема?

Есть запрос, он возвращает 594 строки:
SELECT id
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != 'Y')

594 rows in set. Elapsed: 0.040 sec. Processed 1.88 million rows, 37.63 MB (47.12 million rows/s., 942.76 MB/s.)

Если обавляем вывод еще одной колонки — количество результирующих строк сразу вырастает на три порядка:
SELECT id, phone
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != 'Y')

840948 rows in set. Elapsed: 0.171 sec. Processed 1.88 million rows, 81.63 MB (10.98 million rows/s., 476.61 MB/s.)

ENGINE = MergeTree.

При этом если посчитать строки, то вместо 840948 опять будет будет 594:
SELECT count(1)
FROM
(
   SELECT
       id,
       phone
   FROM shop_clients
   WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != 'Y')
)

┌─count(1)─┐
│      594 │
└──────────┘


Характер использования таблицы такой: она раз в период дропается, создается заново и в нее с нуля консольным клиентов импортируется tsv, содержащий дама mysql-ной таблицы.

Спасибо!
А такое поведение только при добавлении колонки phone или любой? Вообще структура таблицы очень странная, я бы integer_N и остальные такие же вынес в массивы. И у вас синтаксис таблицы устаревший, замените на актуальный с PARTITION и ORDER
источник

AB

Artem Bochkov in ClickHouse не тормозит
Дмитрий Бережнов
А такое поведение только при добавлении колонки phone или любой? Вообще структура таблицы очень странная, я бы integer_N и остальные такие же вынес в массивы. И у вас синтаксис таблицы устаревший, замените на актуальный с PARTITION и ORDER
Согласен — это legacy-кусок, который в следующем квартале будет переписываться и актуализироваться. Но пока надо как-то с этим дожить.  Такое странное поведение только при добавлении поля phone. С любым другим — всё нормально. Более того, если сделать SELECT phone FROM shop_clients <…> — то тоже всё корректно отрабатывает -- возвращает 594 строки.  
Еще из удивительного, если удалить одно из условий, то тоже нормально отрабатывает:
SELECT id, phone
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11)));

594 rows in set. Elapsed: 0.042 sec. Processed 1.88 million rows, 37.63 MB (44.87 million rows/s., 897.73 MB/s.)

SELECT id, phone
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != ‘Y’);

840948 rows in set. Elapsed: 0.204 sec. Processed 1.88 million rows, 81.63 MB (9.21 million rows/s., 399.63 MB/s.)
источник

ДБ

Дмитрий Бережнов... in ClickHouse не тормозит
Artem Bochkov
Согласен — это legacy-кусок, который в следующем квартале будет переписываться и актуализироваться. Но пока надо как-то с этим дожить.  Такое странное поведение только при добавлении поля phone. С любым другим — всё нормально. Более того, если сделать SELECT phone FROM shop_clients <…> — то тоже всё корректно отрабатывает -- возвращает 594 строки.  
Еще из удивительного, если удалить одно из условий, то тоже нормально отрабатывает:
SELECT id, phone
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11)));

594 rows in set. Elapsed: 0.042 sec. Processed 1.88 million rows, 37.63 MB (44.87 million rows/s., 897.73 MB/s.)

SELECT id, phone
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != ‘Y’);

840948 rows in set. Elapsed: 0.204 sec. Processed 1.88 million rows, 81.63 MB (9.21 million rows/s., 399.63 MB/s.)
Советую попробовать переписать сейчас, ваш синтаксис устаревший, возможно с ним что-то ломает запрос
источник

AB

Artem Bochkov in ClickHouse не тормозит
Попробуем
источник

ВВ

Владислав Вахрушев... in ClickHouse не тормозит
Подскажите пожалуйста. Есть кластер с ReplicatedMergeTree в нем есть полные дубликаты по всем столбцам. Есть ли вариант удалить дубликаты ?   Укажите пожалуйста путь как можно решить данный вопрос.
источник

D

Dj in ClickHouse не тормозит
Владислав Вахрушев
Подскажите пожалуйста. Есть кластер с ReplicatedMergeTree в нем есть полные дубликаты по всем столбцам. Есть ли вариант удалить дубликаты ?   Укажите пожалуйста путь как можно решить данный вопрос.
источник

ДН

Денис Никульников... in ClickHouse не тормозит
Всем привет. Есть задача получить список названий полей таблицы. Делаю следующий запрос
select t.name from (DESCRIBE table table_name) t
и он падает с ошибкой
Error running query: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 206 (line 1, col 206): DESCRIBE table table_name) t FORMAT JSON. Expected one of: SELECT subquery, SELECT query, SELECT, list of elements, WITH, SELECT query, possibly with UNION, SELECT query, subquery, possibly with UNION (version 20.5.2.7 (official build))
Подскажите, плз что я делаю не так?
источник

D

Dj in ClickHouse не тормозит
Денис Никульников
Всем привет. Есть задача получить список названий полей таблицы. Делаю следующий запрос
select t.name from (DESCRIBE table table_name) t
и он падает с ошибкой
Error running query: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 206 (line 1, col 206): DESCRIBE table table_name) t FORMAT JSON. Expected one of: SELECT subquery, SELECT query, SELECT, list of elements, WITH, SELECT query, possibly with UNION, SELECT query, subquery, possibly with UNION (version 20.5.2.7 (official build))
Подскажите, плз что я делаю не так?
1.
show create tablename

2.
select * from system.columns where table='tablename'
источник

ДН

Денис Никульников... in ClickHouse не тормозит
Спасибо, 2 способ - то что нужно.
источник

ВВ

Владислав Вахрушев... in ClickHouse не тормозит
Ага спс. Сразу не понял почему не работало. Оказалось, что надо final после прочтения документации внимательно стало понятней. Спс
источник

DK

Dmitry Kozeev in ClickHouse не тормозит
Добрый день. Не получается запустить clickhouse-jdbc-bridge для postgresql не проходит тест который описан на в git. Так же припопытке select * from jdbc ('jdbc:postgresql://***.26.159.56:5432/?user=******&password=******','dwh', 'public.def_sp_labexa_bcp')


получаю ошибку

Received exception from server (version 20.5.4):
Code: 86. DB::Exception: Received from localhost:9000. DB::Exception: Received error from remote server /columns_info?connection_string=jdbc%3Apostgresql%3A%2F%2F***.26.159.56%3A5432%2F%3Fuser%3D******%26password%3D******&schema=dwh&table=public.def_sp_labexa_bcp&external_table_functions_use_nulls=true. HTTP status code: 500 Server Error, body: No suitable driver found for jdbc:postgresql://***.26.159.56:5432/?user=******&password=******.

Received exception from server (version 20.5.4):

что и где я делаю не то или не так?
источник

A

Andrey in ClickHouse не тормозит
всем привет, подскажите, есть таблица
CREATE TABLE test_test.test
(
   `uuid` UUID,
   `status` Enum8('approved' = 1, 'in_progress' = 2, 'canceled' = 3),
   `cost` UInt64,
   `currency` Enum8('USD' = 1, 'RUB' = 2),
   `EventDate` Date,
   `EventDateTime` DateTime
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(EventDate)
ORDER BY (uuid, EventDate)
SETTINGS index_granularity = 8192


пробую добавить
ALTER TABLE test
   MODIFY TTL EventDate + toIntervalMonth(6) TO DISK 'hdd'

SETTINGS storage_policy = 'ssd_only'


Exception on client:
Code: 115. DB::Exception: Unknown setting storage_policy: in attempt to set the value of setting 'storage_policy' to 'ssd_only'


если создаю новую таблицу, то все ок
CREATE TABLE test1
(
   `uuid` UUID,
   `status` Enum8('approved' = 1, 'in_progress' = 2, 'canceled' = 3),
   `cost` UInt64,
   `currency` Enum8('USD' = 1, 'RUB' = 2),
   `EventDate` Date,
   `EventDateTime` DateTime
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(EventDate)
ORDER BY (uuid, EventDate)
TTL EventDate + toIntervalWeek(2) TO DISK 'hdd'
SETTINGS storage_policy = 'ssd_only'

Ok.

0 rows in set. Elapsed: 0.002 sec.


как добавить в существуюущую таблицу TTL и storage_policy?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Artem Bochkov
Коллеги, приветствую!
Подскажите, в чем может быть проблема?

Есть запрос, он возвращает 594 строки:
SELECT id
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != 'Y')

594 rows in set. Elapsed: 0.040 sec. Processed 1.88 million rows, 37.63 MB (47.12 million rows/s., 942.76 MB/s.)

Если обавляем вывод еще одной колонки — количество результирующих строк сразу вырастает на три порядка:
SELECT id, phone
FROM shop_clients
WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != 'Y')

840948 rows in set. Elapsed: 0.171 sec. Processed 1.88 million rows, 81.63 MB (10.98 million rows/s., 476.61 MB/s.)

ENGINE = MergeTree.

При этом если посчитать строки, то вместо 840948 опять будет будет 594:
SELECT count(1)
FROM
(
   SELECT
       id,
       phone
   FROM shop_clients
   WHERE (integer_2 != toInt32(1737)) AND (integer_2 != toInt32(1761)) AND (integer_2 != toInt32(1762)) AND (integer_2 != toInt32(1736)) AND (integer_2 != toInt32(1763)) AND (integer_2 != toInt32(1787)) AND (integer_2 != toInt32(1788)) AND (integer_30 = toInt32(1)) AND (integer_9 = toInt32(30)) AND (region_id IN (toInt32(1), toInt32(2), toInt32(3), toInt32(4), toInt32(5), toInt32(6), toInt32(7), toInt32(8), toInt32(9), toInt32(10), toInt32(11))) AND (shop_clients.is_deleted != 'Y')
)

┌─count(1)─┐
│      594 │
└──────────┘


Характер использования таблицы такой: она раз в период дропается, создается заново и в нее с нуля консольным клиентов импортируется tsv, содержащий дама mysql-ной таблицы.

Спасибо!
а если сделать PREWHERE в 1м запросе, тоже ломается?

SELECT id
FROM shop_clients
PREWHERE
источник

AK

Andrey Kapitonov in ClickHouse не тормозит
Привет, подскажите, пожалуйста, что ему не нравится? Очень много таких сообщений и из кафки ничего не забирает

<Warning> StorageKafka (queue): Can't get assignment. It can be caused by some issue with consumer group (not enough partitions?). Will keep trying.
источник

Д

Дмитрий in ClickHouse не тормозит
все доброго времени суток. Подскажите, пожалуйста, какие есть best practies при загрузке данных в Clickhouse? Стоит ли пытаться загружать данные через python-драйвер clickhouse_driver, если объёмы данных для записи составляют десятки миллионов строк? Какие есть способы для fast insert в Clickhouse БД?
источник

ЕА

Егор Андреевич... in ClickHouse не тормозит
Добавил ttl на поле в таблице, как сделать, чтобы существующие данные уже попали под очистику по ттл или со временем это само произойдет?
источник

K

Kid in ClickHouse не тормозит
Егор Андреевич
Добавил ttl на поле в таблице, как сделать, чтобы существующие данные уже попали под очистику по ттл или со временем это само произойдет?
Вроде бы TTL распространяется только на новые данные
источник

АА

Алексей Артамонов... in ClickHouse не тормозит
@den_crane не подскажете, настроил джайдест в ЗК, когда делаю getAcl /clickhouse получаю еще так же sasl. прописать zookeeper.sasl.client или еще есть варианты?
источник

IP

Ivan V. Protchenko in ClickHouse не тормозит
здраствуйте, поскажите как почистить историю консольного клиента?
источник

S

Slach in ClickHouse не тормозит
Roman Skidan
Всем привет. Есть запрос KILL QUERY WHERE query_id = 'smth'. А можно как-то узнать id запроса, если я все запросы делаю через JDBC официальный драйвер?
в system.query_log
можно поискать, если он у вас включен
источник