У меня есть данные ORC в S3, которые выглядят так:
s3://bucket/orc/clientId=client-1/year=2017/month=3/day=16/hour=20/
s3://bucket/orc/clientId=client-2/year=2017/month=3/day=16/hour=21/
s3://bucket/orc/clientId=client-3/year=2017/month=3/day=16/hour=22/
Каждый час я запускаю задание EMR, которое преобразует необработанный JSON из S3 в ORC, и записываю его в соответствии с соглашением о разделении пути (см. Выше) для приема Athena. После завершения задания EMR я запускаю msck repair table
, чтобы Афина могла выбрать новые разделы.
У меня 3 связанных вопроса:
- Стоит ли мне запускать
msck repair table
в этом сценарии в AWS денег? - Документы AWS говорят, что
msck repair table
может истекать время ожидания . Есть ли способ сделать шаг в конвейере данных, чтобы продолжить выполнение этой команды, пока она не завершится успешно? - Я бы предпочел добавлять разделы в Афину вручную (так как я знаю год, месяц, день, час, над которым я работаю). Однако я не знаю
clientId
, потому что их может быть 1-X, и я не знаю, какие из них существуют на момент запуска EMR. Есть ли лучший способ решить эту проблему (используя Hive или что-то еще)? Я мог бы сделать вызов s3 api, чтобы получить списокs3://bucket/org/
и написать код для перебора списка и добавления вручную. Я надеюсь, что есть способ попроще ...
Примечание: когда я говорю «добавить разделы вручную», я имею в виду что-то вроде этого:
ALTER TABLE <athena table>
ADD PARTITION (clientId='client-1',year=2017,month=3,day=16,hour=20)
location 's3://bucket/orc/clientId=client-1/year=2017/month=3/day=16/hour=20/';