2017-11-29 17 views
3

매 시간마다 실행되는 스파크 배치 작업이 있습니다. 각 실행은 S3에 새 데이터를 생성하고 저장하며 디렉토리 이름 지정 패턴은 DATA/YEAR=?/MONTH=?/DATE=?/datafile입니다.AWS에서 MSCK REPAIR TABLE을 자동으로 실행하는 방법 Athena

데이터를 S3에 업로드 한 후 Athena을 사용하여 조사하고 싶습니다. 더, 나는 데이터 소스로 아테나에 연결하여 QuickSight에 그들을 시각화하고 싶습니다.

내 스파크 배치를 실행할 때마다 S3에 저장된 새로 생성 된 데이터는 수동으로 쿼리 MSCK REPARI TABLE을 실행하지 않는 이상 아테나에서 발견되지 않습니다.

아테나가 데이터를 자동으로 업데이트하도록하는 방법이 있습니까? 완전 자동 데이터 시각화 파이프 라인을 만들 수 있습니까?

답변

3

이 작업을 예약하는 방법에는 여러 가지가 있습니다. 워크 플로를 어떻게 예약합니까? Airflow, Luigi, Azkaban, cron 또는 AWS Data pipeline과 같은 시스템을 사용하고 있습니까?

이 중 하나에서 다음 CLI 명령을 실행할 수 있어야합니다.

$ aws athena start-query-execution --query-string "MSCK REPAIR TABLE some_database.some_table" --result-configuration "OutputLocation=s3://SOMEPLACE"

또 다른 옵션은 AWS Lambda 될 것이다. S3에 대한 새 업로드에 대한 응답으로 MSCK REPAIR TABLE some_database.some_table을 호출하는 함수가있을 수 있습니다.

예 람다 기능

은 같은 작성할 수 :

import boto3 

def lambda_handler(event, context): 
    bucket_name = 'some_bucket' 

    client = boto3.client('athena') 

    config = { 
     'OutputLocation': 's3://' + bucket_name + '/', 
     'EncryptionConfiguration': {'EncryptionOption': 'SSE_S3'} 

    } 

    # Query Execution Parameters 
    sql = 'MSCK REPAIR TABLE some_database.some_table' 
    context = {'Database': 'some_database'} 

    client.start_query_execution(QueryString = sql, 
           QueryExecutionContext = context, 
           ResultConfiguration = config) 

그런 다음 새로운 데이터가 버킷에서 DATA/ 접두사에 따라 추가 할 때 람다 기능을 실행하는 트리거를 구성합니다.

궁극적으로 작업 스케줄러를 사용하여 스파크 작업을 실행 한 후에 파티션을 명시 적으로 다시 빌드하면 자체 문서화의 이점이 있습니다. 반면 AWS Lambda는 이와 같은 작업에 편리합니다.