View a markdown version of this page

Menulis hasil kualitas data ke tabel Katalog Data - AWS Lem

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menulis hasil kualitas data ke tabel Katalog Data

Anda dapat mengonfigurasi proses evaluasi Kualitas Data AWS Glue untuk secara otomatis menulis hasil ke tabel Apache Iceberg di Katalog Data AWS Glue. Setelah mengaktifkan output hasil, Anda dapat menanyakan hasil kualitas data secara langsung menggunakan, membuat dasbor dengan alat visualisasi, dan memelihara riwayat terpusat hasil kualitas data di seluruh akun Anda.

Anda dapat menulis jenis hasil kualitas data berikut ke tabel Katalog Data:

  • Hasil aturan — Hasil lulus atau gagal untuk setiap aturan dalam kumpulan aturan Anda, termasuk metrik yang dievaluasi dan alasan kegagalan

  • Hasil profil — Statistik yang dikumpulkan oleh penganalisis, termasuk nilai skalar (seperti rata-rata dan standar deviasi) dan data distribusi (histogram dan distribusi nilai)

  • Row-level hasil — hasil Per-record evaluasi yang mengidentifikasi baris spesifik mana dalam kumpulan data Anda yang lulus atau gagal setiap aturan

  • Hasil pengamatan — Prediksi deteksi anomali, termasuk nilai yang diharapkan, batas prediksi, dan apakah nilai aktual ditandai sebagai anomali

Prasyarat

Untuk menulis hasil kualitas data ke tabel Katalog Data, peran IAM yang Anda gunakan untuk menjalankan evaluasi harus memiliki izin berikut:

  • Izin untuk membuat dan memperbarui database dan tabel di Katalog Data AWS Glue

  • Izin untuk menulis ke lokasi Amazon S3 tempat data tabel Iceberg disimpan

Evaluasi yang dijalankan menggunakan peran IAM yang Anda tentukan untuk menulis ke tabel hasil. Ini adalah peran yang sama yang memiliki akses ke tabel data sumber.

Mengkonfigurasi output hasil

Anda mengonfigurasi output hasil kualitas data menggunakan --additional-run-options parameter StartDataQualityRulesetEvaluationRun API atau additional_options parameter dalam pekerjaan Glu AWS e ETL. Secara default, AWS Glue Data Quality tidak menulis hasil ke tabel Katalog Data. Anda harus secara eksplisit mengaktifkan setiap jenis hasil yang ingin Anda tulis.

Setiap jenis hasil memiliki blok konfigurasi sendiri dengan CatalogTableConfig struktur bersama. Jika Anda tidak memberikanCatalogTableConfig, AWS Glue Data Quality memperoleh nilai default secara otomatis, termasuk nama tabel dan jalur Amazon S3.

CatalogTableConfigStruktur berisi bidang-bidang berikut:

  • DatabaseName(opsional) — Nama database katalog untuk tabel target. Jika tidak ditentukan, database default dibuat.

  • TableName(opsional) — Nama tabel target. Jika tidak ditentukan, nama tabel default digunakan.

  • S3Loc ation (opsional) — Lokasi Amazon S3 tempat data tabel disimpan. Format: s3://amzn-s3-demo-bucket/prefix/. Jika tidak ditentukan, hasil disimpan di lokasi default.

  • CatalogId(opsional) — ID Katalog Data AWS Glue tempat untuk membuat tabel. Jika tidak ditentukan, ID AWS akun digunakan secara default.

Contoh: Mengkonfigurasi hasil aturan dan hasil pembuatan profil

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "DataQualityRuleResults": { "WriteDataQualityRuleResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "rule_results" } }, "ProfilingResults": { "WriteProfilingResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "profiles" } } }'

Contoh: Mengkonfigurasi hasil tingkat baris

