파이썬을 활용한 빅쿼리 사용 1

우수민·2023년 12월 17일
0

빅쿼리 활용 정리

목록 보기
12/13
post-thumbnail

파이썬을 활용하여 빅쿼리 사용하기


GCP 설정 부분

https://cloud.google.com/bigquery/docs/authentication/service-account-file?hl=ko

  • 사용자 인증 정보 만들기
  1. 서비스 계정 만들기
  • 좌측 네비게이션 -> 서비스 계정
  1. 서비스 계정 입력 후 완료

  2. 만든 계정을 누르고 키에 들어가서 json 파일 생성

  3. 서비스계정에 권한 추가

  • GCP 좌측 -> ‘IAM’ -> 엑세스 권한 부여 -> API KEY의 client_email 입력 -> 역할(BigQuery 관리자) 선택후 저장

  • 새 주 구성원은 저장한 json 키 내부에서 client_email 입력

파이썬 설정 부분

  • 빅쿼리를 사용하기 위한 라이브러리 설치
pip install --upgrade google-cloud-bigquery
  • 파이썬과 빅쿼리 연동
    • SERVICE_ACCOUNT_FILE : 위에서 발급받은 키를 저장한 경로
    • project_id : 프로젝트 생성시 만들어진 project id
  • project id 확인 방법

  • 빅쿼리 연동 및 확인 코드

    • 테스트 데이터는 구글에서 제공하는 무료 데이터셋
    • 아래와 같이 코드가 잘 나왔다면, 연동 완료
from google.oauth2 import service_account
from google.cloud import bigquery

SERVICE_ACCOUNT_FILE = "./api_key.json"  # 키 json 파일
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE)
project_id = "bigquery-test-408414" # 각자 프로젝트에 맞게 수정
client = bigquery.Client(credentials=credentials, project=project_id)

def import_bigquery_data(query):
    query_job = client.query(query)
    return query_job.to_dataframe()
    
data = import_bigquery_data('''
    SELECT * 
    FROM `bigquery-public-data.google_trends.international_top_rising_terms` 
    WHERE refresh_date = '2024-08-01'
    LIMIT 10
    ;
''')

data.head()

profile
데이터 분석하고 있습니다

4개의 댓글

comment-user-thumbnail
2024년 9월 24일

안녕하세요! 메타코드 무료 강의 내용 중 질문이 있어 댓글 남겨요.

bigquery 실습 문제 중 TRAFFIC SOURCE 별 전체 sessions, 구매 sessions, 구매 sessions/전체 sessions 을 해결하기 위한 쿼리 작성에 관한 질문입니다.

저는 동일한 세션id 내에서 여러 이벤트가 발생할 수 있고 그 중 purchase인 경우에 관심있기 때문에 중복을 제거한 고유한 세션id 기준으로 purchase 이벤트가 발생한 경우를 고려하여 쿼리를 작성하였습니다. 논리적으로 문제가 있는지 피드백 주시면 감사드리겠습니다!!

WITH T1 AS (
SELECT e.session_id,
e.traffic_source,
MAX(case when e.event_type = 'purchase'then 1 else 0 end) as is_purchase # COUNTIF(e.event_type='purchase') > 0
FROM bigquery-public-data.thelook_ecommerce.events e
WHERE e.created_at BETWEEN '2023-01-01' AND '2024-01-01'
GROUP BY 1,2
)
SELECT traffic_source,
count(session_id) as session_of_total,
sum(is_purchase) as session_of_purchase,
round(sum(is_purchase)/count(session_id)*100,2) as ratio
FROM T1
GROUP BY 1

좋은 강의 감사드립니다:)

1개의 답글