BigQuery更新多表

时间:2014-10-05 09:12:03

标签: google-bigquery

我根据营业日期在每日多桌上持有大量交易数据。 trascation_20140101 trascation_20140102 trascation_20140103 ..

流程如下: 1.i''m加载到达临时表的一批新文件 2.i group by transcation_date字段,以便注意属于哪个日期 -   对于每个日期,我在此日期查询临时表并将其插入到正确的trasaction_YYYYMMDD   表。 3.我正在并行执行第2部分以节省时间,因为临时表可能包含属于20天的数据。

我的挑战是如果这些过程失败而另一些失败则该怎么办.. 我无法再次运行它,因为它会导致已经成功更新的表的重复。

我通过管理此更新来解决这些问题,但它看起来太复杂了。

这是处理多表的最佳做法吗? 我很乐意获得一些最佳实践,以便了解其他人在需要根据业务日期将数据加载到多个表时如何处理,并且只插入日期(这很容易......)< / p>

2 个答案:

答案 0 :(得分:1)

您可以在中间添加一个额外的步骤,而不是直接从今天的临时表移动到永久业务日期表中,而是提取到临时每日表中,然后将数据复制到永久表中。

  1. 从今天的临时表中查询,按日分为tmp_transaction_YYMMDD。使用WRITE_EMPTYWRITE_TRUNCATE写入处置,以便此步骤是幂等的。
  2. 验证是否存在所有预期的tmp_transaction_YYMMDD表。如果没有,请调试失败并返回步骤1.
  3. 从每个tmp_transaction_YYMMDD表运行并行复制作业,以附加到相应的永久transaction_YYMMDD表。
  4. 验证复制作业是否成功。如果没有,请从步骤3重试各个故障。
  5. 删除tmp_transaction_YYMMDD表。
  6. 这样做的好处是,您可以在影响任何最终目标表之前捕获查询错误,然后一次复制所有添加的数据。如果复制作业失败,您可能仍会遇到相同的问题,但它们应该更容易调试并单独重试。

答案 1 :(得分:0)

我们对增量负载的激励是成本,因此我们对“仅触摸每条记录一次”感兴趣。 我们使用表装饰器来识别增量。我们独立管理增量时间戳,并在运行时将它们添加到查询中。它需要一些逻辑来维护,但没有太复杂。