PluginBench
Skill
Official
Pass
Audit score 90

querying-data-lake

aws/agent-toolkit-for-aws

Execute SQL queries across Athena default and federated catalogs (Glue, S3 Tables, Redshift) with workgroup management and cost tracking.

What is querying-data-lake?

Run and manage Athena SQL queries across multiple data catalogs with automatic workgroup selection, statement classification, and error recovery. Use this to query data lakes, profile tables, and analyze federated data sources when you have a specific SQL query or table in mind.

  • Execute SELECT, INSERT, UPDATE, DELETE, and other SQL statements on Athena across Glue, S3 Tables, and Redshift catalogs
  • Automatically select and manage Athena workgroups with output location confirmation
  • Classify statements for safety (read-only vs. destructive) and require confirmation for data-modifying queries
  • Profile tables with schema discovery and sample rows before running analytical queries
  • Report query cost, data scanned, and execution duration
  • Handle federated catalog queries with warnings for performance implications

How to install querying-data-lake

npx skills add https://github.com/aws/agent-toolkit-for-aws --skill querying-data-lake
Prerequisites
  • AWS credentials configured with access to Athena and target catalogs
  • AWS region specified or available in environment
  • Athena workgroup with configured output S3 location
Claude Code
Cursor
Windsurf
Cline

How to use querying-data-lake

  1. 1.Provide a SQL query, table name, workgroup name, or 'profile TABLE_NAME' as input
  2. 2.Confirm your AWS region if not already set
  3. 3.The skill will select an appropriate workgroup and show its output location
  4. 4.For fuzzy table references, the skill delegates to finding-data-lake-assets to resolve the exact database.table
  5. 5.Review the resolved target asset and schema (via profiling if needed)
  6. 6.For destructive statements (INSERT, UPDATE, DELETE, DROP, ALTER, CREATE), confirm execution
  7. 7.Results display query cost, data scanned, duration, and any actionable insights

Use cases

Good for
  • Run ad-hoc SQL queries to analyze data in your Glue data lake
  • Profile an unfamiliar table to understand its schema and sample data before building complex queries
  • Execute cross-catalog joins across Glue, Redshift, and S3 Tables with appropriate warnings
  • Check workgroup status and view recent query history
  • Query Redshift-federated tables with awareness of full-table scan costs
Who it's for
  • Data analysts querying Athena data lakes
  • Engineers building data pipelines who need to validate table contents
  • AWS users managing federated data sources across multiple catalogs
  • Teams tracking query costs and data scanned

querying-data-lake FAQ

When should I use this vs. finding-data-lake-assets?

Use this skill when you have a specific SQL query or table name ready to execute. Use finding-data-lake-assets when you need to search for or discover data assets by business concept or fuzzy reference.

What happens if I don't specify a workgroup?

The skill automatically selects the best available workgroup based on your caller identity and presents it to you for confirmation before executing any query.

Can I query across multiple catalogs in one query?

Yes, you can write cross-catalog joins, but the skill will warn you about potential network overhead and slowness. Use fully-qualified table names like `"awsdatacatalog".database.table` for default Glue and `datasource.database.table` for federated sources.

What's the difference between querying Glue vs. Redshift-federated tables?

Glue tables use partition pruning for efficiency. Redshift-federated queries scan the full table every time, so the skill warns you about cost before executing.

How do I profile a table before querying it?

Pass 'profile TABLE_NAME' as input. The skill runs schema discovery and shows sample rows (LIMIT 5) to help you understand the data structure.

Full instructions (SKILL.md)

Source of truth, from aws/agent-toolkit-for-aws.


name: querying-data-lake description: >- Execute and manage Athena SQL queries across default and federated catalogs (Glue, S3 Tables, Redshift). Triggers on phrases like: query data, run SQL, athena query, analyze table, SQL query, workgroup status, profile table, query Redshift catalog, query S3 Tables. Do NOT use for finding specific data assets (use finding-data-lake-assets), full catalog audits (use exploring-data-catalog), importing data (use ingesting-into-data-lake). metadata: version: "1" argument-hint: "'[SQL-query|query-name|workgroup-name|catalog-name|''profile TABLE_NAME'']'"

Query Data Lake

Execute SQL queries on Amazon Athena across default and federated catalogs (Glue, S3 Tables, Redshift) with workgroup selection, statement classification, and error recovery.

Overview

Executes and manages Athena SQL queries across default and federated catalogs. Selects a workgroup, resolves target assets (delegating fuzzy references to finding-data-lake-assets), classifies statements for safety, and reports cost and data scanned. Use the AWS MCP server for sandboxed execution and audit logging; the same AWS CLI commands work directly when the MCP server is not available.

Constraints for parameter acquisition:

  • You MUST accept a single optional argument: SQL text, a named-query name, a workgroup name, a catalog name, or profile TABLE_NAME
  • You MUST accept the argument as direct text or a pointer to a file containing SQL
  • You MUST ask the user for the target AWS region if not already set
  • You MUST confirm the output S3 location before executing any non-trivial query
  • You MUST respect the user's decision to abort at any step

