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

우수민·2023년 12월 17일

빅쿼리 활용 정리

목록 보기
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
데이터 분석하고 있습니다

5개의 댓글

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개의 답글
comment-user-thumbnail
2026년 3월 7일

안녕하세요.
조직에 서비스 계정 키 생성을 차단하는 조직 정책이 적용되었습니다. 떠서 키 생성이 안되요.

적용된 조직 정책 ID:
iam.disableServiceAccountKeyCreation
가능한 원인: 서비스 계정 키와 관련된 보안 사고를 방지하기 위해 조직 정책 관리자가 조직 정책을 적용했습니다. 또는 보안을 우선으로 하는 기본 설정 적용 의 일부로 조직에 정책이 자동으로 적용되었을 수도 있습니다.

권장되는 다음 단계: 서비스 계정 키를 제대로 관리하지 않을 경우 보안상 위험할 수 있습니다. 가능한 경우 보다 안전한 대안 을 선택해야 합니다. 서비스 계정 키로 인증해야 하는 경우 조직의 '조직 정책 관리자'(roles/orgpolicy.policyAdmin) 역할이 있는 관리자가 위에 언급된 제약 조건을 사용 중지 해야 합니다.

추적 번호: c8665516489710828

답글 달기