Лучший контроль над блокировкой стола в снежинке - PullRequest
0 голосов
/ 28 января 2020

Нам нужно запустить несколько операторов слияния для одной и той же таблицы в Snowflake. Одной из проблем, с которыми мы сталкиваемся сейчас, является тот факт, что каждое выражение слияния (которое приводит к обновлениям), похоже, блокирует другие слияния. Каждый из операторов слияния имеет дело с данными, которые принадлежат непересекающемуся столбцу Key, то есть Tenant. Объем данных неравномерно распределен между арендаторами.

Итак, мы подумали, что, может быть, если мы кластеризируем таблицу, используя Tenant в качестве ключа кластеризации (я читаю документацию, в которой говорится, что кластеризация не помогает в небольших таблицах, но Я думал, что в любом случае я сделаю это), в итоге мы получим микроперегородку на каждого Арендатора, и, следовательно, блокировка обновлений больше не будет происходить. Но мы замечаем, что ключ кластеризации не гарантирует уникальное микропределение для каждого Арендатора. К сожалению, как и ожидалось, для 100 арендаторов было только 23 перегородки, и блокировка продолжалась.

При проверке блокировки мы видим, что она удерживается на РАЗДЕЛАХ (я предполагаю, что это микроперегородка).

enter image description here

Мне было интересно, есть ли какой-нибудь механизм в Снежинке, который может улучшить блокировку обновлений ИЛИ способ контролировать данные, поступающие в микроперегородку.

1 Ответ

4 голосов
/ 28 января 2020

Насколько я понимаю, нет простого способа улучшить блокировку обновлений ИЛИ способа контролировать / гарантировать данные, которые попадают в микроперегородку в Snowflake. Поскольку состояние docs «операторы UPDATE, DELETE и MERGE удерживают блокировки, которые обычно не позволяют им работать параллельно с другими операторами UPDATE, DELETE и MERGE», поэтому общее поощрение заключается в пакетном обновлении / удалении, где возможно.

Одна идея, хотя: возможно ли иметь несколько «промежуточных таблиц» в соответствии с имеющимися у вас группами арендаторов (чтобы каждый из них мог управляться слиянием независимо, без блокировки) и объединять их вместе в нижестоящую / окончательную форму таблицы или представление?

...