如何使用 python 将本地 CSV 上传到谷歌大查询
Posted
技术标签:
【中文标题】如何使用 python 将本地 CSV 上传到谷歌大查询【英文标题】:How to upload a local CSV to google big query using python 【发布时间】:2016-03-24 08:37:44 【问题描述】:我正在尝试使用 python 将本地 CSV 上传到谷歌大查询
def uploadCsvToGbq(self,table_name):
load_config =
'destinationTable':
'projectId': self.project_id,
'datasetId': self.dataset_id,
'tableId': table_name
load_config['schema'] =
'fields': [
'name':'full_name', 'type':'STRING',
'name':'age', 'type':'INTEGER',
]
load_config['sourceFormat'] = 'CSV'
upload = MediaFileUpload('sample.csv',
mimetype='application/octet-stream',
# This enables resumable uploads.
resumable=True)
start = time.time()
job_id = 'job_%d' % start
# Create the job.
result = bigquery.jobs.insert(
projectId=self.project_id,
body=
'jobReference':
'jobId': job_id
,
'configuration':
'load': load_config
,
media_body=upload).execute()
return result
当我运行它时,它会抛出类似
的错误“NameError:未定义全局名称'MediaFileUpload'”
是否需要任何模块请帮忙。
【问题讨论】:
你从哪里得到类名MediaFileUpload
?
***.com/questions/25048787/…这个例子我试过了
【参考方案1】:
pip install --upgrade google-api-python-client
然后在你的python文件上面写:
from googleapiclient.http import MediaFileUpload
但是请注意你错过了一些括号。写得更好:
result = bigquery.jobs().insert(projectId=PROJECT_ID, body='jobReference': 'jobId': job_id,'configuration': 'load': load_config, media_body=upload).execute(num_retries=5)
顺便说一句,您将上传所有 CSV 行,包括定义列的顶部行。
【讨论】:
【参考方案2】:在 GBQ 中上传到 csv 文件的最简单方法之一是通过 pandas。只需将 csv 文件导入 pandas (pd.read_csv())。然后从 pandas 到 GBQ (df.to_gbq(full_table_id, project_id=project_id))。
import pandas as pd
import csv
df=pd.read_csv('/..localpath/filename.csv')
df.to_gbq(full_table_id, project_id=project_id)
或者你可以使用客户端api
from google.cloud import bigquery
import pandas as pd
df=pd.read_csv('/..localpath/filename.csv')
client = bigquery.Client()
dataset_ref = client.dataset('my_dataset')
table_ref = dataset_ref.table('new_table')
client.load_table_from_dataframe(df, table_ref).result()
【讨论】:
我必须安装pandas_gbq
才能使用to_gbq
方法。【参考方案3】:
MediaFileUpload 类位于 http.py 中。见https://google-api-python-client.googlecode.com/hg/docs/epy/apiclient.http.MediaFileUpload-class.html
【讨论】:
此链接现已损坏。以上是关于如何使用 python 将本地 CSV 上传到谷歌大查询的主要内容,如果未能解决你的问题,请参考以下文章
如何将 spatie laravel 存储的备份上传到谷歌驱动器?