Gem
aws-sdk gem 안에 athena 서비스를 사용할 수 있는 함수도 포함되어 있다.
함수 사용하는 방법
처음에 aws-sdk를 사용할 때는, 아테나에 쿼리를 보내면 바로 결과값을 리턴해주는 기능이 있을거라고 기대했다.
마치 jdbc를 사용하듯이 사용할 수 있을줄 알았다. 그런데 약간 개념이 달랐다.
참고링크 : ATHENA RUBY SDK 사용법
이렇게 클라이언트를 만들고
client = Aws::Athena::Client.new(region: 'us-east-1')
resp = client.start_query_execution({
query_string: "SELECT * FROM impressions WHERE year='2017'", # required
query_execution_context: {
database: "sampledb",
},
result_configuration: { # required
output_location: "s3n://aws-athena-query-result-region/" # 쿼리 결과가 csv으로 저장되는 S3 경로
},
})
아래의 함수를 호출하면, 쿼리의 결과를 가져올 수 있다.
resp = client.get_query_results({
query_execution_id: resp.query_execution_id
})
AWS Athena를 서비스에 적용할 때, 주의사항
동시에 날릴 수 있는 쿼리의 갯수에 제한이 있다.
SELECT 쿼리문은 동시에 5개까지만 날릴 수 있다. ( 참고 링크 : Athena Service Limit )
갯수 제한은 늘릴 수 있기 때문에, AWS에 따로 요청해야한다.
한번에 가져올 수 있는 데이터 로우 갯수에 제한이 있다.
get_query_result 함수를 사용하면, 최대 1000개의 로우만 읽어올 수 있다.
결과 값의 크기가 1000개보다 많은 경우,
get_query_results 함수를 여러번 호출해서 전체 데이터를 읽어들여야한다.
쿼리 실행이 완전히 끝나기 전에, 결과값을 가져오는 함수를 호출하면 에러가 난다
때문에 데이터를 조회하기 전에, 쿼리 실행이 정상적으로 완료되었는지 확인해줘야한다.
resp = client.get_query_execution({
query_execution_id: resp.query_execution_id, # required
})
p
resp.query_execution.status.state #=> String, one of "QUEUED", "RUNNING", "SUCCEEDED", "FAILED", "CANCELLED"
쿼리의 상태를 조회했을 때, SUCCEEDED가 나와야 데이터의 결과값을 가져올 수 있다.
AWS Athena Ruby SDK 사용 후기
AWS Ruby sdk의 아테나 기능은 아쉬운 점이 꽤 많다.
쿼리 결과를 가져오기 위한 과정이 너무 복잡하다.
아테나 클라이언트를 생성하고, 쿼리문을 날리고, 쿼리 실행 결과를 확인해서, 1000건씩 데이터를 쪼개서 가져와야 한다.
게다가 이 데이터의 구조도 바로 사용하기에는 불편하게 되어있다.
< 끝 >
'소프트웨어-이야기 > 인프라' 카테고리의 다른 글
[인프라]방화벽 열려있는지 확인하기 (0) | 2017.12.02 |
---|---|
[AWS] 애플리케이션 서버에서는 200을 내려줬는데, LB 단에서는 왜 5XX 응답 코드가 내려올까? (0) | 2017.11.25 |
[AWS]beanstalk ssh 접속 에러 - NotAuthorizedError (0) | 2017.10.28 |
[AWS]beanstalk에서 로그 확인하기 (5) | 2017.10.28 |
[AWS]Athena 사용 팁 (4) | 2017.08.01 |