Google bigquery 避免BigQuery中的相关子查询错误

Google bigquery 避免BigQuery中的相关子查询错误,google-bigquery,Google Bigquery,我有一个简单的查询来获取创建交易时使用的货币汇率: SELECT t.orderid, t.date, (SELECT rate FROM sources.currency_rates r WHERE currencyid=1 AND r.date>=t.date ORDER BY date LIMIT 1) rate FROM sources.transactions t 这会触发一个错误: Error: Correlated subqueries that reference

我有一个简单的查询来获取创建交易时使用的货币汇率:

SELECT t.orderid, t.date, 
 (SELECT rate FROM sources.currency_rates r WHERE currencyid=1 AND 
r.date>=t.date  ORDER BY date LIMIT 1) rate
FROM sources.transactions t
这会触发一个错误:

Error: Correlated subqueries that reference other tables are not 
supported unless they can be de-correlated, such as by transforming 
them into an efficient JOIN.' 

我尝试过几种类型的联接和命名子查询,但似乎都不起作用。实现这一目标的最佳方式是什么?这似乎是一个非常常见的场景,在BQ的标准Sql中应该非常容易实现。

我注意到其他相关子查询也有类似的行为。它们很有用,但不能总是通过BigQuery自动建模为联接

类似的情况也适用:

#standardSQL
SELECT name, (
  SELECT AVG(temp) 
  FROM `bigquery-public-data.noaa_gsod.gsod2017` b
  WHERE a.usaf=b.stn  
) temp
FROM `bigquery-public-data.noaa_gsod.stations` a
LIMIT 10
不起作用:

#standardSQL
SELECT name, (
  SELECT temp 
  FROM `bigquery-public-data.noaa_gsod.gsod2017` b
  WHERE a.usaf=b.stn  
  ORDER BY da 
  LIMIT 1
) temp
FROM `bigquery-public-data.noaa_gsod.stations` a
LIMIT 10
修正:


给我一个公共数据集,我将编写一个与您的数据一起使用的查询

标准SQL 选择 t、 orderid作为orderid, t、 日期作为日期, 按r.date LIMIT 1[SAFE_OFFSET0]作为速率的数组聚合速率顺序 源于“sources.transactions”作为t 加入'sources.currency_rates'作为r 关于currencyid=1 和r.date>=t.date 按医嘱ID、日期分组
rate在这里会是一个数组吗?谢谢你的建议,但这会导致资源限制错误:错误:查询超出了第1层的资源限制。要求第5级或更高级别。-要继续试验:成功了!只需要创建更小的临时表并使用它们,谢谢米哈伊尔!“1”是什么意思-/它表示按第一列分组,即按名称分组
#standardSQL
SELECT name, ARRAY_AGG(temp ORDER BY da LIMIT 1) temp
FROM `bigquery-public-data.noaa_gsod.stations` a
JOIN `bigquery-public-data.noaa_gsod.gsod2017` b
ON a.usaf=b.stn  
GROUP BY 1
LIMIT 10