转换为新的"分区表"来自现有系统

时间:2016-06-05 12:07:06

标签: google-bigquery

我有很多按日期分片的表格。我正在探索继续前进并使用新的" Partitioned Tables"代替。 我找到了这个转换表的参考:https://cloud.google.com/bigquery/docs/creating-partitioned-tables#converting_dated_tables_into_a_partitioned_table

但是,由于我有许多与现有表格相关的流程(加载数据或查询),我正在寻找分阶段过渡方法。 含义:我想在第1次更改加载过程和表定义,然后慢慢更改所有相关过程。

  1. 我应该如何进行这种转变? (由于显而易见的原因,我们已经考虑并排除了复制所有内容并维护每个进程两次的选项。)
  2. 在查询新转换表的分区时,有没有办法使用旧表名约定(MyTable_YYYYMMDD)?
  3. 在转换所有查询模板之前,我可以使用较旧的Table通配符函数进行查询吗?
  4. 公共数据集中是否存在可以进行实验的现有分区表?
  5. 由于

2 个答案:

答案 0 :(得分:1)

这并不完全符合您的要求,但可以达到目的。使用标准SQL,BigQuery支持相应的表通配符函数:

此功能的文档即将推出,但总结一下:

我们提供了一个伪列_TABLE_SUFFIX,它提供了一种寻址表的方法。例如,以下查询允许您从表myproject.mydataset.20150105和myproject.mydataset.20150106中读取(假设value1是两者中的字段)。

SELECT _TABLE_SUFFIX AS table_name,SUM(value1) 来自myproject.mydataset.* WHERE _TABLE_SUFFIX ='20150105'OR _TABLE_SUFFIX ='20150106' GROUP BY 1;

对于您的用例:

您可以先将日期分片表的查询转换为使用_TABLE_SUFFIX伪列。然后,当您能够将这些表转换为分区表时。在那之后,您将需要对脚本进行微小更改以使用分区伪列(因为在这两种情况下伪列名称略有不同)。

答案 1 :(得分:0)

我的几分钱:

  

我可以使用旧的表通配符函数来查询它,直到我   转换我的所有查询模板?

直接针对新的分区表 - 否。您很可能会得到类似" table wildcards matches no table"

  

有没有办法使用旧的表名约定   (MyTable_YYYYMMDD)查询新转换的分区时   表

我看到的选项是创建以new_partitioned表命名,但遵循new_partitioned_YYYYMMDD命名的相应每日视图。
因此,在使用新分区功能的同时,在完全迁移之前,您仍将使用旧语法 这会带来一些额外的麻烦,因为您需要确保每天为新分区创建每日视图 - 但如果您正在寻找临时解决方案 - 这应该不是什么大问题。

  

最后快速评论转换表的参考:

在文档中没有明确说明,但看​​起来您不能只使用bq partition命令将现有分片转换为新分区。首先,您确实需要创建该分区表。如果没有 - 你将得到没有架构的新表,所以它将是无用的。这可能是一个错误 - 不知道

相关问题