Table of Contents
- Configuration
- 1. Table Bucket Operations
- 2. Namespace Operations
- 3. Table Operations
- 4. Policy and Tagging
- 5. Maintenance Configuration
- Put Table Maintenance Configuration
- Get Table Maintenance Configuration
- Get Table Maintenance Job Status
- Put Table Bucket Maintenance Configuration
- Get Table Bucket Maintenance Configuration
- Cleanup
SeaweedFS supports the S3 Tables API, providing a way to manage table-based data structures with AWS S3 compatibility. This guide provides commands to test the S3 Tables features in SeaweedFS.
Configuration
Prerequisites
For AWS CLI and curl commands, configure your environment variables:
export S3_ENDPOINT=http://localhost:8333
export AWS_ACCESS_KEY_ID=any
export AWS_SECRET_ACCESS_KEY=any
export AWS_DEFAULT_REGION=us-east-1
Note
The
s3tablesservice is a relatively new AWS service. Ensure your AWS CLI is up to date (v2.17+ recommended). Ifaws s3tablesis not available, use thecurlcommands provided below.
1. Table Bucket Operations
Create Table Bucket
AWS CLI:
aws s3tables create-table-bucket --endpoint-url $S3_ENDPOINT --name my-test-bucket
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.CreateTableBucket" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{"name": "my-test-bucket"}'
Note
A table bucket holds one table format.
formatis a SeaweedFS extension toCreateTableBucketand acceptsICEBERG(the default, and what AWS S3 Tables serves) orLANCE. Creating a table of another format in a declared bucket is refused with 409.curl -X POST $S3_ENDPOINT/ \ -H "X-Amz-Target: S3Tables.CreateTableBucket" \ -H "Content-Type: application/x-amz-json-1.1" \ -d '{"name": "vectors", "format": "LANCE"}'From the shell:
s3tables.bucket -create -name vectors -format LANCE -account 000000000000At startup:
weed mini -tableBucket=vectors:LANCEpre-creates buckets before anything connects, each entryname[:FORMAT]with an unsuffixed name meaning ICEBERG. The same list can come fromS3_TABLE_BUCKET.Buckets created before this field existed carry no declaration and keep accepting either format. See SeaweedFS Lance Catalog.
List Table Buckets
AWS CLI:
aws s3tables list-table-buckets --endpoint-url $S3_ENDPOINT
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.ListTableBuckets" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{}'
Get Table Bucket
AWS CLI:
aws s3tables get-table-bucket --endpoint-url $S3_ENDPOINT --table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.GetTableBucket" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket"}'
2. Namespace Operations
Create Namespace
AWS CLI:
aws s3tables create-namespace --endpoint-url $S3_ENDPOINT --table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket --namespace my_namespace
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.CreateNamespace" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"namespace": ["my_namespace"]
}'
List Namespaces
AWS CLI:
aws s3tables list-namespaces --endpoint-url $S3_ENDPOINT --table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.ListNamespaces" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket"}'
3. Table Operations
Create Table (Iceberg)
AWS CLI:
aws s3tables create-table --endpoint-url $S3_ENDPOINT --table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket --namespace my_namespace --name my_table --format ICEBERG
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.CreateTable" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"namespace": ["my_namespace"],
"name": "my_table",
"format": "ICEBERG"
}'
List Tables
AWS CLI:
aws s3tables list-tables --endpoint-url $S3_ENDPOINT --table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket --namespace my_namespace
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.ListTables" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"namespace": ["my_namespace"]
}'
4. Policy and Tagging
Put Table Bucket Policy
AWS CLI:
aws s3tables put-table-bucket-policy --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--resource-policy "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3tables:*\",\"Resource\":\"*\"}]}"
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.PutTableBucketPolicy" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"resourcePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3tables:*\",\"Resource\":\"*\"}]}"
}'
Get Table Bucket Policy
AWS CLI:
aws s3tables get-table-bucket-policy --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.GetTableBucketPolicy" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket"}'
Tag Resource
AWS CLI:
aws s3tables tag-resource --endpoint-url $S3_ENDPOINT \
--resource-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--tags Environment=test,Owner=admin
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.TagResource" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"resourceArn": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"tags": {"Environment": "test", "Owner": "admin"}
}'
List Tags
AWS CLI:
aws s3tables list-tags-for-resource --endpoint-url $S3_ENDPOINT \
--resource-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.ListTagsForResource" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{"resourceArn": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket"}'
5. Maintenance Configuration
Compaction and snapshot management are configured per table; unreferenced file removal is configured on the table bucket. See Iceberg Table Maintenance for what the worker does with these settings, and for the table properties that take precedence over them.
Put Table Maintenance Configuration
AWS CLI:
aws s3tables put-table-maintenance-configuration --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--namespace my_namespace \
--name my_table \
--type icebergCompaction \
--value '{"status":"enabled","settings":{"icebergCompaction":{"targetFileSizeMB":512,"strategy":"auto"}}}'
curl:
curl -X PUT "$S3_ENDPOINT/tables/arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket/my_namespace/my_table/maintenance/icebergCompaction" \
-H "Content-Type: application/json" \
-d '{
"value": {
"status": "enabled",
"settings": {"icebergCompaction": {"targetFileSizeMB": 512, "strategy": "auto"}}
}
}'
Turn a maintenance type off for a table:
aws s3tables put-table-maintenance-configuration --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--namespace my_namespace \
--name my_table \
--type icebergSnapshotManagement \
--value '{"status":"disabled"}'
Get Table Maintenance Configuration
AWS CLI:
aws s3tables get-table-maintenance-configuration --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--namespace my_namespace \
--name my_table
A table that has never been configured returns an empty configuration; the effective values then come from the worker config.
Get Table Maintenance Job Status
AWS CLI:
aws s3tables get-table-maintenance-job-status --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--namespace my_namespace \
--name my_table
Each job type reports Not_Yet_Run, Successful, Failed or Disabled, with
the time of the last run.
Put Table Bucket Maintenance Configuration
AWS CLI:
aws s3tables put-table-bucket-maintenance-configuration --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--type icebergUnreferencedFileRemoval \
--value '{"status":"enabled","settings":{"icebergUnreferencedFileRemoval":{"unreferencedDays":3,"nonCurrentDays":10}}}'
A file is deleted once it is older than unreferencedDays plus
nonCurrentDays — thirteen days here.
Get Table Bucket Maintenance Configuration
AWS CLI:
aws s3tables get-table-bucket-maintenance-configuration --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket
Cleanup
Delete Table
AWS CLI:
aws s3tables delete-table --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--namespace my_namespace \
--name my_table
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.DeleteTable" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"namespace": ["my_namespace"],
"name": "my_table"
}'
Delete Namespace
AWS CLI:
aws s3tables delete-namespace --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket \
--namespace my_namespace
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.DeleteNamespace" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{
"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket",
"namespace": ["my_namespace"]
}'
Delete Table Bucket
AWS CLI:
aws s3tables delete-table-bucket --endpoint-url $S3_ENDPOINT \
--table-bucket-arn arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket
curl:
curl -X POST $S3_ENDPOINT/ \
-H "X-Amz-Target: S3Tables.DeleteTableBucket" \
-H "Content-Type: application/x-amz-json-1.1" \
-d '{"tableBucketARN": "arn:aws:s3tables:us-east-1:000000000000:bucket/my-test-bucket"}'
Introduction
- Quick Start with weed mini
- Simplest S3 Bucket and User Setup
- Components
- Blob Store Architecture
- Getting Started
- Production Setup
- A typical step‐by‐step example
- Benchmarks
- FAQ
- Applications
API
Configuration
- Replication
- Store file with a Time To Live
- Failover Master Server
- Erasure coding for warm storage
- EC Bitrot Detection
- Server Startup via Systemd
- Environment Variables
Filer
- Filer Setup
- Directories and Files
- File Operations Quick Reference
- Data Structure for Large Files
- Filer Data Encryption
- Filer Commands and Operations
- Filer JWT Use
- TUS Resumable Uploads
Filer Stores
- Filer Cassandra Setup
- Filer Redis Setup
- Super Large Directories
- Path-Specific Filer Store
- Choosing a Filer Store
- Customize Filer Store
Management
Advanced Filer Configurations
- Migrate to Filer Store
- Add New Filer Store
- Filer Store Replication
- Filer Active Active cross cluster continuous synchronization
- Filer as a Key-Large-Value Store
- Path Specific Configuration
- Filer Change Data Capture
- Filer Operation Serialization
FUSE Mount
- Mount on Windows
- FIO benchmark
- fstab and systemd mount
- POSIX Compliance
- Distributed POSIX Locks
- P2P reading in weed mount
- Mount over the Internet
WebDAV
SFTP Server
Cloud Drive
- Cloud Drive Benefits
- Cloud Drive Architecture
- Configure Remote Storage
- Azure Blob Storage Authentication
- Mount Remote Storage
- Cache Remote Storage
- Cloud Drive Quick Setup
- Gateway to Remote Object Storage
AWS S3 API
- Amazon S3 API
- Supported APIs vs Minio
- S3 Lifecycle
- S3 Lifecycle vs Volume TTL
- S3 Conditional Operations
- S3 CORS
- S3 Object Lock and Retention
- S3 Object Versioning
- S3 RenameObject
- S3 API Benchmark
- S3 API FAQ
- S3 Bucket Quota
- S3 Rate Limiting
- S3 API Audit log
- S3 Nginx Proxy
- Docker Compose for S3
S3 Table Bucket
- S3 Table Bucket
- S3 Table Bucket Commands
- S3 Tables Security
- SeaweedFS Iceberg Catalog
- Iceberg REST Catalog API
- Iceberg Table Maintenance
- SeaweedFS Lance Catalog
- Lance Maintenance Worker
Iceberg Integrations
- Spark Iceberg Integration
- Trino Iceberg Integration
- Dremio Iceberg Integration
- DuckDB Iceberg Integration
- Doris Iceberg Integration
- RisingWave Iceberg Integration
- Lakekeeper Iceberg Integration
Lance Integrations
S3 Authentication & IAM
- S3 Configuration - Start Here
- S3 Credentials (
-s3.config) - OIDC Integration (
-s3.iam.config) - Kubernetes ServiceAccount Authentication (IRSA-style)
- S3 Policy Variables
- S3 Policy Conditions
- S3 Bucket Policies
- Amazon IAM API
- AWS IAM CLI
- weed shell - Shell IAM Commands
Server-Side Encryption
S3 Client Tools
- AWS CLI with SeaweedFS
- s3cmd with SeaweedFS
- rclone with SeaweedFS
- restic with SeaweedFS
- nodejs with Seaweed S3
Machine Learning
HDFS
- Hadoop Compatible File System
- run Spark on SeaweedFS
- run HBase on SeaweedFS
- Run Trino on SeaweedFS
- Hadoop Benchmark
- HDFS via S3 connector
Replication and Backup
- Async Replication to another Filer [Deprecated]
- Async Backup
- Async Filer Metadata Backup
- Async Replication to Cloud [Deprecated]
- Kubernetes Backups and Recovery with K8up
Metadata Change Events
Messaging
- Structured Data Lake with SMQ and SQL
- Seaweed Message Queue
- SQL Queries on Message Queue
- SQL Quick Reference
- PostgreSQL-compatible Server weed db
- Pub-Sub to SMQ to SQL
- Kafka to Kafka Gateway to SMQ to SQL
Use Cases
Operations
- System Metrics
- weed shell
- Data Backup
- Deployment to Kubernetes and Minikube
- Helm Chart Recipes
- Deployment with seaweed-up
Rust Volume Server
Advanced
- Large File Handling
- Optimization
- Optimization for Many Small Buckets
- Volume Management
- Tiered Storage
- Cloud Tier
- Cloud Monitoring
- Load Command Line Options from a file
- SRV Service Discovery
- Volume Files Structure
Security
- Security Overview
- Security Configuration
- Cryptography and FIPS Compliance
- Run Blob Storage on Public Internet