Google Colab에서 BigQuery를 사용할 때 자주 사용하는 코드 스니펫
11251 단어 GoogleColaboratory파이썬BigQuery
전제: 인증
from google.colab import auth
auth.authenticate_user()
Colab에서 BigQuery를 사용하려면 먼저 인증을해야합니다.
짧은 코드이므로 일부러 기억할 정도는 아니지만, 코드 스니펫이 준비되어 있으므로 그것을 사용하면 빠르게 추가할 수 있다.
쿼리 결과를 DataFrame에 저장
google.cloud.bigquery
의 Magic 명령 을 사용하면 한 번에 쿼리 결과를 Pandas DataFrame으로 얻을 수 있습니다.
%%bigquery df --project myproject
SELECT * FROM `myproject.foo.logs`
Magic 명령의 인수로 지정한 이름으로 DataFrame이 만들어져 Python측에서 참조할 수 있게 되어 있다.
df.head(5)
그냥 내용을 확인하고 싶을 때
단지 내용을 확인하고 싶을 때는, 저장처의 DataFrame를 미지정으로 한다.
%%bigquery --project myproject
SELECT * FROM `myproject.foo.logs`
또, 그 때에 %load_ext google.colab.data_table
(을)를 실행해 두면, 출력 결과에 대해서 필터링 페이징을 할 수 있게 되어 편리.
매개변수 전달
Parameterized Query 의 기능을 사용해, 쿼리에 파라미터를 건네줄 수가 있다.
%%bigquery --project myproject df --params {"user_id": 123}
SELECT * FROM `myproject.foo.logs` WHERE user_id = @user_id
파라미터는 --params
인수에 사전형으로 건네준다. 건네받은 파라미터는 @파라미터명으로 참조할 수 있다. 테이블명의 개소에는 파라미터는 사용할 수 없기 때문에 주의. 또한 params는 명령 끝에 지정하지 않으면 오류가 발생하기 때문에주의하십시오.
파라미터에는 배열을 건네줄 수도 있다.
%%bigquery --project myproject df --params {"user_id": [1, 2, 3]}
SELECT * FROM `myproject.foo.logs` WHERE user_id in UNNEST(@user_id)
변수를 전달하려는 경우
params = {"user_id": [1, 2, 3]}
%%bigquery --project myproject df --params $params
SELECT * FROM `myproject.foo.logs` WHERE user_id in UNNEST(@user_id)
결과를 CSV로 저장
import os
df.to_csv(os.path.join("output.csv"), index=False)
취득한 DataFrame은 to_csv
로 CSV 파일에 쓸 수 있다. Google Drive를 마운트해 두면, Google Drive상에 내보낼 수 있어 편리.
from pathlib import Path
Path(out_dir).mkdir(parents=True, exist_ok=True)
출력처의 디렉토리를 준비하고 싶을 때는 pathlib
의 Path.mkdir
가 편리. parents=True
를 설정하여 중간 디렉토리를 함께 만들거나 exist_ok=True
를 설정하면 이미 디렉토리가 있더라도 오류가 발생하지 않고 처리를 계속할 수 있습니다.
쿼리 결과에서 테이블 만들기
분석의 내용에 따라서는 중간 테이블을 만들어 계산량을 절약하거나 중간 결과의 가시화/체크를 할 수 있어 효율을 개선할 수 있다.
최신 google-cloud-bigquery 에서는 --destination_table
옵션을 사용할 수 없기 때문에 Magic 명령을 사용하지 않고 작업을 만드는 코드를 작성합니다.
from google.cloud import bigquery
client = bigquery.Client(project="myproject")
table_id = "myproject.foo.purchase_logs"
job_config = bigquery.QueryJobConfig(destination=table_id)
sql = r'''
SELECT transaction_id, user_id, transaction_date, product_id
FROM `myproject.foo.transactions`
WHERE action = "purchase"
'''
query_job = client.query(sql, job_config=job_config)
query_job.result()
공식 문서 : htps : // c ぉ d. 오, ぇ. 이 m/비g 쿠에 ry/도 cs/w 리친 g-레스 lts? hl = 그럼
덧붙여 쿼리내에서 google-cloud-bigquery
등 Scripting을 사용하고 있는 경우는, BigQuery의 제약상 실행 결과를 테이블에 보존할 수 없기 때문에 주의.
htps : // c ぉ d. 오, ぇ. 코 m / 비g 쿠에 ry / 도 cs / 레후 렌세 / s 단지 rdsql / sc 리 p 친g
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 58646725 / 칸 오 t 세 t에서 s 치나 치 온 - b ぇ - ぃ th - g 쿠에 ry py 텐 - 아피
참고: Notebook에서 사용할 수 있는 google-cloud-bigquery 패키지 버전을 확인하는 방법
!pip show google-cloud-bigquery
버전 DECLARE
이후라면, 1.22.0
를 사용할 수 있다.
테이블이 존재할 때 덮어쓰기
QueryJobConfig 의 WriteDisposition 에서 --destination_table
를 지정하면, 이미 테이블이 존재했을 경우에 내용을 파기한 후에 재작성할 수 있다. (원래 테이블의 데이터는 파기되므로 주의)
job_config = bigquery.QueryJobConfig(destination=table_id, write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE)
WRITE_TRUNCATE
를 지정하면 기존 테이블에 추가 데이터가 추가됩니다.
CSV 파일 내용에서 테이블 만들기
CSV 파일에서 테이블을 만들려면 WRITE_APPEND
명령의 bg load을 사용하여 업로드하십시오.
!bq load --project_id=myproject --autodetect --source_format=CSV myproject:foo.products sample.csv
지정하는 파라미터의 내용은 판독하는 CSV의 내용에 따라 적절하게 변경된다.
bq
를 지정하면(자), 벌써 테이블이 있었을 경우에 그 내용을 파기한 후에, 재작성할 수 있다.
기타
쿼리 생성을 위한 메소드를 heredoc로 작성
def build_some_query(user_id, product_id):
return f'''
SELECT time, user_id, product_id, price FROM some_table WHERE user_id = {user_id} AND product_id = {product_id}
'''
참고
from google.colab import auth
auth.authenticate_user()
google.cloud.bigquery
의 Magic 명령 을 사용하면 한 번에 쿼리 결과를 Pandas DataFrame으로 얻을 수 있습니다.%%bigquery df --project myproject
SELECT * FROM `myproject.foo.logs`
Magic 명령의 인수로 지정한 이름으로 DataFrame이 만들어져 Python측에서 참조할 수 있게 되어 있다.
df.head(5)
그냥 내용을 확인하고 싶을 때
단지 내용을 확인하고 싶을 때는, 저장처의 DataFrame를 미지정으로 한다.
%%bigquery --project myproject
SELECT * FROM `myproject.foo.logs`
또, 그 때에
%load_ext google.colab.data_table
(을)를 실행해 두면, 출력 결과에 대해서 필터링 페이징을 할 수 있게 되어 편리.매개변수 전달
Parameterized Query 의 기능을 사용해, 쿼리에 파라미터를 건네줄 수가 있다.
%%bigquery --project myproject df --params {"user_id": 123}
SELECT * FROM `myproject.foo.logs` WHERE user_id = @user_id
파라미터는
--params
인수에 사전형으로 건네준다. 건네받은 파라미터는 @파라미터명으로 참조할 수 있다. 테이블명의 개소에는 파라미터는 사용할 수 없기 때문에 주의. 또한 params는 명령 끝에 지정하지 않으면 오류가 발생하기 때문에주의하십시오.파라미터에는 배열을 건네줄 수도 있다.
%%bigquery --project myproject df --params {"user_id": [1, 2, 3]}
SELECT * FROM `myproject.foo.logs` WHERE user_id in UNNEST(@user_id)
변수를 전달하려는 경우
params = {"user_id": [1, 2, 3]}
%%bigquery --project myproject df --params $params
SELECT * FROM `myproject.foo.logs` WHERE user_id in UNNEST(@user_id)
결과를 CSV로 저장
import os
df.to_csv(os.path.join("output.csv"), index=False)
취득한 DataFrame은
to_csv
로 CSV 파일에 쓸 수 있다. Google Drive를 마운트해 두면, Google Drive상에 내보낼 수 있어 편리.from pathlib import Path
Path(out_dir).mkdir(parents=True, exist_ok=True)
출력처의 디렉토리를 준비하고 싶을 때는
pathlib
의 Path.mkdir
가 편리. parents=True
를 설정하여 중간 디렉토리를 함께 만들거나 exist_ok=True
를 설정하면 이미 디렉토리가 있더라도 오류가 발생하지 않고 처리를 계속할 수 있습니다.쿼리 결과에서 테이블 만들기
분석의 내용에 따라서는 중간 테이블을 만들어 계산량을 절약하거나 중간 결과의 가시화/체크를 할 수 있어 효율을 개선할 수 있다.
최신 google-cloud-bigquery 에서는 --destination_table
옵션을 사용할 수 없기 때문에 Magic 명령을 사용하지 않고 작업을 만드는 코드를 작성합니다.
from google.cloud import bigquery
client = bigquery.Client(project="myproject")
table_id = "myproject.foo.purchase_logs"
job_config = bigquery.QueryJobConfig(destination=table_id)
sql = r'''
SELECT transaction_id, user_id, transaction_date, product_id
FROM `myproject.foo.transactions`
WHERE action = "purchase"
'''
query_job = client.query(sql, job_config=job_config)
query_job.result()
공식 문서 : htps : // c ぉ d. 오, ぇ. 이 m/비g 쿠에 ry/도 cs/w 리친 g-레스 lts? hl = 그럼
덧붙여 쿼리내에서 google-cloud-bigquery
등 Scripting을 사용하고 있는 경우는, BigQuery의 제약상 실행 결과를 테이블에 보존할 수 없기 때문에 주의.
htps : // c ぉ d. 오, ぇ. 코 m / 비g 쿠에 ry / 도 cs / 레후 렌세 / s 단지 rdsql / sc 리 p 친g
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 58646725 / 칸 오 t 세 t에서 s 치나 치 온 - b ぇ - ぃ th - g 쿠에 ry py 텐 - 아피
참고: Notebook에서 사용할 수 있는 google-cloud-bigquery 패키지 버전을 확인하는 방법
!pip show google-cloud-bigquery
버전 DECLARE
이후라면, 1.22.0
를 사용할 수 있다.
테이블이 존재할 때 덮어쓰기
QueryJobConfig 의 WriteDisposition 에서 --destination_table
를 지정하면, 이미 테이블이 존재했을 경우에 내용을 파기한 후에 재작성할 수 있다. (원래 테이블의 데이터는 파기되므로 주의)
job_config = bigquery.QueryJobConfig(destination=table_id, write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE)
WRITE_TRUNCATE
를 지정하면 기존 테이블에 추가 데이터가 추가됩니다.
CSV 파일 내용에서 테이블 만들기
CSV 파일에서 테이블을 만들려면 WRITE_APPEND
명령의 bg load을 사용하여 업로드하십시오.
!bq load --project_id=myproject --autodetect --source_format=CSV myproject:foo.products sample.csv
지정하는 파라미터의 내용은 판독하는 CSV의 내용에 따라 적절하게 변경된다.
bq
를 지정하면(자), 벌써 테이블이 있었을 경우에 그 내용을 파기한 후에, 재작성할 수 있다.
기타
쿼리 생성을 위한 메소드를 heredoc로 작성
def build_some_query(user_id, product_id):
return f'''
SELECT time, user_id, product_id, price FROM some_table WHERE user_id = {user_id} AND product_id = {product_id}
'''
참고
from google.cloud import bigquery
client = bigquery.Client(project="myproject")
table_id = "myproject.foo.purchase_logs"
job_config = bigquery.QueryJobConfig(destination=table_id)
sql = r'''
SELECT transaction_id, user_id, transaction_date, product_id
FROM `myproject.foo.transactions`
WHERE action = "purchase"
'''
query_job = client.query(sql, job_config=job_config)
query_job.result()
!pip show google-cloud-bigquery
job_config = bigquery.QueryJobConfig(destination=table_id, write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE)
CSV 파일에서 테이블을 만들려면
WRITE_APPEND
명령의 bg load을 사용하여 업로드하십시오.!bq load --project_id=myproject --autodetect --source_format=CSV myproject:foo.products sample.csv
지정하는 파라미터의 내용은 판독하는 CSV의 내용에 따라 적절하게 변경된다.
bq
를 지정하면(자), 벌써 테이블이 있었을 경우에 그 내용을 파기한 후에, 재작성할 수 있다.기타
쿼리 생성을 위한 메소드를 heredoc로 작성
def build_some_query(user_id, product_id):
return f'''
SELECT time, user_id, product_id, price FROM some_table WHERE user_id = {user_id} AND product_id = {product_id}
'''
참고
def build_some_query(user_id, product_id):
return f'''
SELECT time, user_id, product_id, price FROM some_table WHERE user_id = {user_id} AND product_id = {product_id}
'''
Reference
이 문제에 관하여(Google Colab에서 BigQuery를 사용할 때 자주 사용하는 코드 스니펫), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/croquette0212/items/4e9070768abe420e24d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)