google-bigquery - 在 Google BigQuery 中连接 2 个大小相等的表

标签 google-bigquery

我正在尝试连接 2 个表,每个表有 57,191 行。 BigQ 正在寻找内部/左侧较大的 table 和右侧较小的 table 。当我使用左侧的表 B 运行它时,出现错误“大表 A 必须首先出现”。当我切换查询并将表 A 放入 From 子句时,出现错误“大表 B 必须首先出现”。因此,当我按照它的指示进行操作时,它不会修复它,而是建议我的第一次(错误的)尝试,除非我以某种方式搞砸了它。

有点讽刺的是,如果两张 table 大小相同,它会根据一张不小于另一张的情况来决定一张更大。我正在尝试找到一个解决方案,其中不包括我向其中一个表添加无意义的行,然后在连接工作后尝试将其删除,(因为 BigQ 现在没有加载我的单行 csv 文件,我确信它是由于我的错误。)

Google SQL 语法连接规则似乎是

“加入类型 Bigquery 支持 INNER(默认)和 LEFT OUTER 连接。 表_2 这是联接中的第二个表,该表必须很小,并且将联接到 FROM 子句中出现的表。请注意,这可以是表名或另一个 SELECT 子句,在这种情况下,您必须提供别名。 join_condition_1, ..., join_condition_N, ... 连接条件集,必须是相等条件的集合,必须满足所有这些条件才能将行包含在结果中。 (也就是说,我们只支持将这些条件用AND连接起来。)”

我实际运行的 SQL 是

SELECT lt.activeprosperloans,[fieldsredacted], ...
FROM prosperloans1.listings2 AS lt
JOIN prosperloans1.zjoinedperfloans as ln
ON lt.key = listingkey;

实际错误如下: 错误:大型表 prosperloans1.zjoinedperfloans 必须显示为连接查询中最左边的表

谢谢 肖恩

最佳答案

请注意,现在您可以使用 JOIN EACH,有效地解决问题。

您的查询将变为:

SELECT lt.activeprosperloans,[fieldsredacted], ...
FROM prosperloans1.listings2 AS lt
JOIN prosperloans1.zjoinedperfloans as ln
ON lt.key = listingkey;

来自文档:

如果可能,请使用不带 EACH 修饰符的 JOIN 以获得最佳性能。当表大小对于 JOIN 来说太大时,请使用 JOIN EACH。

https://developers.google.com/bigquery/docs/query-reference#joins

关于google-bigquery - 在 Google BigQuery 中连接 2 个大小相等的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731412/

相关文章:

google-cloud-platform - 将大型 csv 直接加载到 Bigquery 中,无需云存储?

sql - BigQuery : join all columns of a row nearest to the time of current row from a different table

javascript - BigQuery 一个数据字段中有多种数据类型

java - 为集成测试模拟 Bigquery

google-bigquery - 如何使用 BigQuery 查找最常见的二元组?

google-bigquery - 在 Big Query 和 snowflake 之间启用同步

python - 有没有办法从 BigQuery Python 客户端库执行非阻塞 load_job?

google-bigquery - BigQUEry 架构中的 REPEATED + REQUIRED 字段

google-app-engine - 谷歌应用引擎 : Using Big Query on datastore?

SQL 中的 IP 范围