Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Riferimento a Data Quality Definition Language (DQDL)
Data Quality Definition Language (DQDL) è un linguaggio specifico del dominio utilizzato per definire le regole per AWS Glue Data Quality.
Questa guida introduce i DQDL concetti chiave per aiutarti a comprendere la lingua. Fornisce inoltre un riferimento per i tipi di DQDL regole con sintassi ed esempi. Prima di utilizzare questa guida, ti consigliamo di acquisire familiarità con AWS Glue Data Quality. Per ulteriori informazioni, consulta AWS Glue Qualità dei dati.
Nota
DynamicRules sono supportati solo in AWS Glue ETL.
Indice
- DQDLsintassi
- DQDLriferimento del tipo di regola
- AggregateMatch
- ColumnCorrelation
- ColumnCount
- ColumnDataType
- ColumnExists
- ColumnLength
- ColumnNamesMatchPattern
- ColumnValues
- Completezza
- Personalizzato SQL
- DataFreshness
- DatasetMatch
- DistinctValuesCount
- Entropia
- IsComplete
- IsPrimaryKey
- IsUnique
- Media
- ReferentialIntegrity
- RowCount
- RowCountMatch
- StandardDeviation
- Somma
- SchemaMatch
- Univocità
- UniqueValueRatio
- DetectAnomalies
- FileFreshness
- FileMatch
- FileUniqueness
- FileSize
DQDLsintassi
Un DQDL documento fa distinzione tra maiuscole e minuscole e contiene un set di regole che raggruppa le singole regole di qualità dei dati. Per costruire un set di regole, è necessario creare un elenco denominato Rules
(in maiuscolo), delimitato da una coppia di parentesi quadre. L'elenco deve contenere una o più DQDL regole separate da virgole come nell'esempio seguente.
Rules = [ IsComplete "order-id", IsUnique "order-id" ]
Struttura delle regole
La struttura di una DQDL regola dipende dal tipo di regola. Tuttavia, DQDL le regole generalmente si adattano al seguente formato.
<RuleType> <Parameter> <Parameter> <Expression>
RuleType
è il nome (sensibile al maiuscolo/minuscolo) del tipo di regola che si desidera configurare. Ad esempio, IsComplete
, IsUnique
o CustomSql
. I parametri delle regole sono diversi per ogni tipo di regola. Per un riferimento completo ai tipi di DQDL regole e ai relativi parametri, consultaDQDLriferimento del tipo di regola.
Regole composite
DQDLsupporta i seguenti operatori logici che possono essere utilizzati per combinare le regole. Queste regole sono chiamate regole composite.
- e
-
L'operatore logico
and
restituiscetrue
se e solo se le regole che connette sonotrue
. Altrimenti, la regola combinata darà come risultatofalse
. Ogni regola connessa all'operatoreand
deve essere racchiusa tra parentesi.L'esempio seguente utilizza l'
and
operatore per combinare due DQDL regole.(IsComplete "id") and (IsUnique "id")
- oppure
-
L'operatore logico
or
restituiscetrue
se e solo se una o più regole che connette sonotrue
. Ogni regola connessa all'operatoreor
deve essere racchiusa tra parentesi.L'esempio seguente utilizza l'
or
operatore per combinare due DQDL regole.(RowCount "id" > 100) or (IsPrimaryKey "id")
È possibile utilizzare lo stesso operatore per connettere più regole, quindi la seguente combinazione di regole è consentita.
(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) and (IsComplete "Order_Id")
È possibile combinare gli operatori logici in un'unica espressione. Per esempio:
(Mean "Star_Rating" > 3) and ((Mean "Order_Total" > 500) or (IsComplete "Order_Id"))
È inoltre possibile creare regole annidate più complesse.
(RowCount > 0) or ((IsComplete "colA") and (IsUnique "colA"))
Come funzionano le regole composite
Per impostazione predefinita, le regole composite vengono valutate come regole individuali nell'intero set di dati o nella tabella e quindi i risultati vengono combinati. In altre parole, valuta prima l'intera colonna e poi applica l'operatore. Questo comportamento predefinito è spiegato di seguito con un esempio:
# Dataset +------+------+ |myCol1|myCol2| +------+------+ | 2| 1| | 0| 3| +------+------+ # Overall outcome +----------------------------------------------------------+-------+ |Rule |Outcome| +----------------------------------------------------------+-------+ |(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)|Failed | +----------------------------------------------------------+-------+
Nell'esempio precedente, AWS Glue Data Quality valuta innanzitutto (ColumnValues "myCol1" > 1)
quale sarà il risultato di un errore. Quindi valuterà anche (ColumnValues "myCol2" > 2)
quale fallirà. La combinazione di entrambi i risultati verrà indicata comeFAILED.
Tuttavia, se si preferisce un comportamento SQL simile, in cui è necessario valutare l'intera riga, è necessario impostare esplicitamente il ruleEvaluation.scope
parametro come mostrato additionalOptions
nel frammento di codice riportato di seguito.
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" } """ ) ) }
In AWS Glue Data Catalog, è possibile configurare facilmente questa opzione nell'interfaccia utente come illustrato di seguito.
Una volta impostate, le regole composite si comporteranno come un'unica regola che valuta l'intera riga. L'esempio seguente illustra questo comportamento.
# 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 | +------+------+------------------------------------------------------------+---------------------------+
Alcune regole non possono essere supportate in questa funzionalità perché il loro risultato complessivo si basa su soglie o rapporti. Sono elencati qui di seguito.
Regole basate sui rapporti:
-
Completezza
-
DatasetMatch
-
ReferentialIntegrity
-
Univocità
Regole dipendenti dalle soglie:
Quando le seguenti regole includono una soglia, non sono supportate. Tuttavia, le regole che non lo prevedono with threshold
rimangono supportate.
-
ColumnDataType
-
ColumnValues
-
Personalizzato SQL
Espressioni
Se un tipo di regola non produce una risposta booleana, è necessario fornire un'espressione come parametro per creare una risposta booleana. Ad esempio, la regola seguente controlla la media di tutti i valori di una colonna rispetto a un'espressione per restituire un risultato vero o falso.
Mean "colA" between 80 and 100
Alcuni tipi di regole, ad esempio IsUnique
e IsComplete
, restituiscono già una risposta booleana.
Nella tabella seguente sono riportate le espressioni che è possibile utilizzare nelle DQDL regole.
Expression | Descrizione | Esempio |
---|---|---|
=x |
Si risolve in true se la risposta del tipo di regola è uguale a x . |
|
!=x
|
x Si risolve in true se la risposta del tipo di regola non è uguale a x . |
|
> x |
Si risolve in true se la risposta del tipo di regola è maggiore di x . |
|
< x |
Si risolve in true se la risposta del tipo di regola è minore di x . |
|
>= x |
Si risolve in true se la risposta del tipo di regola è maggiore o uguale a x . |
|
<= x |
Si risolve in true se la risposta del tipo di regola è minore o uguale a x . |
|
tra x e y |
Si risolve in true se la risposta del tipo di regola rientra in un intervallo specificato (esclusivo). Utilizza questo tipo di espressione solo per i tipi numerici e data. |
|
non compreso tra x e y
|
Si risolve in true se la risposta del tipo di regola non rientra in un intervallo specificato (incluso). È necessario utilizzare questo tipo di espressione solo per i tipi numerici e data. |
|
in [a, b, c, ... ] |
Si risolve in true se la risposta del tipo di regola è nel set specificato. |
|
non in [a, b, c, ... ] |
Si risolve in true se la risposta del tipo di regola non è nel set specificato. |
|
fiammiferi /ab+c/i |
Si risolve in true se la risposta del tipo di regola corrisponde a un'espressione regolare. |
|
non corrisponde /ab+c/i |
Si risolve in true se la risposta del tipo di regola non corrisponde a un'espressione regolare. |
|
now() |
Funziona solo con il tipo di regola ColumnValues per creare un'espressione di data. |
|
matches/in […]/not matches/notin [...] with threshold |
Specifica la percentuale di valori che corrispondono alle condizioni della regola. Funziona solo con i tipi di CustomSQL regole ColumnValues ColumnDataType , e. |
|
Parole chiave perNULL, EMPTY e WHITESPACES _ ONLY
Se vuoi verificare se una colonna di stringhe ha un valore nullo, vuoto o una stringa con solo spazi bianchi, puoi usare le seguenti parole chiave:
-
NULL/null: questa parola chiave viene risolta in true per un valore in una colonna di stringhe.
null
ColumnValues "colA" != NULL with threshold > 0.5
restituirebbe true se più del 50% dei dati non ha valori nulli.(ColumnValues "colA" = NULL) or (ColumnLength "colA" > 5)
restituirebbe true per tutte le righe che hanno un valore nullo o hanno una lunghezza >5. Nota che ciò richiederà l'uso dell'opzione «compositeRuleEvaluation.method» = «ROW». -
EMPTY/empty: questa parola chiave viene risolta in true per un valore di stringa vuoto («») in una colonna di stringhe. Alcuni formati di dati trasformano i valori null in una colonna di stringhe in stringhe vuote. Questa parola chiave aiuta a filtrare le stringhe vuote nei dati.
(ColumnValues "colA" = EMPTY) or (ColumnValues "colA" in ["a", "b"])
restituirebbe true se una riga è vuota, «a» o «b». Nota che ciò richiede l'uso dell'opzione «compositeRuleEvaluation.method» = «ROW». -
WHITESPACES_ONLY/whitespaces_only — Questa parola chiave viene risolta in true per una stringa con solo valori di spazi bianchi («») in una colonna di stringhe.
ColumnValues "colA" not in ["a", "b", WHITESPACES_ONLY]
restituirebbe true se una riga non è né «a» o «b» né solo spazi bianchi.Regole supportate:
Per un'espressione numerica o basata sulla data, se vuoi convalidare se una colonna ha un valore nullo, puoi usare le seguenti parole chiave.
-
NULL/null: questa parola chiave viene risolta in true per un valore nullo in una colonna di stringhe.
ColumnValues "colA" in [NULL, "2023-01-01"]
restituirebbe true se le date nella colonna sono entrambe o nulle.2023-01-01
(ColumnValues "colA" = NULL) or (ColumnValues "colA" between 1 and 9)
restituirebbe true per tutte le righe che hanno un valore nullo o hanno valori compresi tra 1 e 9. Nota che ciò richiederà l'uso dell'opzione «compositeRuleEvaluation.method» = «ROW».Regole supportate:
Filtraggio con la clausola Where
Nota
Where Clause è supportato solo in AWS Glue 4.0.
È possibile filtrare i dati durante la creazione di regole. Ciò è utile quando si desidera applicare regole condizionali.
<DQDL Rule> where "<valid SparkSQL where clause> "
Il filtro deve essere specificato con la where
parola chiave, seguita da un'SQListruzione Spark valida racchiusa tra virgolette. ("")
Se alla regola desideri aggiungere la clausola where a una regola con una soglia, la clausola where deve essere specificata prima della condizione di soglia.
<DQDL Rule> where "valid SparkSQL statement>" with threshold <threshold condition>
Con questa sintassi è possibile scrivere regole come le seguenti.
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)"
Verificheremo che l'SQListruzione Spark fornita sia valida. Se non è valida, la valutazione della regola avrà esito negativo e lanceremo l'annuncio IllegalArgumentException
con il seguente formato:
Rule <DQDL Rule> where "<invalid SparkSQL>" has provided an invalid where clause : <SparkSQL Error>
Comportamento della clausola Where quando l'identificazione del record di errore a livello di riga è attivata
Con AWS Glue Data Quality, puoi identificare record specifici che hanno avuto esito negativo. Quando applichiamo una clausola where a regole che supportano i risultati a livello di riga, etichetteremo le righe che vengono filtrate dalla clausola where come. Passed
Se preferisci etichettare separatamente le righe filtrate comeSKIPPED
, puoi impostare quanto segue additionalOptions
per il lavoro. ETL
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" } """ ) ) }
Ad esempio, vedi le regole e dataframe seguenti:
IsComplete att2 where "att1 = 'a'"
id | att1 | att2 | Risultati a livello di riga (impostazione predefinita) | Risultati a livello di riga (opzione ignorata) | Commenti |
---|---|---|---|---|---|
1 | a | f | PASSED | PASSED | |
2 | b | d | PASSED | SKIPPED | La riga viene filtrata, poiché att1 non lo è "a" |
3 | a | null | FAILED | FAILED | |
4 | a | f | PASSED | PASSED | |
5 | b | null | PASSED | SKIPPED | La riga viene filtrata, poiché att1 non lo è "a" |
6 | a | f | PASSED | PASSED |
Regole dinamiche
Nota
Le regole dinamiche sono supportate solo in AWS ETL Glue e non sono supportate in AWS Glue Data Catalog.
Ora puoi creare regole dinamiche per confrontare le metriche correnti prodotte dalle tue regole con i relativi valori storici. Questi confronti storici sono abilitati utilizzando l'operatore last()
nelle espressioni. Ad esempio, la regola RowCount >
last()
avrà esito positivo se il numero di righe nell'esecuzione corrente è maggiore del conteggio precedente più recente delle righe per lo stesso set di dati. last()
utilizza un argomento facoltativo relativo ai numeri naturali che descrive il numero di metriche precedenti da prendere in considerazione; last(k)
dove k
>= 1
farà riferimento alle ultime k
metriche.
-
Se non sono disponibili punti dati,
last(k)
restituirà il valore predefinito 0,0. -
Se sono disponibili meno di
k
metriche,last(k)
restituirà tutte quelle precedenti.
Utilizza last(k)
per formare espressioni valide, dove k > 1
richiede una funzione di aggregazione per ridurre più risultati storici a un unico numero. Ad esempio, RowCount > avg(last(5))
controllerà se il conteggio delle righe del set di dati corrente è strettamente maggiore della media dei conteggi delle ultime cinque righe per lo stesso set di dati. RowCount > last(5)
produrrà un errore perché il conteggio delle righe del set di dati corrente non può essere confrontato in modo significativo con un elenco.
Funzioni di aggregazione supportate:
-
avg
-
median
-
max
-
min
-
sum
-
std
(deviazione standard) -
abs
(valore assoluto) -
index(last(k), i)
consentirà di selezionare ili
° valore più recente tra gli ultimik
.i
è indicizzato a zero, quindiindex(last(3), 0)
restituirà il punto dati più recente eindex(last(3), 3)
genererà un errore poiché ci sono solo tre punti dati, mentre noi cerchiamo di indicizzare il 4° punto dati più recente.
Espressioni di esempio
ColumnCorrelation
ColumnCorrelation "colA" "colB" < avg(last(10))
DistinctValuesCount
DistinctValuesCount "colA" between min(last(10))-1 and max(last(10))+1
La maggior parte dei tipi di regole con condizioni o soglie numeriche supporta regole dinamiche; consulta la tabella fornita, Analizzatori e regole, per determinare se le regole dinamiche sono supportate per il tuo tipo di regola.
Esclusione delle statistiche dalle regole dinamiche
A volte, è necessario escludere le statistiche sui dati dai calcoli delle regole dinamiche. Supponiamo che tu abbia effettuato un caricamento storico dei dati e che non desideri che ciò influisca sulle tue medie. Per fare ciò, apri il lavoro in AWS ETL Glue e scegli la scheda Data Quality, quindi scegli Statistiche e seleziona le statistiche che desideri escludere. Potrai vedere un grafico delle tendenze insieme a una tabella di statistiche. Seleziona i valori che desideri escludere e scegli Escludi statistiche. Ora le statistiche escluse non verranno incluse nei calcoli delle regole dinamiche.
Analizzatori
Nota
Gli analizzatori non sono supportati in AWS Glue Data Catalog.
DQDLle regole utilizzano funzioni chiamate analizzatori per raccogliere informazioni sui dati. Queste informazioni vengono utilizzate dall'espressione booleana di una regola per determinare se quest'ultima deve avere esito positivo o negativo. Ad esempio, la RowCount regola RowCount > 5
utilizzerà un analizzatore del conteggio delle righe per rilevare il numero di righe nel set di dati e lo confronterà con l'espressione > 5
per verificare se esistono più di cinque righe nel set di dati.
A volte, invece di creare regole, consigliamo di creare analizzatori e fare in modo che generino statistiche da utilizzare per rilevare anomalie. In questi casi, puoi creare analizzatori. Gli analizzatori differiscono dalle regole nei modi indicati di seguito.
Caratteristica | Analizzatori | Regolamento |
---|---|---|
Parte del set di regole | Sì | Sì |
Genera statistiche | Sì | Sì |
Genera osservazioni | Sì | Sì |
Può valutare e verificare una condizione | No | Sì |
È possibile configurare operazioni come l'interruzione dei processi in caso di errore o la prosecuzione di un processo di elaborazione | No | Sì |
Gli analizzatori possono esistere indipendentemente senza regole, quindi puoi configurarli in modo rapido e creare regole di qualità dei dati in modo progressivo.
Alcuni tipi di regole possono essere inseriti nel blocco Analyzers
del set di regole per eseguire quelle richieste per gli analizzatori e raccogliere informazioni senza applicare controlli per alcuna condizione. Esistono analizzatori che non sono associati ad alcuna regola e che possono essere inseriti solo nel blocco Analyzers
. La tabella seguente indica se ogni elemento è supportato come regola o come analizzatore autonomo, insieme a dettagli aggiuntivi per ogni tipo di regola.
Set di regole di esempio con analizzatore
Il seguente set di regole utilizza:
-
una regola dinamica per verificare se un set di dati è in crescita rispetto alla media finale delle ultime tre esecuzioni del processo
-
un analizzatore
DistinctValuesCount
per registrare il numero di valori distinti nella colonna delName
del set di dati -
un analizzatore
ColumnLength
per tracciare le dimensioni minime e massime delName
nel tempo
I risultati delle metriche dell'analizzatore per l'esecuzione del processo possono essere visualizzati nella scheda Qualità dei dati.
Rules = [ RowCount > avg(last(3)) ] Analyzers = [ DistinctValuesCount "Name", ColumnLength "Name" ]
AWS Glue Data Quality supporta i seguenti analizzatori.
Nome analizzatore | Funzionalità |
---|---|
RowCount |
Calcola il conteggio delle righe per un set di dati |
Completeness |
Calcola la percentuale di completezza di una colonna |
Uniqueness |
Calcola la percentuale di unicità di una colonna |
Mean |
Calcola la media di una colonna numerica |
Sum |
Calcola la somma di una colonna numerica |
StandardDeviation |
Calcola la deviazione standard di una colonna numerica |
Entropy |
Calcola l'entropia di una colonna numerica |
DistinctValuesCount |
Calcola il numero di valori distinti in una colonna |
UniqueValueRatio |
Calcola il rapporto di valori univoci in una colonna |
ColumnCount |
Calcola il numero di colonne in un set di dati |
ColumnLength |
Calcola la lunghezza di una colonna |
ColumnValues |
Calcola il valore minimo e massimo per le colonne numeriche. Calcola il minimo ColumnLength e il massimo ColumnLength per le colonne non numeriche |
ColumnCorrelation |
Calcola le correlazioni tra le colonne per determinate colonne |
CustomSql |
Calcola le statistiche restituite dal Custom SQL |
AllStatistics |
Calcola le statistiche seguenti:
|
Commenti
Puoi usare il carattere '#' per aggiungere un commento al DQDL documento. Qualsiasi cosa dopo il carattere '#' e fino alla fine della riga viene ignorata daDQDL.
Rules = [ # More items should generally mean a higher price, so correlation should be positive ColumnCorrelation "price" "num_items" > 0 ]