Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
aws avatar

Creating Data Lake Table

  • 3.1k installs
  • 2.2k repo stars
  • Updated August 4, 2026
  • aws/agent-toolkit-for-aws

creating-data-lake-table provisions managed Iceberg analytics tables on Amazon S3 Tables with Glue catalog integration.

About

The creating-data-lake-table skill from AWS agent-toolkit-for-aws provisions managed Apache Iceberg tables via Amazon S3 Tables (s3tables API). It covers table bucket setup, namespace and table creation, schema definition, Glue catalog registration, partitioning strategy, and IAM permissions. A decision guide requires checking existing Glue tables before create: fuzzy database names delegate to finding-data-lake-assets; conflicting non-S3-Tables names need user confirmation. Creation paths include empty tables followed by ingesting-into-data-lake, Glue ETL per references/table-creation-glue-etl.md, and optional Lake Formation integration. Agents must verify AWS MCP tools or CLI availability, confirm region and credentials via aws sts get-caller-identity, and prefer MCP sandboxed execution when connected. Do not use for vector storage, querying existing tables, or file import without table creation. Use when users ask to create data lake tables, S3 Tables Iceberg, Athena tables, or analytics table partitioning.

  • Managed Iceberg tables via Amazon S3 Tables with auto compaction and snapshots.
  • Pre-create Glue table checks and delegation to finding-data-lake-assets on conflicts.
  • Schema, namespace, partitioning, and IAM access control setup steps.
  • Paths for empty table plus ingest or Glue ETL pipeline creation.
  • Prefers AWS MCP tools with CLI fallback and credential verification.

Creating Data Lake Table by the numbers

  • 3,135 all-time installs (skills.sh)
  • +413 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #34 of 911 Databases skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

creating-data-lake-table capabilities & compatibility

Capabilities
s3 tables provisioning · glue catalog registration · partitioning strategy · iam access setup · conflict detection and delegation
Works with
aws
Use cases
database · data analysis · api development
From the docs

What creating-data-lake-table says it does

Amazon S3 Tables provides managed Iceberg tables with automatic compaction and snapshot management.
SKILL.md
npx skills add https://github.com/aws/agent-toolkit-for-aws --skill creating-data-lake-table

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3.1k
repo stars2.2k
Security audit3 / 3 scanners passed
Last updatedAugust 4, 2026
Repositoryaws/agent-toolkit-for-aws

How do I create a new Iceberg data lake table on Amazon S3 Tables with partitioning and access control?

Create managed Iceberg tables on Amazon S3 Tables with namespaces, schemas, Glue catalog registration, partitioning, and IAM access control.

Who is it for?

Data engineers creating new analytics tables on AWS S3 Tables and Glue.

Skip if: Importing files into existing tables or vector storage (use sibling ingest/query skills).

When should I use this skill?

User mentions create data lake table, S3 Tables, Iceberg table, or Athena table partitioning.

What you get

A registered S3 Tables Iceberg table with schema, partitioning, and IAM permissions ready for ingest or query.

  • bucket policy JSON
  • IAM policy JSON

By the numbers

  • Covers 5 s3tables actions and 3 glue actions

Files

SKILL.mdMarkdownGitHub ↗

Create Data Lake Tables with Amazon S3 Tables

Overview

Amazon S3 Tables provides managed Iceberg tables with automatic compaction and snapshot management. Queryable via Athena and Iceberg-compatible engines.

Common Tasks

You MUST use AWS MCP server tools when connected, they provide command validation, sandboxed execution, and audit logging. Fall back to AWS CLI if MCP unavailable.

Decision Guide

Before creating, You MUST check what exists:

You MUST run aws glue get-tables --database-name <NAME> when user mentions a database.

What you findAction
Fuzzy database name ("our analytics db")You MUST STOP. Delegate to finding-data-lake-assets to resolve.
Non-S3-Tables table with matching nameYou MUST STOP. Delegate to finding-data-lake-assets. You MUST NOT create until user confirms.
Existing S3 Tables table with matching nameYou MUST check schema match. Reuse if compatible, recreate only if user confirms.
No matching tablesProceed with creation (Steps 1-8).
User explicitly requests new S3 Tables tableSkip checks, proceed with creation.

Creation paths:

  • Existing data in S3: Create empty table (Steps 1-8), then use ingesting-into-data-lake skill.
  • Glue ETL pipeline: Read references/table-creation-glue-etl.md first, then Steps 1-6.
  • Lake Formation access control: Search AWS docs for "S3 Tables integration with Lake Formation".

1. Verify Dependencies

Constraints:

  • You MUST check whether AWS MCP server tools or AWS CLI are available and inform user if missing
  • You MUST confirm target AWS region and verify credentials with aws sts get-caller-identity

2. Understand the Schema

  • Explicit schema: Validate Iceberg types.
  • Loose description: Ask columns, types, grain. Propose and confirm.
  • Existing S3 data: Infer schema from file headers only. Create empty table first, then use ingesting-into-data-lake skill.

Constraints:

  • You MUST read references/best-practices.md for Iceberg type mapping, partitions, and naming.
  • You MUST ask for all required parameters upfront: table name, columns, types, partition strategy. For schema evolution, see references/athena-ddl-path.md.
  • You MUST use all lowercase names -- Glue rejects mixed case with GENERIC_INTERNAL_ERROR. Namespace and table names MUST NOT contain hyphens.
  • You SHOULD suggest partition columns based on access patterns.

3. Create Table Bucket