Untuk hasil tingkat baris, Anda juga dapat menentukan jenis catatan yang akan disertakan dan jumlah baris maksimum untuk ditulis.

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "RowLevelResults": { "MaxRowsToWrite": 5000, "ResultType": "FAILED_ONLY", "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "row_level_results" } } }'

ResultTypeParameter menerima nilai-nilai berikut:

  • FAILED_ONLY— Tulis hanya baris yang gagal setidaknya satu aturan kualitas data.

  • PASSED_ONLY— Tulis hanya baris yang melewati semua aturan kualitas data.

  • ALL— Tulis semua baris dengan hasil evaluasi mereka.

Contoh - Konfigurasikan dalam pekerjaan AWS Glue ETL

Dalam pekerjaan AWS Glue ETL, Anda mengonfigurasi hasil output menggunakan additional_options parameter dengan tombol notasi titik:

result = EvaluateDataQuality.process_rows( frame=dynamic_frame, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "my_context", "enableDataQualityResultsPublishing": True }, additional_options={ "observations.scope": "ALL", "dataQualityResultsPublishing.strategy": "BEST_EFFORT", "dataQualityResultsPublishing.resultsFormat.profilingResults.writeProfilingResultsEnabled": "true", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.databaseName": "my_db", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.tableName": "profiling_results", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.s3Location": "s3://amzn-s3-demo-bucket/profiling/", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.catalogId": "123456789012" } )

Contoh — Konfigurasikan hasil pengamatan

Anda dapat mengonfigurasi hasil pengamatan dengan cara yang sama seperti jenis hasil lainnya. Hasil pengamatan memerlukan deteksi anomali untuk diaktifkan (ObservationScope: ALL):

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "ObservationScope": "ALL", "ObservationResults": { "WriteObservationResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "observation_results" } } }'

Skema tabel

AWS Glue Data Quality menulis setiap jenis hasil ke tabel Iceberg terpisah. Hasil aturan, hasil pembuatan profil (termasuk tabel hasil distribusi terpisah), dan tabel hasil observasi dipartisi oleh,catalog_id, database_nametable_name, dan day(stored_on) untuk memungkinkan kueri yang efisien. Anda dapat memfilter secara stored_on langsung untuk kueri berbasis waktu dan Iceberg menangani pemangkasan partisi secara otomatis.

Tabel hasil aturan

Tabel hasil aturan menyimpan hasil lulus atau gagal untuk setiap aturan yang dievaluasi selama menjalankan kualitas data.

Kolom Jenis Deskripsi
dq_result_id STRING Pengidentifikasi unik untuk hasil kualitas data.
rule_name STRING Nama aturan (misalnya,Rule_1).
rule_description STRING Ekspresi DQDL untuk aturan.
rule_result STRING Hasil evaluasi: PASS atauFAIL.
evaluation_message STRING Pesan yang menjelaskan alasan kegagalan, jika berlaku.
evaluated_metrics PETA<STRING, DOUBLE> Metrik dievaluasi oleh aturan.
catalog_id STRING ID katalog tabel sumber.
database_name STRING Nama database dari tabel sumber.
table_name STRING Nama tabel sumber.
ruleset_evaluation_run_id STRING ID evaluasi yang dijalankan.
started_on TIMESTAMP Ketika evaluasi dimulai.
completed_on TIMESTAMP Ketika evaluasi selesai.
evaluated_rule STRING Ekspresi aturan yang dievaluasi setelah resolusi operan.
ruleset_name STRING Nama kumpulan aturan yang menghasilkan hasil ini.

Tabel hasil pembuatan profil

Tabel berikut menjelaskan kolom dalam tabel hasil pembuatan profil. Tabel ini menyimpan statistik skalar yang dikumpulkan oleh penganalisis dan aturan (sepertiMean,StandardDeviation, danCompleteness). AWS Glue Data Quality menyimpan statistik distribusi dalam tabel hasil distribusi terpisah.

Kolom Jenis Deskripsi
profile_id STRING Pengidentifikasi unik untuk profil kualitas data.
statistic_id STRING Pengidentifikasi unik untuk statistik.
statistic_name STRING Nama statistik (misalnya,Mean,Completeness)
evaluation_level STRING Tingkat di mana statistik dievaluasi:Dataset,Column, atauMulticolumn.
statistics_value DOUBLE Nilai skalar dari statistik.
statistic_properties PETA<STRING, STRING> Properti tambahan dari statistik.
columns_referenced ARRAY <STRING> Kolom yang direferensikan oleh statistik.
referenced_datasets ARRAY <STRING> Kumpulan data yang direferensikan untuk statistik.
column_name STRING Nama kolom target.
dq_result_id STRING Pengidentifikasi hasil kualitas data.
started_on TIMESTAMP Ketika evaluasi dimulai.
completed_on TIMESTAMP Ketika evaluasi selesai.
stored_on TIMESTAMP Ketika catatan itu ditulis ke meja.
catalog_id STRING ID Katalog dari tabel sumber.
database_name STRING Nama database dari tabel sumber.
table_name STRING Nama tabel sumber.
region STRING AWS Wilayah.
account_id STRING AWS ID akun.
ruleset_evaluation_run_id STRING ID evaluasi yang dijalankan.

Tabel hasil distribusi

Tabel berikut menjelaskan kolom dalam tabel hasil distribusi. Hasil distribusi disimpan secara terpisah dari statistik profil skalar, dengan satu baris per bin atau kategori. Anda dapat mengkonfigurasi tabel ini di dalam ProfilingResults.DistributionResults blok.

Kolom Jenis Deskripsi
statistic_id STRING Pengidentifikasi unik untuk statistik distribusi.
column_name STRING Kolom sumber (misalnya, “usia” atau “departemen”).
data_type STRING Jenis data kolom (misalnya, "LongType“," StringType “).
num_bins INT Jumlah tempat sampah yang digunakan untuk distribusi.
bin_index INT Posisi tempat sampah berbasis 0.
bin_label STRING Untuk kolom kategoris: nilai yang berbeda. NULL untuk kolom numerik.
bin_lower_bound STRING Untuk kolom numerik: tepi bawah tempat sampah. NULL untuk kolom kategoris.
bin_upper_bound STRING Untuk kolom numerik: tepi atas tempat sampah. NULL untuk kolom kategoris.
bin_count BIGINT Hitung frekuensi untuk tempat sampah ini.
null_count INT Jumlah nilai NULL yang dikecualikan dari distribusi. Nilai yang sama pada setiap baris untuk statistik tertentu dalam proses. NULL jika tidak ada nol.
tail_count INT Frekuensi agregat nilai kategoris di luar 20 teratas. Nilai yang sama pada setiap baris untuk statistik tertentu dalam proses. NULL untuk histogram numerik.
profile_id STRING Pengidentifikasi profil.
dq_result_id STRING Pengidentifikasi hasil kualitas data.
ruleset_evaluation_run_id STRING Pengidentifikasi menjalankan evaluasi.
started_on TIMESTAMP Ketika evaluasi dimulai.
completed_on TIMESTAMP Ketika evaluasi selesai.
stored_on TIMESTAMP Ketika catatan itu ditulis ke meja.
catalog_id STRING ID Katalog dari tabel sumber.
database_name STRING Nama database dari tabel sumber.
table_name STRING Nama tabel sumber.
region STRING AWS Wilayah.
account_id STRING AWS ID akun.

Row-level tabel hasil

Tabel berikut menjelaskan kolom dalam tabel hasil tingkat baris. Anda dapat menggunakan tabel ini untuk mengidentifikasi catatan tertentu yang gagal dalam aturan kualitas data Anda.

Kolom Jenis Deskripsi
Kolom sumber Bervariasi Semua kolom dari data sumber asli.
data_quality_rules_pass ARRAY <STRING> Aturan yang disahkan untuk catatan ini.
data_quality_rules_fail ARRAY <STRING> Aturan yang gagal untuk catatan ini.
data_quality_rules_skip ARRAY <STRING> Aturan yang dilewati untuk catatan ini.
data_quality_evaluation_result STRING Hasil evaluasi keseluruhan untuk catatan ini: Passed atauFailed.
dq_result_id STRING Pengidentifikasi unik untuk hasil kualitas data.
ruleset_evaluation_run_id STRING ID evaluasi yang dijalankan.
started_on TIMESTAMP Ketika evaluasi dimulai.
completed_on TIMESTAMP Ketika evaluasi selesai.
stored_on TIMESTAMP Ketika catatan itu ditulis ke meja.
catalog_id STRING ID Katalog dari tabel sumber.
database_name STRING Nama database dari tabel sumber.
table_name STRING Nama tabel sumber.
region STRING AWS Wilayah.
account_id STRING AWS ID akun.

Tabel hasil observasi

Tabel hasil pengamatan menyimpan prediksi deteksi anomali untuk setiap statistik pada setiap evaluasi. Tabel ini mencakup semua hasil prediksi: anomali, nilai normal, dan prediksi yang dilewati. Ini memungkinkan Anda membuat grafik tren berkelanjutan dengan pita prediksi.

Kolom Jenis Deskripsi
statistic_id STRING Identifier untuk statistik yang sedang dipantau.
statistic_name STRING Nama statistik yang dipantau.
prediction_outcome STRING Hasil deteksi anomali:ANOMALY,NOT_ANOMALY, atauSKIPPED.
expected_value DOUBLE Nilai yang diharapkan yang diprediksi. NULL saat prediksi dilewati.
lower_bound DOUBLE Batas bawah rentang yang diprediksi. NULL saat prediksi dilewati.
upper_bound DOUBLE Batas atas rentang yang diprediksi. NULL saat prediksi dilewati.
observation_message STRING Deskripsi anomali, jika terdeteksi.
training_input STRING Apakah titik data ini termasuk dalam model deteksi anomali: INCLUDED atauEXCLUDED.
ruleset_evaluation_run_id STRING ID evaluasi yang dijalankan.
recorded_on TIMESTAMP Ketika pengamatan dicatat.
stored_on TIMESTAMP Ketika catatan itu ditulis ke meja.
actual_value DOUBLE Nilai aktual yang diamati untuk statistik.
training_status STRING Status pelatihan model deteksi anomali (misalnya,PENDING,COMPLETED).
recommended_rules STRING Aturan direkomendasikan berdasarkan prediksi deteksi anomali.
modified_rules STRING Aturan dimodifikasi dengan ambang batas yang diperbarui berdasarkan prediksi.
catalog_id STRING ID Katalog dari tabel sumber.
database_name STRING Nama database dari tabel sumber.
table_name STRING Nama tabel sumber.
catatan

Tabel hasil pengamatan menggunakan model penulisan khusus lampiran. Saat Anda mengecualikan titik data menggunakan BatchPutDataQualityStatisticAnnotation API, baris baru ditambahkan dengan training_input set toEXCLUDED. Untuk menanyakan status terbaru dari setiap pengamatan, gunakan stored_on stempel waktu untuk mengidentifikasi baris terbaru untuk setiap statistik dan menjalankan kombinasi.

catatan

Tabel ini juga menyimpan pengamatan luapan distribusi, yang dihasilkan ketika lebih dari 2% nilai berada di luar batas tempat sampah beku. Baris-baris ini memiliki statistic_name = 'Distribution' dan prediction_outcome adalah NULL. observation_messageBidang berisi deskripsi luapan.

Mengkueri hasil dengan

Setelah evaluasi kualitas data selesai, Anda dapat menanyakan tabel hasil secara langsung menggunakan. Contoh berikut menunjukkan pola kueri umum.

Contoh: Menemukan aturan yang gagal untuk proses tertentu

SELECT rule_name, rule_description, evaluation_message, evaluated_metrics FROM quality_results.rule_results WHERE ruleset_evaluation_run_id = 'dqr-12345678' AND rule_result = 'FAIL' ORDER BY rule_name;

Contoh: Melihat statistik profil dari waktu ke waktu

SELECT stored_on, statistics_value FROM quality_results.profiles WHERE database_name = 'my_database' AND table_name = 'my_table' AND statistic_name = 'Mean' AND columns_referenced = ARRAY['salary'] ORDER BY stored_on;

Contoh — Mengidentifikasi baris yang gagal dalam aturan tertentu

SELECT * FROM quality_results.row_level_results WHERE data_quality_evaluation_result = 'Failed' AND contains(data_quality_rules_fail, 'IsComplete "email"');

Contoh — Melihat histogram numerik

SELECT bin_index, bin_lower_bound, bin_upper_bound, bin_count FROM quality_results.distributions WHERE column_name = 'salary' AND ruleset_evaluation_run_id = 'dqrun-abc123' ORDER BY bin_index;

Contoh — Melihat distribusi nilai kategoris

SELECT bin_label, bin_count FROM quality_results.distributions WHERE column_name = 'department' AND ruleset_evaluation_run_id = 'dqrun-abc123' ORDER BY bin_count DESC;

Contoh - Melacak frekuensi kategori dari waktu ke waktu

SELECT started_on, bin_count FROM quality_results.distributions WHERE column_name = 'status' AND bin_label = 'active' ORDER BY started_on;

Contoh: Melihat tren deteksi anomali dengan pita prediksi

SELECT o.recorded_on, p.statistics_value AS actual_value, o.expected_value, o.lower_bound, o.upper_bound, o.prediction_outcome FROM quality_results.profiles p JOIN quality_results.observation_results o ON p.statistic_id = o.statistic_id AND p.ruleset_evaluation_run_id = o.ruleset_evaluation_run_id WHERE p.database_name = 'my_database' AND p.table_name = 'my_table' AND p.statistic_name = 'RowCount' AND p.stored_on >= DATE '2025-03-01' ORDER BY p.stored_on;

Contoh — Kueri status pengamatan terbaru setelah anotasi

Karena tabel hasil pengamatan menggunakan model tambahan saja, anotasi pengecualian menambahkan baris baru. Gunakan kueri deduplikasi untuk mendapatkan status terbaru untuk setiap pengamatan:

SELECT statistic_id, statistic_name, prediction_outcome, expected_value, lower_bound, upper_bound, training_input, stored_on FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY statistic_id, ruleset_evaluation_run_id ORDER BY stored_on DESC ) AS rn FROM quality_results.observation_results WHERE database_name = 'my_database' AND table_name = 'my_table' ) WHERE rn = 1 ORDER BY stored_on;

Pertimbangan-pertimbangan

Ingatlah pertimbangan berikut saat menulis hasil kualitas data ke tabel Katalog Data:

  • AWS Glue Data Quality menyimpan hasil dalam format Apache Iceberg, yang mendukung kueri perjalanan waktu yang efisien dan pemangkasan partisi.

  • Tabel hasil tunggal dapat menyimpan hasil dari beberapa tabel sumber. Gunakan kolomcatalog_id,database_name, dan table_name partisi untuk memfilter hasil untuk sumber tertentu.

  • AWS Glue Data Quality menulis hasil observasi secara asinkron setelah evaluasi selesai. Mungkin ada penundaan singkat sebelum pengamatan muncul di tabel.

  • Untuk statistik distribusi dalam tabel hasil distribusi, setiap bin atau kategori disimpan sebagai baris terpisah. Misalnya, histogram dengan 20 bin menghasilkan 20 baris dalam tabel untuk statistik itu.