【问题标题】:AWS ATHENA: user-defined variablesAWS ATHENA:用户定义的变量
【发布时间】:2021-07-27 01:07:15
【问题描述】:

我需要按组创建行号。在 mysql 中,我为此使用“用户定义的变量”。 但是在 Athena 中给了我一个错误:在输入 '@' 处没有可行的选择

这是我的查询:

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

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

【问题讨论】:

  • athena 不像 HIVE 那样支持concat_ws
  • Presto 现在更名为 Trino

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


【解决方案1】:

TLDR: AWS Athena 不支持变量。

根据他们的documentation,AWS Athena 基于Presto 0.172 和一些limitations。 Presto 目前有一个未解决的问题,正在讨论添加变量。 PR-5918

【讨论】:

  • 这仍然是真的吗(在 2021 年 4 月 28 日发表评论)?
  • 更新,截至今天,Athena 仍然不支持 user_defined 变量。我喜欢开发人员创建自己的重复语言,这样他们就可以拥有自己的语法和所需的命令。 :\
【解决方案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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      查询:

      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
      

      【讨论】:

      • Presto 现在更名为 Trino
      猜你喜欢
      • 2021-03-25
      • 2021-06-07
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2012-12-25
      相关资源
      最近更新 更多