DataFrame.to_gbq(destination_table, project_id=None, chunksize=None, reauth=False, if_exists='fail', auth_local_webserver=False, table_schema=None, location=None, progress_bar=True, credentials=None) [source]
将DataFrame写入Google BigQuery表。
此功能需要pandas-gbq软件包。
有关身份 验证的说明,请参见如何使用Google BigQuery进行身份验证指南。
参数: | destination_table : 要写入的表格名称,格式为 project_id : Google BigQuery帐户项目编号。 在环境中可用时为可选。 chunksize : 要从dataframe插入每个块的行数。 设置为 reauth : 强制Google BigQuery重新验证用户身份。 如果使用多个帐户,这将很有用。 if_exists : 目标表存在时的行为。值可以是以下之一:
如果存在表, 则引发
如果存在表,则将其删除,重新创建并插入数据。
如果存在表,则插入数据。如果不存在则创建。 auth_local_webserver : 获取用户凭据时, pandas-gbq的0.2.0版本中的新功能。 table_schema :字典类型的list,可选 与DataFrame列对应的BigQuery表字段的列表, 例如。如果未提供schema, 它将根据DataFrame列的dtypes生成。 有关字段的可用名称,请参阅BigQuery API文档。
location : 加载作业应运行的位置。 有关可用位置的列表, 请参见BigQuery位置文档。 该位置必须与目标数据集的位置匹配。 pandas-gbq的0.5.0版本中的新功能。。 progress_bar : 使用库tqdm逐块显示上传的进度条。 pandas-gbq的0.5.0版本中的新功能。 credentials : 用于访问Google API的凭据。使用此参数可以覆盖默认凭据, 例如 直接使用Compute Engine 或服务帐户 pandas-gbq的0.8.0版本中的新功能。 0.24.0版中的新功能。 |
例子,
from datalab.context import Context
import datalab.storage as storage
import datalab.bigquery as bq
import pandas as pd
from pandas import DataFrame
import time
# Dataframe to write
my_data = [{1,2,3}]
for i in range(0,100000):
my_data.append({1,2,3})
not_so_simple_dataframe = pd.DataFrame(data=my_data,columns=['a','b','c'])
#Alternative 1
start = time.time()
not_so_simple_dataframe.to_gbq('TestDataSet.TestTable',
Context.default().project_id,
chunksize=10000,
if_exists='append',
verbose=False
)
end = time.time()
print("time alternative 1 " + str(end - start))
#Alternative 3
start = time.time()
sample_bucket_name = Context.default().project_id + '-datalab-example'
sample_bucket_path = 'gs://' + sample_bucket_name
sample_bucket_object = sample_bucket_path + '/Hello.txt'
bigquery_dataset_name = 'TestDataSet'
bigquery_table_name = 'TestTable'
# Define storage bucket
sample_bucket = storage.Bucket(sample_bucket_name)
# Create or overwrite the existing table if it exists
table_schema = bq.Schema.from_dataframe(not_so_simple_dataframe)
# Write the DataFrame to GCS (Google Cloud Storage)
%storage write --variable not_so_simple_dataframe --object $sample_bucket_object
# Write the DataFrame to a BigQuery table
table.insert_data(not_so_simple_dataframe)
end = time.time()
print("time alternative 3 " + str(end - start))