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://. Jika tidak ditentukan, hasil disimpan di lokasi default.amzn-s3-demo-bucket/prefix/ -
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 kolom
catalog_id,database_name, dantable_namepartisi 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.