К сожалению, вы не можете заставить S3 Inventory создать один инвентарь для нескольких ведер. Однако вы можете объединить запасы в одну таблицу.
В руководстве, на которое вы ссылаетесь, написано MSCK REPAIR TABLE …
для загрузки ваших запасов. Я бы порекомендовал вам этого не делать, потому что он создаст странные таблицы с разделами, каждый из которых представляет инвентаризацию некоторого момента времени, что вам может понадобиться, если вы хотите сравнить то, что находится в корзине изо дня в день или неделю, чтобы неделю, но, вероятно, не то, что вы хотите большую часть времени. Большую часть времени вы хотите знать, что находится в ведре прямо сейчас. Чтобы получить несколько инвентарных списков в одну и ту же таблицу, вы также не должны запускать эту команду.
Сначала вы немного измените способ создания таблицы:
CREATE EXTERNAL TABLE your_table_name(
//column names
)
PARTITIONED BY (bucket_name string)
//options ignored
LOCATION 's3://destination-prefix/source-bucket/config-ID/hive/';
Обратите внимание, что я изменил разбиение с dt string
на bucket_name string
.
Далее вы добавляете разделы вручную:
ALTER TABLE your_table_name
ADD PARTITION (bucket_name = 'some-bucket') LOCATION 's3://destination-prefix/source-bucket/config-ID1/hive/dt=YYYY-MM-DD/'
ADD PARTITION (bucket_name = 'another-bucket') LOCATION 's3://destination-prefix/source-bucket/config-ID2/hive/dt=YYYY-MM-DD/';
Местоположения должны быть URI S3 до самых поздних дат под префиксом «куста» инвентаря для каждого сегмента.
Недостатком этого является то, что при доставке новых запасов вам нужно будет обновить таблицу, чтобы указать эти новые местоположения. Вы можете сделать это, сначала удалив разделы:
ALTER TABLE your_table_name
DROP PARTITION (bucket_name = 'some-bucket')
DROP PARTITION (bucket_name = 'another-bucket');
и добавление их снова, используя тот же SQL, что и выше, но с новыми URI S3.