Skip to content

S3 Tables

CloudMock emulates AWS S3 Tables, supporting the full TableBucket → Namespace → Table hierarchy with table policies and metadata location updates. S3 Tables is designed for Apache Iceberg table management.

OperationStatusNotes
CreateTableBucketSupportedValidates bucket name (lowercase, no underscores)
GetTableBucketSupportedReturns bucket details
ListTableBucketsSupportedLists all table buckets
DeleteTableBucketSupportedDeletes bucket and its tables
CreateNamespaceSupportedCreates namespace within a bucket
GetNamespaceSupportedReturns namespace details
ListNamespacesSupportedLists namespaces for a bucket
DeleteNamespaceSupportedDeletes a namespace
CreateTableSupportedCreates table in bucket/namespace
GetTableSupportedReturns table details
ListTablesSupportedLists tables for a bucket
UpdateTableMetadataLocationSupportedUpdates Iceberg metadata location
DeleteTableSupportedDeletes a table
GetTablePolicySupportedReturns table resource policy
PutTablePolicySupportedSets table policy (validates JSON)
DeleteTablePolicySupportedDeletes table policy
TableBucket (arn:aws:s3tables:{region}:{account}:bucket/{name})
└── Namespace (analytics, ml, etc.)
└── Table (orders, customers, etc.)
└── TablePolicy (IAM resource policy)
import boto3
client = boto3.client('s3tables',
endpoint_url='http://localhost:4566',
region_name='us-east-1',
aws_access_key_id='test',
aws_secret_access_key='test')
# Create table bucket
bucket = client.create_table_bucket(name='my-lakehouse')
bucket_arn = bucket['arn']
# Create namespace
client.create_namespace(
tableBucketARN=bucket_arn,
namespace=['analytics'],
)
# Create Iceberg table
client.create_table(
tableBucketARN=bucket_arn,
namespace='analytics',
name='events',
format='ICEBERG',
)
# Update metadata location after Iceberg write
client.update_table_metadata_location(
tableBucketARN=bucket_arn,
namespace='analytics',
name='events',
metadataLocation='s3://bucket/warehouse/analytics/events/metadata/v1.metadata.json',
versionToken='old-token',
)
services:
s3tables:
enabled: true
  • No actual Iceberg table files are created or managed
  • MetadataLocation updates store the value but do not validate S3 paths
  • Namespace and table ARNs are derived from bucket ARN