可以为AWS Athena查询指定参数吗?

Lou*_*uis 2 amazon-web-services amazon-athena

我进行了一些研究,但还没有找到是否可行的方法,但是有人知道您是否可以为AWS Athena查询指定参数吗?

例如,我希望查询能够过滤WHERE merchant_id = {merchant_id}。是否可以指定此名称,以便我可以对想要的每个商人使用相同的查询?如果是这样,我应该在哪里将输入传递给Athena查询?

小智 6

我很欣赏这个线程有点旧,但它是我在尝试做同样的事情时发现的第一个结果之一。我不确定是否会出现严重的性能问题,我确信可以改进,但理论如下:

使用 Athena 接受的 WITH 函数,创建几个查询来保存您的变量,将它们连接到您的原始查询/表,然后在过滤器中使用它们。

WITH startdate AS (SELECT DATE('2019-12-01') AS v_startdate), enddate AS (SELECT DATE('2019-12-31') AS v_enddate)
SELECT *SQL HERE* FROM table_name
    LEFT JOIN startdate ON 1=1
    LEFT JOIN enddate ON 1=1
    WHERE table_name.start_date >= v_startdate
            AND table_name.end_date <= v_enddate
Run Code Online (Sandbox Code Playgroud)


小智 6

接受的答案不再正确。Athena 的新 v2 查询引擎允许“准备好的语句”。

prepare my_statement from select * from some_table where variable_to_change = ?

然后,您可以通过传入一个实时值来执行准备好的语句,例如:

execute my_statement using 3

这将执行上面的select语句variable_to_change=3

https://docs.aws.amazon.com/athena/latest/ug/querying-with-prepared-statements.html


Kan*_*yan 5

人们无法使用AWS Athena设置变量。由于雅典娜在一个会话中只能运行一个查询。

如果您尝试运行多个查询,则会收到以下错误。

在此处输入图片说明

希望能帮助到你。

  • 在常规sql中,将参数设置为单独的sql语句,并且将为该事务存储这些数据。这里不一样。您可以通过传递参数或以编程方式通过命令行来运行,但是仍然会预先形成一个查询。因此,到目前为止,至少不可能将参数传递给Athena Queries。 (2认同)