Google bigquery BQ-插入而不列出列

Google bigquery BQ-插入而不列出列,google-bigquery,Google Bigquery,我有两个BQ表,就列数而言非常宽。注意:为了灵活性,所有表列都可以为空 表A-1000列-Bs列的超集 表B-500列-As列的子集-与上述列完全相同的名称/类型 因此,Bs表数据中的行应该可以插入到,其中任何未插入的列都只会得到null。i、 e 500列获取一个值,其余500列获取一个默认空值,因为插入中不存在 因此,由于这些表非常广泛,枚举insert语句中的所有列将花费很长时间,这将是一场维护噩梦 在标准SQL中,是否有一种方法可以在不列出insert语句中的列名的情况下进行插入,从而自

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

表A-1000列-Bs列的超集 表B-500列-As列的子集-与上述列完全相同的名称/类型

因此,Bs表数据中的行应该可以插入到,其中任何未插入的列都只会得到null。i、 e 500列获取一个值,其余500列获取一个默认空值,因为插入中不存在

因此,由于这些表非常广泛,枚举insert语句中的所有列将花费很长时间,这将是一场维护噩梦

在标准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?

当然,简单

使用以下选项准备虚拟表格
p.d.b

SELECT * FROM `p.d.a` WHERE FALSE   
(注意,即使结果是空表-上面将扫描整个表a-这只需要一次-所以应该可以-如果没有,您可以编写一次脚本,然后从脚本创建此表)

好的,现在不用

SELECT * FROM `p.d.b`  
您将使用

SELECT * FROM `p.d.b*`  
这对你来说是个骗局(对我来说是这样的:哦)


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

鉴于表的大小,创建带有联接的新表不会实现这一点吗?谢谢您的评论。这些表是通过单独的摄取方法填充的,因此需要这些表保持原样。不是很理想,但现在就是这样。嗨,米哈伊尔-对不起,我太傻了,没有完全明白这一点。我试着添加了*(你知道很多窍门:)这是一种类型,是不是意味着b_?如果表已经存在,为什么还要创建一个虚拟表呢。如果我的无知显而易见,请原谅!如果您可以使用insert完成完整的SQL,这也会有所帮助。我甚至尝试将每个属性完全限定为一个测试,似乎我无法在插入中使用嵌套“.”符号。我是否缺少某些内容(请参阅上面更新的示例)在使用嵌套的插入时,我可以使用选择结构()为了建立数据,然后插入…我很好奇,如果你能在插入中使用struct'dot'符号,你试过按照我的建议做吗?与我的答案完全一样,只是用您的真实表名替换
p.s.a
p.d.b
?重要信息-不要错过
b
后面的下划线!1) 虚拟表需要保存目标模式,同时完全没有行2)
*
是一个通配符,它
将该虚拟表添加到select语句中,
强制执行所需的模式,即使原始
b
表缺少一些字段3)没有使用记录/结构测试上述方法,但它确实有效对于原始数据类型:o)我的建议-尝试在简单场景中复制这种方法,然后转移到真实的caseHi Mikhail-抱歉,我真的病了,不能行动了。很快就会回来的谢谢你的检查:)