Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Referensi Definisi Kualitas Data Bahasa (DQDL)
Data Quality Definition Language (DQDL) adalah bahasa khusus domain yang Anda gunakan untuk menentukan aturan untuk AWS Glue Data Quality.
Panduan ini memperkenalkan DQDL konsep-konsep kunci untuk membantu Anda memahami bahasa. Ini juga menyediakan referensi untuk jenis DQDL aturan dengan sintaks dan contoh. Sebelum Anda menggunakan panduan ini, kami menyarankan Anda untuk membiasakan diri dengan AWS Glue Data Quality. Untuk informasi selengkapnya, lihat AWS Glue Kualitas Data.
catatan
DynamicRules hanya didukung di AWS Glue ETL.
Daftar Isi
- DQDLsintaks
- DQDLreferensi tipe aturan
- AggregateMatch
- ColumnCorrelation
- ColumnCount
- ColumnDataType
- ColumnExists
- ColumnLength
- ColumnNamesMatchPattern
- ColumnValues
- Kelengkapan
- Kustom SQL
- DataFreshness
- DatasetMatch
- DistinctValuesCount
- Entropi
- IsComplete
- IsPrimaryKey
- IsUnique
- Berarti
- ReferentialIntegrity
- RowCount
- RowCountMatch
- StandardDeviation
- Jumlah
- SchemaMatch
- Keunikan
- UniqueValueRatio
- DetectAnomalies
- FileFreshness
- FileMatch
- FileUniqueness
- FileSize
DQDLsintaks
DQDLDokumen bersifat peka huruf besar/kecil dan berisi kumpulan aturan, yang mengelompokkan aturan kualitas data individu bersama-sama. Untuk membuat kumpulan aturan, Anda harus membuat daftar bernama Rules
(huruf besar), dibatasi oleh sepasang tanda kurung siku. Daftar harus berisi satu atau lebih DQDL aturan dipisahkan koma seperti contoh berikut.
Rules = [ IsComplete "order-id", IsUnique "order-id" ]
Struktur aturan
Struktur DQDL aturan tergantung pada jenis aturan. Namun, DQDL aturan umumnya sesuai dengan format berikut.
<RuleType> <Parameter> <Parameter> <Expression>
RuleType
adalah nama peka huruf besar/kecil dari jenis aturan yang ingin Anda konfigurasikan. Sebagai contoh, IsComplete
, IsUnique
, atau CustomSql
. Parameter aturan berbeda untuk setiap jenis aturan. Untuk referensi lengkap jenis DQDL aturan dan parameternya, lihatDQDLreferensi tipe aturan.
Aturan komposit
DQDLmendukung operator logis berikut yang dapat Anda gunakan untuk menggabungkan aturan. Aturan-aturan ini disebut aturan komposit.
- and
-
and
Operator logis menghasilkantrue
if dan hanya jika aturan yang menghubungkannyatrue
. Jika tidak, aturan gabungan menghasilkanfalse
. Setiap aturan yang Anda hubungkan denganand
operator harus dikelilingi oleh tanda kurung.Contoh berikut menggunakan
and
operator untuk menggabungkan dua DQDL aturan.(IsComplete "id") and (IsUnique "id")
- atau
-
or
Operator logis menghasilkantrue
jika dan hanya jika satu atau lebih aturan yang menghubungkannyatrue
. Setiap aturan yang Anda hubungkan denganor
operator harus dikelilingi oleh tanda kurung.Contoh berikut menggunakan
or
operator untuk menggabungkan dua DQDL aturan.(RowCount "id" > 100) or (IsPrimaryKey "id")
Anda dapat menggunakan operator yang sama untuk menghubungkan beberapa aturan, sehingga kombinasi aturan berikut diperbolehkan.
(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) and (IsComplete "Order_Id")
Anda dapat menggabungkan operator logis menjadi satu ekspresi. Sebagai contoh:
(Mean "Star_Rating" > 3) and ((Mean "Order_Total" > 500) or (IsComplete "Order_Id"))
Anda juga dapat membuat aturan yang lebih kompleks dan bersarang.
(RowCount > 0) or ((IsComplete "colA") and (IsUnique "colA"))
Cara kerja aturan Komposit
Secara default, Aturan Komposit dievaluasi sebagai aturan individual di seluruh kumpulan data atau tabel dan kemudian hasilnya digabungkan. Dengan kata lain, ini mengevaluasi seluruh kolom terlebih dahulu dan kemudian menerapkan operator. Perilaku default ini dijelaskan di bawah ini dengan contoh:
# Dataset +------+------+ |myCol1|myCol2| +------+------+ | 2| 1| | 0| 3| +------+------+ # Overall outcome +----------------------------------------------------------+-------+ |Rule |Outcome| +----------------------------------------------------------+-------+ |(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)|Failed | +----------------------------------------------------------+-------+
Dalam contoh di atas, AWS Glue Data Quality evaluasi pertama (ColumnValues "myCol1" > 1)
yang akan mengakibatkan kegagalan. Maka akan mengevaluasi (ColumnValues "myCol2" > 2)
mana yang juga akan gagal. Kombinasi kedua hasil akan dicatat sebagaiFAILED.
Namun, jika Anda lebih suka perilaku SQL seperti, di mana Anda memerlukan seluruh baris untuk dievaluasi, Anda harus secara eksplisit mengatur ruleEvaluation.scope
parameter seperti yang ditunjukkan pada cuplikan kode additionalOptions
di bawah ini.
object GlueApp { val datasource = glueContext.getCatalogSource( database="<db>", tableName="<table>", transformationContext="datasource" ).getDynamicFrame() val ruleset = """ Rules = [ (ColumnValues "age" >= 26) OR (ColumnLength "name" >= 4) ] """ val dq_results = EvaluateDataQuality.processRows( frame=datasource, ruleset=ruleset, additionalOptions=JsonOptions(""" { "compositeRuleEvaluation.method":"ROW" } """ ) ) }
Di AWS Glue Data Catalog, Anda dapat dengan mudah mengkonfigurasi opsi ini di antarmuka pengguna seperti yang ditunjukkan di bawah ini.
Setelah ditetapkan, aturan komposit akan berperilaku sebagai aturan tunggal yang mengevaluasi seluruh baris. Contoh berikut menggambarkan perilaku ini.
# Row Level outcome +------+------+------------------------------------------------------------+---------------------------+ |myCol1|myCol2|DataQualityRulesPass |DataQualityEvaluationResult| +------+------+------------------------------------------------------------+---------------------------+ |2 |1 |[(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)]|Passed | |0 |3 |[(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)]|Passed | +------+------+------------------------------------------------------------+---------------------------+
Beberapa aturan tidak dapat didukung dalam fitur ini karena hasil keseluruhannya bergantung pada ambang batas atau rasio. Mereka tercantum di bawah ini.
Aturan yang mengandalkan rasio:
-
Kelengkapan
-
DatasetMatch
-
ReferentialIntegrity
-
Keunikan
Aturan tergantung pada ambang batas:
Ketika aturan berikut termasuk dengan ambang batas, mereka tidak didukung. Namun, aturan yang tidak melibatkan with threshold
tetap didukung.
-
ColumnDataType
-
ColumnValues
-
Kustom SQL
Ekspresi
Jika tipe aturan tidak menghasilkan respons Boolean, Anda harus memberikan ekspresi sebagai parameter untuk membuat respons Boolean. Misalnya, aturan berikut memeriksa rata-rata (rata-rata) dari semua nilai dalam kolom terhadap ekspresi untuk mengembalikan hasil benar atau salah.
Mean "colA" between 80 and 100
Beberapa jenis aturan seperti IsUnique
dan IsComplete
sudah mengembalikan respons Boolean.
Tabel berikut mencantumkan ekspresi yang dapat Anda gunakan dalam DQDL aturan.
Ekspresi | Deskripsi | Contoh |
---|---|---|
=x |
Menyelesaikan true jika respons tipe aturan sama dengan x . |
|
!=x
|
x Menyelesaikan ke true jika respons tipe aturan tidak sama dengan x . |
|
> x |
Menyelesaikan true jika respons tipe aturan lebih besar dari x . |
|
< x |
Menyelesaikan true jika respons tipe aturan kurang dari x . |
|
>= x |
Menyelesaikan true jika respons tipe aturan lebih dari atau sama dengan x . |
|
<= x |
Menyelesaikan true jika respons tipe aturan kurang dari atau sama dengan x . |
|
antara x and y |
Menyelesaikan true jika respons tipe aturan jatuh dalam rentang tertentu (eksklusif). Hanya gunakan jenis ekspresi ini untuk tipe numerik dan tanggal. |
|
Tidak di antara x and y
|
Menyelesaikan ke true jika respons tipe aturan tidak termasuk dalam rentang tertentu (inklusif). Anda hanya harus menggunakan tipe ekspresi ini untuk tipe numerik dan tanggal. |
|
di [a, b, c, ... ] |
Menyelesaikan true jika respons tipe aturan ada di set yang ditentukan. |
|
tidak di [a, b, c, ... ] |
Menyelesaikan true jika respons tipe aturan tidak ada dalam set yang ditentukan. |
|
korek api /ab+c/i |
Menyelesaikan true jika respons tipe aturan cocok dengan ekspresi reguler. |
|
tidak cocok /ab+c/i |
Menyelesaikan true jika respons tipe aturan tidak cocok dengan ekspresi reguler. |
|
now() |
Bekerja hanya dengan jenis ColumnValues aturan untuk membuat ekspresi tanggal. |
|
matches/in […]/not matches/notdi [...] with threshold |
Menentukan persentase nilai yang cocok dengan kondisi aturan. Bekerja hanya denganColumnValues ,ColumnDataType , dan jenis CustomSQL aturan. |
|
Kata kunci untukNULL, EMPTY dan WHITESPACES _ ONLY
Jika Anda ingin memvalidasi jika kolom string memiliki nol, kosong atau string dengan hanya spasi putih Anda dapat menggunakan kata kunci berikut:
-
NULL/null — Kata kunci ini menyelesaikan true untuk
null
nilai dalam kolom string.ColumnValues "colA" != NULL with threshold > 0.5
akan mengembalikan true jika lebih dari 50% data Anda tidak memiliki nilai nol.(ColumnValues "colA" = NULL) or (ColumnLength "colA" > 5)
akan mengembalikan true untuk semua baris yang memiliki nilai nol atau memiliki panjang> 5. Perhatikan bahwa ini akan memerlukan penggunaan opsi “compositeRuleEvaluation.method” = “ROW”. -
EMPTY/kosong — Kata kunci ini menyelesaikan true untuk nilai string kosong (“”) dalam kolom string. Beberapa format data mengubah nol dalam kolom string menjadi string kosong. Kata kunci ini membantu menyaring string kosong dalam data Anda.
(ColumnValues "colA" = EMPTY) or (ColumnValues "colA" in ["a", "b"])
akan mengembalikan true jika baris kosong, “a” atau “b”. Perhatikan bahwa ini memerlukan penggunaan opsi “compositeRuleEvaluation.method” = “ROW”. -
WHITESPACES_ONLY/whitespaces_only — Kata kunci ini menyelesaikan true untuk string dengan hanya spasi putih (“”) nilai dalam kolom string.
ColumnValues "colA" not in ["a", "b", WHITESPACES_ONLY]
akan mengembalikan true jika baris bukan “a” atau “b” atau hanya spasi putih.Aturan yang didukung:
Untuk ekspresi berbasis numerik atau tanggal, jika Anda ingin memvalidasi jika kolom memiliki nol, Anda dapat menggunakan kata kunci berikut.
-
NULL/null — Kata kunci ini menyelesaikan true untuk nilai null dalam kolom string.
ColumnValues "colA" in [NULL, "2023-01-01"]
akan mengembalikan true jika tanggal di kolom Anda salah satu2023-01-01
atau nol.(ColumnValues "colA" = NULL) or (ColumnValues "colA" between 1 and 9)
akan mengembalikan true untuk semua baris yang memiliki nilai nol atau memiliki nilai antara 1 dan 9. Perhatikan bahwa ini akan memerlukan penggunaan opsi “compositeRuleEvaluation.method” = “ROW”.Aturan yang didukung:
Pemfilteran dengan Klausul Where
catatan
Di mana Klausul hanya didukung di AWS Glue 4.0.
Anda dapat memfilter data saat membuat aturan. Ini sangat membantu ketika Anda ingin menerapkan aturan bersyarat.
<DQDL Rule> where "<valid SparkSQL where clause> "
Filter harus ditentukan dengan where
kata kunci, diikuti oleh SQL pernyataan Spark yang valid yang diapit tanda kutip. ("")
Jika aturan Anda ingin menambahkan klausa where ke aturan dengan ambang batas, klausa where harus ditentukan sebelum kondisi ambang batas.
<DQDL Rule> where "valid SparkSQL statement>" with threshold <threshold condition>
Dengan sintaks ini Anda dapat menulis aturan seperti berikut ini.
Completeness "colA" > 0.5 where "colB = 10" ColumnValues "colB" in ["A", "B"] where "colC is not null" with threshold > 0.9 ColumnLength "colC" > 10 where "colD != Concat(colE, colF)"
Kami akan memvalidasi bahwa SQL pernyataan Spark yang diberikan valid. Jika tidak valid, evaluasi aturan akan gagal dan kami akan melempar a IllegalArgumentException
dengan format berikut:
Rule <DQDL Rule> where "<invalid SparkSQL>" has provided an invalid where clause : <SparkSQL Error>
Di mana perilaku klausa saat identifikasi catatan kesalahan tingkat baris diaktifkan
Dengan AWS Glue Data Quality, Anda dapat mengidentifikasi catatan spesifik yang gagal. Saat menerapkan klausa where ke aturan yang mendukung hasil tingkat baris, kami akan memberi label pada baris yang disaring oleh klausa where sebagai. Passed
Jika Anda lebih suka memberi label secara terpisah pada baris yang difilter sebagaiSKIPPED
, Anda dapat mengatur yang berikut additionalOptions
untuk ETL pekerjaan itu.
object GlueApp { val datasource = glueContext.getCatalogSource( database="<db>", tableName="<table>", transformationContext="datasource" ).getDynamicFrame() val ruleset = """ Rules = [ IsComplete "att2" where "att1 = 'a'" ] """ val dq_results = EvaluateDataQuality.processRows( frame=datasource, ruleset=ruleset, additionalOptions=JsonOptions(""" { "rowLevelConfiguration.filteredRowLabel":"SKIPPED" } """ ) ) }
Sebagai contoh, lihat aturan dan kerangka data berikut:
IsComplete att2 where "att1 = 'a'"
id | att1 | att2 | Hasil tingkat baris (Default) | Hasil Tingkat Baris (Opsi Dilewati) | Komentar |
---|---|---|---|---|---|
1 | a | f | PASSED | PASSED | |
2 | b | d | PASSED | SKIPPED | Baris disaring, att1 karena tidak "a" |
3 | a | null | FAILED | FAILED | |
4 | a | f | PASSED | PASSED | |
5 | b | null | PASSED | SKIPPED | Baris disaring, att1 karena tidak "a" |
6 | a | f | PASSED | PASSED |
Aturan Dinamis
catatan
Aturan Dinamis hanya didukung di AWS Glue ETL dan tidak didukung di AWS Glue Data Catalog.
Anda sekarang dapat membuat aturan dinamis untuk membandingkan metrik saat ini yang dihasilkan oleh aturan Anda dengan nilai historisnya. Perbandingan historis ini diaktifkan dengan menggunakan last()
operator dalam ekspresi. Misalnya, aturan RowCount >
last()
akan berhasil ketika jumlah baris dalam proses saat ini lebih besar dari jumlah baris sebelumnya terbaru untuk kumpulan data yang sama. last()
mengambil argumen bilangan asli opsional yang menjelaskan berapa banyak metrik sebelumnya untuk dipertimbangkan; last(k)
di mana k
>= 1
akan merujuk metrik terakhirk
.
-
Jika tidak ada titik data yang tersedia,
last(k)
akan mengembalikan nilai default 0.0. -
Jika kurang dari
k
metrik yang tersedia,last(k)
akan mengembalikan semua metrik sebelumnya.
Untuk membentuk ekspresi yang valid gunakanlast(k)
, di mana k > 1
memerlukan fungsi agregasi untuk mengurangi beberapa hasil historis menjadi satu nomor. Misalnya, RowCount > avg(last(5))
akan memeriksa apakah jumlah baris kumpulan data saat ini benar-benar lebih besar dari rata-rata jumlah lima baris terakhir untuk kumpulan data yang sama. RowCount > last(5)
akan menghasilkan kesalahan karena jumlah baris kumpulan data saat ini tidak dapat dibandingkan secara bermakna dengan daftar.
Fungsi agregasi yang didukung:
-
avg
-
median
-
max
-
min
-
sum
-
std
(standar deviasi) -
abs
(nilai absolut) -
index(last(k), i)
akan memungkinkan untuk memilih nilai terbaru dari yang terakhirk
.i
i
diindeks nol, jadiindex(last(3), 0)
akan mengembalikan titik data terbaru danindex(last(3), 3)
akan menghasilkan kesalahan karena hanya ada tiga titik data dan kami mencoba untuk mengindeks yang terbaru ke-4.
Ekspresi sampel
ColumnCorrelation
ColumnCorrelation "colA" "colB" < avg(last(10))
DistinctValuesCount
DistinctValuesCount "colA" between min(last(10))-1 and max(last(10))+1
Sebagian besar tipe aturan dengan kondisi numerik atau ambang batas mendukung aturan dinamis; lihat tabel yang disediakan, Analisa dan Aturan, untuk menentukan apakah aturan dinamis didukung untuk jenis aturan Anda.
Tidak termasuk statistik dari aturan dinamis
Terkadang, Anda perlu mengecualikan statistik data dari perhitungan aturan dinamis Anda. Katakanlah Anda melakukan pemuatan data historis dan Anda tidak ingin itu memengaruhi rata-rata Anda. Untuk melakukan ini, buka pekerjaan di AWS Glue ETL dan pilih Tab Kualitas Data, lalu pilih Statistik dan pilih statistik yang ingin Anda kecualikan. Anda akan dapat melihat grafik tren bersama dengan tabel statistik. Pilih nilai yang ingin Anda kecualikan dan pilih Kecualikan Statistik. Sekarang statistik yang dikecualikan tidak akan dimasukkan dalam perhitungan aturan dinamis.
Penganalisis
catatan
Analyzer tidak didukung di AWS Glue Data Catalog.
DQDLaturan menggunakan fungsi yang disebut analyzer untuk mengumpulkan informasi tentang data Anda. Informasi ini digunakan oleh ekspresi Boolean aturan untuk menentukan apakah aturan harus berhasil atau gagal. Misalnya, RowCount aturan RowCount > 5
akan menggunakan penganalisis hitungan baris untuk menemukan jumlah baris dalam kumpulan data Anda, dan membandingkan jumlah itu dengan ekspresi > 5
untuk memeriksa apakah ada lebih dari lima baris dalam kumpulan data saat ini.
Terkadang, alih-alih membuat aturan, kami sarankan untuk membuat penganalisis dan kemudian membuatnya menghasilkan statistik yang dapat digunakan untuk mendeteksi anomali. Untuk contoh seperti itu, Anda dapat membuat penganalisis. Penganalisis berbeda dari aturan dengan cara berikut.
Karakteristik | Penganalisis | Aturan |
---|---|---|
Bagian dari set aturan | Ya | Ya |
Menghasilkan Statistik | Ya | Ya |
Menghasilkan observasi | Ya | Ya |
Dapat mengevaluasi dan menegaskan suatu kondisi | Tidak | Ya |
Anda dapat mengonfigurasi tindakan seperti menghentikan pekerjaan pada kegagalan, melanjutkan pekerjaan pemrosesan | Tidak | Ya |
Analyzer dapat eksis secara independen tanpa aturan, sehingga Anda dapat dengan cepat mengonfigurasinya dan secara progresif membangun aturan kualitas data.
Beberapa jenis aturan dapat dimasukkan ke dalam Analyzers
blok kumpulan aturan Anda untuk menjalankan aturan yang diperlukan untuk penganalisis dan mengumpulkan informasi tanpa menerapkan pemeriksaan untuk kondisi apa pun. Beberapa penganalisis tidak terkait dengan aturan dan hanya dapat dimasukkan ke dalam Analyzers
blok. Tabel berikut menunjukkan apakah setiap item didukung sebagai aturan atau penganalisis mandiri, bersama dengan detail tambahan untuk setiap jenis aturan.
Contoh Ruleset dengan Analyzer
Ruleset berikut menggunakan:
-
aturan dinamis untuk memeriksa apakah kumpulan data tumbuh di atas rata-rata trailing untuk tiga pekerjaan terakhir
-
DistinctValuesCount
analyzer untuk mencatat jumlah nilai yang berbeda di kolom set dataName
-
ColumnLength
analyzer untuk melacakName
ukuran minimum dan maksimum dari waktu ke waktu
Hasil metrik penganalisis dapat dilihat di tab Kualitas Data untuk menjalankan pekerjaan Anda.
Rules = [ RowCount > avg(last(3)) ] Analyzers = [ DistinctValuesCount "Name", ColumnLength "Name" ]
AWS Glue Data Quality mendukung analisa berikut.
Nama analyzer | Fungsionalitas |
---|---|
RowCount |
Menghitung jumlah baris untuk kumpulan data |
Completeness |
Menghitung persentase kelengkapan kolom |
Uniqueness |
Menghitung persentase keunikan kolom |
Mean |
Menghitung rata-rata kolom numerik |
Sum |
Menghitung jumlah kolom numerik |
StandardDeviation |
Menghitung standar deviasi kolom numerik |
Entropy |
Menghitung entropi kolom numerik |
DistinctValuesCount |
Menghitung jumlah nilai yang berbeda dalam kolom |
UniqueValueRatio |
Menghitung rasio nilai unik dalam kolom |
ColumnCount |
Menghitung jumlah kolom dalam set data |
ColumnLength |
Menghitung panjang kolom |
ColumnValues |
Menghitung minimum, maksimum untuk kolom numerik. Menghitung Minimum ColumnLength dan Maksimum ColumnLength untuk kolom non-numerik |
ColumnCorrelation |
Menghitung korelasi kolom untuk kolom yang diberikan |
CustomSql |
Menghitung statistik yang dikembalikan oleh Custom SQL |
AllStatistics |
Menghitung statistik berikut:
|
Komentar
Anda dapat menggunakan karakter '#' untuk menambahkan komentar ke DQDL dokumen Anda. Apa pun setelah karakter '#' dan sampai akhir baris diabaikan olehDQDL.
Rules = [ # More items should generally mean a higher price, so correlation should be positive ColumnCorrelation "price" "num_items" > 0 ]