Каковы пределы ручного повторного создания таблицы в Snowflake? - PullRequest
1 голос
/ 09 января 2020

Допустим, у меня есть таблица (с без автоматов c повторное кластеризация ), которая не является специально хорошо кластеризованной:

create or replace table recluster_test3  
(
    id NUMBER
    ,value NUMBER
    ,value_str VARCHAR
)
cluster by (value)
;
alter table recluster_test3 suspend recluster; -- no automatic reclustering
describe table recluster_test3;

insert into recluster_test3  (
 select seq4() as id
         ,uniform(1,20, random()) as value
         ,randstr(10000,random()) as value_str
 FROM TABLE(GENERATOR(ROWCOUNT => 500000)) 
);
show tables like 'recluster_test%';

информация о кластеризации для этой вновь созданной таблицы :

select system$clustering_information('recluster_test3');
{
  "average_depth": 367,
  "average_overlaps": 366,
  "cluster_by_keys": "LINEAR(VALUE)",
  "partition_depth_histogram": {
    "00000": 0,
...
    "00512": 367
  },
  "total_constant_partition_count": 0,
  "total_partition_count": 367
}

Я могу вручную скопировать таблицу с помощью

create or replace table recluster_test4 clone recluster_test3;
alter table recluster_test4 suspend recluster; -- no automatic reclustering
alter table recluster_test4 recluster; -- recluster manually,
select system$clustering_information('recluster_test4');
{
  "cluster_by_keys" : "LINEAR(VALUE)",
  "total_partition_count" : 394,
  "total_constant_partition_count" : 376,
  "average_overlaps" : 1.7778,
  "average_depth" : 2.0,
  "partition_depth_histogram" : {
    "00000" : 0,
    "00001" : 376,
    "00002" : 18,
    "00003" : 0,
...
  }
}

Это повторное кластеризация не завершена (возможно получить "00001": 367). Есть ли способ форсировать более полное повторное объединение?

Несмотря на то, что в этом случае повторное кластеризация было довольно хорошим, в реальном наборе данных со строками 190 ТБ и 400000 М каждый повторный кластер существенно не улучшает глубину кластеризации.

Итак, настоящий вопрос -

  • Каковы пределы alter table xxx recluster? Я считаю, что существуют жесткие ограничения на количество данных, которые могут быть повторно скопированы за один go, и сколько времени они затрачивают на каждый кластер.

Примечание: автоматическое повторное кластеризация c отключено из-за стоимости проблемы (данные постоянно добавляются в таблицу) и автоматическое повторное кластеризация c потребляла много кредитов снежинки.

1 Ответ

0 голосов
/ 10 января 2020

Существуют ограничения на количество повторных кластеров для каждого прогона, однако точные цифры не делятся Снежинкой - я догадываюсь на основе:

  • размер виртуального хранилища
  • размер вашей таблицы
  • статистика кластеризации в таблице

Ручная кластеризация устарела, поэтому она может быть Хорошая идея - сначала связаться со службой поддержки Snowflake, возможно, вы go выберете маршрут, который не будет поддерживаться в будущем.

Также, когда вы запускаете команду alter table <table> recluster, я полагаю, вы можете предоставить предикат, который ограничил бы количество повторных данных (например, за дату?) Или MAX_SIZE = <budget_in_bytes>

...