Size: a a a

ClickHouse не тормозит

2020 July 22

E

Eugeny in ClickHouse не тормозит
Хм, clickhouse-client запущенный по SSH похоже потерял часть данных при копировании в него запроса. Слева на скрине оригинал в текстовом редакторе, справа - CLI кликхауса.
В чем может быть проблема?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Eugeny
Хм, clickhouse-client запущенный по SSH похоже потерял часть данных при копировании в него запроса. Слева на скрине оригинал в текстовом редакторе, справа - CLI кликхауса.
В чем может быть проблема?
клиент надо с ключами запускать -n (начиная с  20...)
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Oleg Mygryn
Добрый день, столкнулись с проблемой joined_subquery_requires_alias = 0 не применяется на query - всеравно видим ошибку на запуск query (Alias). В system.settings параметр поменян и применен - по всем профайлам.
ClickHouse server version 20.4.3 revision 54434. (Clickhouse Operator - Kubernetes)

Будем очень благодарны за помощь
тяжело в это поверить.  
select from system.settings where name = что показывает?
источник

OM

Oleg Mygryn in ClickHouse не тормозит
нам, чесно-говоря тоже:

SELECT 
   name,
   value,
   changed
FROM system.settings
WHERE (changed = 1) AND (name = 'joined_subquery_requires_alias')

┌─name───────────────────────────┬─value─┬─changed─┐
│ joined_subquery_requires_alias │ 0     │       1 │
└────────────────────────────────┴───────┴─────────┘
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
L-dar
Привет! Только начал изучать и уже проблема)
Как вставить в поле с типом UUID
INSERT INTO test (guid, ...)
VALUES ('00000000-0000-0000-0000-000000000000',...);
Ошибка: Expected: UUID. Got: UInt64
????

create table aaa(A UUID) Engine=Memory;

INSERT INTO aaa
VALUES ('00000000-0000-0000-0000-000000000000');

Ok.

1 rows in set. Elapsed: 0.001 sec


не случшайте @BloodJazMan  он предлагает плохое, toUIID превращает стримабл инсерт в говно
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Oleg Mygryn
нам, чесно-говоря тоже:

SELECT 
   name,
   value,
   changed
FROM system.settings
WHERE (changed = 1) AND (name = 'joined_subquery_requires_alias')

┌─name───────────────────────────┬─value─┬─changed─┐
│ joined_subquery_requires_alias │ 0     │       1 │
└────────────────────────────────┴───────┴─────────┘
запрос покажите из той же сессии где вы сейчас FROM system.settings сделали
источник

M

M in ClickHouse не тормозит
Всем доброго дня!

Подскажите, пожалуйста, является ли такой путь реализации витрины данных на КХ оптимальным?


Имеется 3 шарда, на них созданы локальные таблицы:

CREATE TABLE datamart.trafficEdiEds (
billingRecID UUID,
...
shard UInt64
) ENGINE = MergeTree
PARTITION BY toDate(documentReceptionDate)
ORDER BY (documentReceptionDate, senderAccountID)


Есть DISTRIBUTED таблица, которая смотрит на них:

CREATE TABLE datamart.trafficEdiEds_distributed (
billingRecID UUID,
...
shard UInt64
) ENGINE = Distributed(click_3s, datamart, trafficEdiEds, shard - 1)

Над DISTRIBUTED таблицей имеется VIEW только на первом шарде:

CREATE VIEW datamart.trafficEdiEdsView AS
SELECT billingRecID,
 dictGetUInt64('gln',
'glnevoid',
senderGlnID) AS senderGlnEvoID,
dictGetString('gln',
'glnname',
senderGlnID) AS senderGlnName,
...
shard
FROM datamart.trafficEdiEds_distributed  

В общем, в финальной вьюшке используются 3 разных словаря, из которых тянется по 5-10 полей через dictGet*.
На эту вьюшку смотрит Tableau. Пользователи строят по ней отчеты. Группируют и фильтруют по полям, которые тянутся из словарей.

А вопрос такой: является ли такая конструкция оптимальной с точки зрения утилизации сети? И как будет исполняться запрос,
в котором группировка идет по полю, полученному из словаря, а сумма считается по полю из таблицы?

Идея: сделать так, чтобы не было лишней утилизации сети. Словари можем и на всех шардах разместить (пока только на первом),
если это нужно для оптимального исполнения запросов.
источник

S

Slach in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
????

create table aaa(A UUID) Engine=Memory;

INSERT INTO aaa
VALUES ('00000000-0000-0000-0000-000000000000');

Ok.

1 rows in set. Elapsed: 0.001 sec


не случшайте @BloodJazMan  он предлагает плохое, toUIID превращает стримабл инсерт в говно
тогда видимо у него просто ошибка в другом...
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
M
Всем доброго дня!

Подскажите, пожалуйста, является ли такой путь реализации витрины данных на КХ оптимальным?


Имеется 3 шарда, на них созданы локальные таблицы:

