Когда это использовать
query_log не реплицируется, и в нее записываются только те запросы, которые выполняются на конкретном узле. Данные также могут перемещаться в другую таблицу. Например, они могут вставляться в query_log_0, query_log_1 и т. д. Поскольку на одном узле это может происходить в другое время, чем на остальных, полезно искать нужные данные в таблицах, имена которых не совпадают в точности.
По сути, нам нужно сделать что-то вроде этого, но в синтаксисе ClickHouse:
SELECT column1, column2 FROM my_db.my_table_*
Для этого можно использовать clusterAllReplicas() для поиска по всем узлам и табличную функцию merge(), чтобы применять шаблон регулярного выражения при поиске по нескольким таблицам.
Следующий пример показывает, как выполнить запрос ко всем таблицам с префиксом query_log:
EXCEPT, чтобы исключить столбцы, которых может не быть в разных таблицах.
пример: