Amazon EMR 로그를 기반으로 분할된 테이블 생성 및 쿼리 - Amazon Athena

Amazon EMR 로그를 기반으로 분할된 테이블 생성 및 쿼리

이러한 예제에서는 동일한 로그 위치를 사용하여 Athena 테이블을 생성하지만 테이블은 분할되고 각 로그 위치에 대해 파티션이 생성됩니다. 자세한 내용은 데이터 파티셔닝 단원을 참조하세요.

다음 쿼리는 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'

다음 쿼리 문은 Amazon EMR이 Amazon S3에서 생성하는 다양한 로그 유형에 대한 하위 디렉터리를 기반으로 테이블 파티션을 생성합니다.

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/'

파티션을 생성한 후 테이블에서 SHOW PARTITIONS 쿼리를 실행하여 다음 사항을 확인할 수 있습니다.

SHOW PARTITIONS mypartitionedemrlogs;

쿼리 예제

다음 예제에서는 특정 로그 항목에 대한 쿼리가 위 예제에서 생성된 테이블 및 파티션을 사용한다는 것을 보여줍니다.

예 - ERROR 또는 WARN에 대한 컨테이너 파티션의 애플리케이션 application_1561661818238_0002 로그 쿼리
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='containers' AND regexp_like("$PATH",'application_1561661818238_0002') AND regexp_like(data, 'ERROR|WARN') limit 100;
예 - 작업 job_1561661818238_0004 및 Failed Reduces에 대한 hadoop-Mapreduce 파티션 쿼리
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='hadoop-mapreduce' AND regexp_like(data,'job_1561661818238_0004|Failed Reduces') limit 100;
예 - 쿼리 ID 056e0609-33e1-4611-956c-7a31b42d2663에 대한 노드 파티션의 Hive 로그 쿼리
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;
예 - 애플리케이션 1567660019320_0001_01_000001에 대한 노드 파티션의 resourcemanager 로그 쿼리
SELECT data, "$PATH" FROM "default"."mypartitionedemrlogs" WHERE logtype='node' AND regexp_like(data,'resourcemanager') AND regexp_like(data,'1567660019320_0001_01_000001') limit 100