У меня есть таблица в 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. .