Google bigquery 使用引用其他表的UDF的BigQuery中的相关子查询错误

Google bigquery 使用引用其他表的UDF的BigQuery中的相关子查询错误,google-bigquery,Google Bigquery,截至2020年6月2日,BigQuery支持在UDF中引用表和视图。然而,显而易见的用例(对我来说)恢复了一个错误:“引用其他表的相关子查询不受支持,除非它们可以去相关,例如通过将它们转换为有效的联接。” 我的问题是这样的: SELECT airport, udf_dataset.getcity(airport) AS city FROM my_table SELECT city_code FROM my_cities_table WHERE airport_code = airport_in

截至2020年6月2日,BigQuery支持在UDF中引用表和视图。然而,显而易见的用例(对我来说)恢复了一个错误:“引用其他表的相关子查询不受支持,除非它们可以去相关,例如通过将它们转换为有效的联接。”

我的问题是这样的:

SELECT airport, udf_dataset.getcity(airport) AS city
FROM my_table
SELECT city_code FROM my_cities_table
WHERE airport_code = airport_input
UDF getcity看起来是这样的:

SELECT airport, udf_dataset.getcity(airport) AS city
FROM my_table
SELECT city_code FROM my_cities_table
WHERE airport_code = airport_input
my_cities_表中有一个1对1的参考,说明每个机场的城市是什么


我的猜测是,执行连接可以有效地获取每个机场的城市值,而UDF查询每个机场值,从而创建相关性。我猜对了吗?如果是这样的话,那么在UDF中支持表引用就不那么有价值了。

经过一些迭代之后,我从谷歌那里得到了一个答案,尽管它没有解决这个问题,但它确实澄清了发生了什么

决不能使用UDF代替联接操作,即使UDF包含在联接操作本身上。这样可以创建相关查询和直接连接,效率更高。我试图在一个经常使用的转换中做到这一点,这样代码就可以缩短

关于完全扩展后每个查询最多1000个唯一的UDF plus表引用,当FROM子句中涉及通配符时,这指的是结果表,但在我的初始示例中,计数很简单


我希望这能帮助像我一样尝试这样做的人。

我刚刚尝试过,它对我的临时UDF和永久UDF都非常有效。可能是查询中其他地方的问题。提供更多细节,以便我们能进一步帮助您。就这么简单,我并不是在简化查询。我的_cities_表大约有10k行,而我的_表大约有200万行,可能它们的大小与此有关,特别是因为我尝试使用一个UDF引用一个包含40条记录的表,并且它通过了。即使没有错误,你看到相关的查询了吗?你介意分享一些数据吗?所以我可以进一步调查。如果没有与您相同/相似的数据,我无法再现您的错误。我确实找到了支持尺寸假设的其他东西。在我之前的评论中,我提到尝试使用一个引用了40条记录的表的UDF是通过的。该UDF在WHERE子句中过滤一个分区,该分区将查找表缩小到40条记录。如果删除分区过滤器并使用LIMIT 1语句,则查找表的大小大约为35k,并且会出现相关错误。在提交的示例中,my_table有40多列,my_cities_table有10列,但我只选择显示的字段,因此我认为这没有帮助。我有另一个线索:Google的文档在限制部分中说“每个查询的唯一UDF plus表引用的最大数量-1000。完全扩展后,每个UDF最多可以引用1000个组合的唯一表和UDF。“这可能是相关的,但不知道如何测试它。我如何知道我的查询有多少个唯一的UDF plus表引用?完全扩展到底是什么?