AWS Athena - 如何参数化 SQL 查询

Posted

技术标签:

【中文标题】AWS Athena - 如何参数化 SQL 查询【英文标题】:AWS Athena - How to Parameterize the SQL query 【发布时间】:2017-09-10 03:52:52 【问题描述】:

我想在 Select & Create table 语句中为查询提供运行时值。参数化 Athena SQL 查询的方法有哪些? 我尝试使用 Presto 的 PREPAREEXECUTE 语句,但它在 Athena 控制台中不起作用。我们需要像 Python 这样的外部脚本来调用它吗?

PREPARE my_select1
FROM SELECT * from NATION;

EXECUTE my_select1 USING 1;

【问题讨论】:

【参考方案1】:

SQL and HiveQL Reference 文档未将 PREPAREEXECUTE 列为可用命令。

您需要完全构建您的 SELECT 语句,然后才能将其发送到 Amazon Athena。

【讨论】:

谢谢。这意味着目前没有办法在 AWS Athena 中参数化 SQL 查询(DDL、select 语句)? 正确。 PreparedStatement 在 Athena JDBC 驱动程序中尚不可用。许多人提出了这个要求,在这里被跟踪:github.com/prestodb/presto/issues/1195【参考方案2】:

Athena 不支持 Parameterized 查询。您如何创建可以在查询正文中调用的用户定义函数。参考这里了解更多关于UDFs的信息。

【讨论】:

这个答案让我充满希望,但不,Athena 不支持表值 UDF(您可能会使用它来参数化查询) - 这里的链接文档是关于标量 udfs【参考方案3】:

您必须升级到 Athena 引擎版本 2,现在似乎从 2021-03-12 开始支持,但我找不到官方报告:

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

【讨论】:

刚刚宣布aws.amazon.com/about-aws/whats-new/2021/07/…

以上是关于AWS Athena - 如何参数化 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

AWS Athena JDBC查询超时

带有时间戳的 AWS Athena SQL 查询错误

AWS Athena (Presto) DISTINCT SQL 查询中的重复结果?

AWS athena sql 查询以获取不同的数据

从 Apache Zeppelin 对 AWS Athena 运行时,SQL 查询将永远运行

Spark SQL 查询以获取在 AWS S3 中存储为 CSV 的 Athena 表的最后更新时间戳