将csv文件加载到BIGquery中,并在插入数据时添加日期列



我正在编写一个python云函数,在添加新列creation_date后将csv文件加载到BigQuery中。到目前为止还没有成功。有没有办法使用云功能或熊猫来实现这一点?任何帮助都将不胜感激。我已经通过其他链接,其中csv文件正在生成,并在添加日期列后保存在GCS .我的要求是不创建任何额外的文件。你认为熊猫会是一个好的选择吗?请建议。

谢谢Ritu

是的,可以用CloudFunction实现。

你可以做的,下载csv文件到Cloud Function docker实例(/tmp目录),加载到pandas dataframe,从那里你可以根据你的需要操作数据(添加/删除列/行等)。

一旦数据准备好加载到BQ中,您可以使用方法:

load_job = client.load_table_from_dataframe(
dataframe, table_id, job_config=job_config
)

更新:

我看到Pandas现在支持gs://直接从GCS加载。

df = pd.read_csv('gs://bucket/your_path.csv')

裁判:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

您必须在Big Query中创建数据集和表,以及每个列的类型。然后,定义一个创建时间。列,creation_date变量:

import pandas as pd
creation_date = pd.Timestamp.now() # for each entry in the table

然后,将数据框保存到Big Query,same names of pandas columns中,并指定列名和df,your_pandas_dataframe:

from google.cloud import bigquery
client = bigquery.Client()
job_config = bigquery.LoadJobConfig(
schema=[
bigquery.SchemaField("DATE", bigquery.enums.SqlTypeNames.DATE), # create each column in Big Query along with types
bigquery.SchemaField("NAME_COLUMN_2", bigquery.enums.SqlTypeNames.STRING),
bigquery.SchemaField("NAME_COLUMN_3", bigquery.enums.SqlTypeNames.STRING),
bigquery.SchemaField("NAME_COLUMN_4", bigquery.enums.SqlTypeNames.INTEGER),
],
write_disposition="WRITE_APPEND",
)
job = client.load_table_from_dataframe(
your_pandas_dataframe, 'project.dataset.table', job_config=job_config
) 

是的,您绝对可以使用pandas。这是我测试过的例子

import pandas as pd
from datetime import datetime
# df = pd.from_csv('ex.csv')
df = pd.DataFrame({'test': ['one', 'two']})
data = []
for i in range(0, df.shape[0]):
if i == 0:
data.append(str(datetime. today()).split(".")[0])
else:
data.append("")
df['creation_date'] = data
print(df)
# df.to_csv('temp/save.csv')

最新更新