Common Tasks

1. Verify Dependencies

Check for required tools and AWS access before running queries.

Constraints:

  • You MUST verify AWS MCP server tools are available (aws___call_aws) and run queries through them when present; fall back to AWS CLI only if the MCP server is unavailable
  • You MUST NOT fall back to shell or Bash for query execution — results must be captured via the MCP tool or aws athena CLI so output location and cost are tracked
  • You MUST confirm credentials with aws sts get-caller-identity and inform the user about any missing tools

2. Resolve Workgroup

Check caller identity, list workgroups, auto-select the best one (see workgroup-selection.md).

Constraints:

  • You MUST select a workgroup before submitting any query (prevents output-location errors)
  • You MUST present the selected workgroup and its output location to the user
  • You MUST NOT auto-escalate to a different workgroup on failure without user confirmation

3. Resolve the Target Asset

If the user refers to a table by name, by business concept ("our quarterly report", "the sales data"), by S3 path, or by catalog without specifying the table, delegate to finding-data-lake-assets to return the concrete database.table (and catalog if non-default).

Constraints:

  • You MUST NOT attempt to resolve fuzzy asset references with athena list-data-catalogs or by iterating get-tables — those miss federated catalogs and waste tokens
  • You SHOULD skip this step only when the user provides a fully-qualified reference (exact database.table) or raw SQL they want executed as-is
  • You MUST state the resolved asset explicitly before building the query: "Found [table] in [catalog]. Using this for the query."
  • You SHOULD default to the default Glue catalog unless the user mentions "federated", "Redshift", "S3 Tables", or finding-data-lake-assets returns a different catalog

4. Discover Schema

For analytical queries, You SHOULD profile the target table before building the final query. You MUST show sample rows (SELECT ... LIMIT 5) as part of profiling.

5. Build Query

Table addressing depends on catalog type:

  • Default Glue catalog: database.table (omit the catalog prefix for single-catalog queries). In cross-catalog queries, qualify default-catalog tables with "awsdatacatalog".database.table.
  • Registered data source: datasource.database.table
  • Unregistered Glue catalog: "catalog/subcatalog".database.table

6. Classify and Execute

Classify the SQL statement before executing:

StatementBehavior
SELECT, SHOW, DESCRIBE, EXPLAINSafe — execute
INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, TRUNCATE, MERGEDestructive — warn the user and require explicit confirmation
UnsureTreat as destructive; confirm

Example tool call (via AWS MCP server):

aws___call_aws(command="aws athena start-query-execution --work-group <WORKGROUP_NAME> --query-string '<sql>' --query-execution-context Database=<db>")

For federated or S3 Tables catalogs, also set Catalog=<CATALOG_PATH> in the execution context (e.g. Catalog=s3tablescatalog/<BUCKET_NAME>).

Constraints:

  • You MUST warn the user before executing when the target is Redshift-federated ("No partition pruning — every query scans the full table")
  • You MUST warn the user before executing a cross-catalog join ("Cross-catalog joins incur network overhead and may be slow")
  • You MUST confirm the output S3 location before executing
  • You MUST explain which tool is being called before executing
  • You MUST respect the user's decision to abort

7. Present and Recover

Present results with cost, data scanned, duration, and actionable insights. On failure, list available workgroups and let the user choose which to retry with.

Argument Routing

Resolve in this order; stop at the first match:

  1. Contains SQL keywords (SELECT, SHOW, DESCRIBE, INSERT, etc.) — SQL text, execute directly
  2. profile TABLE_NAME — run comprehensive table profiling (see query-patterns.md)
  3. Matches a known named query — look up and execute
  4. Matches a known workgroup — show workgroup status and recent queries
  5. Matches a known catalog — delegate to exploring-data-catalog to enumerate databases and tables
  6. No args — show recent query activity and available tables

Principles

  • Always select workgroup before executing (prevents output-location errors)
  • Profile unfamiliar tables before running analytical queries
  • Present cost alongside results so users build cost awareness
  • Suggest LIMIT for exploratory queries on large tables
  • Never ask domain questions with obvious answers, but always confirm security-relevant actions (workgroup switches, output location changes, non-SELECT statements)

Troubleshooting

ErrorCauseFix
Redshift identifier error with mixed caseRedshift-federated names are lowercase onlyLowercase the identifier
CatalogId validation failureARN passed instead of catalog namePass the catalog name, not the ARN
Cross-catalog information_schema returns nothingMissing catalog qualifierUse catalog-qualified path: "catalog".information_schema.tables
Query fails with output-location errorWorkgroup has no output location configuredSelect a different workgroup with an output location, or configure one
Destructive statement executed without confirmationStatement classification skippedAlways classify INSERT/UPDATE/DELETE/DROP/ALTER/CREATE/TRUNCATE/MERGE and confirm with the user

Additional Resources