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

问题描述

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

我经常使用Google合作实验室作为我的笔记本用户界面。

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

解决方法

您可以利用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')
,

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

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

定义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)