【问题标题】:Change type of record column in BigQuery更改 BigQuery 中记录列的类型
【发布时间】:2020-01-17 16:05:44
【问题描述】:

我在 BigQuery 中有一个包含 RECORD 类型列的表。此 RECORD 列只是一个 RECORD,它不是 REPEATED 列。我想更改记录中元素之一的类型。我的记录定义为:

product_action                RECORD NULLABLE
product_action.action_type    INTEGER NULLABLE
product_action.checkout_step  INTEGER NULLABLE

我想将 ACTION_TYPE 的类型从 INTEGER 更改为 STRING,但我不知道该怎么做。我知道它涉及选择和转换到新表,但我不知道正确的语法。这里有一个非常相似的问题,有一个答案 How to change the col type of a BigQuery repeated record 但它仅适用于 REPEATED 记录,无法将其更改为 RECORD only(非 REPEATED)。

谢谢!

【问题讨论】:

    标签: google-cloud-platform google-bigquery


    【解决方案1】:

    OP 的答案的潜在问题是它不保留记录中字段的原始顺序,因此它以以下模式结束

    product_action                RECORD NULLABLE
    product_action.checkout_step  INTEGER NULLABLE
    product_action.action_type    STRING NULLABLE  <-- Type and position changed
    

    而不是

    product_action                RECORD NULLABLE
    product_action.action_type    STRING NULLABLE  <-- Type changed while position preserved  
    product_action.checkout_step  INTEGER NULLABLE
    

    下面处理这个问题

    #standardSQL
    SELECT * REPLACE((
      SELECT AS STRUCT product_action.* REPLACE(
        CAST(product_action.action_type AS STRING) AS action_type
      )) AS product_action) 
    FROM `mytable`  
    

    【讨论】:

      【解决方案2】:

      终于搞定了

      SELECT
        * REPLACE   
            ( 
              (
                  SELECT
                  AS STRUCT product_action.* EXCEPT (action_type),
                  CAST(product_action.action_type AS STRING) AS action_type
               ) AS product_action
            ),
      FROM
        `mytable`
      

      【讨论】:

      • 只是为了补充解决方案,这里是 SELECT * REPLACE 和 SELECT * EXCEPT 的 documentation
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      相关资源
      最近更新 更多