首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将csv文件加载到BIGquery中,并在插入数据时添加日期列

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

Stack Overflow用户
提问于 2021-08-04 17:49:26
回答 3查看 281关注 0票数 0

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

谢谢Ritu

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-04 18:02:54

是的,使用CloudFunction可以做到这一点。

您可以做的是,将csv文件下载到Cloud Function docker实例(/tmp目录),加载到pandas dataframe,然后您可以根据需要处理数据(添加/删除列/行等)。

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

代码语言:javascript
复制
load_job = client.load_table_from_dataframe(
             dataframe, table_id, job_config=job_config
           )

更新:

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

代码语言:javascript
复制
df = pd.read_csv('gs://bucket/your_path.csv')

参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

票数 0
EN

Stack Overflow用户

回答已采纳

发布于 2021-08-04 18:02:54

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

代码语言:javascript
复制
import pandas as pd

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

然后,将数据帧保存到大型查询same names of pandas columns中,并指定列和dfyour_pandas_dataframe的名称

代码语言:javascript
复制
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
) 
票数 0
EN

Stack Overflow用户

发布于 2021-08-04 18:09:58

是的,你绝对可以用熊猫来做这件事。这是我测试过的可以工作的示例

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68655913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档