BigQuery 中带有通配符的 UNION 表

UNION tables with wildcard in BigQuery

我有超过 40 个 table 想要使用标准 SQL 追加到 BigQuery 中。我已经将它们格式化为具有完全相同的架构。当我尝试在 FROM 子句中 table 名称末尾使用“*”通配符时,出现以下错误:

语法错误:预期输入结束但在 [95:48]

处得到“*”

我最终在所有 table 上手动执行 UNION DISTINCT。这是最好的方法吗?任何帮助,将不胜感激。谢谢!

CREATE TABLE capstone-320521.Trips.Divvy_Trips_All AS 
SELECT * FROM capstone-320521.Trips.Divvy_Trips_*;



--JOIN all 2020-21 trips data
CREATE TABLE capstone-320521.Trips.Divvy_Trips_Raw_2020_2021 AS 
SELECT * FROM capstone-320521.Trips.Divvy_Trips_2020_04  
UNION DISTINCT 
SELECT * FROM capstone-320521.Trips.Divvy_Trips_2020_05  
UNION DISTINCT 
SELECT * FROM capstone-320521.Trips.Divvy_Trips_2020_06 
UNION DISTINCT 

我不知道有任何这样的 UNION DISTINCT 语法。如果您打算合并 3 个表并删除过程中的任何重复记录,那么只需使用 UNION 就足够了:

CREATE TABLE capstone-320521.Trips.Divvy_Trips_Raw_2020_2021 AS
SELECT * FROM capstone-320521.Trips.Divvy_Trips_2020_04
UNION
SELECT * FROM capstone-320521.Trips.Divvy_Trips_2020_05
UNION
SELECT * FROM capstone-320521.Trips.Divvy_Trips_2020_06;

请注意,通常将 SELECT * 与联合查询一起使用是不好的做法。原因与两个(或更多)表之间的联合通常仅在所涉及的两个查询具有数量 类型的列时才有效。使用 SELECT * 混淆了实际选择的列,因此最好始终明确列出列。

Syntax error: Expected end of input but got "*"

我认为问题在于缺少 table 引用周围的勾号。试试下面

CREATE TABLE `capstone-320521.Trips.Divvy_Trips_All` AS 
SELECT * FROM `capstone-320521.Trips.Divvy_Trips_*`         

注意:通配符 table 名称包含特殊字符 (*),这意味着您必须将通配符 table 名称括在反引号 (`) 字符中。在 Enclose table names with wildcards in backticks

查看更多