

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Referenz zu Data Quality Definition Language (DQDL)
<a name="dqdl"></a>

Die Data Quality Definition Language (DQDL) ist eine domänenspezifische Sprache, mit der Sie Regeln für AWS Glue Data Quality definieren.

In diesem Handbuch werden wichtige DQDL-Konzepte vorgestellt, die Ihnen beim Verständnis der Sprache helfen. Es bietet auch eine Referenz für DQDL-Regeltypen mit Syntax und Beispielen. Bevor Sie dieses Handbuch verwenden, empfehlen wir Ihnen, sich mit AWS Glue Data Quality vertraut zu machen. Weitere Informationen finden Sie unter [AWS Glue Qualität der Daten](glue-data-quality.md). 

**Anmerkung**  
 DynamicRules werden nur in AWS Glue ETL unterstützt. 

**Contents**
+ [DQDL-Syntax](#dqdl-syntax)
  + [Regelstruktur](#dqdl-syntax-rule-structure)
  + [Zusammengesetzte Regeln](#dqdl-syntax-rule-composition)
    + [So funktionieren zusammengesetzte Regeln](#dqdl-syntax-composite-rules)
  + [Ausdrücke](#dqdl-syntax-rule-expressions)
    + [Schlüsselwörter für NULL, EMPTY und WHITESPACES\_ONLY](#dqdl-keywords-null-empty-whitespaces_only)
    + [Filterung mit der WHERE-Klausel](#dqdl-filtering-data-in-dqdl)
  + [Konstanten](#dqdl-constants)
  + [Labels](#dqdl-labels)
    + [Syntax für DQDL-Labels](#dqdl-labels-syntax)
      + [Einschränkungen bei Beschriftungen](#dqdl-labels-constraints)
    + [DQDL-Labels werden abgerufen](#dqdl-labels-retrieving)
      + [Ergebnisse der Regel](#dqdl-labels-rule-outcomes)
      + [Row-level Ergebnisse](#dqdl-labels-row-level-results)
      + [API-Antwort](#dqdl-labels-api-response)
  + [Dynamische Regeln](#dqdl-dynamic-rules)
  + [Analysatoren](#dqdl-analyzers)
    + [Verteilungsanalysator](#dqdl-analyzers-distribution)
      + [Numerisches und kategoriales Verhalten](#dqdl-analyzers-distribution-behavior)
      + [Ausgabeformat](#dqdl-analyzers-distribution-output)
      + [Eingefrorene Behälterränder](#dqdl-analyzers-distribution-frozen-edges)
      + [Überlaufbeobachtungen](#dqdl-analyzers-distribution-overflow)
      + [Automatisches Rebinning](#dqdl-analyzers-distribution-rebinning)
  + [Kommentare](#dqdl-syntax-comments)
+ [DQDL-Regeltypreferenz](dqdl-rule-types.md)
  + [AggregateMatch](dqdl-rule-types-AggregateMatch.md)
  + [ColumnCorrelation](dqdl-rule-types-ColumnCorrelation.md)
  + [ColumnCount](dqdl-rule-types-ColumnCount.md)
  + [ColumnDataType](dqdl-rule-types-ColumnDataType.md)
  + [ColumnExists](dqdl-rule-types-ColumnExists.md)
  + [ColumnLength](dqdl-rule-types-ColumnLength.md)
  + [ColumnNamesMatchPattern](dqdl-rule-types-ColumnNamesMatchPattern.md)
  + [ColumnValues](dqdl-rule-types-ColumnValues.md)
  + [Vollständigkeit](dqdl-rule-types-Completeness.md)
  + [CustomSQL](dqdl-rule-types-CustomSql.md)
  + [DataFreshness](dqdl-rule-types-DataFreshness.md)
  + [DatasetMatch](dqdl-rule-types-DatasetMatch.md)
  + [DistinctValuesCount](dqdl-rule-types-DistinctValuesCount.md)
  + [Distribution](dqdl-rule-types-Distribution.md)
  + [Entropie](dqdl-rule-types-Entropy.md)
  + [IsComplete](dqdl-rule-types-IsComplete.md)
  + [IsPrimaryKey](dqdl-rule-types-IsPrimaryKey.md)
  + [IsUnique](dqdl-rule-types-IsUnique.md)
  + [Mean](dqdl-rule-types-Mean.md)
  + [ReferentialIntegrity](dqdl-rule-types-ReferentialIntegrity.md)
  + [RowCount](dqdl-rule-types-RowCount.md)
  + [RowCountMatch](dqdl-rule-types-RowCountMatch.md)
  + [StandardDeviation](dqdl-rule-types-StandardDeviation.md)
  + [Summe](dqdl-rule-types-Sum.md)
  + [SchemaMatch](dqdl-rule-types-SchemaMatch.md)
  + [Eindeutigkeit](dqdl-rule-types-Uniqueness.md)
  + [UniqueValueRatio](dqdl-rule-types-UniqueValueRatio.md)
  + [DetectAnomalies](dqdl-rule-types-DetectAnomalies.md)
  + [FileFreshness](dqdl-rule-types-FileFreshness.md)
  + [FileMatch](dqdl-rule-types-FileMatch.md)
  + [FileUniqueness](dqdl-rule-types-FileUniqueness.md)
  + [FileSize](dqdl-rule-types-FileSize.md)

## DQDL-Syntax
<a name="dqdl-syntax"></a>

Ein DQDL-Dokument unterscheidet zwischen Groß- und Kleinschreibung und enthält einen *Regelsatz*, der einzelne Datenqualitätsregeln zusammenfasst. Um einen Regelsatz zu erstellen, müssen Sie eine Liste mit dem Namen `Rules` (groß geschrieben) erstellen, die durch ein Paar eckiger Klammern begrenzt ist. Die Liste sollte eine oder mehrere durch Kommas getrennte DQDL-Regeln wie im folgenden Beispiel enthalten.

```
Rules = [
   IsComplete "order-id",
   IsUnique "order-id"
]
```

### Regelstruktur
<a name="dqdl-syntax-rule-structure"></a>

Die Struktur einer DQDL-Regel hängt vom Regeltyp ab. Allerdings passen DQDL-Regeln im Allgemeinen in das folgende Format.

```
<RuleType> <Parameter> <Parameter> <Expression>
```

`RuleType` ist der zwischen Groß- und Kleinschreibung zu unterscheidende Name des Regeltyps, den Sie konfigurieren möchten. Beispiel: `IsComplete`, `IsUnique` oder `CustomSql`. Die Regelparameter unterscheiden sich für jeden Regeltyp. Eine vollständige Referenz der DQDL-Regeltypen und ihrer Parameter finden Sie unter [DQDL-Regeltypreferenz](dqdl-rule-types.md).

### Zusammengesetzte Regeln
<a name="dqdl-syntax-rule-composition"></a>

 DQDL unterstützt die folgenden logischen Operatoren, die Sie zum Kombinieren von Regeln verwenden können. Diese Regeln werden als zusammengesetzte Regeln bezeichnet. 

**und**  
Der logische `and`-Operator ergibt genau dann `true`, wenn die Regeln, die er verbindet, `true` sind. Andernfalls führt die kombinierte Regel zu `false`. Jede Regel, die Sie mit dem `and`-Operator verbinden, muss in runde Klammern eingeschlossen werden.  
Im folgenden Beispiel wird der `and`-Operator zum Kombinieren zweier DQDL-Regeln verwendet.  

```
(IsComplete "id") and (IsUnique "id")
```

**oder**  
Der logische `or`-Operator ergibt genau dann `true`, wenn eine oder mehrere der Regeln, die er verbindet, `true` sind. Jede Regel, die Sie mit dem `or`-Operator verbinden, muss in runde Klammern eingeschlossen werden.  
Im folgenden Beispiel wird der `or`-Operator zum Kombinieren zweier DQDL-Regeln verwendet.  

```
(RowCount "id" > 100) or (IsPrimaryKey "id")
```

Sie können denselben Operator verwenden, um mehrere Regeln zu verbinden, daher ist die folgende Regelkombination zulässig.

```
(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) and (IsComplete "Order_Id")
```

Sie können die logischen Operatoren zu einem einzigen Ausdruck kombinieren. Beispiel:

```
(Mean "Star_Rating" > 3) and ((Mean "Order_Total" > 500) or (IsComplete "Order_Id"))
```

Sie können auch komplexere, verschachtelte Regeln erstellen.

```
(RowCount > 0) or ((IsComplete "colA") and (IsUnique "colA"))
```

#### So funktionieren zusammengesetzte Regeln
<a name="dqdl-syntax-composite-rules"></a>

 Standardmäßig werden zusammengesetzte Regeln als einzelne Regeln für den gesamten Datensatz oder die gesamte Tabelle ausgewertet und anschließend werden die Ergebnisse kombiniert. Mit anderen Worten: Es wird zuerst die gesamte Spalte ausgewertet und dann der Operator angewendet. Dieses Standardverhalten wird im Folgenden anhand eines Beispiels erklärt: 

```
# Dataset

+------+------+
|myCol1|myCol2|
+------+------+
|     2|     1|
|     0|     3|
+------+------+

# Overall outcome

+----------------------------------------------------------+-------+
|Rule                                                      |Outcome|
+----------------------------------------------------------+-------+
|(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)|Failed |
+----------------------------------------------------------+-------+
```

 Im obigen Beispiel wertet AWS Glue Data Quality zuerst `(ColumnValues "myCol1" > 1)` aus, was zu einem Fehler führt. Dann wird `(ColumnValues "myCol2" > 2)` bewertet, was ebenfalls fehlschlägt. Die Kombination beider Ergebnisse wird als FEHLGESCHLAGEN vermerkt. 

 Wenn Sie jedoch ein SQL-ähnliches Verhalten bevorzugen, bei dem die gesamte Zeile ausgewertet werden muss, müssen Sie den `ruleEvaluation.scope`-Parameter explizit festlegen, wie in `additionalOptions` im folgenden Codeausschnitt gezeigt. 

```
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 können Sie diese Option einfach in der Benutzeroberfläche konfigurieren, wie unten gezeigt. 

![Der Screenshot zeigt ein Einstellungsfenster für zusammengesetzte Regeln, in dem Sie die Konfiguration der Regelauswertung zwischen Zeile und Spalte auswählen können. Wenn Sie „Zeile“ wählen, verhalten sich die zusammengesetzten Regeln wie eine einzelne Regel, die die gesamte Zeile auswertet. Wenn Sie „Spalte“ wählen, werten die zusammengesetzten Regeln einzelne Regeln für den gesamten Datensatz aus und kombinieren die Ergebnisse.](https://docs.aws.amazon.com/de_de/glue/latest/dg/images/composite-rule-settings.png)


 Nach der Festlegung verhalten sich die zusammengesetzten Regeln wie eine einzelne Regel, die die gesamte Zeile auswertet. Das folgende Beispiel illustriert dieses Verhalten. 

```
# 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                     |
+------+------+------------------------------------------------------------+---------------------------+
```

 Einige Regeln können in diesem Feature nicht unterstützt werden, da ihr Gesamtergebnis von Schwellenwerten oder Verhältnissen abhängt. Sie werden im Folgenden aufgelistet. 

 Regeln, die sich auf Verhältnisse stützen: 
+  Vollständigkeit 
+  DatasetMatch 
+  ReferentialIntegrity 
+  Eindeutigkeit 

 Regeln, die von Schwellenwerten abhängen: 

 Wenn die folgenden Regeln einen Schwellenwert enthalten, werden sie nicht unterstützt. Regeln, die `with threshold` nicht beinhalten, werden jedoch weiterhin unterstützt. 
+  ColumnDataType 
+  ColumnValues 
+  CustomSQL 

### Ausdrücke
<a name="dqdl-syntax-rule-expressions"></a>

Wenn ein Regeltyp keine boolesche Antwort erzeugt, müssen Sie einen Ausdruck als Parameter angeben, um eine boolesche Antwort zu erstellen. Die folgende Regel prüft beispielsweise den Mittelwert (Durchschnitt) aller Werte in einer Spalte anhand eines Ausdrucks, um ein wahres oder falsches Ergebnis zurückzugeben.

```
Mean "colA" between 80 and 100
```

Einige Regeltypen wie `IsUnique` und `IsComplete` geben bereits eine boolesche Antwort zurück.

In der folgenden Tabelle sind Ausdrücke aufgeführt, die Sie in DQDL-Regeln verwenden können. 


**Unterstützte DQDL-Ausdrücke**  

| Expression | Description | Beispiel | 
| --- | --- | --- | 
| ={{x}} | Gibt an, true ob die Antwort des Regeltyps gleich ist. {{x}} |  <pre>Completeness "colA" = "1.0",<br />ColumnValues "colA" = "2022-06-30"</pre>  | 
|  \!={{x}}  | x wird als wahr aufgelöst, wenn die Antwort des Regeltyps ungleich ist. {{x}} |  <pre>ColumnValues "colA" != "a",<br />ColumnValues "colA" != "2022-06-30"</pre>  | 
| > {{x}} | Gibt an, true ob die Antwort des Regeltyps größer als ist. {{x}} |  <pre>ColumnValues "colA" > 10</pre>  | 
| < {{x}} | Löst sich auf, true wenn die Antwort des Regeltyps kleiner als ist. {{x}} |  <pre>ColumnValues "colA" < 1000,<br />ColumnValues "colA" < "2022-06-30"</pre>  | 
| >= {{x}} | Gibt an, true ob die Antwort des Regeltyps größer oder gleich ist. {{x}} |  <pre>ColumnValues "colA" >= 10</pre>  | 
| <= {{x}} | Gibt an, true ob die Antwort des Regeltyps kleiner oder gleich ist. {{x}} |  <pre>ColumnValues "colA" <= 1000</pre>  | 
| zwischen und {{x }} {{y}} | Löst sich zu true auf, wenn die Antwort des Regeltyps in einen bestimmten Bereich fällt (exklusiv). Verwenden Sie diesen Ausdruckstyp nur für Zahlen- und Datumstypen. |  <pre>Mean "colA" between 8 and 100,<br />ColumnValues "colA" between "2022-05-31" and "2022-06-30"</pre>  | 
|  nicht zwischen {{x}} und {{y}}  |  Löst sich zu „true“ auf, wenn die Antwort des Regeltyps nicht in einen bestimmten Bereich fällt (inklusive). Sie sollten diesen Ausdruckstyp nur für Zahlen- und Datumstypen verwenden.  |  <pre>ColumnValues "colA" not between "2022-05-31" and "2022-06-30"</pre>  | 
| in [{{a, b, c, ...}}] | Löst sich zu true auf, wenn die Antwort des Regeltyps in der angegebenen Menge enthalten ist. |  <pre>ColumnValues "colA" in [ 1, 2, 3 ],<br />ColumnValues "colA" in [ "a", "b", "c" ]</pre>  | 
| nicht in [{{a, b, c, ...}}] | Löst sich zu true auf, wenn die Antwort des Regeltyps nicht in der angegebenen Menge enthalten ist. |  <pre>ColumnValues "colA" not in [ 1, 2, 3 ],<br />ColumnValues "colA" not in [ "a", "b", "c" ]</pre>  | 
| Streichhölzer {{/ab\+c/i}} | Löst sich zu true auf, wenn die Antwort des Regeltyps mit einem regulären Ausdruck übereinstimmt. |  <pre>ColumnValues "colA" matches "[a-zA-Z]*"</pre>  | 
| keine Streichhölzer {{/ab\+c/i}} | Löst sich zu true auf, wenn die Antwort des Regeltyps nicht mit einem regulären Ausdruck übereinstimmt. |  <pre>ColumnValues "colA" not matches "[a-zA-Z]*"</pre>  | 
| now() | Funktioniert nur mit dem ColumnValues-Regeltyp zum Erstellen eines Datumsausdrucks. |  <pre>ColumnValues "load_date" > (now() - 3 days)</pre>  | 
| matches/in [...] /nicht matches/not in [...] with threshold | Gibt den Prozentsatz der Werte an, die den Regelbedingungen entsprechen. Funktioniert nur mit den ColumnValues-, ColumnDataType- und CustomSQL-Regeltypen. |  <pre>ColumnValues "colA" in ["A", "B"] with threshold > 0.8,<br />ColumnValues "colA" matches "[a-zA-Z]*" with threshold between 0.2 and 0.9<br />ColumnDataType "colA" = "Timestamp" with threshold > 0.9</pre>  | 

#### Schlüsselwörter für NULL, EMPTY und WHITESPACES\_ONLY
<a name="dqdl-keywords-null-empty-whitespaces_only"></a>

 Wenn Sie überprüfen möchten, ob eine Zeichenfolgenspalte einen Nullwert, einen leeren Wert oder eine Zeichenfolge mit ausschließlich Leerzeichen enthält, können Sie die folgenden Schlüsselwörter verwenden: 
+  NULL/null – Dieses Schlüsselwort wird für einen `null`-Wert in einer Zeichenfolgenspalte als „true“ aufgelöst. 

   `ColumnValues "colA" != NULL with threshold > 0.5` würde „true“ zurückgeben, wenn mehr als 50 % Ihrer Daten keine Nullwerte enthalten. 

   `(ColumnValues "colA" = NULL) or (ColumnLength "colA" > 5)` würde für alle Zeilen, die entweder einen Nullwert oder eine Länge von > 5 haben, „true“ zurückgeben. *Beachten Sie, dass hierfür die Option „compositeRuleEvaluation.method“ = „ROW“ verwendet werden muss. * 
+  EMPTY/empty – Dieses Schlüsselwort wird für einen leeren Zeichenfolgenwert („“) in einer Zeichenfolgenspalte als „true“ aufgelöst. Bei einigen Datenformaten werden Nullen in einer Zeichenfolgenspalte in leere Zeichenfolgen umgewandelt. Dieses Schlüsselwort hilft dabei, leere Zeichenfolgen in Ihren Daten herauszufiltern. 

   `(ColumnValues "colA" = EMPTY) or (ColumnValues "colA" in ["a", "b"])` würde „true“ zurückgeben, wenn eine Zeile entweder leer, „a“ oder „b“ ist. *Beachten Sie, dass hierfür die Option „compositeRuleEvaluation.method“ = „ROW“ erforderlich ist. * 
+  WHITESPACES\_ONLY/whitespaces\_only – Dieses Schlüsselwort wird für eine Zeichenfolge mit nur Leerzeichen („ “) in einer Zeichenfolgenspalte als „true“ aufgelöst. 

   `ColumnValues "colA" not in ["a", "b", WHITESPACES_ONLY]` würde „true“ zurückgeben, wenn eine Zeile weder „a“ oder „b“ noch nur Leerzeichen enthält. 

   Unterstützte Regeln: 
  +  [ColumnValues](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types-ColumnValues) 

 Wenn Sie für einen numerischen oder datumsbasierten Ausdruck überprüfen möchten, ob eine Spalte eine Null enthält, können Sie die folgenden Schlüsselwörter verwenden. 
+  NULL/null – Dieses Schlüsselwort wird für einen Nullwert in einer Zeichenfolgenspalte als „true“ aufgelöst. 

   `ColumnValues "colA" in [NULL, "2023-01-01"]` würde „true“ zurückgeben, wenn ein Datum in Ihrer Spalte entweder `2023-01-01` oder Null ist. 

   `(ColumnValues "colA" = NULL) or (ColumnValues "colA" between 1 and 9)` würde für alle Zeilen, die entweder einen Nullwert oder Werte zwischen 1 und 9 haben, „true“ zurückgeben. *Beachten Sie, dass hierfür die Option „compositeRuleEvaluation.method“ = „ROW“ verwendet werden muss. * 

   Unterstützte Regeln: 
  +  [ColumnValues](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types-ColumnValues) 

#### Filterung mit der WHERE-Klausel
<a name="dqdl-filtering-data-in-dqdl"></a>

**Anmerkung**  
 Where Clause wird nur in AWS Glue 4.0 unterstützt. 

 Sie können Ihre Daten beim Erstellen von Regeln filtern. Dies ist hilfreich, wenn Sie bedingte Regeln anwenden möchten. 

```
<DQDL Rule> where "<valid SparkSQL where clause> "
```

 Der Filter muss mit dem `where`-Schlüsselwort angegeben werden, gefolgt von einer gültigen SparkSQL-Anweisung, die in Anführungszeichen `("")` eingeschlossen ist. 

 Wenn Sie die WHERE-Klausel zu einer Regel mit einem Schwellenwert hinzufügen möchten, muss die WHERE-Klausel vor der Schwellenwertbedingung angegeben werden. 

```
<DQDL Rule> where "valid SparkSQL statement>" with threshold <threshold condition>
```

 Mit dieser Syntax können Sie Regeln wie die folgenden schreiben. 

```
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)"
```

 Wir werden überprüfen, ob die SparkSQL-Anweisung gültig ist. Falls ungültig, schlägt die Regelauswertung fehl und wir geben eine `IllegalArgumentException` mit dem folgenden Format aus: 

```
Rule <DQDL Rule> where "<invalid SparkSQL>" has provided an invalid where clause :
<SparkSQL Error>
```

 **Verhalten der WHERE-Klausel, wenn die Identifizierung von Fehlerdatensätzen auf Zeilenebene aktiviert ist** 

 Mit AWS Glue Data Quality können Sie bestimmte Datensätze identifizieren, bei denen ein Fehler aufgetreten ist. Wenn wir eine WHERE-Klausel auf Regeln anwenden, die Ergebnisse auf Zeilenebene unterstützen, kennzeichnen wir die Zeilen, die durch die WHERE-Klausel herausgefiltert werden, als `Passed`. 

 Wenn Sie es vorziehen, die herausgefilterten Zeilen separat als `SKIPPED` zu kennzeichnen, können Sie die folgenden `additionalOptions` für den ETL-Auftrag festlegen. 

```
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"
        }
      """
    )
  )
}
```

 Die folgende Regel und der folgende Datenrahmen werden als Beispiel verwendet: 

```
IsComplete att2 where "att1 = 'a'"
```


| id | att1 | att2 | Row-level Ergebnisse (Standard) | Ergebnisse auf Zeilenebene (Option übersprungen) | Kommentare | 
| --- | --- | --- | --- | --- | --- | 
| 1 | a | f | PASSED | PASSED |  | 
| 2 | b | d | PASSED | SKIPPED | Die Zeile ist herausgefiltert, da att1 nicht "a" ist. | 
| 3 | a | Null | FEHLGESCHLAGEN | FEHLGESCHLAGEN |  | 
| 4 | a | f | PASSED | PASSED |  | 
| 5 | b | Null | PASSED | SKIPPED | Die Zeile ist herausgefiltert, da att1 nicht "a" ist. | 
| 6 | a | f | PASSED | PASSED |  | 

### Konstanten
<a name="dqdl-constants"></a>

 In DQDL können Sie konstante Werte definieren und sie im gesamten Skript referenzieren. Auf diese Weise können Probleme im Zusammenhang mit Größenbeschränkungen für Abfragen vermieden werden, z. B. wenn Sie mit großen SQL-Anweisungen arbeiten, die zulässige Grenzen überschreiten könnten. Indem Sie diese Werte Konstanten zuweisen, können Sie Ihre DQDL vereinfachen und vermeiden, dass diese Grenzwerte überschritten werden. 

 Das folgende Beispiel zeigt, wie eine Konstante definiert und verwendet wird: 

```
mySql = "select count(*) from primary"

Rules = [
    CustomSql $mySql between 0 and 100
]
```

 In diesem Beispiel wird die SQL-Abfrage der Konstante zugewiesen`mySql`, auf die dann in der Regel mithilfe des `$` Präfixes verwiesen wird. 

### Labels
<a name="dqdl-labels"></a>

 Labels bieten eine effektive Möglichkeit, Datenqualitätsergebnisse zu organisieren und zu analysieren. Sie können Ergebnisse anhand bestimmter Bezeichnungen abfragen, um fehlerhafte Regeln innerhalb bestimmter Kategorien zu identifizieren, Regelergebnisse nach Team oder Bereich zu zählen und zielgerichtete Berichte für verschiedene Stakeholder zu erstellen. 

 Sie können beispielsweise alle Regeln, die das Finanzteam betreffen, mit einer Bezeichnung versehen `"team=finance"` und einen maßgeschneiderten Bericht erstellen, in dem die für das Finanzteam spezifischen Qualitätskennzahlen dargestellt werden. Sie können Regeln mit hoher Priorität kennzeichnen, um Korrekturmaßnahmen `"criticality=high"` zu priorisieren. Labels können als Teil der DQDL erstellt werden. Sie können die Labels als Teil von Regelergebnissen, Ergebnissen auf Zeilenebene und API-Antworten abfragen, was die Integration in Ihre bestehenden Überwachungs- und Berichtsabläufe erleichtert. 

**Anmerkung**  
 Labels sind nur in AWS Glue ETL verfügbar und nicht in Data Quality, die auf AWS Glue Data Catalog basiert. 

#### Syntax für DQDL-Labels
<a name="dqdl-labels-syntax"></a>

 DQDL unterstützt sowohl Standard- als auch regelspezifische Bezeichnungen. Standardbezeichnungen werden auf Regelsatzebene definiert und gelten automatisch für alle Regeln innerhalb dieses Regelsatzes. Einzelne Regeln können auch ihre eigenen Bezeichnungen haben. Da Bezeichnungen als Schlüssel-Wert-Paare implementiert sind, können regelspezifische Bezeichnungen die Standardbezeichnungen überschreiben, wenn derselbe Schlüssel verwendet wird. 

 Das folgende Beispiel zeigt, wie Standard- und regelspezifische Bezeichnungen verwendet werden: 

```
DefaultLabels=["frequency"="monthly"]

Rules = [
    // Auto includes the default label ["frequency"="monthly"]
    ColumnValues "col" > 21,
    // Add ["foo"="bar"] to default label. Labels for this rule would be ["frequency"="monthly", "foo"="bar"]
    RowCount > 0 with threshold > 0.8 labels=["foo"="bar"],
    // Override default label. Labels for this rule would be ["frequency"="daily", "foo"="bar"]
    ColumnValues "colA" in ["A", "B"]  with threshold > 0.8 labels=["foo"="bar", "frequency"="daily"]
    // Labels must be applied to the entire composite rule (parentheses required)
    (isComplete "col" AND RowCount > 0) labels=["foo"="bar]
]
```

 Das folgende Beispiel zeigt eine ungültige Syntax mit Bezeichnungen und zusammengesetzten Regeln: 

```
          (isComplete "colA") AND (RowCount > 0) labels=["foo"="bar"]
          (isComplete "colA" labels=["foo"="bar"]) AND (RowCount > 0)
          isComplete "col" AND RowCount > 0 labels=["foo"="bar]
```

##### Einschränkungen bei Beschriftungen
<a name="dqdl-labels-constraints"></a>

 Für Beschriftungen gelten die folgenden Einschränkungen: 
+ Maximal 10 Labels pro DQDL-Regel.
+ Labels werden als Liste von Schlüssel-Wert-Paaren angegeben.
+ Beim Labelschlüssel und beim Labelwert wird zwischen Groß- und Kleinschreibung unterschieden.
+ Die maximale Länge des Labelschlüssels beträgt 128 Zeichen. Der Labelschlüssel darf nicht leer oder Null sein.
+ Die maximale Länge des Labelwerts beträgt 256 Zeichen. Der Labelwert kann leer oder Null sein.

#### DQDL-Labels werden abgerufen
<a name="dqdl-labels-retrieving"></a>

 Sie können DQDL-Labels aus Regelergebnissen, Ergebnissen auf Zeilenebene und API-Antworten abrufen. 

##### Ergebnisse der Regel
<a name="dqdl-labels-rule-outcomes"></a>

 DQDL-Bezeichnungen sind in den Regelergebnissen immer sichtbar. Es ist keine zusätzliche Konfiguration erforderlich, um sie zu aktivieren. 

##### Row-level Ergebnisse
<a name="dqdl-labels-row-level-results"></a>

 DQDL-Labels sind in Ergebnissen auf Zeilenebene standardmäßig deaktiviert, können aber mit in aktiviert werden. `AdditionalOptions` `EvaluateDataQuality` 

 Das folgende Beispiel zeigt, wie Labels in Ergebnissen auf Zeilenebene aktiviert werden: 

```
val evaluateResult = EvaluateDataQuality.processRows(
    frame=AmazonS3_node1754591511068,
    ruleset=example_ruleset,
    publishingOptions=JsonOptions("""{
        "dataQualityEvaluationContext": "evaluateResult",
        "enableDataQualityCloudWatchMetrics": "true",
        "enableDataQualityResultsPublishing": "true"
    }"""),
    additionalOptions=JsonOptions("""{
        "performanceTuning.caching":"CACHE_NOTHING",
        "observations.scope":"ALL",
        "rowLevelConfiguration.ruleWithLabels":"ENABLED"
    }""")
)
```

 Wenn diese Option aktiviert ist, enthält der Ergebnisdatenrahmen auf Zeilenebene Bezeichnungen für jede Regel in den Spalten, und. `DataQualityRulesPass` `DataQualityRulesFail` `DataQualityRulesSkip` 

##### API-Antwort
<a name="dqdl-labels-api-response"></a>

 DQDL-Labels sind in API-Antworten immer unter einem neuen Feld `Labels` im `RuleResults` Objekt sichtbar. 

 Das folgende Beispiel zeigt Labels in einer API-Antwort: 

```
{
    "ResultId": "dqresult-example",
    "ProfileId": "dqprofile-example",
    "Score": 0.6666666666666666,
    "RulesetName": "EvaluateDataQuality_node1754591514205",
    "EvaluationContext": "EvaluateDataQuality_node1754591514205",
    "StartedOn": "2025-08-22T19:36:10.448000+00:00",
    "CompletedOn": "2025-08-22T19:36:16.368000+00:00",
    "JobName": "anniezc-test-labels",
    "JobRunId": "jr_068f6d7a45074d9105d14e4dee09db12c3b95664b45f6ee44fa29ed7e5619ba8",
    "RuleResults": [
        {
            "Name": "Rule_0",
            "Description": "IsComplete colA",
            "EvaluationMessage": "Input data does not include column colA!",
            "Result": "FAIL",
            "EvaluatedMetrics": {},
            "EvaluatedRule": "IsComplete colA",
            "Labels": {
                "frequency": "monthly"
            }
        },
        {
            "Name": "Rule_1",
            "Description": "Rule 1 with threshold > 0.8",
            "Result": "PASS",
            "EvaluatedMetrics": {},
            "EvaluatedRule": "Rule 1 with threshold > 0.8",
            "Labels": {
                "frequency": "monthly",
                "foo": "bar"
            }
        },
        {
            "Name": "Rule_3",
            "Description": "Rule 2 with threshold > 0.8",
            "Result": "PASS",
            "EvaluatedMetrics": {},
            "EvaluatedRule": "Rule 2 with threshold > 0.8",
            "Labels": {
                "frequency": "daily",
                "foo": "bar"
            }
        }
    ]
}
```

### Dynamische Regeln
<a name="dqdl-dynamic-rules"></a>

**Anmerkung**  
Dynamische Regeln werden nur in AWS Glue ETL unterstützt und werden im AWS Glue Data Catalog nicht unterstützt.

 Sie können jetzt dynamische Regeln erstellen, um aktuelle Metriken, die anhand Ihrer Regeln erstellt wurden, mit ihren historischen Werten zu vergleichen. Diese historischen Vergleiche werden durch die Verwendung des Operators `last()` in Ausdrücken ermöglicht. Beispielsweise ist die Regel `RowCount > last()` erfolgreich, wenn die Anzahl der Zeilen im aktuellen Durchlauf größer ist als die letzte vorherige Anzahl der Zeilen im selben Datensatz. `last()` verwendet ein optionales Argument mit einer natürlichen Zahl, das beschreibt, wie viele vorherige Metriken berücksichtigt werden sollen. Bei `last(k)` verweist `k >= 1` auf die letzten `k` Metriken. 
+ Wenn keine Datenpunkte verfügbar sind, gibt `last(k)` den Standardwert 0,0 zurück.
+ Wenn weniger als `k` Metriken verfügbar sind, gibt `last(k)` alle vorherigen Metriken zurück.

 Verwenden Sie zur Bildung von Ausdrücken `last(k)`, wobei `k > 1` eine Aggregationsfunktion erfordert, um mehrere historische Ergebnisse auf eine einzelne Zahl zu reduzieren. Beispielsweise prüft `RowCount > avg(last(5))`, ob die aktuelle Zeilenanzahl des Datensatzes grundsätzlich höher ist als der Durchschnitt der letzten fünf Zeilenanzahlen desselben Datensatzes. `RowCount > last(5)` gibt einen Fehler aus, weil die aktuelle Zeilenanzahl des Datensatzes nicht aussagekräftig mit einer Liste verglichen werden kann. 

 Unterstützte Aggregationsfunktionen: 
+ `avg`
+ `median`
+ `max`
+ `min`
+ `sum`
+ `std` (Standardabweichung)
+ `abs` (absoluter Wert)
+  `index(last(k), i)` ermöglicht die Auswahl des `i`.-letzten Werts der letzten `k`. `i` hat einen Nullindex, `index(last(3), 0)` gibt also den neuesten Datenpunkt zurück und `index(last(3), 3)` führt zu einem Fehler, da es nur drei Datenpunkte gibt und wir versuchen, den viertletzten zu indizieren. 

 **Beispiele für Ausdrücke ** 

 **ColumnCorrelation** 
+ `ColumnCorrelation "colA" "colB" < avg(last(10))`

 **DistinctValuesCount** 
+ `DistinctValuesCount "colA" between min(last(10))-1 and max(last(10))+1`

 Die meisten Regeltypen mit numerischen Bedingungen oder Schwellenwerten unterstützen dynamische Regeln. In der bereitgestellten Tabelle [Analysatoren und Regeln](#dqdl-analyzers-table) können Sie ermitteln, ob Ihr Regeltyp dynamische Regeln unterstützt. 

 **Ausschließen von Statistiken aus dynamischen Regeln** 

 Manchmal müssen Sie Datenstatistiken von Ihrer Berechnung der dynamischen Regeln ausschließen. Nehmen wir an, Sie haben historische Daten geladen und möchten nicht, dass sich dies auf Ihre Durchschnittswerte auswirkt. Öffnen Sie dazu den Job in AWS Glue ETL und wählen Sie die ** Registerkarte „**Datenqualität“, dann „**Statistik“ ** und wählen Sie die Statistiken aus, die Sie ausschließen möchten. Es wird ein Trenddiagramm zusammen mit einer Statistiktabelle angezeigt. Wählen Sie die Werte aus, die Sie ausschließen möchten, und wählen Sie dann **Statistiken ausschließen** aus. Die ausgeschlossenen Statistiken werden jetzt nicht in die Berechnung der dynamischen Regeln aufgenommen. 

![Der Screenshot zeigt die Option zum Ausschließen oder Einschließen von Statistiken aus dem Dropdown-Menü nach Auswahl einer Statistik.](https://docs.aws.amazon.com/de_de/glue/latest/dg/images/data-quality-excluding-statistics-from-dynamic-rules.png)


### Analysatoren
<a name="dqdl-analyzers"></a>

**Anmerkung**  
 Analysatoren werden im AWS Glue Data Catalog nicht unterstützt. 

 DQDL-Regeln verwenden Funktionen, die als *Analysatoren* bezeichnet werden, um Informationen über Ihre Daten zu sammeln. Diese Informationen werden vom booleschen Ausdruck einer Regel verwendet, um zu bestimmen, ob die Regel erfolgreich sein oder fehlschlagen soll. Die RowCount Regel `RowCount > 5 ` verwendet beispielsweise einen Analysator für die Zeilenanzahl, um die Anzahl der Zeilen in Ihrem Datensatz zu ermitteln und diese Anzahl mit dem Ausdruck `> 5` zu vergleichen, um zu überprüfen, ob der aktuelle Datensatz mehr als fünf Zeilen enthält. 

 Manchmal empfehlen wir, anstelle von Regeln Analysatoren zu erstellen und diese dann Statistiken generieren zu lassen, anhand derer Anomalien erkannt werden können. In solchen Fällen können Sie Analysatoren erstellen. Analysatoren unterscheiden sich folgendermaßen von Regeln. 


| Merkmal | Analysatoren | Regeln | 
| --- | --- | --- | 
| Teil des Regelsatzes | Ja | Ja | 
| Generiert Statistiken | Ja | Ja | 
| Generiert Beobachtungen | Ja | Ja | 
| Kann eine Bedingung bewerten und durchsetzen | Nein | Ja | 
| Aktionen wie das Stoppen von Aufträgen bei einem Fehler oder die Fortsetzung der Auftragsverarbeitung können konfiguriert werden | Nein | Ja | 

 Analysatoren können unabhängig voneinander ohne Regeln existieren, sodass Sie sie schnell konfigurieren und schrittweise Regeln für die Datenqualität erstellen können. 

 Einige Regeltypen können in den `Analyzers`-Block Ihres Regelsatzes eingegeben werden, um die für Analysatoren erforderlichen Regeln auszuführen und Informationen zu sammeln, ohne auf Bedingungen zu prüfen. Einige Analysatoren sind nicht mit Regeln verknüpft und können nur in den `Analyzers`-Block eingegeben werden. Die folgende Tabelle gibt an, ob einzelne Elemente als Regel oder als eigenständige Analysatoren unterstützt werden und enthält zusätzliche Details zu jedem Regeltyp. 

 **Beispiel für einen Regelsatz mit Analyzer ** 

 Der folgende Regelsatz verwendet 
+ eine dynamische Regel, mit der überprüft wird, ob ein Datensatz den Durchschnitt seiner letzten drei Auftragsausführungen überschreitet;
+ einen `DistinctValuesCount`-Analysator, um die Anzahl unterschiedlicher Werte in der Spalte `Name` des Datensatzes zu erfassen;
+ einen `ColumnLength`-Analysator, um die minimale und maximale Größe des `Name` im Laufe der Zeit nachzuverfolgen.

 Die Ergebnisse der Analysatormetriken können auf der Registerkarte „Datenqualität“ der Auftragsausführung eingesehen werden. 

```
Rules = [
   RowCount > avg(last(3))
]
Analyzers = [
   DistinctValuesCount "Name",
   ColumnLength "Name"
]
```

 AWS Glue Data Quality unterstützt die folgenden Analysatoren. 


| Name des Analysators | Funktionalität | 
| --- | --- | 
| RowCount | Berechnet die Zeilenanzahl für einen Datensatz | 
| Completeness | Berechnet den Vollständigkeitsgrad einer Spalte in Prozent | 
| Uniqueness | Berechnet den Eindeutigkeitsprozentsatz einer Spalte | 
| Mean | Berechnet den Mittelwert einer numerischen Spalte | 
| Sum | Berechnet die Summe einer numerischen Spalte | 
| StandardDeviation | Berechnet die Standardabweichung einer numerischen Spalte | 
| Entropy | Berechnet die Entropie einer numerischen Spalte | 
| DistinctValuesCount | Berechnet die Anzahl der unterschiedlichen Werte in einer Spalte | 
| Distribution | Berechnet die Häufigkeitsverteilung einer Spalte. Erzeugt bei numerischen Spalten ein Histogramm mit Unterteilungen. Erzeugt für Zeichenketten- und Datumsspalten eine Wertverteilung, die in absteigender Reihenfolge nach Häufigkeit sortiert ist. | 
| UniqueValueRatio | Berechnet das Verhältnis der Einzelwerte in einer Spalte | 
| ColumnCount | Berechnet die Anzahl der Spalten in einem Datensatz | 
| ColumnLength | Berechnet die Länge einer Spalte | 
| ColumnValues | Berechnet das Minimum und Maximum für numerische Spalten. Berechnet Minimum ColumnLength und Maximum ColumnLength für nicht numerische Spalten | 
| ColumnCorrelation | Berechnet Spaltenkorrelationen für gegebene Spalten | 
| CustomSql | Berechnet Statistiken, die von CustomSQL zurückgegeben werden | 
| AllStatistics | Berechnet die folgenden Statistiken: +   RowCount, ColumnCount  <br />+   Jede Spalte: Vollständigkeit, Eindeutigkeit  <br />+   Numerisch: Minimum, Maximum, Entropie, Mittelwert, Standardwert, Summe  <br />+   Zeichenfolge:, MinLength MaxLength    | 

#### Verteilungsanalysator
<a name="dqdl-analyzers-distribution"></a>

Der `Distribution` Analyzer berechnet Häufigkeitsverteilungen für Spalten in Ihrem Datensatz. Verwenden Sie den `Distribution` Analyzer, um zu verstehen, wie Ihre Daten im Laufe der Zeit verteilt sind, und um Verschiebungen der Datenbereiche zwischen Auswertungsläufen zu erkennen.

Hinweise zur DQDL-Syntax und grundlegende Anwendungsbeispiele finden Sie unter[Distribution](dqdl-rule-types-Distribution.md).

##### Numerisches und kategoriales Verhalten
<a name="dqdl-analyzers-distribution-behavior"></a>
+ **Numerische Spalten ** — Der Analysator unterteilt den Wertebereich der Spalte in Intervalle gleicher Breite (Bins). Jeder Abschnitt wird durch eine untere und eine obere Grenze definiert. Das Ergebnis zählt, wie viele Werte in jeden Abschnitt fallen.
+ **Kategoriale Spalten ** (Zeichenfolge, Datum, boolescher Wert) — Der Analyzer zählt die Häufigkeit jedes einzelnen Werts und gibt die 20 häufigsten Werte in absteigender Reihenfolge nach Häufigkeit sortiert zurück.

Der `Distribution` Analyzer schließt NULL-Werte in der Zielspalte aus der Verteilungsberechnung für beide Spaltentypen aus.

##### Ausgabeformat
<a name="dqdl-analyzers-distribution-output"></a>

Die `Distribution` Statistik gibt ein strukturiertes `DistributionValue` Objekt zurück, das die folgenden Felder enthält:
+ `BinEdges`— Ein Array, das die Abteilungsgrenzen (numerisch) oder die eindeutigen Werte (kategorial) definiert
+ `Count`— Eine Reihe von Häufigkeitszählungen, die jedem Abschnitt oder Wert entsprechen
+ `DataType`— Der Datentyp der Spalte (z. B.`LongType`,`StringType`)

##### Eingefrorene Behälterränder
<a name="dqdl-analyzers-distribution-frozen-edges"></a>

Wenn Sie den `Distribution` Analyzer zum ersten Mal auf einer Spalte ausführen, berechnet der Analyzer die Abschnittskanten auf der Grundlage des aktuellen Wertebereichs der Spalte. Bei nachfolgenden Durchläufen für dieselbe Statistik (gleiche Spalte, gleiche Bin-Anzahl) verwendet der Analyzer die Kanten des ersten Durchlaufs erneut. Dieses Verhalten wird als * gefrorene Kanten bezeichnet. *

Gefrorene Kanten ermöglichen aussagekräftige Vergleiche zwischen Durchläufen, da die Abschnitte im Laufe der Zeit konsistent bleiben. Ohne eingefrorene Kanten würden sich die Abschnittsgrenzen bei jedem Lauf verschieben, wenn sich der Datenbereich ändert.

##### Überlaufbeobachtungen
<a name="dqdl-analyzers-distribution-overflow"></a>

Wenn Datenwerte außerhalb der Grenzen der gefrorenen Abschnitte liegen, zählt das Analyzer sie im ersten oder letzten Abschnitt (den Überlauffächern). Wenn mehr als 2% der Werte in den Überlauffächern landen, generiert AWS Glue Data Quality eine Informationsbeobachtung. Wenn mehr als 5% der Werte einen Überlauf aufweisen, generiert AWS Glue Data Quality eine genauere Beobachtung und verfolgt aufeinanderfolgende Überlaufläufe. Nach 3 aufeinanderfolgenden Durchläufen mit einer Überschreitung von 5% wird das automatische Rebinning ausgelöst.

##### Automatisches Rebinning
<a name="dqdl-analyzers-distribution-rebinning"></a>

Wenn bei 3 aufeinanderfolgenden Testläufen ein Überlauf von mehr als 5% auftritt, berechnet AWS Glue Data Quality die Behälterkanten automatisch neu. Die neuen Kanten basieren auf dem aktuellen Datenbereich. Nach dem erneuten Binning werden die neuen Kanten zu den eingefrorenen Kanten für nachfolgende Durchläufe.

Nach dem automatischen Rebinning passen sich Ihre Histogramme ohne manuelles Eingreifen an anhaltende Änderungen des Datenbereichs an. Die Bin-Ränder bleiben auch bei vorübergehenden Schwankungen stabil.

Sie können das automatische Rebinning deaktivieren, indem Sie den `rebin` Parameter `false` in Ihrem DQDL-Regelsatz auf Folgendes setzen:

```
Analyzers = [
    Distribution "Salary" with bins = 20, rebin = false
]
```

Wenn das automatische Rebinning deaktiviert ist, bleiben die Bin-Ränder unabhängig von der Überlaufhäufigkeit auf unbestimmte Zeit eingefroren. AWS Glue Data Quality generiert weiterhin Überlaufbeobachtungen.

### Kommentare
<a name="dqdl-syntax-comments"></a>

Sie können das Zeichen „\#“ verwenden, um Ihrem DQDL-Dokument einen Kommentar hinzuzufügen. Alles nach dem Zeichen „\#“ und bis zum Ende der Zeile wird von DQDL ignoriert.

```
Rules = [
    # More items should generally mean a higher price, so correlation should be positive
    ColumnCorrelation "price" "num_items" > 0
]
```