编辑:感谢@NickW,我被证明了使用Native Snapshot function of BigQuery整个问题变得无关紧要...最好避免重新发明weel,而是使用框架所支持的工具!我对解决方案很满意。
我有以下问题:我希望创建与模式无关的备份,也就是说,如果(原始数据的)模式发生更改,它不会损坏我的备份。
我的想法是将其存储到JSON文件中,然后查询它,如下所示(在BigQuery SQL中):
WITH aggregated_table as (
-- Aggregate all data into one JSON file
SELECT id ,TO_JSON(row_struct) AS data
-- Extract each row as a STRUCT
FROM mytable row_struct)
-- Backups use time as primary key
SELECT CURRENT_TIMESTAMP() as backup_time, id, data from aggregated_table
唯一的问题是备份的恢复非常繁琐,而且我还没有找到一种方法使它能够识别模式,或者至少是列名本身。
在我的例子中,表有300多列,我不想像这样指定每一列:
SELECT
backup_time,
data.id as id,
TIMESTAMP(data.some_time_value) as some_time_value,
TIM(data.some_string_value, ") as some_string_value,
--...300 more columns ...
FROM my_backup WHERE backup_time = xxx
我已经看了很长一段时间的JSON文档上的BigQuery,但我找不到功能适合我的情况...
有没有人有解决方案?也许像这样处理JSON文件是一种反模式,有另一种方法可以做到这一点?
非常感谢!
我期待一个像flatJSON这样的函数,它基本上可以反转我为备份所做的打包。我知道Python中的Pandas库可以从JSON填充表,但我想找到一种在BigQuery SQL中完成它的方法。
1条答案
按热度按时间9ceoxa921#
注解已转换为答案...
我不会推出自己的解决方案,而是从现成可用的流程(表导出、快照等)开始