티스토리 뷰
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에서 크롤러를 생성하여 해당 파일을 분석하여 메타 데이터를 자동 생성하도록 하면, 훨씬 편리하게 질의할 수 있다.
- Athena는 JDBC 드라이버를 제공한다. 따라서, 이를 지원하는 써드파티 클라이언트를 사용하면 편리하게 질의할 수 있다. 질의 자체가 목적이라면 Athena를 네이티브하게 지원하는
DBeaver
커뮤니티 에디션을 추천한다. (나는 대부분의 질의를 DBeaver에서 해결한다.) 시각화와 리포팅이 목적이라면Microsoft PowerBI
와 같은 외부 BI 솔루션에서도 연동이 가능하다. - Athena가 RDBMS와 다르게 생소한 점은 구조체와 배열을 지원하는 것이다. 구조체의 경우, 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"));
- Athena는 SQL 질의시 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] 클릭
참고 글
- 9 Things To Consider When Choosing Amazon Athena
- Athena를 조금 더 효율적으로 쓰기 위한 쿼리가이드
- How to Improve AWS Athena Performance: The Complete Guide
- Apache Parquet: How to be a hero with the open-source columnar data format on Google, Azure, and Amazon cloud
- Optimizing QuickSight using Athena Queries and SPICE: Operating cost analysis
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DynamoDB
- 평속
- JHipster
- 알뜰폰
- 로드바이크
- Docker
- Kendo UI Web Grid
- jpa
- chrome
- kotlin
- Tomcat
- JavaScript
- 자전거
- Spring MVC 3
- 태그를 입력해 주세요.
- CentOS
- graylog
- spring
- Spring Boot
- jsp
- node.js
- java
- MySQL
- maven
- bootstrap
- Kendo UI
- 구동계
- jstl
- 로드 바이크
- Eclipse
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함