在BigQuery中创建模式不可知备份/通过查询从JSON类型创建表

ubof19bj  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(105)

编辑:感谢@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中完成它的方法。

9ceoxa92

9ceoxa921#

注解已转换为答案...
我不会推出自己的解决方案,而是从现成可用的流程(表导出、快照等)开始

相关问题