我正在编写一个python云函数,以便在添加新的列creation_date后将csv文件加载到BigQuery中。到目前为止还没有成功。有没有办法使用云函数或pandas来实现这一点?任何帮助都将不胜感激。我已经通过其他链接,csv文件是在添加日期列后生成并保存在全局控制系统中,.My要求不是要创建任何额外的file.Do,你认为熊猫会很好option.Please建议。
谢谢Ritu
发布于 2021-08-04 18:02:54
是的,使用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
发布于 2021-08-04 18:02:54
必须在Big Query中创建数据集和表,以及每列的类型。然后,在数据帧中定义一个"time created“列,creation_date变量:
import pandas as pd
creation_date = pd.Timestamp.now() # for each entry in the table然后,将数据帧保存到大型查询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
) 发布于 2021-08-04 18:09:58
是的,你绝对可以用熊猫来做这件事。这是我测试过的可以工作的示例
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')https://stackoverflow.com/questions/68655913
复制相似问题