【问题标题】:BigQuery union over nested fields嵌套字段上的 BigQuery 联合
【发布时间】:2014-01-26 10:50:10
【问题描述】:

我正在尝试创建 3 个表的联合。所有 3 个表都是同一表上的子选择:每个子选择仅包含一个字段,所有子选择上的字段具有相同的别名,因此生成的模式将兼容并且联合将成功(遵循 Support UNION function in BigQuery SQL 中的示例)。

结果查询产生错误:

联合导致模式不明确。 [foo] 是模棱两可的,并且是多个字段的别名。别名字段:...

这可能与我选择的字段嵌套在多个记录和重复字段中有关。

虚构查询示例:


中选择* (从示例中选择 record.list1.list2.listA.foo 作为 foo),
(从样本中选择 record.list1.list2.listB.foo 作为 foo),
(从示例中选择 record.list1.list2.listC.foo 作为 foo)

有关具体示例,请参阅作业 job_eZm0F1cGA2leE37D8-N5NHNTTYU(这是一个包含我无法共享的数据的表)。

【问题讨论】:

    标签: union google-bigquery


    【解决方案1】:

    您可以使用公共数据集重现此内容:

    SELECT x FROM
      (SELECT phoneNumber.areaCode x
       FROM [bigquery-samples:nested.persons_living] LIMIT 1),
      (SELECT citiesLived.numberOfYears x
       FROM [bigquery-samples:nested.persons_living] LIMIT 1);
    
    Error: Union results in ambiguous schema.
           [x] is ambiguous and is aliasing multiple fields.
           Aliased fields: x,CitiesLived.x,
    

    如前所述,这只发生在混合不同的多条记录和重复字段时 - 并且有一个快速修复:查询之前的 FLATTEN():

    SELECT x FROM
      (SELECT phoneNumber.areaCode x
       FROM [bigquery-samples:nested.persons_living] LIMIT 1),
      (SELECT citiesLived.numberOfYears x
       FROM (FLATTEN([bigquery-samples:nested.persons_living], citiesLived)) LIMIT 1);
    

    【讨论】:

    • Flatten 似乎不起作用(请参阅 job_dupoozPiAu8rGVwbiiPUOeHujWs)。是因为有多个嵌套的重复字段吗?如何展平这样的结构?
    • 请发布您的新查询和错误 - 它会更快,更多人可以加入
    • 通过使用多个扁平子句修复:SELECT record.list1.list2.listA.foo as foo from (flatten(flatten(sample,record.list1.list2),record.list1))
    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多