选择所有列,但用 Google BigQuery 中的表达式替换一些列?

Mos*_*sky 5 google-bigquery

类似于在 Google BigQuery 中选择除某些列之外的所有列?- 我们想SELECT *从表中删除,但不是排除某些列,而是想用一些表达式替换它们。例如,给定带有列的表:name, start_date, amount, end_date, comment,我们要从start和转换为。可以写endSTRINGDATE

SELECT 
  * EXCEPT(start_date, end_date),
  CAST(start_date AS DATE) start_date,
  CAST(end_date AS DATE) end_date
Run Code Online (Sandbox Code Playgroud)

但这会改变从开始和结束到结束的列的顺序。

Mik*_*ant 9

我会更进一步说 - 你可以链接EXCEPTREPLACE在同一个SELECT
文件中这并不明显,所以我认为它很有价值

例如

SELECT * EXCEPT(end_date) REPLACE(
  CAST(start_date AS DATE) AS start_date)
FROM T
Run Code Online (Sandbox Code Playgroud)

end_date这将从输出端删除,并将原始值替换start_date为转换为日期 start_date


Mos*_*sky 6

除了SELECT * EXCEPT,Google BigQuery 还支持SELECT * REPLACE标准 SQL 方言中的子句。可以在此处找到文档:https : //cloud.google.com/bigquery/sql-reference/query-syntax#select-list 您的示例将变为:

SELECT * REPLACE(
  CAST(start_date AS DATE) AS start_date,
  CAST(end_date AS DATE) AS end_date)
FROM T
Run Code Online (Sandbox Code Playgroud)