184 похожих чатов

@Den_crane Помогите, пожалуйста. Есть таблица CREATE TABLE data_vault_stage.hubGln ( glnHashKey FixedString(20), loadDate

DateTime,
recordSource String,
glnCode String
) ENGINE = MergeTree() ORDER BY glnHashKey SETTINGS index_granularity = 8192

к ней мат представление

CREATE MATERIALIZED VIEW data_vault_stage.hubGln_mv (
glnHashKey FixedString(20),
lastSeenDate AggregateFunction(max,
DateTime)
) ENGINE = AggregatingMergeTree() ORDER BY glnHashKey SETTINGS index_granularity = 8192
AS
SELECT glnHashKey, maxState(loadDate) AS lastSeenDate FROM data_vault_stage.hubGln GROUP BY glnHashKey

Таблица data_vault_stage.hubGln транкейтится 1 раз в час и в нее вставляются новые данные.

Также есть такая таблица, в которую данные только добавляются через insert-select:

CREATE TABLE data_vault_core.hubGln (
glnHashKey FixedString(20),
loadDate DateTime,
recordSource String,
glnCode String
) ENGINE = MergeTree() ORDER BY glnHashKey SETTINGS index_granularity = 8192

и вот такое представление

CREATE VIEW data_vault_core.hubGln_view (
glnHashKey FixedString(20),
loadDate DateTime,
recordSource String,
lastSeenDate DateTime,
glnCode String) AS SELECT glnHashKey,
loadDate,
recordSource,
lastSeenDate,
glnCode FROM (SELECT glnHashKey,
loadDate,
recordSource,
glnCode FROM data_vault_core.hubGln) ALL LEFT JOIN (SELECT glnHashKey,
maxMerge(lastSeenDate) AS lastSeenDate FROM data_vault_stage.hubGln_mv GROUP BY glnHashKey) USING (glnHashKey)


Есть еще достаточно сложное представление, частью которого является такой подзапрос, а к нему много чего прилоединяется левым соединением:

SELECT glnHashKey,
recordSource,
glnCode FROM data_vault_core.hubGln_view WHERE dateDiff('second',
lastSeenDate,
(SELECT max(lastSeenDate) FROM data_vault_core.hubGln_view)) < (60 * 10)


Собственно, вопрос:
Запрос к сложному представлению исполняется около 10 секунд. В момент исполнения таблица data_vault_stage.hubGln может быть очищена и в нее могут быть вставлены новые данные (происходит это 1 раз в час). В loadDate всегда вставляется now().
Есть примерно <1% случаев, когда этот запрос может не вернуть данных, полагаю, что это связано с dateDiff, так как не полняется условие в where. Но с другой стороны, при исполнении запроса разве не создается снапшота
всех используемых таблиц на определенный момент времени? Нормально ли для КХ, что он так себя ведет и как можно избежать подобной ситуации?

1 ответов

12 просмотров

SELECT glnHashKey, recordSource, glnCode FROM data_vault_core.hubGln_view WHERE dateDiff('second', lastSeenDate, (SELECT max(lastSeenDate) FROM data_vault_core.hubGln_view) с т.з. КХ тут два селект и они видят 2 разных таблицы, т.е. SELECT max(lastSeenDate) выполняется над неочищенной таблицей, SELECT glnHashKey над очищенной

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта