Как переименовать столбец с путем в BigQuery? - PullRequest
0 голосов
/ 14 мая 2019

Я ищу способ переименовать столбец, который вложен в мою схему avro. Я попробовал параметры, которые Google имеет в своих документах (https://cloud.google.com/bigquery/docs/manually-changing-schemas), но каждый раз, когда я пытаюсь использовать псевдоним или преобразовывать их как вложенную структуру, это не работает.

Например:

   SELECT
     * EXCEPT(user.name.first, user.name.last),
     user.name.first AS user.name.firstName,
     user.name.last AS user.name.lastName
   FROM
     mydataset.mytable

Однако это не любит совмещения путей. Еще один вариант, который я пытаюсь избежать, - это извлечение всех моих предыдущих файлов avro и их преобразование с использованием потока данных. Я надеюсь на более элегантное решение, чем это. Спасибо.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вам нужно перестраивать структуру на каждом уровне. Вот пример некоторых примеров данных:

SELECT
  * REPLACE(
    (SELECT AS STRUCT user.* REPLACE (
       (SELECT AS STRUCT user.name.* EXCEPT (first, last),
          user.name.first AS firstName,
          user.name.last AS lastName
       ) AS name)
    ) AS user)
FROM (
  SELECT
    STRUCT(
      STRUCT('elliott' AS first, '???' AS middle, 'brossard' AS last) AS name,
      'Software Engineer' AS occupation
    ) AS user
)

Идея состоит в том, чтобы заменить структуру user новой структурой, в которой name имеет требуемый тип структуры с использованием синтаксиса вложенной замены / конструкции struct.

0 голосов
/ 14 мая 2019

Вы должны восстановить эти структуры. Вы можете сделать что-то вроде этого:

select 
  struct(
    struct(
      user.name.first as firstName, 
      user.name.last as lastName
    ) as name,
    user.height as height
  ) as user,
  address,
  age
from mydataset.mytable

Как только вы сможете проверить результаты, вы можете либо создать новую таблицу на основе этих результатов, либо перезаписать существующую таблицу (что по сути является обходным решением для переименования столбцов, но с осторожностью). Надеюсь, это поможет.

...