View a markdown version of this page

Pembuatan Partisi Data - AWS Glue

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 transformasi

  • year- 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) memerlukan ConversionSpec parameter 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. identity Menggunakan 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