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

问题描述 投票:0回答:4

我做了一些研究,尚未发现这是否可行,但有谁知道是否可以为 AWS Athena 查询指定参数?

例如,我希望我的查询能够过滤

WHERE merchant_id = {merchant_id}
。是否可以指定这一点,以便我可以对我想要的每个商家使用相同的查询?如果是这样,我将在哪里将输入传递给 Athena 查询?

amazon-web-services amazon-athena
4个回答
7
投票

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

使用 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

6
投票

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

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

希望有帮助。


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


0
投票

这可以通过 AWS Wrangler(或 AWS SDK for Pandas,其新的官方名称)实现。你的查询将是,在Python中:

import awswrangler as wr

wr.athena.read_sql_query(
    "SELECT * FROM <your_table> WHERE merchant_id = :merchant_id;",
    database="<your_database>",
    params={
        "merchant_id": 2,
    },
)

注意:与经典 SQL 相反,命名参数以分号结尾。此外,字符串参数必须用单引号括起来:

SELECT * FROM <your_table> WHERE merchant_label = ':merchant_label;'
© www.soinside.com 2019 - 2024. All rights reserved.