Изменить тип записи столбца в BigQuery - PullRequest
0 голосов
/ 17 января 2020

У меня есть таблица в 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, но я не знаю, как это сделать. Я знаю, что это включает выбор и приведение к новой таблице, но я не знаю правильный синтаксис. Здесь очень похожий вопрос с ответом Как изменить тип col повторяющейся записи BigQuery , но он предназначен только для ПОВТОРНЫХ записей и не смог изменить его только на ЗАПИСЬ (не ПОВТОРЕННЫЙ).

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Потенциальная проблема с ответом 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`  
1 голос
/ 17 января 2020

Наконец-то все заработало

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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...