Names: 3-63 chars, lowercase, numbers, hyphens.

aws s3tables create-table-bucket --name <BUCKET_NAME> --region <REGION>

Capture table-bucket-arn. Encryption (SSE-S3 default, SSE-KMS) and storage class (STANDARD, INTELLIGENT_TIERING) set at creation. See references/best-practices.md.

Constraints:

  • You MUST check existing buckets with aws s3tables list-table-buckets and ask user to select or create new.
  • If using SSE-KMS, KMS key policy MUST allow S3 Tables maintenance service principal to read data. Search AWS docs for "S3 Tables KMS key policy" for required policy.
  • If bucket creation fails, see references/best-practices.md for common errors.

4. Create Namespace

aws s3tables create-namespace --table-bucket-arn <ARN> --namespace <NAMESPACE>

Constraints:

  • You MUST list existing namespaces first and suggest reusing if relevant
  • You MUST use lowercase names with no hyphens

5. Create Glue Data Catalog Integration

Check if s3tablescatalog exists (create once per region per account):

aws glue get-catalog --catalog-id s3tablescatalog

If not found, create (requires glue:CreateCatalog, glue:passConnection):

aws glue create-catalog --name "s3tablescatalog" --catalog-input '{
  "FederatedCatalog": {
    "Identifier": "arn:aws:s3tables:<REGION>:<ACCOUNT_ID>:bucket/*",
    "ConnectionName": "aws:s3tables"
  },
  "CreateDatabaseDefaultPermissions": [{"Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"}, "Permissions": ["ALL"]}],
  "CreateTableDefaultPermissions": [{"Principal": {"DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"}, "Permissions": ["ALL"]}],
  "AllowFullTableExternalDataAccess": "True"
}'

Verify with aws glue get-catalogs --parent-catalog-id s3tablescatalog.

6. Configure Access Control

S3 Tables uses s3tables:* IAM namespace (not s3:*).

Querying principal permissions (bucket policy):

  • s3tables:GetTableBucket, s3tables:GetNamespace, s3tables:GetTable, s3tables:GetTableMetadataLocation, s3tables:GetTableData

Querying principal permissions (IAM policy):

  • glue:GetCatalog, glue:GetDatabase, glue:GetTable

You MUST scope to correct ARN patterns. You MUST read references/access-control.md for exact resource ARNs.

Constraints:

  • You MUST ask user for querying principal ARN
  • You MUST NOT grant broader permissions than necessary
  • You MUST NOT create IAM roles automatically, verify existing and guide user

7. Create the Table

ContextPath
Default (any user)S3 Tables API (below)
User specifically wants SQL DDLAthena DDL (see references/athena-ddl-path.md)
Glue ETL pipelineSpark DDL via --conf job args (not spark.conf.set()). You MUST read references/table-creation-glue-etl.md for the --conf string.

Default: S3 Tables API:

aws s3tables create-table \
  --table-bucket-arn <ARN> \
  --namespace <NAMESPACE> \
  --name <TABLE_NAME> \
  --format ICEBERG \
  --metadata '<METADATA_JSON>'

Metadata JSON MUST nest under "iceberg" key:

{"iceberg":{"schema":{"fields":[
  {"name":"order_date","type":"date","required":true},
  {"name":"customer_id","type":"string","required":true},
  {"name":"amount","type":"double","required":false}
]},
"partitionSpec":{"fields":[
  {"sourceId":1,"fieldId":1000,"transform":"month","name":"order_date_month"}
]}}}

Constraints:

  • partitionSpec.sourceId MUST reference a valid schema field ID
  • For schema evolution after creation, use Athena DDL. See references/athena-ddl-path.md
  • You MUST use schemaV2 for complex types (list, map, struct) with explicit field IDs. See references/best-practices.md.
  • You SHOULD search AWS docs for "IcebergPartitionField S3 Tables" for supported partition transforms

8. Verify and Confirm

You MUST verify with aws s3tables get-table and confirm queryability with DESCRIBE <table_name> via Athena using --query-execution-context '{"Catalog":"s3tablescatalog/<BUCKET_NAME>","Database":"<NAMESPACE>"}'. Do NOT put catalog in SQL. Present summary: bucket ARN, namespace, table, schema, partitions.

Troubleshooting

ErrorCauseFix
"Table location can not be specified"LOCATION in CREATE TABLERemove LOCATION clause. S3 Tables manages storage automatically.
AccessDeniedException with s3:* policyUsing s3:* not s3tables:*S3 Tables uses s3tables:* namespace. Update IAM policy.

Additional Resources

  • access-control.md -- IAM permissions, ARN patterns, permission errors
  • best-practices.md -- Iceberg types, partitions, naming, common errors
  • athena-ddl-path.md -- Athena DDL, schema evolution
  • table-creation-glue-etl.md -- Spark DDL via Glue ETL
  • Loading data: ingesting-into-data-lake skill

Related skills

How it compares

Use when you need scoped S3 Tables plus glue policies for agents rather than generic S3 bucket admin templates.

FAQ

Must I check Glue before creating?

Yes. Run aws glue get-tables and stop to resolve conflicts via finding-data-lake-assets when needed.

When should I use ingesting-into-data-lake?

After creating an empty table when existing S3 data needs to be loaded.

Should agents use MCP or CLI?

Use AWS MCP server tools when connected; fall back to AWS CLI with user notification if missing.

Is Creating Data Lake Table safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Databasesdatabasespipelines

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.