CREATE TABLE datamart.trafficEdiEds (
billingRecID UUID,
...
shard UInt64
) ENGINE = MergeTree
PARTITION BY toDate(documentReceptionDate)
ORDER BY (documentReceptionDate, senderAccountID)


Есть DISTRIBUTED таблица, которая смотрит на них:

CREATE TABLE datamart.trafficEdiEds_distributed (
billingRecID UUID,
...
shard UInt64
) ENGINE = Distributed(click_3s, datamart, trafficEdiEds, shard - 1)

Над DISTRIBUTED таблицей имеется VIEW только на первом шарде:

CREATE VIEW datamart.trafficEdiEdsView AS
SELECT billingRecID,
 dictGetUInt64('gln',
'glnevoid',
senderGlnID) AS senderGlnEvoID,
dictGetString('gln',
'glnname',
senderGlnID) AS senderGlnName,
...
shard
FROM datamart.trafficEdiEds_distributed  

В общем, в финальной вьюшке используются 3 разных словаря, из которых тянется по 5-10 полей через dictGet*.
На эту вьюшку смотрит Tableau. Пользователи строят по ней отчеты. Группируют и фильтруют по полям, которые тянутся из словарей.

А вопрос такой: является ли такая конструкция оптимальной с точки зрения утилизации сети? И как будет исполняться запрос,
в котором группировка идет по полю, полученному из словаря, а сумма считается по полю из таблицы?

Идея: сделать так, чтобы не было лишней утилизации сети. Словари можем и на всех шардах разместить (пока только на первом),
если это нужно для оптимального исполнения запросов.
а у вас такой запрос с вью и без вью работает без ошибки разве? Не верю.
В таком виде как у вас к словарям уже на шардах будет обращение и частичный расчет сумм уже на шардах
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
shard - 1 -- это зачем? Distributed сам считает остаток от деления на кол-во шардов в кластере, а  не то что вы подумали
источник

OM

Oleg Mygryn in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
запрос покажите из той же сессии где вы сейчас FROM system.settings сделали
Запрос приблизительно такого плана (в тот-же сесиии changed = 1 и флаг установлен):

CREATE TABLE secret.generator_tmp_table_1595421478_1249483_xMO3soAa ON CLUSTER secret
ENGINE = Log() AS
SELECT *
FROM
(
   SELECT
       id,
.....
       gp_install_finish_time
   FROM secret.generator_tmp_table_1595421476_1277494_iVmLdgCn
)
ANY LEFT JOIN
(
   SELECT
       conversion_unique_id,
       *
   FROM secret.generator_tmp_table_1595421477_340448_DQJZN0ah
) USING (conversion_unique_id);
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Oleg Mygryn
Запрос приблизительно такого плана (в тот-же сесиии changed = 1 и флаг установлен):

CREATE TABLE secret.generator_tmp_table_1595421478_1249483_xMO3soAa ON CLUSTER secret
ENGINE = Log() AS
SELECT *
FROM
(
   SELECT
       id,
.....
       gp_install_finish_time
   FROM secret.generator_tmp_table_1595421476_1277494_iVmLdgCn
)
ANY LEFT JOIN
(
   SELECT
       conversion_unique_id,
       *
   FROM secret.generator_tmp_table_1595421477_340448_DQJZN0ah
) USING (conversion_unique_id);
ON CLUSTER -- надо на всех серверах параметр ставить (через on cluster не передаются параметры сессии), без on cluster тоже ошибка?
источник

M

M in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
а у вас такой запрос с вью и без вью работает без ошибки разве? Не верю.
В таком виде как у вас к словарям уже на шардах будет обращение и частичный расчет сумм уже на шардах
Да, запрос работает на пустых таблицах. Хотя, наверное, когда появятся данные он перестанет работать...
источник

OM

Oleg Mygryn in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
ON CLUSTER -- надо на всех серверах параметр ставить (через on cluster не передаются параметры сессии), без on cluster тоже ошибка?
да, вы знаете без ON CLUSTER работает
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
M
Да, запрос работает на пустых таблицах. Хотя, наверное, когда появятся данные он перестанет работать...
a без вью работает?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Oleg Mygryn
да, вы знаете без ON CLUSTER работает
потому что надо на всех серверах параметр ставить
источник

M

M in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
shard - 1 -- это зачем? Distributed сам считает остаток от деления на кол-во шардов в кластере, а  не то что вы подумали
У нас данные в локальные таблицы пишутся не через distributed таблицу, а самописным загрузчиком. При таком раскладе shard -1 все равно не нужен?
источник

OM

Oleg Mygryn in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
потому что надо на всех серверах параметр ставить
он на всех на самом деле проставлен - проверяли.  Тут возможно КХ Оператор не-до брасывает.  Но спасибо вам за подсказку!
источник

M

M in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
a без вью работает?
Да, на всех шардах
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
M
У нас данные в локальные таблицы пишутся не через distributed таблицу, а самописным загрузчиком. При таком раскладе shard -1 все равно не нужен?
ясно, и при таком раскладе если вы не используете optimize_skip_unused_shards можно вообще этот параметр не писать в Distributed
источник