Google bigquery 如何在BigQuery中重命名具有路径的列?
我正在寻找一种方法来重命名从avro模式嵌套的列。我尝试了google在他们的文档()上的选项,但每次我尝试别名或强制转换为嵌套结构时,它都不起作用 例如: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
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
一旦可以验证结果,就可以根据这些结果创建新表或重写现有表(这基本上是重命名列的一种解决方法,但要小心)。希望能有帮助