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
查看更多
我有超过 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
查看更多