Airflow 고급 기능, dbt, Data Catalog

Airflow와 구글시트 연동하기 - 개요와 sheet → Redshift

터칭 데이터 2024. 1. 2. 17:44

 

 

1. ELT 작성과 구글시트/슬랙 연동 (후반부)

 

ELT 구현과 구글시트/슬랙 연동과 같은 다양한 DAG를 작성해보자

 

 

 

 

 

 

Contents


1. ELT 구현

 

2. Slack 연동하기

 

3. 구글 시트 연동하기 (1): 시트 => Redshift 테이블

 

4. 구글 시트 연동하기 (2): Redshift 테이블 => 시트

 

5. API & Airflow 모니터링

 

6. 숙제

 

 

 

 

 

 

구글 시트를 테이블로 복사하는 예제 개요

 

 

CREATE TABLE 
keeyong.spreadsheet_copy_testing (
    col1 int,
    col2 int,
    col3 int,
    col4 int
);

 

 

 

 

 

 

 

 

 

구글 시트 연동하기

 

시트 API 활성화하고 구글 서비스 어카운트 생성하고 그 내용을 JSON 파일로 다운로드

 

어카운트에서 생성해준 이메일을 조작하고 싶은 시트에 공유

 

Airflow DAG쪽에서 해당 JSON 파일로 인증하고 앞서 시트를 조작

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

구글 서비스 어카운트 생성 (1)

 

구글 클라우드 로그인

https://console.cloud.google.com/

 

구글 스프레드시트 API 활성화 필요

https://console.cloud.google.com/apis/library/sheets.googleapis.com

 

 

 

 

 

 

 

 

 

 

 

 

구글 서비스 어카운트 생성 (2)

 

다음으로 구글 서비스 어카운트 생성 (JSON)

아래 두 문서 중 하나를 참고
    - https://robocorp.com/docs/development-guide/google-sheets/interacting-with-google-sheets
    - https://denisluiz.medium.com/python-with-google-sheets-service-account-step-by-step-8f74c26ed28e

 

이 JSON 파일의 내용을 google_sheet_access_token이란 이름의 Variable로 등록

 

이 JSON 파일을 보면 이메일 주소가 하나 존재

이를 읽고 싶은 구글스프레드시트 파일에 공유. 이 이메일은 iam.gserviceaccount.com로 끝남

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

구글 서비스 어카운트 생성 절차 (1)

 


시트 API 활성화가 된 후에 왼쪽에서


1. Credentials 선택하고 위에서 


2. +CREATE CREDENTIALS 선택하고 최종적으로 


3. “Service account” 선택

 

 

 

 

 

 

 

 

4. API Keys 화면에서 방금 생성한 서비스 어카운트 선택 

5. 탭 중에 KEYS 선택

 

 

 

 

 

 

 

 

6. Private key 생성 화면에서 JSON을 선택하고 해당 파일을 다운로드 (자동으로 됨)
    - 이 파일의 내용을 뒤에서 Airflow Variable로 등록해주어야함 (google_sheet_access_token) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

구글 시트를 테이블로 복사하는 예제

 

먼저 스프레드 시트를 보자

 

이 시트에 앞서 구글 서비스 어카운트에서 찾은 이메일을 공유하자

iam.gserviceaccount.com가 포함된 이메일!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S3 Connection 설정

 

 

Conn Id: aws_conn_id

This needs to be clearly used in the S3 operators


Conn Type:

s3나 Amazon Web Service나 Generic을 선택

 

Extra:

{ "region_name": "ap-northeast-2" }

 

 

 


앞선 Airflow 강의에서 만든 IAM 사용자의 Access Key ID와 Secret Access Key를 사용해야함. 이 정보는 스쿨 사이트에서 해당 강의에서 찾아보기 바람. 2일차 강의 페이지에 올릴 예정

 

 

 

 

 

 

 

 

 

 

 

 

구글 시트를 테이블로 복사하는 예제

실제 스프레드시트와 연동하는 방법은 아래 코드 두 개를 참고

Gsheet_to_Redshift.py
plugins/gsheet.py

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

데모

 

aws_conn_id 설정 확인하기

 

구글 시트 연동하기 (1)

 

 

CREATE TABLE 
keeyong.spreadsheet_copy_testing (
    col1 int,
    col2 int,
    col3 int,
    col4 int
);

 

실습에서 실행시켜 볼 DAG에는 테이블을 생성하는 코드가 없으므로 실습을 진행하려면 반드시 여러분이 각자의 스키마에서 spreadsheet_copy_testing이라는 테이블을 위와 같은 디자인으로 반드시 미리 만드셔야합니다.

 

 

 

 

 

 

 

 

 

시트 API 활성화와 구글 서비스 어카운트 생성

 

구글 클라우드 로그인

https://console.cloud.google.com/ 로 접속해 Gmail로 로그인해 약관에 동의하면

