【问题标题】:Bigquery - Repeated field inside of a repeated recordBigquery - 重复记录中的重复字段
【发布时间】:2021-10-09 17:08:54
【问题描述】:

我有一个非规范化表,我想使用 BigQuery 中的重复字段对其进行简化。 为了说明我想要做什么,我想从:

|CustomerNumber|InvoiceNumber|InvoiceLineItem|
|--------------|-------------|---------------|
|78278278      |8765         |VV190          |
|78278278      |8765         |VV191          |
|78278278      |9321         |VV198          |
|78278278      |9321         |VV199          |

收件人:

|CustomerNumber|InvoiceNumber [REPEATED]|InvoiceLineItem [REPEATED]|
|--------------|------------------------|--------------------------|
|78278278      |8765                    |VV190                     |
|              |                        |VV191                     |
|              |------------------------|--------------------------|
|              |9321                    |VV198                     |
|              |                        |VV199                     |

我能够在 BigQuery 中创建这种类型的架构,但无法编写 SQL 查询以从我的非规范化数据转到我想要的表架构。

[
  {
    "name": "CustNumber",
    "type": "STRING"
  },
  {
    "fields": [
      {
        "name": "InvoiceNumber",
        "type": "STRING"
      },
      {
        "mode": "REPEATED",
        "name": "InvoiceLineItem",
        "type": "STRING"
      }
    ],
    "mode": "REPEATED",
    "name": "OrderInfo",
    "type": "RECORD"
  }
]

Bigquery 控制台中的架构屏幕截图:

任何帮助将不胜感激。 谢谢:D

其他资源 - 开始播放的示例:

WITH
  DATA AS (
  SELECT
    "78278278" AS CustomerNumber,
    "8765" AS InvoiceNumber,
    "VV190" AS InvoiceLineItem
  UNION ALL
  SELECT
    "78278278" AS CustomerNumber,
    "8765" AS InvoiceNumber,
    "VV191" AS InvoiceLineItem
  UNION ALL
  SELECT
    "78278278" AS CustomerNumber,
    "9321" AS InvoiceNumber,
    "VV198" AS InvoiceLineItem
  UNION ALL
  SELECT
    "78278278" AS CustomerNumber,
    "9321" AS InvoiceNumber,
    "VV199" AS InvoiceLineItem )

【问题讨论】:

    标签: arrays google-cloud-platform data-structures google-bigquery array-agg


    【解决方案1】:

    试试这个

    WITH
      DATA AS (
      SELECT
        "78278278" AS CustomerNumber,
        "8765" AS InvoiceNumber,
        "VV190" AS InvoiceLineItem
      UNION ALL
      SELECT
        "78278278" AS CustomerNumber,
        "8765" AS InvoiceNumber,
        "VV191" AS InvoiceLineItem
      UNION ALL
      SELECT
        "78278278" AS CustomerNumber,
        "9321" AS InvoiceNumber,
        "VV198" AS InvoiceLineItem
      UNION ALL
      SELECT
        "78278278" AS CustomerNumber,
        "9321" AS InvoiceNumber,
        "VV199" AS InvoiceLineItem )
    
        
    SELECT CustomerNumber, ARRAY_AGG(STRUCT (InvoiceNumber,InvoiceLineItem)) OrderInfo FROM (
        SELECT CustomerNumber, InvoiceNumber, ARRAY_AGG(InvoiceLineItem) InvoiceLineItem FROM DATA
        GROUP BY CustomerNumber, InvoiceNumber    
    )
    GROUP BY CustomerNumber
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多