从 Google Cloud 自动将重复数据附加到 BigQuery 的最简单方法

Posted

技术标签:

【中文标题】从 Google Cloud 自动将重复数据附加到 BigQuery 的最简单方法【英文标题】:Simplest Way to Automate Appending De-Duped Data to BigQuery from Google Cloud 【发布时间】:2017-05-24 18:24:56 【问题描述】:

我不是开发人员,所以请多多包涵。我无法在Google BigQuery - Automating a Cron Job 上关注基于 php 的答案,所以我不知道这是否与我正在寻找的相同。

无论如何,我使用 Google Cloud 来存储数据,并且全天数次将数据上传到那里的 CSV。我使用 BigQuery 运行作业,用那里的数据填充 BigQuery 表。

由于我无法控制的原因,CSV 包含重复数据。所以我想要做的基本上是创建一个每日 ETL,将所有新数据附加到现有表中,可能每天凌晨 1 点运行:

    识别尚未添加的新文件(例如 date = today - 1) 对第 1 步中的所有 CSV 运行作业,以将它们转换为临时 BigQuery 表 通过 SQL 对 BigQuery 表进行重复数据删除(我可以通过多种方式执行此操作) 将重复数据删除的临时表插入 BigQuery 表中。 删除临时表

所以基本上我被困在第 1 格 - 我不知道如何以自动方式执行任何这些操作。我知道 BigQuery 有一个 API,有一些 documentation on cron jobs,还有一些叫做 Cloud Dataflow,但在深入那些兔子洞之前,我希望其他人可能有这方面的经验并能给我一些提示。就像我说的,我不是开发人员,所以如果有更简单的方法来完成这件事,我会更容易运行。

感谢任何人提供的任何帮助!

【问题讨论】:

不知道为什么这被否决了,我正在研究 Google 的文档,但没有帮助。 【参考方案1】:

有几种方法可以解决这个问题,但我建议这样:

    创建一个模板化的 Dataflow 管道以从 GCS(源)读取并将追加写入 BigQuery(接收器)。 您的管道可以直接删除重复项。见here 和here。 创建一个cloud function 来监控您的 GCS 存储桶。 当新文件到达时,您的云函数会自动触发,该函数会调用您的 Dataflow 管道开始读取新文件、对其进行重复数据删除并将结果写入 BigQuery。

【讨论】:

【参考方案2】:

所以格雷厄姆波利没有冒犯,但我最终使用了不同的方法。感谢这些页面(以及大量随机批处理文件 Google 搜索和反复试验):

how to get yesterday's date in a batch file

https://cloud.google.com/bigquery/bq-command-line-tool

cscript //nologo C:\Desktop\yester.vbs > C:\Desktop\tempvar.txt &&

set /p zvar =

del C:\Desktop\tempvar.txt &&

bq 负载 --skip_leading_rows=1 data.data_%%zvar:~0,4%%%%zvar:~4,2%%%%zvar:~6,2%%_1 gs://mybucket/data/%%zvar:~0,4%%-%%zvar:~4,2%%-%%zvar:~6,2%%*.csv.gz 时间戳:TIMESTAMP,TransactionID:STRING &&

bq 查询 --destination_table=data.data_%%zvar:~0,4%%%%zvar:~4,2%%%%zvar:~6,2%%2 "SELECT * FROM data.data%%zvar:~0,4%%%%zvar:~4,2%%%%zvar:~6,2% %_1 按 1,2" &&

分组

bq cp -a data.data_%%zvar:~0,4%%%%zvar:~4,2%%%%zvar:~6,2%%_2 数据。数据&&

bq rm -f data.data_%%zvar:~0,4%%%%zvar:~4,2%%%%zvar:~6,2%%_1 &&

bq rm -f data.data_%%zvar:~0,4%%%%zvar:~4,2%%%%zvar:~6,2%%_2 p>

名为 yester.vbs 的 VB 脚本以 YYYYMMDD 格式打印出昨天的日期。这被保存为一个变量,用于在 GCS 中搜索昨天的数据文件并输出到一个表,从中创建一个重复数据删除(通过所有列分组)表。然后将其附加到主表,并删除两个中间表。

显示双百分号是因为它保存为 .CMD 文件并通过 Windows 任务计划程序运行。

【讨论】:

以上是关于从 Google Cloud 自动将重复数据附加到 BigQuery 的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 Google Cloud 自动上传到 Big Query

是否可以从 Google Drive 自动将内容上传到 Cloud Storage?

有没有办法在仅附加模式下使用 Google Apps 脚本将数据从 BigQuery 加载到 Google 表格?

每次在 Google Cloud Storage 上上传 CSV 时如何触发自动更新 Google BigQuery 数据集

检索自动 Google Cloud SQL 备份

将数据流从 Google Cloud Storage 流式传输到 Big Query