어카운트를 생성합니다.

 

구글 스프레드시트 API 활성화 필요

https://console.cloud.google.com/apis/library/sheets.googleapis.com

 

링크를 방문하고

 

 

Google Sheet API라는 프로젝트를 생성했습니다.

 

 

 

 

 

 

 

 

그러면 위와 같은 화면이 나올텐데 이 때 ENABLE을 클릭해 API를 사용중으로 설정하시면 됩니다.

 

만일 위와 같은 화면이 뜨지 않는다면

 

https://console.cloud.google.com/apis/library/sheets.googleapis.com

 

위의 링크로 가셔서 꼭 API를 활성화 시켜주세요.

 

 

 

 

 

 

 

 

사용자 인증 정보를 생성합니다.

 

 

 

 

 

 

 

이 때 서비스 계정을 선택합니다.

 

 

 

 

 

 

 

 

 

 

계정 이름은 gsheet로 입력했습니다.

 

이메일 주소를 받게 되는데 나중에 JSON 파일을 다운 받을 때 볼 수 있는 이메일입니다.

 

만들고 계속하기를 클릭합니다.

 

 

 

 

 

 

 

 

역할 선택에서 편집자를 선택합니다.

 

 

 

 

 

 

 

그 외의 별다른 변경 없이 완료를 누릅니다.

 

 

 

 

 

 

 

 

생성된 이메일 링크를 클릭합니다.

 

 

 

 

 

 

 

 

 

 

 

 

키 탭에서 새 키 만들기를 선택한 후에

 

 

 

 

 

 

 

 

 

JSON을 선택해 만들기를 클릭합니다.

 

이렇게 다운로드 받은 JSON 내용을 Airflow Web UI 상에서 Variables로 저장해 사용합니다.

 

 

 

 

 

 

 

 

 

다운 받은 JSON 파일의 내용은 위와 같습니다. 중괄호를 포함한 모든 내용을 복사해서

 

 

 

 

 

Airflow Web UI Variables에서 google_sheet_access_token이라는 이름으로 save해주세요.

 

이제 Airflow 쪽 작업은 끝났습니다.

 

 

 

 

 

 

 

 

 

 

 

 

구글 Sheet

이제 우리가 조작하고 싶은 구글 시트에 가서 이메일 주소를 공유해줘야 합니다. 읽기 용도에는 읽기 전용 쓰기 용도에는 편집 권한을 주면 됩니다.

 

다운 받은 JSON 파일에서 client_email 항목의 이메일 주소를 복사해주세요.

 

 

 

 

구글 스프레드 시트로 위와 같은 테이블을 생성하고 이름은 spreadsheet-copy-testing으로 저장합니다.

 

 

 

그리고 좌측 하단부에서 sheet의 이름을 SheetToRedshift로 바꿔주세요.

 

 

그리고 공유를 클릭해

 

 

 

 

아까 복사해둔 이메일 주소를 입력하고 편집자 권한을 줍니다. 읽기 전용으로 주어도 지금의 1차 실습은 괜찮지만 시트에 내용을 작성하는 2차 실습에서 편집자 권한이 필요하므로 이참에 편집자 권한을 주었습니다.

 

서비스 이메일로 받을 사람이 없기 때문에 이메일 알림 보내기는 체크를 해제했습니다.

 

모든 환경 설정은 끝났습니다.

 

터미널에서 DAG를 간단하게 실행해보겠습니다.

 

그 전에 다시 말씀드리지만 실습에서 실행시켜 볼 DAG에는 테이블을 생성하는 코드가 없으므로 실습을 진행하려면 반드시 여러분이 각자의 스키마에서 spreadsheet_copy_testing이라는 테이블을 위와 같은 디자인으로 반드시 미리 만드셔야합니다.

 

 

 

 

 

 

 

 

 

 

터미널에서 확인

 

 

 

Gsheet_to_Redshift.py

 

실행시켜 볼 DAG인 Gsheet_to_Redshift.py에서 sheets 코드의

url을 여러분이 작성하신 구글 스프레드 시티의 브라우저상의 URL로

shcema를 여러분 각자의 스키마 이름으로 수정해주세요.

 

 

 

docker container들 중에 scheduler 컨테이너의 이름을 찾아 docker exec -it (scheduler 컨테이너 이름) sh로 로그인한 터미널에서 DAG를 실행하겠습니다.

 

(airflow)airflow dags test Gsheet_to_Redshift 2023-12-31

 

에러 없이 정상실행 되었을 것입니다.

 

실제로 구글 시트의 내용들이 적재되었는지 확인해보겠습니다.

 

 

 

정상적으로 데이터들이 들어간 것을 볼 수 있습니다.

 

(저는 구글 Colab에서 확인했습니다. Postico와 같은 PostgreSQL, Redshift 클라이언트 등에서 확인하셔도 됩니다.)