Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pembuatan Partisi Data
Apa itu partisi data?
Partisi data adalah teknik yang membagi kumpulan data besar menjadi segmen yang lebih kecil dan lebih mudah dikelola yang disebut partisi. Dalam konteks integrasi AWS Glue Zero-ETL, partisi mengatur data Anda di lokasi target berdasarkan nilai kolom tertentu atau transformasi nilai-nilai tersebut.
Manfaat partisi data
Partisi data yang efektif memberikan beberapa manfaat utama untuk beban kerja analitik:
-
Peningkatan kinerja kueri: Kueri dapat melewati partisi yang tidak relevan (pemangkasan partisi), mengurangi jumlah data yang perlu dipindai.
-
Mengurangi biaya: Dengan memindai lebih sedikit data, Anda dapat menurunkan komputasi dan I/O biaya untuk kueri analitik Anda.
-
Skalabilitas yang lebih baik: Partisi memungkinkan pemrosesan paralel segmen data, memungkinkan penskalaan beban kerja analitik yang lebih efisien.
-
Manajemen siklus hidup data yang disederhanakan: Anda dapat mengelola kebijakan retensi di tingkat partisi, sehingga memudahkan untuk mengarsipkan atau menghapus data lama.
Konsep partisi kunci
- Kolom partisi
-
Kolom dalam data Anda yang digunakan untuk menentukan bagaimana catatan disusun ke dalam partisi. Kolom partisi yang efektif harus sejajar dengan pola kueri umum dan memiliki kardinalitas yang sesuai.
- Fungsi partisi
-
Transformasi diterapkan pada nilai kolom partisi untuk membuat batas partisi yang sebenarnya. Contohnya termasuk identitas (menggunakan nilai mentah) dan fungsi berbasis waktu (tahun, bulan, hari, jam).
- Pemangkasan partisi
-
Proses di mana mesin kueri mengidentifikasi dan melewatkan partisi yang tidak berisi data yang relevan untuk kueri, secara signifikan meningkatkan kinerja.
- Granularitas partisi
-
Tingkat detail di mana data dipartisi. Granularitas yang lebih halus (lebih banyak partisi) dapat meningkatkan kinerja kueri tetapi dapat meningkatkan overhead metadata. Granularitas yang lebih kasar (partisi lebih sedikit) mengurangi overhead metadata tetapi dapat mengakibatkan pemindaian lebih banyak data daripada yang diperlukan.
Partisi dalam integrasi AWS Glue Zero-ETL
AWS Integrasi Glue Zero-ETL menggunakan format tabel Apache Iceberg, yang menyediakan kemampuan partisi tingkat lanjut. Saat Anda membuat integrasi nol-ETL, Anda dapat:
-
Gunakan strategi partisi default yang dioptimalkan untuk sumber data Anda
-
Tentukan spesifikasi partisi khusus yang disesuaikan dengan pola kueri Anda
-
Terapkan transformasi ke kolom partisi (terutama berguna untuk partisi berbasis stempel waktu)
-
Gabungkan beberapa strategi partisi untuk partisi multi-level
Konfigurasi partisi ditentukan melalui CreateIntegrationTableProperty API saat menyiapkan integrasi nol-ETL Anda. Setelah dikonfigurasi, AWS Glue secara otomatis menerapkan strategi partisi ini untuk mengatur data Anda di lokasi target.
Referensi API spesifikasi partisi
Gunakan parameter berikut di CreateIntegrationTableProperties API untuk mengonfigurasi partisi:
- PartitionSpec
-
Sebuah array spesifikasi partisi yang mendefinisikan bagaimana data dipartisi di lokasi target.
{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] } - FieldName
-
String UTF-8 (1-128 byte) yang menentukan nama kolom yang akan digunakan untuk partisi.
- FunctionSpec
-
Menentukan fungsi partisi. Nilai valid:
identity- Menggunakan nilai sumber secara langsung tanpa transformasiyear- Mengekstrak tahun dari nilai stempel waktu (misalnya, 2023)month- Mengekstrak bulan dari nilai stempel waktu (mis., 2023-01)day- Mengekstrak hari dari nilai stempel waktu (mis., 2023-01-15)hour- Mengekstrak jam dari nilai stempel waktu (mis., 2023-01-15-14)
catatan
Fungsi berbasis waktu (
year,,monthday,hour) memerlukanConversionSpecparameter untuk menentukan format stempel waktu sumber. - ConversionSpec
-
String UTF-8 yang menentukan format stempel waktu dari data sumber. Nilai yang valid adalah:
-
epoch_sec- Stempel waktu epoch Unix dalam hitungan detik -
epoch_milli- Stempel waktu epoch Unix dalam milidetik -
iso- Stempel waktu berformat ISO 8601
-
Strategi partisi
Partisi default
Ketika tidak ada kolom partisi yang ditentukan, AWS Glue Zero-ETL menerapkan strategi partisi default yang dioptimalkan untuk sumber data Anda:
-
Partisi berbasis kunci primer: Untuk sumber dengan kunci primer (seperti tabel DynamoDB), AWS Glue Zero-ETL secara otomatis mempartisi data menggunakan kunci utama dengan bucketing untuk mencegah ledakan partisi.
Partisi default dirancang untuk bekerja dengan baik untuk pola kueri umum tanpa memerlukan konfigurasi manual. Namun, untuk pola kueri atau persyaratan kinerja tertentu, Anda mungkin ingin menentukan strategi partisi khusus.
Strategi partisi yang ditentukan pengguna
AWS Glue Zero-ETL memungkinkan Anda menentukan strategi partisi khusus menggunakan parameter. PartitionSpec Anda dapat menentukan satu atau lebih kolom partisi dan menerapkan fungsi partisi yang berbeda untuk setiap kolom.
Partisi identitas menggunakan nilai mentah dari kolom untuk membuat partisi. Strategi ini berguna untuk kolom dengan kardinalitas rendah hingga sedang, seperti bidang kategori, wilayah, atau status.
contoh Contoh partisi identitas
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }
Ini menciptakan partisi terpisah untuk setiap nilai unik di kolom “kategori”.
Awas
Hindari menggunakan partisi identitas dengan kolom kardinalitas tinggi (seperti kunci utama atau stempel waktu) karena dapat menyebabkan ledakan partisi, yang menurunkan kinerja dan meningkatkan overhead metadata.
Partisi berbasis waktu mengatur data berdasarkan nilai stempel waktu pada perincian yang berbeda (tahun, bulan, hari, atau jam). Strategi ini sangat ideal untuk data deret waktu dan memungkinkan kueri rentang waktu yang efisien.
Saat menggunakan partisi berbasis waktu, AWS Glue Zero-ETL dapat secara otomatis mengonversi berbagai format stempel waktu ke format standar sebelum menerapkan fungsi partisi. Konversi ini ditentukan menggunakan ConversionSpec parameter.
contoh Contoh partisi berbasis waktu
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }
Ini mempartisi data berdasarkan bulan berdasarkan kolom “created_at”, yang berisi stempel waktu epoch Unix dalam milidetik.
AWS Glue Zero-ETL mendukung fungsi partisi berbasis waktu berikut:
-
tahun: Data partisi berdasarkan tahun (mis., 2023, 2024)
-
bulan: Data partisi berdasarkan bulan (mis., 2023-01, 2023-02)
-
hari: Data partisi berdasarkan hari (mis., 2023-01-01, 2023-01-02)
-
jam: Data partisi berdasarkan jam (mis., 2023-01-01-01, 2023-01-01-02)
AWS Glue Zero-ETL mendukung format stempel waktu berikut melalui parameter: ConversionSpec
-
epoch_sec: Stempel waktu epoch Unix dalam hitungan detik
-
epoch_milli: Stempel waktu epoch Unix dalam milidetik
-
iso: Stempel waktu berformat ISO 8601
catatan
Nilai kolom asli tetap tidak berubah dalam data sumber Anda. AWS Glue hanya mengubah nilai kolom partisi menjadi Timestamp Type di tabel database target. Transformasi hanya berlaku untuk proses partisi.
Partisi multi-level menggabungkan beberapa strategi partisi untuk membuat skema partisi hierarkis. Ini berguna untuk mengoptimalkan berbagai jenis kueri terhadap kumpulan data yang sama.
contoh Contoh partisi multi-level
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }
Ini menciptakan skema partisi dua tingkat: pertama berdasarkan bulan (dari kolom “created_at”), lalu berdasarkan wilayah. Ini memungkinkan kueri efisien yang memfilter berdasarkan rentang tanggal, wilayah tertentu, atau kombinasi dimensi ini.
Saat merancang skema partisi multi-level, pertimbangkan:
-
Menempatkan kolom selektivitas yang lebih tinggi terlebih dahulu dalam hierarki partisi
-
Menyeimbangkan granularitas partisi dengan jumlah partisi
-
Menyelaraskan skema partisi dengan pola kueri Anda yang paling umum
Praktik terbaik
Pemilihan kolom partisi
-
Jangan gunakan kolom kardinalitas tinggi dengan fungsi partisi.
identityMenggunakan kolom kardinalitas tinggi dengan partisi identitas menciptakan banyak partisi kecil, yang secara signifikan dapat menurunkan kinerja konsumsi. Kolom kardinalitas tinggi dapat mencakup:-
Kunci primer
-
Bidang stempel waktu (seperti,
LastModifiedTimestamp)CreatedDate -
Stempel waktu yang dihasilkan sistem
-
-
Jangan memilih beberapa partisi stempel waktu pada kolom yang sama. Contoh:
"partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]
FunctionSpec/ConversionSpec Pemilihan partisi
-
Tentukan yang benar ConversionSpec (epoch_sec | epoch_milli | iso) yang mewakili format nilai kolom yang dipilih untuk partisi berbasis stempel waktu saat menggunakan fungsi partisi berbasis stempel waktu. AWS Glue Zero-ETL menggunakan parameter ini untuk mengubah data sumber dengan benar menjadi format stempel waktu sebelum dipartisi.
-
Gunakan granularitas yang sesuai (year/month/day/hour) berdasarkan volume data.
-
Pertimbangkan implikasi zona waktu saat menggunakan stempel waktu ISO. AWS Glue Zero-ETL mengisi semua nilai rekaman kolom stempel waktu yang dipilih dengan zona waktu UTC.
Penanganan kesalahan
Status NEEDS_ATTENTION
Integrasi memasuki status NEEDS_ATTENTION ketika:
Kolom partisi yang ditentukan tidak ada di sumber
Konversi stempel waktu gagal untuk kolom partisi