【问题标题】:Atomic load to multiple tables in google bigquery谷歌bigquery中多个表的原子加载
【发布时间】:2018-10-29 07:38:58
【问题描述】:

我正在尝试使用 ruby​​ 中的 load_job 从 GCS 文件的 bigquery 中执行加载操作。

问题是,当我在 GCS 中有多个文件影响不同的表时,有可能由于验证/网络问题而失败,从而导致 bigquery 中的数据不一致。 假设我想加载存储在 5 个文件中的最后一小时数据,即使其中 1 个加载作业失败,我也会得到用于分析的错误数据。

有没有一种方法可以在对 bigquery 的单个原子请求中批量处理所有这些加载作业?

【问题讨论】:

  • 您分享了一些代码,您正在尝试如何做到这一点。您是否能够捕获失败并在出现错误时重试?临时表如何确保将数据正确移动到 bigquery,然后将它们移动到最终表?
  • @hlagos,即使我创建了临时表,在发送复制请求时这些问题仍然存在,因为它们也会在 BQ 中创建不同的作业,还是我用这种方法遗漏了什么?
  • 如果您担心提交给 BQ 的网络错误,如果您确保所有数据都在 bigquery 中,则不应该是这种情况,我希望它会更加稳定数据在 bigquery 内的临时表中,并执行从表到表的操作

标签: google-bigquery


【解决方案1】:

您为什么不尝试使用 BQ Sink 或将数据流式传输到 BQ。 使用 Sinks,您将依靠 BQ 下划线架构,该架构非常稳定且一致,可以将数据从文本文件移动到 BQ 表。 使用流式数据,您将更好地控制您的交易。然后,您可以确保您的数据逐行正确移动。

【讨论】:

  • 不使用流式传输的原因是,当有大量数据时,加载速度会快得多,而流式传输会减慢处理速度。
  • 为什么不尝试将数据作为临时位置发送到 Cloud Datastore,因为数据存储支持 ACID 事务,然后在事务成功后将生成的数据存储类型中的数据发送到 BQ 表。更多信息可以在这里找到:cloud.google.com/bigquery/docs/loading-data-cloud-datastore
  • 我们今天开始使用数据流开展一个项目,在您描述的场景中可能会对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多