Erstellen und Abfragen einer partitionierten Tabelle basierend auf Amazon-EMR-Protokollen - Amazon Athena

Erstellen und Abfragen einer partitionierten Tabelle basierend auf Amazon-EMR-Protokollen

Diese Beispiele verwenden denselben Protokollspeicherort zum Erstellen einer Athena-Tabelle, die Tabelle wird aber partitioniert, und dann wird für jeden Protokollspeicherort eine Partition erstellt. Weitere Informationen finden Sie unter Ihre Daten partitionieren.

Die folgende Abfrage erstellt die partitionierte Tabelle mit dem Namen mypartitionedemrlogs:

CREATE EXTERNAL TABLE `mypartitionedemrlogs`( `data` string COMMENT 'from deserializer') partitioned by (logtype string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'

Die folgenden Abfrageanweisungen erstellen dann Tabellenpartitionen basierend auf Unterverzeichnissen für verschiedene Protokolltypen, die Amazon EMR in Amazon S3 erstellt:

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='containers') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/containers/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='hadoop-mapreduce') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-mapreduce/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='hadoop-state-pusher') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-state-pusher/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='node') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/node/'
ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='steps') LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/steps/'

Nachdem Sie die Partitionen erstellt haben, können Sie eine SHOW PARTITIONS-Abfrage in der Tabelle ausführen, um Folgendes zu bestätigen:

SHOW PARTITIONS mypartitionedemrlogs;

Beispielabfragen

In den folgenden Beispielen werden Abfragen für bestimmte Protokolleinträge veranschaulicht, die die anhand der obigen Beispiele erstellten Tabelle und Partitionen verwenden.

Beispiel – Abfrage der Protokolle von Anwendung application_1561661818238_0002 in der Container-Partition nach ERROR oder WARN
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='containers' AND regexp_like("$PATH",'application_1561661818238_0002') AND regexp_like(data, 'ERROR|WARN') limit 100;
Beispiel – Abfrage der hadoop-Mapreduce-Partition nach Auftrag job_1561661818238_0004 und fehlgeschlagene Reduzierungen
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='hadoop-mapreduce' AND regexp_like(data,'job_1561661818238_0004|Failed Reduces') limit 100;
Beispiel – Abfrage von Hive-Protokollen in der Knotenpartition nach Abfrage-ID 056e0609-33e1-4611-956c-7a31b42d2663
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='node' AND regexp_like("$PATH",'hive') AND regexp_like(data,'056e0609-33e1-4611-956c-7a31b42d2663') limit 100;
Beispiel – Abfrage von resourcemanager-Protokollen in der Knotenpartition für die Anwendung 1567660019320_0001_01_000001
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='node' AND regexp_like(data,'resourcemanager') AND regexp_like(data,'1567660019320_0001_01_000001') limit 100