Bigquery:STRUCT (*) 语法

Ilj*_*lja 1 struct except google-bigquery

如何STRUCT在不按名称指定的情况下自动应用于表中的所有字段?

不起作用的示例:

WITH data as (
 SELECT 'Alex' as name, 14 as age, 'something else 1' other_field
UNION ALL 
 SELECT 'Bert' as name, 14 as age, 'something else 2' other_field
UNION ALL 
 SELECT 'Chiara' as name, 13 as age, 'something else 3' other_field
)

SELECT AS STRUCT(SELECT * except (other_field) from data) as student_data
Run Code Online (Sandbox Code Playgroud)

返回: Error: Scalar subquery cannot have more than one column unless using SELECT AS STRUCT to build STRUCT values at [9:17]

然而,这有效:

WITH data as (
 SELECT 'Alex' as name, 14 as age, 'something else 1' other_field
UNION ALL 
 SELECT 'Bert' as name, 14 as age, 'something else 2' other_field
UNION ALL 
 SELECT 'Chiara' as name, 13 as age, 'something else 3' other_field
)

SELECT STRUCT(name,age) as student_data

from data
Run Code Online (Sandbox Code Playgroud)

问题是,一旦我有 100 列,其中只有 5 列不属于,写出来让我发疯。有没有更简单的方法来使用某些版本的Select * Except()

Mik*_*ant 7

下面是 BigQuery 标准 SQL

#standardSQL
WITH data AS (
  SELECT 'Alex' AS name, 14 AS age, 'something else 1' other_field UNION ALL 
  SELECT 'Bert' AS name, 14 AS age, 'something else 2' other_field UNION ALL 
  SELECT 'Chiara' AS name, 13 AS age, 'something else 3' other_field
)
SELECT (
  SELECT AS STRUCT * EXCEPT(other_field)
  FROM UNNEST([t])
  ) AS student_data
FROM data t   
Run Code Online (Sandbox Code Playgroud)

带输出

Row student_data.name   student_data.age     
1   Alex                14   
2   Bert                14   
3   Chiara              13   
Run Code Online (Sandbox Code Playgroud)