У меня есть таблица в Snowflake. Один из столбцов в таблице называется obj_key
(ключ объекта). Размер таблицы очень большой (в ТБ), поэтому желательна производительность.
Теперь новая запись добавляется в таблицу каждый раз, когда выполняется обновление объекта. Новая вставленная строка имеет тот же obj_key
, но другую запись в столбце time_modified
. Предположим, я хочу получить отдельные obj_key
из таблицы при соблюдении определенных условий.
У меня есть три подхода:
Подход 1:
SELECT obj_key
FROM my_table
WHERE some_condition
GROUP BY obj_key;
Подход 2:
SELECT distinct(obj_key)
FROM my_table
WHERE some_condition;
Подход 3:
SELECT obj_key
FROM my_table
WHERE some_condition
QUALIFY ROW_NUMBER() OVER (PARTITION BY obj_key ORDER BY obj_key) = 1;
Итак, по сути, мой вопрос сводится к следующему:
Я читал, что distinct
для нескольких столбцов выполняется group_by(col1, col2, ..., col n)
. Итак, как производительность отличается на двух (если это так)?
Поскольку PARTITION BY
также требует ORDER BY
, не снижает ли это резко производительность?
Я был бы рад, если бы кто-нибудь мог подробно рассказать о том, как эти запросы выполняются на SnowFlake.