querying-data-lake

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)。

2147Star
202Fork
更新于 2026/7/27
SKILL.md
readonly只读
name
querying-data-lake
description

执行并管理跨默认和联合目录(Glue、S3 Tables、Redshift)的 Athena SQL 查询。触发短语包括:查询数据、运行 SQL、athena 查询、分析表、SQL 查询、工作组状态、分析表结构、查询 Redshift 目录、查询 S3 Tables。请勿用于查找特定数据资产(使用 finding-data-lake-assets)、完整目录审计(使用 exploring-data-catalog)或导入数据(使用 ingesting-into-data-lake)。

version
1

查询数据湖

在 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 athena CLI 捕获,以便跟踪输出位置和成本
  • 您必须使用 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. 展示与恢复

展示结果,包括成本、扫描数据量、持续时间以及可操作的见解。失败时,列出可用的工作组,让用户选择重试哪个。

参数路由

按以下顺序解析;在第一个匹配处停止:

  1. 包含 SQL 关键字(SELECT, SHOW, DESCRIBE, INSERT 等)——SQL 文本,直接执行
  2. profile TABLE_NAME——运行全面的表概要分析(参见 query-patterns.md
  3. 匹配已知的命名查询——查找并执行
  4. 匹配已知的工作组——显示工作组状态和最近的查询
  5. 匹配已知的目录——委托给 exploring-data-catalog 枚举数据库和表
  6. 无参数——显示最近的查询活动和可用的表

原则

  • 始终在执行前选择工作组(防止输出位置错误)
  • 在运行分析查询前对不熟悉的表进行概要分析
  • 在结果旁展示成本,帮助用户建立成本意识
  • 对于大表的探索性查询,建议使用 LIMIT
  • 从不询问答案显而易见的问题,但始终确认安全相关操作(工作组切换、输出位置更改、非 SELECT 语句)

故障排除

错误 原因 修复
Redshift 标识符大小写混合错误 Redshift 联合名称仅支持小写 将标识符转为小写
CatalogId 验证失败 传递了 ARN 而非目录名称 传递目录名称,而非 ARN
跨目录 information_schema 返回空 缺少目录限定符 使用目录限定路径:"catalog".information_schema.tables
查询因输出位置错误失败 工作组未配置输出位置 选择具有输出位置的其他工作组,或配置一个
破坏性语句未经确认执行 跳过语句分类 始终对 INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/TRUNCATE/MERGE 进行分类并与用户确认

其他资源