我有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?
答案 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
(或任何实名)开头的表