Google bigquery 有没有办法修改和重命名BigQuery中记录中的列,然后使该列保持与以前相同的名称和位置?

Google bigquery 有没有办法修改和重命名BigQuery中记录中的列,然后使该列保持与以前相同的名称和位置?,google-bigquery,Google Bigquery,我在BigQuery中有一个记录,结构如下: Parent |___Child_1 |___Child_2 |___Child_3 |___... Child_1的类型为TIMESTAMP,因此我想将其从TIMESTAMP字符串转换为INT64,表示自Unix纪元以来的毫秒数。这是通过函数完成的 我在为嵌套字段执行此操作时遇到问题。以下是我的尝试: select *, unix_millis(parent.child_1) as parent.child_1 from `dataset.tab

我在BigQuery中有一个
记录
,结构如下:

Parent
|___Child_1
|___Child_2
|___Child_3
|___...
Child_1
的类型为
TIMESTAMP
,因此我想将其从
TIMESTAMP
字符串转换为
INT64
,表示自Unix纪元以来的毫秒数。这是通过函数完成的

我在为嵌套字段执行此操作时遇到问题。以下是我的尝试:

select *, unix_millis(parent.child_1) as parent.child_1 from `dataset.table`
当我尝试上述操作时,BigQuery中的查询编辑器在“as parent.child_1”中的“child_1”下加了下划线,并给出了错误
语法错误:输入预期结束,但得到“

我之所以希望这样做是因为,对于非嵌套字段,可以使用
unix\u millis
,然后使用
AS
操作符重命名列


那么,我如何执行
unix\u millis
函数,然后确保生成的列在
记录中的名称和位置与以前相同呢?

下面是针对BigQuery标准SQL的

#standardSQL
SELECT * 
  REPLACE((
    SELECT AS STRUCT * REPLACE(UNIX_MILLIS(child1) AS child1)
    FROM UNNEST([parent])
  ) AS parent)
FROM `project.dataset.table`   
您可以使用一些简化的虚拟数据来测试、播放上述内容,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, STRUCT<child1 TIMESTAMP, child2 STRING, child3 INT64>(CURRENT_TIMESTAMP(), 'test1', 123) parent UNION ALL
  SELECT 2, STRUCT<child1 TIMESTAMP, child2 STRING, child3 INT64>(CURRENT_TIMESTAMP(), 'test2', 456)
)
SELECT * 
  REPLACE((
    SELECT AS STRUCT * REPLACE(UNIX_MILLIS(child1) AS child1)
    FROM UNNEST([parent])
  ) AS parent)
FROM `project.dataset.table`
而原始数据

Row id  parent.child1                   parent.child2   parent.child3    
1   1   2020-09-03 17:29:09.512794 UTC  test1           123  
2   2   2020-09-03 17:29:09.512794 UTC  test2           456  

谢谢你的帮助@Mikhail!只是一个后续问题,我需要如何更改语法才能更改
记录中的双嵌套或n嵌套字段?即,如果
child_1
有一个
child_1_1…
,很高兴它对您有用。至于后续问题,如果没有适当的细节,在评论中很难回答。请发布新问题,提供详细信息、数据示例和预期结果,以便我(或其他人)能够提供帮助:o)当然,这是有意义的。再次感谢!很抱歉,发布这个问题花了一些时间,我想试着自己解决它。。。我没有成功,但希望你能教我如何完成!问题是肯定的。但是我认为你应该用一些更具体的例子来编辑这个新问题,比如说2到3级嵌套。正如现在的情况——有N个级别——获得好答案的机会较少——但这取决于你:o)
Row id  parent.child1                   parent.child2   parent.child3    
1   1   2020-09-03 17:29:09.512794 UTC  test1           123  
2   2   2020-09-03 17:29:09.512794 UTC  test2           456