我有很多按日期分片的表格。我正在探索继续前进并使用新的" Partitioned Tables"代替。 我找到了这个转换表的参考:https://cloud.google.com/bigquery/docs/creating-partitioned-tables#converting_dated_tables_into_a_partitioned_table
但是,由于我有许多与现有表格相关的流程(加载数据或查询),我正在寻找分阶段过渡方法。 含义:我想在第1次更改加载过程和表定义,然后慢慢更改所有相关过程。
由于
答案 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
命令将现有分片转换为新分区。首先,您确实需要创建该分区表。如果没有 - 你将得到没有架构的新表,所以它将是无用的。这可能是一个错误 - 不知道