如何使用 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 上传到谷歌大查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 4 将图片上传到谷歌?

如何将 csv 文件从 colab 实际保存到谷歌驱动器?

如何将 spatie laravel 存储的备份上传到谷歌驱动器?

如何将本地 svn 存储库迁移到谷歌代码的 svn 存储库?

将apk上传到谷歌播放[重复]

从树莓派上传文件到谷歌驱动器