티스토리 뷰

SW 개발

Amazon S3, Glue, Athena, QuickSight 개념 정리

지단로보트 2020. 10. 27. 18:32

Amazon Glue

  • Amazon Glue는 아마존이 제공하는 데이터 ETL 서비스 상품이다. Amazon S3에 업로드한 데이터를 데이터 소스로 하여, Amazon Athena에서 질의 가능한 데이터 카탈로그를 자동 생성하거나, 또는 가공하여 새로운 데이터 파일을 생성할 수 있다.
  • Amazon Glue의 가장 일반적인 사용 예는 크롤러를 생성하여 S3에 업로드한 데이터 파일에 대한 메타 데이터를 자동 생성하는 것이다. Amazon Athena에서 직접 테이블을 생성하는 쿼리를 작성해도 되지만, 크롤러가 자동 생성해주는 편리함을 누릴 수 있어 추천한다.
  • 데이터 파일 형식 중에 가장 질의 성능이 좋은 것은 Apache Parquet이다. Glue를 이용하면 잡을 생성하여 일반 데이터 파일을 Apache Parquet으로 변환할 수 있다.
  • 2020-10-15 부터 크롤러 생성시 데이터 소스로 MongoDB를 지원하기 시작했다. [관련 링크]

Amazon Athena

  • Amazon Athena는 아마존이 제공하는 데이터 쿼리 서비스 상품이다. 질의하고자 하는 데이터 파일(CSV, JSON, Apache Parquet)을 Amazon S3에 업로드한 후, Athena에서 해당 데이터 파일에 대해 RDBMS와 동일하게 데이터베이스, 테이블, 뷰, 조인, 피벗 개념을 적용하여 굉장히 친숙한 느낌으로 표준 SQL 쿼리를 질의할 수 있다. (오픈 소스 진영에서는 Apache Drill이 유사한 위치에 있다.)
  • S3에 업로드한 파일은 사전에 Amazon Glue에서 크롤러를 생성하여 해당 파일을 분석하여 메타 데이터를 자동 생성하도록 하면, 훨씬 편리하게 질의할 수 있다.
  • AthenaJDBC 드라이버를 제공한다. 따라서, 이를 지원하는 써드파티 클라이언트를 사용하면 편리하게 질의할 수 있다. 질의 자체가 목적이라면 Athena를 네이티브하게 지원하는 DBeaver 커뮤니티 에디션을 추천한다. (나는 대부분의 질의를 DBeaver에서 해결한다.) 시각화와 리포팅이 목적이라면 Microsoft PowerBI와 같은 외부 BI 솔루션에서도 연동이 가능하다.
  • AthenaRDBMS와 다르게 생소한 점은 구조체와 배열을 지원하는 것이다. 구조체의 경우, foo.bar와 같이 dot 기호를 사용하여 질의에 사용할 수 있다. 배열은 조금 까다로운데 질의의 필터 또는 조회 결과에 사용하려면 UNNEST 기능을 이용해야 한다. 사용 예는 아래와 같다.
# foo_array 배열의 각 요소를 별도의 로우로 분리
SELECT
    id,
    foo.bar_1,
    foo.bar_2
FROM
    "foo_db".bar_table,
    UNNEST(foo_array) AS T(foo)
WHERE
    foo.bar_1 = 'something'
LIMIT 10;
  • 구조체와 배열은 필요에 따라 적절하게 뷰를 제작하면 데이터 분석시 유용하게 활용할 수 있다. 뷰 생성 예는 아래와 같다.
# 특정 쿼리에 대한 뷰를 생성
CREATE VEIW "foo_db".bar_view AS
SELECT ...

Amazon Athena: 날짜/시간 데이터 형식

  • Athena는 날짜/시간으로 DATE, TIMESTAMP 데이터 타입만 지원한다. 따라서 추가 작업을 최소화하려면, 데이터를 생성하는 시점에 UTC+0 기준으로 Athena가 지원하는 TIMESTAMP 형식으로 가공하여 저장하면 추후 작업이 편리해진다.
# DATE 타입의 예 (YYYY-MM-DD)
2020-11-09

# TIMESTAMP 타입의 예 (YYYY-MM-DD HH:MM:SS.fffffffff)
2020-11-09 07:18:42.425

# Java에서 LocalDateTime 객체를 TIMESTAMP 문자열로 변환한 예
String timestamp = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
  • AthenaSQL 질의시 TIMESTAMP 타입에 대해 타임존과 함께 처리할 수 있는 다양한 기능을 지원한다.
# 2020-11-09 07:18:42.425 UTC
SELECT current_timestamp;

# 2020-11-09 16:18:42.425 Asia/Seoul
SELECT current_timestamp AT TIME ZONE 'Asia/Seoul';

# 2020-11-09 16:18:42.425 Asia/Seoul
SELECT at_timezone(current_timestamp, 'Asia/Seoul');

# 2020-11-09 16:15:29.964 Asia/Seoul
SELECT from_iso8601_timestamp('2020-11-09T07:15:29.964Z') AT TIME ZONE 'Asia/Seoul';

# 2020-11-09 16:15:29.964 +09:00
SELECT from_iso8601_timestamp('2020-11-09T16:15:29.964+09:00')
  • DATE, TIMESTAMP 형식 컬럼에 대해 날짜를 기준으로 조회하는 방법은 아래와 같다.
# 2020-11-09 00:00:00 이후의 모든 로우를 조회
SELECT * FROM foobar WHERE created_at > date('2020-11-09')

Amazon QuickSight

  • Amazon QuickSight는 아마존이 제공하는 BI 솔루션 상품이다. 특정 데이터에 대한 시각화 자료를 생성할 수 있다.
  • QuickSight는 원천 데이터로 데이터 셋 생성을 요구하는데, 다양한 데이터 소스로부터 데이터 셋을 생성할 수 있다. 가장 일반적이고 범용성이 좋은 것은 Amazon Athena로부터 데이터 셋을 생성하는 것이다.
  • Athena로부터 데이터 셋을 생성할 경우, 특정 테이블 또는 뷰를 선택하여 그대로 생성하거나, 또는 직접 작성한 SELECT 쿼리로 데이터 셋을 생성할 수 있다.
  • 데이터 셋 생성시 해당 데이터를 S3로부터 그대로 조회하거나, SPICE 엔진으로 조회하도록 지정할 수 있다. SPICE 엔진을 사용할 경우, 추가 과금이 발생하지만 훨씬 빠른 속도의 조회가 가능하다. 또한, SPICE 엔진은 증분 방식의 갱신이 불가능하므로, 특정 주기(ex: 1시간)마다 전체 갱신되도록 적절히 설정해야 한다.
  • 데이터 셋의 필드는 배열이나 구조체를 지원하지 않으므로, 해당 필드가 필요할 경우, 데이터 셋 생성 전에 미리 적절한 형태로 배열과 구조체를 풀어낸 쿼리를 사용하거나 뷰를 생성해야 한다.
  • QuickSight에서는 데이터 셋에서 제공하는(쿼리에 의해 주어진) 기본 필드 외에도 기본 필드를 기반으로 계산된 새로운 필드를 생성할 수 있다. 계산된 필드 생성 방법은 아래와 같다.
화면 헤더 메뉴 → [Add] 클릭 → [Add calculated field] 클릭
→ Add name: (새로 생성할 필드명 입력)
# 날짜/시간 필드에 대해 월 단위 미만을 삭제, 이를 통해 월 단위 지표에 활용할 수 있음
→ 내용: truncDate('MM', {some_date_time})
→ [Save] 클릭

참고 글

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함