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

Posted

技术标签:

【中文标题】每次在 Google Cloud Storage 上上传 CSV 时如何触发自动更新 Google BigQuery 数据集【英文标题】:How to trigger auto update Google BigQuery Dataset every time CSV upload on Google Cloud Storage 【发布时间】:2020-04-19 13:58:32 【问题描述】:

我正在尝试自动化整个数据加载,这意味着每当我将文件上传到 Google Cloud 存储时,它都会自动触发将数据上传到 BigQuery 数据集。我知道有可用的每日设置时间更新,但我想要一些仅在重新上传 CSV 文件时触发的东西。

【问题讨论】:

是否要将文件数据加载到 BigQuery 表中?或者您想从 GCS 中读取它以更新其他表吗? @guillaumeblaquiere 我希望当用户上传 csv 文件时,它会触发 BigQuery SQL 代码(已保存)。我的目标是创建一个数据流(一堆连接的、相互依赖的 SQL 查询),每次上传 CSV 文件时都会运行它(因为数据处理会发生在上面) 你需要链接所有的查询吗?当一个完成时,你运行另一个?是需要复制数据还是一个视图就够了? 到目前为止,我有多个查询。我打算将所有这些都放在一个保存的查询中。但问题是,我使用多个上传的数据集来获得决赛桌。这最终流入 Google Data Studio。如果上传了任何输入数据集,我希望查询运行。 (不过,我可以将所有子步骤合并到一个查询中) @guillaumeblaquiere 你能帮我解决自动化部分和最佳实践吗? 【参考方案1】:

你有两种可能:

要么对事件做出反应。我的意思是你可以plug a function on Google Cloud Storage events。在事件消息中,您将文件存储在 GCS 中,您可以使用它做任何您想做的事情,例如 run a load job from Google Cloud Storage。

或者,什么也不做!让GCS中的文件和create a BigQuery federated table to read into GCS

借助这两种解决方案,BigQuery 可以访问您的数据。您的 Datastudio 图表可以查询 BigQuery,数据在此处。但是。

加载作业效率更高,您可以对数据进行分区和集群化以优化速度和成本。但是,您复制数据(来自 GCS)并且您必须编写代码并运行您的函数。总之,成本很低,功能也很简单。对于大数据,这是我推荐的解决方案 联合表在数据量较少且用于偶尔访问或原型设计时非常有用。您无法对数据进行集群化和分区,并且速度低于加载到 BigQuery 中的数据(因为 CSV 解析是即时执行的)。

所以,大数据是一个广泛的领域:您需要在加载之前转换数据吗?你能在日志之后转换它们吗?你怎么能链接查询其他的? ....

如果您对此还有其他问题,请不要犹豫!

【讨论】:

以上是关于每次在 Google Cloud Storage 上上传 CSV 时如何触发自动更新 Google BigQuery 数据集的主要内容,如果未能解决你的问题,请参考以下文章

Spring + google cloud:没有可用的“com.google.cloud.storage.Storage”类型的合格bean

google cloud storage products

Google Storage 不是构造函数错误

ReferenceError:导入@google-cloud/storage 时分配的左侧无效

错误:模块“google.cloud.bigquery_storage”没有属性“BigQueryReadClient”

使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题