【问题标题】:create new columns from row in Bigquery从 Bigquery 中的行创建新列
【发布时间】:2018-09-25 08:52:35
【问题描述】:

我有一张像下面这样展示产品购物车的表格

每个 id 有不同的产品,例如:id 1 有 3 个产品,id 2 有 4 个……但每个 id 的最大产品数是 10。时间戳按 DESC 排序。所以现在我想把这张桌子改成这样:

表的架构:

我在这里尝试了Pivot Repeated fields in BigQuery 的解决方案,但是列数太多了。如何让新列对应最多 10 个产品

谢谢

【问题讨论】:

  • 请说明表格的架构。这三个字段是独立列还是“属于”重复记录?显示真实架构以避免混淆
  • 知道了:o)我建议将此类信息添加到您的问题中,而不是在 cmets 中:o)以便更好地查看其余信息
  • @MikhailBerlyant 是的,你是对的 :))我刚刚编辑了我的问题。
  • 感谢@MikhailBerlyant。

标签: google-cloud-platform google-bigquery pivot-table


【解决方案1】:

以下选项适用于 BigQuery 标准 SQL

#standardSQL
SELECT id, 
  products[SAFE_OFFSET(0)].product_id product_id_1,
  products[SAFE_OFFSET(0)].price price_1,
  products[SAFE_OFFSET(1)].product_id product_id_2,
  products[SAFE_OFFSET(1)].price price_2,
  products[SAFE_OFFSET(2)].product_id product_id_3,
  products[SAFE_OFFSET(2)].price price_3,
  products[SAFE_OFFSET(3)].product_id product_id_4,
  products[SAFE_OFFSET(3)].price price_4,
  products[SAFE_OFFSET(4)].product_id product_id_5,
  products[SAFE_OFFSET(4)].price price_5,
  products[SAFE_OFFSET(5)].product_id product_id_6,
  products[SAFE_OFFSET(5)].price price_6,
  products[SAFE_OFFSET(6)].product_id product_id_7,
  products[SAFE_OFFSET(6)].price price_7,
  products[SAFE_OFFSET(7)].product_id product_id_8,
  products[SAFE_OFFSET(7)].price price_8,
  products[SAFE_OFFSET(8)].product_id product_id_9,
  products[SAFE_OFFSET(8)].price price_9,
  products[SAFE_OFFSET(9)].product_id product_id_10,
  products[SAFE_OFFSET(9)].price price_10
FROM `project.dataset.table`

#standardSQL
SELECT id, 
  MAX(IF(off = 0, product_id, NULL)) product_id_1,
  MAX(IF(off = 0, price, NULL)) price_1,
  MAX(IF(off = 1, product_id, NULL)) product_id_2,
  MAX(IF(off = 1, price, NULL)) price_2,
  MAX(IF(off = 2, product_id, NULL)) product_id_3,
  MAX(IF(off = 2, price, NULL)) price_3,
  MAX(IF(off = 3, product_id, NULL)) product_id_4,
  MAX(IF(off = 3, price, NULL)) price_4,
  MAX(IF(off = 4, product_id, NULL)) product_id_5,
  MAX(IF(off = 4, price, NULL)) price_5,
  MAX(IF(off = 5, product_id, NULL)) product_id_6,
  MAX(IF(off = 5, price, NULL)) price_6,
  MAX(IF(off = 6, product_id, NULL)) product_id_7,
  MAX(IF(off = 6, price, NULL)) price_7,
  MAX(IF(off = 7, product_id, NULL)) product_id_8,
  MAX(IF(off = 7, price, NULL)) price_8,
  MAX(IF(off = 8, product_id, NULL)) product_id_9,
  MAX(IF(off = 8, price, NULL)) price_9,
  MAX(IF(off = 9, product_id, NULL)) product_id_10,
  MAX(IF(off = 9, price, NULL)) price_10
FROM `project.dataset.table`,
UNNEST(products) product WITH OFFSET off
GROUP BY id

【讨论】:

    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    相关资源
    最近更新 更多