python - 使用 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
解决方案
以下是我在评论部分针对您的问题的回答:
代码中的凭据: 您可以创建具有所需 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()
推荐阅读
- dart - 如何用里面的所有内容替换括号?
- .net - 当前项目中的 WPF 动态资源
- flutter - 在颤振中为不同的班级提供不同的主题
- python - 带有反馈的自动启动 python 脚本
- python - 使用辅助 y 轴时共享 x 轴
- swift - 我可以将 Xcode 与 iPhone Simulator.app 一起安装在外部硬盘上吗?
- xpath - XPath 查询似乎在 Google 表格中不起作用
- python - 使用 SSH 命令在 python 中生成字典
- python - 查找单词的频率并绘制结果
- docker - 如何使用 docker-compose 将 docker 容器目录映射到主机?