AWS ATHENA:用户定义的变量

时间:2017-08-21 13:42:30

标签: amazon-web-services variables session-variables amazon-athena

我需要按组创建行号。在mysql中我使用"用户定义的变量"为了那个原因。 但是在雅典娜给了我一个错误:没有可行的选择在输入' @'

这是我的问题:

SELECT  @row_num := IF(@prev_value=concat_ws('',t.user_id,t.campaign_id,t.placement_id, t.creative_id),@row_num+1,1) AS RowNumber
     ,t.user_id 
     ,t.campaign_id
     ,t.placement_id
     ,t.creative_id
     , t.imp_clk_event_dt
     ,@prev_value := concat_ws('',t.user_id,t.campaign_id,t.placement_id, t.creative_id)
FROM e2c_conv t,
     (SELECT @row_num := 1) x,
     (SELECT @prev_value := '') y ORDER BY t.user_id,t.campaign_id,t.placement_id, t.creative_id, t.imp_clk_event_dt

有关如何解决此问题的任何建议都将受到高度赞赏。

4 个答案:

答案 0 :(得分:2)

with Mandeep as 
              ( 
               select 123 as m_1
                    , 234 as m_2
                ) -- Variable_table (Define Variables here)
select * 
from (
select 123 as a
      , 'abc' as v) as b 
left join Mandeep as m on 1 = 1 - mapping with rows
where a = m.m_1 -- using variables

答案 1 :(得分:1)

TLDR::AWS Athena不支持变量。

根据他们的documentation,AWS Athena基于Presto 0.172和一些limitations。 Presto当前存在一个开放的问题,正在讨论变量的添加。 PR-5918

答案 2 :(得分:0)

Athena 现在支持 Prepared Statements 进行参数化查询:

<块引用>

您可以使用 Athena 参数化查询功能准备语句,以便使用不同的查询参数重复执行同一查询。准备好的语句包含参数占位符,其值在执行时提供。准备好的语句使 Athena 查询能够直接获取参数并有助于防止 SQL 注入攻击。

答案 3 :(得分:-2)

查询:

with man as ( select ('123') as m_number  
         ) 
select *
from table_name as t 
left join man as m on 1=1
where t.number = m.m_number