
querying-data-lake
热门执行并管理跨默认和联合目录(Glue、S3 Tables、Redshift)的 Athena SQL 查询。触发短语包括:查询数据、运行 SQL、athena 查询、分析表、SQL 查询、工作组状态、分析表结构、查询 Redshift 目录、查询 S3 Tables。请勿用于查找特定数据资产(使用 finding-data-lake-assets)、完整目录审计(使用 exploring-data-catalog)或导入数据(使用 ingesting-into-data-lake)。
执行并管理跨默认和联合目录(Glue、S3 Tables、Redshift)的 Athena SQL 查询。触发短语包括:查询数据、运行 SQL、athena 查询、分析表、SQL 查询、工作组状态、分析表结构、查询 Redshift 目录、查询 S3 Tables。请勿用于查找特定数据资产(使用 finding-data-lake-assets)、完整目录审计(使用 exploring-data-catalog)或导入数据(使用 ingesting-into-data-lake)。
查询数据湖
在 Amazon Athena 上跨默认和联合目录(Glue、S3 Tables、Redshift)执行 SQL 查询,支持工作组选择、语句分类和错误恢复。
概述
执行并管理跨默认和联合目录的 Athena SQL 查询。选择工作组,解析目标资产(将模糊引用委托给 finding-data-lake-assets),对语句进行安全分类,并报告成本和扫描数据量。使用 AWS MCP 服务器进行沙箱执行和审计日志记录;当 MCP 服务器不可用时,可直接使用相同的 AWS CLI 命令。
参数获取约束:
- 您必须接受一个可选参数:SQL 文本、命名查询名称、工作组名称、目录名称或
profile TABLE_NAME - 您必须将参数作为直接文本或指向包含 SQL 的文件的指针接受
- 如果尚未设置目标 AWS 区域,您必须询问用户
- 在执行任何非简单查询之前,您必须确认输出 S3 位置
- 您必须尊重用户在任何步骤中止的决定
常见任务
1. 验证依赖项
在运行查询前检查所需工具和 AWS 访问权限。
约束:
- 您必须验证 AWS MCP 服务器工具是否可用(
aws___call_aws),并在可用时通过它们运行查询;仅在 MCP 服务器不可用时回退到 AWS CLI - 您不得回退到 shell 或 Bash 执行查询——结果必须通过 MCP 工具或
aws athenaCLI 捕获,以便跟踪输出位置和成本 - 您必须使用
aws sts get-caller-identity确认凭证,并告知用户任何缺失的工具
2. 解析工作组
检查调用者身份,列出工作组,自动选择最佳工作组(参见 workgroup-selection.md)。
约束:
- 您必须在提交任何查询之前选择一个工作组(防止输出位置错误)
- 您必须向用户展示所选工作组及其输出位置
- 在失败时,未经用户确认,您不得自动升级到不同的工作组
3. 解析目标资产
如果用户通过名称、业务概念(“我们的季度报告”、“销售数据”)、S3 路径或目录(未指定表)引用表,则委托给 finding-data-lake-assets 返回具体的 database.table(以及非默认目录)。
约束:
- 您不得尝试使用
athena list-data-catalogs或迭代get-tables来解析模糊资产引用——这些会遗漏联合目录并浪费令牌 - 仅当用户提供完全限定引用(精确的
database.table)或希望按原样执行的原始 SQL 时,您应跳过此步骤 - 您必须在构建查询前明确说明已解析的资产:“在 [catalog] 中找到 [table]。将使用此表进行查询。”
- 除非用户提到“联合”、“Redshift”、“S3 Tables”或
finding-data-lake-assets返回了不同的目录,否则您应默认使用默认的 Glue 目录
4. 发现模式
对于分析查询,您应在构建最终查询前对目标表进行概要分析。您必须显示示例行(SELECT ... LIMIT 5)作为概要分析的一部分。
5. 构建查询
表寻址取决于目录类型:
- 默认 Glue 目录:
database.table(对于单目录查询省略目录前缀)。在跨目录查询中,使用"awsdatacatalog".database.table限定默认目录表。 - 已注册数据源:
datasource.database.table - 未注册 Glue 目录:
"catalog/subcatalog".database.table
6. 分类并执行
在执行前对 SQL 语句进行分类:
| 语句 | 行为 |
|---|---|
SELECT, SHOW, DESCRIBE, EXPLAIN |
安全——执行 |
INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, TRUNCATE, MERGE |
破坏性——警告用户并要求明确确认 |
| 不确定 | 视为破坏性;确认 |
示例工具调用(通过 AWS MCP 服务器):
aws___call_aws(command="aws athena start-query-execution --work-group <WORKGROUP_NAME> --query-string '<sql>' --query-execution-context Database=<db>")
对于联合或 S3 Tables 目录,还需在执行上下文中设置 Catalog=<CATALOG_PATH>(例如 Catalog=s3tablescatalog/<BUCKET_NAME>)。
约束:
- 当目标是 Redshift 联合时,您必须在执行前警告用户(“无分区修剪——每个查询扫描整个表”)
- 在执行跨目录连接前,您必须警告用户(“跨目录连接会产生网络开销,可能较慢”)
- 在执行前,您必须确认输出 S3 位置
- 在执行前,您必须说明正在调用的工具
- 您必须尊重用户中止的决定
7. 展示与恢复
展示结果,包括成本、扫描数据量、持续时间以及可操作的见解。失败时,列出可用的工作组,让用户选择重试哪个。
参数路由
按以下顺序解析;在第一个匹配处停止:
- 包含 SQL 关键字(
SELECT,SHOW,DESCRIBE,INSERT等)——SQL 文本,直接执行 profile TABLE_NAME——运行全面的表概要分析(参见 query-patterns.md)- 匹配已知的命名查询——查找并执行
- 匹配已知的工作组——显示工作组状态和最近的查询
- 匹配已知的目录——委托给
exploring-data-catalog枚举数据库和表 - 无参数——显示最近的查询活动和可用的表
原则
- 始终在执行前选择工作组(防止输出位置错误)
- 在运行分析查询前对不熟悉的表进行概要分析
- 在结果旁展示成本,帮助用户建立成本意识
- 对于大表的探索性查询,建议使用
LIMIT - 从不询问答案显而易见的问题,但始终确认安全相关操作(工作组切换、输出位置更改、非 SELECT 语句)
故障排除
| 错误 | 原因 | 修复 |
|---|---|---|
| Redshift 标识符大小写混合错误 | Redshift 联合名称仅支持小写 | 将标识符转为小写 |
CatalogId 验证失败 |
传递了 ARN 而非目录名称 | 传递目录名称,而非 ARN |
跨目录 information_schema 返回空 |
缺少目录限定符 | 使用目录限定路径:"catalog".information_schema.tables |
| 查询因输出位置错误失败 | 工作组未配置输出位置 | 选择具有输出位置的其他工作组,或配置一个 |
| 破坏性语句未经确认执行 | 跳过语句分类 | 始终对 INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/TRUNCATE/MERGE 进行分类并与用户确认 |





