Presto和AWS Athena中的乘法聚合运算符

时间:2018-04-10 22:07:10

标签: presto amazon-athena

我最近一直在与AWS Athena合作,我需要将特定列的值乘以(所有这些都是正数)。看作SUM(column1)是Presto中一个随时可用的聚合函数(这是Athena查询引擎的基础),我希望我能找到类似的东西而不是返回产品。

不幸的是,正如this问题所述,即使SQL也没有这样的东西。这意味着......惊喜,Presto也没有!所以,知道没有内置解决方案,我们怎样才能建立乘法运算符?

1 个答案:

答案 0 :(得分:0)

原来这是一个超级快速简单的黑客!回到高中数学课,给出一些{a 0 1 2 ,..., n }所有的a i > 0(这是一个很大的交易!我们需要所有输入都是正数,否则自然对数是未定义的!),我们知道

exp(ln(a 0 )+ ln(a 1 )+ ... + ln(a n ))= exp (ln(a 0 ))exp(ln(a 1 ))... exp(ln(a n ))= a < sub> 0 a 1 a 2 ... a n

其中ln(x)是x的自然对数,exp(x)是将euler的数字提升到x次幂。但这正是我们想要的!更好的是,presto内置了函数exp(),sum()和ln(),所以我们所要做的就是写

SELECT exp(sum(ln(column1))) AS product FROM yourtable;

瞧!