Google bigquery 如何在BigQuery中重命名具有路径的列?

Google bigquery 如何在BigQuery中重命名具有路径的列?,google-bigquery,bigdata,avro,Google Bigquery,Bigdata,Avro,我正在寻找一种方法来重命名从avro模式嵌套的列。我尝试了google在他们的文档()上的选项,但每次我尝试别名或强制转换为嵌套结构时,它都不起作用 例如: SELECT * EXCEPT(user.name.first, user.name.last), user.name.first AS user.name.firstName, user.name.last AS user.name.lastName FROM mydataset.myt

我正在寻找一种方法来重命名从avro模式嵌套的列。我尝试了google在他们的文档()上的选项,但每次我尝试别名或强制转换为嵌套结构时,它都不起作用

例如:

   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文件拉入并使用数据流转换它们。我希望有一个更优雅的解决方案。谢谢。

您需要在每个级别重建结构。以下是一些示例数据的示例:

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
)

想法是用一个新的结构替换
用户
结构,其中
名称
使用嵌套替换/struct构造语法具有所需的结构类型。

您必须重新构建这些结构。您可以这样做:

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
一旦可以验证结果,就可以根据这些结果创建新表或重写现有表(这基本上是重命名列的一种解决方法,但要小心)。希望能有帮助