如何将 Pandas 数据框直接上传到 BigQuery?

Posted

技术标签:

【中文标题】如何将 Pandas 数据框直接上传到 BigQuery?【英文标题】:How can I upload a Pandas dataframe directly to BigQuery? 【发布时间】:2021-02-16 14:54:43 【问题描述】:

我一直在使用 Pandas 格式化数据帧,然后我将其转换为 CSV,然后手动上传到 BigQuery(取决于大小,我之前上传到 Cloud Storage)。

我经常使用 Google Colaboratory 作为我的笔记本 UI。

是否可以通过直接从 Pandas 上传到 BQ/CS 来简化流程?怎么样?

【问题讨论】:

您的费率很低。对 SO 很重要,您必须使用已发布答案左侧、投票下方的勾号来标记已接受的答案。这将提高您的费率。通过访问此链接了解其工作原理:meta.***.com/questions/5234/… 【参考方案1】:

您可以利用to_gbq

df = pandas.DataFrame(
        
            "my_string": ["a", "b", "c"],
            "my_int64": [1, 2, 3],
            "my_float64": [4.0, 5.0, 6.0],
            "my_bool1": [True, False, True],
            "my_bool2": [False, True, False],
            "my_dates": pandas.date_range("now", periods=3),
        
    )

pandas_gbq.to_gbq(df, destination_id = 'dataset.table', project_id='project_id')

【讨论】:

谢谢,你应该接受它作为标记答案 有道理。我是新手。 只是提到这个答案不需要BQ中的现有表,但依赖于pandas-gbq.readthedocs.io/en/latest。【参考方案2】:

您可以使用load_table_from_dataframe 将数据从 Pandas 加载到 BigQuery:

bigqueryClient = bigquery.Client()
tableRef = bigqueryClient.dataset("bq-dataset").table("bq-table")
bigqueryJob = bigqueryClient.load_table_from_dataframe(dataFrame, tableRef)
bigqueryJob.result()

【讨论】:

这确实是从 pd 数据框更新的最简单的解决方案【参考方案3】:

定义 BigQuery 数据集 将包含 project_id 和 dataset_id 的元组传递给 bq.Dataset。

# define a BigQuery dataset    
bigquery_dataset_name = ('project_id', 'dataset_id')
dataset = bq.Dataset(name = bigquery_dataset_name)

定义 BigQuery 表 将包含 project_id、dataset_id 和表名的元组传递给 bq.Table。

# define a BigQuery table    
bigquery_table_name = ('project_id', 'dataset_id', 'table_name')
table = bq.Table(bigquery_table_name)

创建数据集/表并写入BQ中的表

# Create BigQuery dataset
if not dataset.exists():
    dataset.create()

# Create or overwrite the existing table if it exists
table_schema = bq.Schema.from_data(dataFrame_name)
table.create(schema = table_schema, overwrite = True)

# Write the DataFrame to a BigQuery table
table.insert(dataFrame_name)

【讨论】:

以上是关于如何将 Pandas 数据框直接上传到 BigQuery?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Azure VM 磁盘直接上传到 Blob 存储?

如何将 Laravel 中的文件直接上传到公用文件夹?

如何使用 Node.js 将 base64 编码图像(字符串)直接上传到 Google Cloud Storage 存储桶?

如何让 wordpress 用户直接上传到 youtube 或 vimeo?

如何使用 Rails API 中的 Attachinary 将图像从 React Native App 直接上传到 Cloudinary

将图像从 url 直接上传到数据库 blob 字段