【问题标题】:BigQuery UNNEST causing duplicate column namesBigQuery UNNEST 导致列名重复
【发布时间】:2020-12-20 11:37:58
【问题描述】:

我正在尝试创建一个视图,其中包括取消嵌套 BigQuery 中名为客户的表中的一些值。 JSON 格式的客户表的一行示例如下所示:

{
    "customer_id": "12345",
    "created_date": "2020-12-20",
    "customer_purchases": [
        {
            "created_date": "2020-12-20",
            "item_id": 100
        }
    ]
}

我希望每一行都是客户购买的视图,其列与客户表中的列完全相同。因此,我将客户购买的内容取消嵌套,如下所示:

SELECT
  *
FROM `sales.customers`,
UNNEST (customer_purchases)

但是我现在收到一个错误:

Duplicate column name 'created_date' in definition of view 'sales.customers_purchases_view'

我可以创建一个怪物查询,在其中重命名所有重复的字段,但这并不理想,并且难以持续进行。无论如何,视图是否可以为任何未嵌套的列添加前缀或其他内容?

【问题讨论】:

标签: sql google-bigquery unnest


【解决方案1】:

我通常会这样写:

SELECT c.* except (customer_purchases), purchase
FROM `sales.customers` c UNNEST
     (customer_purchases) purchase;

这会将购买作为结构放入结果集中。

您还可以删除和重命名名称:

如果你想要单独的列,你可以重命名它们:

SELECT c.* except (customer_purchases, created_date),
       c.created_date as customer_created_date,
       purchase.*
FROM `sales.customers` c UNNEST
     (customer_purchases) purchase;

或者:

SELECT c.* except (customer_purchases),
       purchase.* except (created_date)
       purchase.created_date as purchase_created_date
FROM `sales.customers` c UNNEST
     (customer_purchases) purchase;

【讨论】:

    【解决方案2】:

    我相信它很简单:

    SELECT
      a.*
    FROM `sales.customers` AS a
    CROSS JOIN UNNEST(customer_purchases)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多