Мне нужно определить первичные ключи в таблицах Snowflake, в которые я загружаю данные, поскольку используемая мной структура ELT (Singer.io) использует их для определения условия совпадения для слияния/upsert. Однако порядок столбцов в ключе, по-видимому, влияет на секционирование и производительность запросов.
Мой первичный ключ содержит столбцы с низкой и высокой кардинальностью. Я пытался определить ключ со столбцами, перечисленными в любом порядке, и когда столбец с низкой кардинальностью указан первым, в таблице меньше разделов, и некоторые запросы выполняются немного быстрее, но другие запросы могут быть намного медленнее, чем без первичного ключа. или когда столбец с высокой кардинальностью стоит первым.
Таким образом, Snowflake, по-видимому, использует первичные ключи в качестве подсказок по кластеризации/микроразделению, хотя и не применяет их. Существуют ли какие-либо рекомендации или информация о том, как выбор первичного ключа (не ключа кластеризации) может повлиять на производительность запросов?
По состоянию на апрель 2023 г. определение первичных и внешних ключей не имеет недостатков в производительности. Единственным преимуществом является устранение соединения, о котором вы можете прочитать здесь:
Подтверждено, что влияния на производительность запросов больше не происходит. (Такое поведение было замечено в конце 2022 года.)