BigQuery STRUCT语法

时间:2018-07-16 11:04:08

标签: google-cloud-platform google-bigquery

给出以下结构。在叶节点下面是field1field2其余是包含叶的对象结构。

dimension1.dimension2.dimension3.field1
dimension1.dimension2.dimension3.field2
dimension1.dimension2.field1
dimension2.dimension2.field2
dimension1.field1

Q1。如何在保持其余结构的同时从dimension1.dimension2.dimension3.field2dimension2.dimension2.field2重命名field2?我找到了替换一级嵌套结构的示例,但无法对嵌套结构执行此操作。

Q2。叶名field1出现在不同的结构位置。当我尝试执行如下所示的select语句时,出现错误消息,提示不支持重复名称。我不确定下面的重复项如何,因为所有字段的路径都不相同。我该如何解决这个问题?

     SELECT dimension1.dimension2.dimension3.field1
     dimension1.dimension2.field1
     dimension1.field1

1 个答案:

答案 0 :(得分:2)

以下示例适用于BigQuery标准SQL

  

如何在保持结构其余部分的情况下,从Dimension1.dimension2.dimension3.field2和Dimension2.dimension2.field2重命名field2?

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 
    STRUCT<field1 INT64, dimension2 STRUCT<field1 INT64, dimension3 STRUCT<field1 INT64, field2 INT64>>>(1, STRUCT(11, STRUCT(21, 22))) dimension1,
    STRUCT<dimension2 STRUCT<field2 INT64>>(STRUCT(31)) dimension2
)
SELECT 
  STRUCT<field1 INT64, dimension2 STRUCT<field1 INT64, dimension3 STRUCT<field1 INT64, field3 INT64>>>
    (dimension1.field1, STRUCT(dimension1.dimension2.field1, STRUCT(dimension1.dimension2.dimension3.field1, dimension1.dimension2.dimension3.field2))
  ) dimension1,
  STRUCT<dimension2 STRUCT<field4 INT64>>(STRUCT(dimension2.dimension2.field2)) dimension2
FROM `project.dataset.table`   

您可以使用以下虚拟数据进行测试,操作

SELECT 
  dimension1.dimension2.dimension3.field1 AS a,
  dimension1.dimension2.field1 AS b,
  dimension1.field1 AS c
FROM `project.dataset.table`   
  

我收到错误消息,说不支持重复名称。 ...我如何解决这个问题?

只需使用别名,如下面的示例

{{1}}