AWS, Amazon S3 Tables için Apache Hive tablolarını Apache Iceberg’e yönetilen şekilde taşıma özelliğini duyurdu. Özellik, Amazon S3’te tutulan ve AWS Glue Data Catalog’a kayıtlı Parquet tablolarıyla çalışıyor. Kurulacak bir veri hattı ya da hazırlanacak bir hesaplama kaynağı gerekmiyor ve üretim iş yükleri çalışmaya devam ediyor.
Apache Iceberg; şema evrimi, gizli bölümleme ve zaman yolculuğu sorguları gibi özelliklerle büyük analitik veri setleri için açık standart haline geldi. S3 Tables ise otomatik bakım, optimizasyon, replikasyon ve S3 Intelligent-Tiering ile Iceberg tabloları için yönetilen depolama sunuyor.
Neler değişti?
Hive tablolarını Iceberg’e taşımak daha önce altyapı kurmak, veri tiplerini dönüştürmek ve geri alma yeteneği geliştirmek için haftalarca mühendislik gerektirebiliyordu. Artık bu, API ile yürütülen yönetilen bir işlem. S3 Tables veri doğrulama, uyumluluk kontrolleri, tip dönüşümleri, dosyaların yeniden sıkıştırılması ve compaction dahil tüm akışı üstleniyor.
Veri kopyalanmadan önce kapsamdaki tüm kaynak nesneler belirlenip bir uyumluluk raporu üretiliyor. Kaynak tabloya yazmayı durdurmadan istediğiniz kadar eşitleme yapabiliyorsunuz; yazmalar yalnızca geçiş anında birkaç dakika duruyor. Yalnızca kopyalanan veri için ödeme yapılıyor, dönüşüm ücretsiz ve S3 Intelligent-Tiering’deki kaynak nesneler mevcut erişim katmanında kalıyor.
Konsolda taşıma
S3 konsolunda hedef tablo bucket’ını seçip Create table from migration seçeneğine tıklayın.

Hedef Iceberg tablosu için namespace ve tablo adı girin. Tablo, sorgu performansı ve depolama verimliliği için önerilen varsayılanlarla oluşturuluyor.

Taşıma başladığında S3 Tables kaynağı doğruluyor, uyumluluk raporu üretiyor ve veriyi kopyalamaya başlıyor. Hedef tablo bu sırada salt okunur; taşıma tamamlanınca okuma-yazma durumuna geçiyor.

Veriyle Amazon Athena ve Amazon SageMaker Unified Studio üzerinden ya da Apache Iceberg REST API’yle uyumlu herhangi bir araçla çalışabilirsiniz.
CLI ile taşıma
AWS CLI, AWS SDK’ları ya da Agent Toolkit for AWS de kullanılabiliyor. Örnek start-table-migration çağrısı:
cat > /tmp/start-migration.json <<'EOF'
{
"roleARN": "arn:aws:iam::123456789012:role/S3TablesMigrationRole",
"destinationTable": {
"tableBucketARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/my-destination-bucket",
"namespace": "mynamespace",
"name": "my_destination_table",
"encryptionConfiguration": {
"sseAlgorithm": "aws:kms",
"kmsKeyArn": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
},
"storageClassConfiguration": { "storageClass": "INTELLIGENT_TIERING" },
"tags": { "team": "s3tables", "purpose": "migration" },
"properties": {
"writeFormat": "parquet",
"icebergFormatVersion": 2,
"compressionCodec": "zstd",
"dictionaryEncoding": true
},
"schema": {
"type": "struct",
"schemaId": 0,
"identifierFieldIds": [1],
"fields": [
{ "id": 1, "name": "id", "type": "long", "required": true, "doc": "primary key" },
{ "id": 2, "name": "payload", "type": "string", "required": false }
]
},
"icebergSortOrder": {
"orderId": 1,
"fields": [ { "sourceId": 1, "transform": "identity", "direction": "asc", "nullOrder": "nulls-first" } ]
}
},
"sourceType": "glueTable",
"source": {
"glueTable": {
"catalogId": "123456789012",
"databaseName": "my_glue_database",
"tableName": "my_source_table"
}
},
"dataMigration": {
"maintenanceSettings": {
"icebergCompaction": { "targetFileSizeMB": 512, "strategy": "binpack" },
"icebergSnapshotManagement": { "minSnapshotsToKeep": 3, "maxSnapshotAgeHours": 168 }
},
"migrationPolicies": {
"unmatchedSourceFieldsPolicy": "fail",
"incompatibleValuesPolicy": "fail"
}
},
"reviewMigrationPlan": false,
"migrationOutput": {
"bucket": "arn:aws:s3:::my-report-bucket",
"prefixes": {
"tableCompatibilityReport": "reports/table-compatibility/",
"objectCompatibilityReport": "reports/object-compatibility/",
"objectMigrationReport": "reports/object-migration/"
}
}
}
EOF
aws s3tables start-table-migration \
--cli-input-json file:///tmp/start-migration.jsonHedefi kaynaktaki değişikliklerle eşitlemek için taşımayı tamamlamadan önce sync-table-migration komutunu istediğiniz kadar çağırabilirsiniz; her eşitleme yalnızca değişenleri kopyalıyor.
Kiro gibi kodlama ajanları kullanıyorsanız Agent Toolkit for AWS içindeki migrating-hive-tables-to-s3-tables skill’i güvenlik korumalarıyla adım adım rehberlik ediyor:
- Mevcut IAM politikalarını analiz edip hedef için eşdeğerlerini öneriyor.
- Başlamadan önce taşıma planını doğruluyor.
- Start, Sync ve Complete API çağrılarını yürütüyor.
- İlerlemeyi izliyor, doğrulama ve geçişe rehberlik ediyor.
Bölgeler ve sınırlar
Özellik US East (N. Virginia, Ohio), US West (Oregon), Asia Pacific (Mumbai, Singapore, Sydney, Tokyo) ve Europe (Frankfurt, Ireland, Stockholm) bölgelerinde kullanılabiliyor. Başlangıçta yalnızca AWS Glue’ya kayıtlı, Parquet formatındaki Hive tabloları ve aynı AWS hesabı ile bölge içindeki taşımalar destekleniyor. Ayrıntılar S3 Tables taşıma dokümantasyonunda.
Parquet dışı Hive tabloları ya da hesaplar arası taşıma ihtiyacı olanlar için özellik şimdilik uygun değil. Örnekteki fail politikaları da önemli: Uyumsuz veri varsa işi durduruyor. Üretimden önce uyumluluk raporunu incelemek için reviewMigrationPlan ayarına da bakmakta fayda var.


