如何将 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Node.js 将 base64 编码图像(字符串)直接上传到 Google Cloud Storage 存储桶?
如何让 wordpress 用户直接上传到 youtube 或 vimeo?
如何使用 Rails API 中的 Attachinary 将图像从 React Native App 直接上传到 Cloudinary