当值为 NULL 时,如何在结构类型声明中设置字段名称?

问题描述 投票:0回答:1

我正在构建两个具有不同列的表的并集。为了使它们匹配,我将缺失值设置为

NULL
并声明类型:

WITH
  table1 AS (
  SELECT
    STRUCT(1 AS b,
      2 AS c) AS a,
    CAST(NULL AS STRUCT<STRING, STRING>) AS x),
  table2 AS (
  SELECT
    CAST(NULL AS STRUCT<INT64, INT64>) AS a,
    STRUCT('hello' AS y,
      'world' AS z) AS x)
SELECT
  *
FROM
  table1
UNION ALL
SELECT
  *
FROM
  table2

类型有效,但在输出中,只有第一个表中声明的结构字段获得预期名称:

a x
"{
  ""a"": {
    ""b"": ""1"",
    ""c"": ""2""
  }
}"  "{
  ""x"": null
}"
"{
  ""a"": null
}"  "{
  ""x"": {
    ""_field_1"": ""hello"",
    ""_field_2"": ""world""
  }
}"

即,

x.y
x.z
表现为
x._field_1
x._field_2

有没有办法解决这个问题,即使用

x
中的
table1
的类型声明来定义结构体字段的名称?

sql google-bigquery
1个回答
0
投票

哦,找到解决方案了。这非常简单。 :D

WITH
  table1 AS (
  SELECT
    STRUCT(1 AS b,
      2 AS c) AS a,
    CAST(NULL AS STRUCT<y STRING, z STRING>) AS x),
  table2 AS (
  SELECT
    CAST(NULL AS STRUCT<b INT64, c INT64>) AS a,
    STRUCT('hello' AS y,
      'world' AS z) AS x)
SELECT
  *
FROM
  table1
UNION ALL
SELECT
  *
FROM
  table2
© www.soinside.com 2019 - 2024. All rights reserved.