首页 > 解决方案 > 使用 Python 从 csv 文件自动创建 BigQuery 架构/表

问题描述

我想从包含 csv 文件的桌面文件夹中自动创建 BQ 表(即自动创建模式并加载到新表)

如果下次加载相同的文件,只需更新现有表,如果加载了新文件,则创建一个新表。是否可以使用 Python 实现自动化?

当前代码:

 import pandas as pd
 from google.cloud import bigquery 
 def bqDataLoad(event, context): 
  bucketName = event['test_vs'] 
  blobName = event['gf-dev-models'] 
  fileName = "gs://" + bucketName + "/" + blobName 
  bigqueryClient = bigquery.Client() 
  tableRef = bigqueryClient.dataset("gf-dev-models-204097").table("test_vs") 
  dataFrame = pd.read_csv(fileName) bigqueryJob = bigqueryClient.load_table_from_dataframe(dataFrame, tableRef) bigqueryJob.result()
#Project id = gf-dev-models
#dataset = gf-dev-models-204097 
#table name = want a new table created 

标签: pythongoogle-bigquery

解决方案


以下是我在评论部分针对您的问题的回答:

代码中的凭据: 您可以创建具有所需 BigQuery 角色的服务帐户并下载 JSON 密钥文件(例如:data-lab.json)。

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "data-lab.json"

自动创建架构并将数据加载到 BigQuery:

from google.cloud import bigquery

bigqueryClient = bigquery.Client()
jobConfig = bigquery.LoadJobConfig()
jobConfig.skip_leading_rows = 1
jobConfig.source_format = bigquery.SourceFormat.CSV
jobConfig.write_disposition = bigquery.WriteDisposition.WRITE_APPEND   
jobConfig.autodetect=True

datasetName = "dataset-name"
targetTable = "table-name"
uri = "gs://bucket-name/file-name.csv"
tableRef = bigqueryClient.dataset(datasetName).table(targetTable)
bigqueryJob = bigqueryClient.load_table_from_uri(uri, tableRef, job_config=jobConfig)
bigqueryJob.result()

推荐阅读