Ich habe ORC Daten in S3, der wie folgt aussieht:AWS Athena: Hat `msck repair table` Kosten?
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/
Jede Stunde ich ein EMR Job ausführen, die JSON in S3 auf ORC umwandelt und sie schreiben mit dem Pfad Partition Konvention aus (siehe oben) für Athena Einnahme. Nachdem der EMR-Job abgeschlossen ist, starte ich msck repair table
, damit Athena die neuen Partitionen aufnehmen kann.
Ich habe drei Fragen:
- Hat
msck repair table
in diesem Szenario ausgeführt wird, kostet mich Geld in AWS? - AWS Docs say
msck repair table
kann Timeout. Gibt es eine Möglichkeit, einen Schritt in der Datenpipeline zu machen, um diesen Befehl bis zum erfolgreichen Abschluss fortzusetzen? - Ich würde es vorziehen, die Partitionen manuell zu Athena hinzuzufügen (da ich das Jahr, den Monat, den Tag, die Stunde kenne, an der ich arbeite). Allerdings kenne ich die
clientId
nicht, weil es 1-X von ihnen geben könnte, und ich weiß nicht, welche zum Zeitpunkt der EMR existieren. Gibt es einen Best-Practice-Weg, um dieses Problem zu lösen (mit Hive oder etwas anderem)? Ich könnte einen s3 api Anruf machen, um eine Liste vons3://bucket/org/
zu erhalten und Code zu schreiben, um über Liste zu iterieren und manuell hinzuzufügen. Ich hoffe, es ist ein einfacher Weg, ...
Hinweis: wenn ich sage "Partitionen manuell hinzufügen" Ich meine, so etwas wie dies zu tun:
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/';