代码之家  ›  专栏  ›  技术社区  ›  user_1357

bigquery结构语法

  •  0
  • user_1357  · 技术社区  · 7 年前

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

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

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

    Q2。叶子的名字 第一场 出现在不同的结构位置。当我尝试执行如下select语句时,会收到错误消息,指出不支持重复的名称。由于所有字段的路径不同,我不确定下面是如何复制的。我怎样才能解决这个问题?

         SELECT dimension1.dimension2.dimension3.field1
         dimension1.dimension2.field1
         dimension1.field1
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Mikhail Berlyant    7 年前

    以下示例适用于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, 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`   
    

    您可以使用下面的虚拟数据测试、播放上面的内容

    #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`