Youtube dashboard 를 만들면서 매일 업데이트 되는 데이터를 편하게 관리 할 수 없을까? 생각이 들었다.
현재는 Youtube api 호출로 불러온 데이터를 아래와 같이 그냥 드라이브안에 저장하고 있는데요. 아무래도 매일매일 데이터를 받다보면 계속 쌓일 것이며.. 계속 컴퓨터에 쌓아 올릴 수는 없을 것이라는 생각이 들었습니다. 왜냐하면 먼 훗날,, 웹 배포도 하고 싶은데 streamlit의 경우 github를 거쳐서 배포해야하기 때문입니다.
아래와 같이 쌓여가는 csv data를 다운받고 github에 repo 하기에는 비효율적 일것 같아서
이왕 해보는거 database를 구축해야겠다는 생각 + 이참에 공부를 해야겠다는 생각이 들었습니다.
찾아보니 python 에서 빅쿼리로 옮길 수 있는 라이브러리가 있더군요.. 게다가 youtube api랑 같이 관리하기도 편했기 때문에 그래서 그냥 구글 클라우드! 빅쿼리에 저장하기로 했습니다.ㅎㅎ (찾아보니 다 있더군요..🤤)
또한, 매일받기도 귀찮아서 슬슬 자동화하면 좋겠다는 생각이 들었습니다. 그리고 완성된다면 해당 streamlit을 외부에 배포할 생각이 있기때문에 일단 대략적으로 아래와 같이 데이터를 불러와서 저장하고 업데이트하도록 구상했습니다.
일단, 1번을 한번 해보려고합니다.
빅쿼리에 데이터를 옮길 수 있는지 확인해봤는데 생각보다 간단했습니다!
저는 youtube API KEY를 발급하면서 만들어진 my project가 있었기 때문에 따로 프로젝트는 만들지 않았습니다. 프로젝트가 있으신분은 IAM 의 서비스 계정을 만들고 JSON 키를 발급 받으시면 되는데요! 프로젝트 생성 및 json키 발급은 참고한 게시글대로 하면 되기 때문에 자세한 내용은 생략하겠습니다!
아래와 같이 빅쿼리에 보낼 데이터가 데이터프레임 형식이라면, 해당 데이터프레임의 컬럼과 유형을 미리 만들어 놔야 합니다. (물론 json 그대로 빅쿼리에 저장할 수 있더군요. 저는 어차피 dataframe으로 바꿔야 하고, 데이터를 저장하는 용도로만 쓸 거기 때문에 dataframe 형식으로 저장했습니다.)
위 처럼 보내려는 데이터의 컬럼과 데이터타입을 꼭 확인하고,
- 아래와 같이 데이터세트 (
wakta
)를 만듭니다.- 데이터세트 안에, 테이블 (
static
)과 스키마를 해당 데이터에 맞게 만들어줍니다.
설치 및 코드
pip install google-cloud-bigquery
pip install pandas-gbq
from google.oauth2 import service_account
cd = service_account.Credentials.from_service_account_file(
r"C:\scraping\my-project-72981-c4ea0ddcafb9.json",
) # json key 경로
project_id = 'my-project-72981' # 본인의 프로젝트 아이디 json key 안에도 있음.
dataset_id = 'wakta' # 사전에 생성한 데이터셋 ID
table_id = 'static' # 사전에 생성한 테이블 ID
# 저장 위치
destination_table = f"{project_id}.{dataset_id}.{table_id}"
# 보내려는 데이터프레임
dataframe.to_gbq(destination_table, project_id, if_exists='append', credentials=cd)
# 데이터가 존재하는경우 if_exists - append 옵션으로 쌓아올린다.
정확한 곳에 잘 들어왔다!!!
일단 데이터를 빅쿼리에 저장하는 것 까지는 완료!!!