В чем разница между микроразделами и кластеризацией данных - PullRequest
0 голосов
/ 04 марта 2020

Я читал эту ссылку . и пытаться понять, какова связь между обоими, это довольно запутанно. Пожалуйста, объясните

Ответы [ 2 ]

2 голосов
/ 04 марта 2020

Снежинка хранит данные в микроразделах. Каждый микрораздел содержит от 50 до 500 МБ несжатых данных. Если вы знакомы с разделами в традиционных базах данных, микроразделы очень похожи на них, но микроразделы автоматически создаются Snowflake. Вам не нужно разбивать таблицу, как в традиционных системах баз данных.

Кластеризация данных - это распределение данных, основанных на ключе кластеризации, в эти микроразделы. Если кластеризация не включена для вашей таблицы, ваша таблица будет по-прежнему иметь микроразделы, но данные не будут распределяться на основе указанного ключа c.

Предположим, у нас есть A, B, C, D уникальных значений столбца X в нашей таблице (t), и у нас есть 5 разделов:

P1: AABBC
P2: ABDAC
P3: BBBCA
P4: CBDCC
P5: BBCCD

Если мы попытаемся выполнить запрос «SELECT * FROM t WHERE X = A», Snowflake должен прочитать разделы P1, P2, P3. Если эта таблица кластеризована на основе столбца X, данные будут распределены следующим образом (теоретически):

P1: AAAAA
P2: BBBBB
P3: BBBBC
P4: CCCCC
P5: CCDDD

В этом случае, когда мы запускаем запрос «SELECT * FROM t WHERE X = A», Snowflake потребуется только для чтения раздела P1.

Микроразделы (или разбиение) очень важны при доступе к части данных в большой таблице, поскольку Snowflake может обрезать разделы на основе условий фильтра в вашем запросе. Если для кластеризации определен правильный ключ (столбец), сокращение раздела будет гораздо более эффективным.

1 голос
/ 05 марта 2020

Очень похоже на ответ Гохана, но я бы описал его по-другому.

Микроразделы:

Каждый раз, когда записывать данные в снежинку, они записываются в новый файл, потому что файлы неизменяемы , Это означает, что у вас есть много фрагментов. Но из-за сохранения метаданных для таблиц Snowflake может удалять таблицы, которые, как известно, не содержат искомых данных. В противном случае он загружает все данные (для выбранных вами столбцов) и выполняет «полную проверку» таблицы. Микроразделы Snowflake не имеют никакого отношения к разбиению classi c, за исключением случаев, когда вам повезет, что вы можете получить обрезку. Также микроразделы пишутся о том, как вы загружаете данные, и просто «разбиваются» на большее количество разделов, когда ваши записи go превышают пороговое значение. Так же, как вы получаете из WinZip / 7Zip / Gzip с параметром максимального размера фрагмента файла. Следующее, что нужно отметить, если вы обновите ROW в разделе, весь раздел будет переписан. И порядок обновленных строк не контролируется и может быть случайным (в зависимости от логики соединения вашей таблицы c). Таким образом, если вы делаете много записей или много «маленьких» обновлений, у вас будет очень плохая фрагментация ваших разделов, что очень негативно скажется на времени компиляции, так как все метаданные должны быть загружены. За что они сейчас берут плату. Это похоже на то, что S3 является неизменным хранилищем файлов, но это также то, почему вы можете разделять данные формы вычислений. Кроме того, работают «временное отслеживание» и «сохранение данных за прошлые дни», поскольку предыдущее состояние таблицы не удаляется в течение этого времени, поэтому вы платите за хранилище S3. Это также означает, что нужно следить за своим оттоком, так как вы платите за все данные, записанные в совокупности за дни

Кластеризация данных:

Это способ указать, каким образом вы хотите, чтобы данные были упорядочены. Эфирные устаревшие команды кластера вручную или автоматическая кластеризация перезапишут разделы для улучшения кластеризации. Подумайте о Norton SpeedDisk (если вы учитесь в старшей школе) Запись в таблицу в том порядке, в котором вы хотите, чтобы она была кластеризована (то есть всегда есть ORDER BY на вашей INSERT), улучшит ситуацию. Но вы можете иметь таблицу, кластеризованную только на одном наборе «KEYS», поэтому вам нужно подумать о том, как вы в основном используете данные, прежде чем кластеризовать их. Или иметь несколько копий данных с нужным нам поведением min-sub-set / sort (мы делаем это). предупреждение: ОБНОВЛЕНИЯ в настоящее время не учитывают эту кластеризацию, и вы можете заплатить более чем в 4 раза больше, чем полная перезапись таблицы, запустив автоматическую кластеризацию, вы должны следить за этим, поскольку это потенциально неограниченная стоимость.

Короче говоря кластеризация похожа на индексы бедняков, а Snowflake - это, по сути, массивная полная таблица сканирования / преобразования / сокращения. Но это действительно хорошо, и когда вы понимаете, как это работает, пользоваться им очень весело.

...