首页 > 解决方案 > 当查询包含来自多个数据库的表的连接时,如何在 boto3 中设置 QueryExecutionContext?

问题描述

我在 python3 中使用 Boto3 包来执行 Athena 查询。从Boto3 的文档中,我了解到我可以指定查询执行上下文,即必须在其下执行查询的数据库名称。使用正确指定的查询执行上下文,我们可以db_name.table_name从查询中省略完全限定的表名(),而只使用表名。

所以查询SELECT * FROM db1.tab1可以转换SELECT * FROM tab1QueryExecutionContext : {'database':'db1'}

问题:我需要从 python 对 Athena 运行一个查询,看起来像这样

SELECT *
FROM   ((SELECT *
        FROM   db1.tab1 AS Temp1)
        INNER JOIN (SELECT *
                    FROM   db2.tab2 AS Temp2)
                ON temp1.id = temp2.id)  

正如我们所见,该查询连接了来自两个不同数据库的表。如果我想从这个查询中省略数据库名称,我该如何指定QueryExecutionContext

标签: python-3.xamazon-web-servicesboto3amazon-athena

解决方案


QueryExecutionContext只接受一个数据库作为参数。因此,如果要跨多个数据库运行查询,则必须将完全限定的表名与数据库一起传递。


推荐阅读