BQ - INSERT没有列出列

时间:2018-04-16 10:30:39

标签: google-bigquery

我有2个BQ表,就列数而言非常宽。请注意,为了灵活性,所有表列都可以为空(

表A - 1000 cols - Bs cols的Superset 表B - 500 cols - As cols的子集 - 完全命名/键入如上cols

因此,Bs表数据中的行应该可插入到A中,其中未插入的任何列只会获得null。即500 cols获得一个值,剩下500获得一个默认null,因为插入中没有。

因为这些表格非常宽,所以枚举插入语句中的所有列将永远占用并成为维护的噩梦。

标准SQL中是否有一种方法可以插入而不在insert语句中列出列名,从而自动匹配名称?

所以我希望能够真正做到这一点,并且每插入一行,B中的列与A匹配?如果没有,我没有看到任何其他方式可以帮助解决这个问题吗?

谢谢!

INSERT INTO
  `p.d.A` (
  SELECT
    *
  FROM
    `p.d.B` )

我实际上尝试枚举列以查看嵌套是否有效并且似乎没有?

INSERT INTO
      `p.d.A` (x, y.z) (
      SELECT
        x, y.z
      FROM
        `p.d.B` )

我不能说(x,y)因为来自dff表的y结构不完全相同BQ抱怨结构与精确不匹配.....因此我为什么要尝试y.z?

1 个答案:

答案 0 :(得分:1)

当然,很简单!

使用下面的选择

准备虚拟表p.d.b_
SELECT * FROM `p.d.a` WHERE FALSE   

(注意,即使结果将是空表 - 上面将扫描整个表 - 这只需要一次 - 所以应该是Okey - 如果不是,你可以编写一次脚本并从脚本创建这个表)

好的,现在不是使用

SELECT * FROM `p.d.b`  

你将使用

SELECT * FROM `p.d.b*`  

这将为你制作一个技巧(它对我有用:o)

P.S。当然,我假设您将确保该数据集中没有其他名称以b(或任何实名)开头的表