我在从Postgre到Bigquery查询的转换中遇到了问题。
请告诉我,这个查询如何在bigquery上工作?我需要再选择一个表并带上最后一个寄存器
(select g.fase__c
from operacoes.salesforce_gest_o_do_canal_c_full g
where g.n_de_indentifica_o_do_parceiro__c = a.n_de_indentifica_o_do_parceiro__c
order by g.data_do_credenciamento__c limit 1) as fase_jornada
from operacoes.salesforce_account_full
如果我尝试执行,Bigquery会返回一个错误:我应该应用联接,如果我应用联接,order by将不起作用
谢谢!
发布于 2020-02-19 16:13:21
相关的子查询(它是引用外部查询的表的子查询)如果“按原样”执行,将需要为外部查询的结果的每一行计算子查询,这将不是很有效。
为了优化这一点,BigQuery首先将查询转换(解除相关)为在功能上与相关查询等效的查询,但查询和子查询之间没有任何相关性。不同的用例需要不同的解相关过程,它们可能非常复杂,难以实现和适当测试。
BigQuery正在实现去相关策略,以使各种correlated subqueries成为可能,但是LIMIT
子句的去相关还没有实现。
一种解决方法是使用ARRAY_AGG而不是子查询。在您的例子中,我相信下面的查询可以完成这项工作:
SELECT
ARRAY_AGG(g.fase__c
ORDER BY g.data_do_credenciamento__c
LIMIT 1) AS fase_jornada
FROM
operacoes.salesforce_account_full a
JOIN
operacoes.salesforce_gest_o_do_canal_c_full g
ON
g.n_de_indentifica_o_do_parceiro__c = a.n_de_indentifica_o_do_parceiro__c
GROUP BY
g.n_de_indentifica_o_do_parceiro__c
考虑到我已经猜到了一些细节,因为没有提供子查询的整个上下文,所以您可能需要对其进行一些更改。
如果有什么不清楚的地方,请告诉我!
https://stackoverflow.com/questions/60283779
复制相似问题