

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.

# AWS Glue Data Catalog Ansichten von Gebäuden
<a name="working-with-views"></a>

In der ist eine *Ansicht* eine virtuelle Tabelle AWS Glue Data Catalog, deren Inhalt durch eine SQL-Abfrage definiert wird, die auf eine oder mehrere Tabellen verweist. Sie können mithilfe von SQL-Editoren für Amazon Athena, Amazon Redshift oder Apache Spark mit EMR Serverless oder Version 5.0 eine Datenkatalogsicht erstellen, die auf bis zu 10 Tabellen verweist. AWS Glue Die einer Ansicht zugrunde liegenden Referenztabellen können zu derselben Datenbank oder zu verschiedenen Datenbanken innerhalb desselben AWS-Konto Datenkatalogs gehören.

Sie können auf AWS Glue Standardtabellen und Tabellen in offenen Tabellenformaten (OTF) wie [Apache Hudi](https://hudi.incubator.apache.org/), Linux Foundation [Delta Lake](https://delta.io/) und [Apache Iceberg](https://iceberg.apache.org/) verweisen, wobei die zugrunde liegenden Daten an Amazon S3 S3-Speicherorten gespeichert sind, bei denen Sie registriert sind. AWS Lake Formation Darüber hinaus können Sie Ansichten aus Verbundtabellen aus Amazon Redshift-Datenfreigaben erstellen, die mit Lake Formation gemeinsam genutzt werden. 

## Differenzierung von Datenkatalogansichten von anderen Ansichtstypen
<a name="diff-views"></a>

Datenkatalogansichten unterscheiden sich von Apache Hive-, Apache Spark- und Amazon Athena Athena-Ansichten. Die Datenkatalogansicht ist eine systemeigene Funktion von und ist eine vom AWS Glue Data Catalog Definierer erstellte Ansicht mit mehreren Dialekten. Sie können eine Datenkatalogansicht mit einem der unterstützten Analysedienste wie Athena oder Amazon Redshift Spectrum erstellen und mit anderen unterstützten Analysediensten auf dieselbe Ansicht zugreifen. Andererseits werden die Ansichten Apache Hive, Apache Spark und Athena unabhängig voneinander in jedem Analytics-Service wie Athena und Amazon Redshift erstellt und sind nur innerhalb dieses Dienstes sichtbar und zugänglich.

## Was ist eine definere Ansicht?
<a name="definer-view"></a>

 Eine Definer-Ansicht ist eine SQL-Ansicht, die auf den Berechtigungen des Prinzipals basiert, der sie erstellt hat. Die Definiererrolle verfügt über die erforderlichen Berechtigungen für den Zugriff auf die referenzierten Tabellen und führt die SQL-Anweisung aus, die die Ansicht definiert. Der Definierer erstellt die Ansicht und gibt sie mithilfe AWS Lake Formation seiner detaillierten Zugriffskontrolle für andere Benutzer frei. 

Wenn ein Benutzer die Definer-Ansicht abfragt, verwendet die Abfrage-Engine die Berechtigungen der Definer-Rolle, um auf die zugrunde liegenden Referenztabellen zuzugreifen. Dieser Ansatz ermöglicht es Benutzern, mit der Ansicht zu interagieren, ohne direkten Zugriff auf die Quelltabellen zu benötigen, wodurch die Sicherheit erhöht und die Datenzugriffsverwaltung vereinfacht wird.

Um eine Definer-Ansicht einzurichten, kann sich die Definer-IAM-Rolle innerhalb desselben AWS Kontos wie die Basistabellen oder in einem anderen Konto befinden, wobei kontoübergreifende Definerrollen verwendet werden. Weitere Informationen zu den für die Definerrolle erforderlichen Berechtigungen finden Sie unter. [Voraussetzungen für das Erstellen von Ansichten](views-prereqs.md) 

## Ein Framework für Ansichten mit mehreren Dialekten
<a name="multi-dialect"></a>

Der Datenkatalog unterstützt die Erstellung von Ansichten mit mehreren SQL-Dialekten (Structured Query Language). SQL ist eine Sprache, die zum Speichern und Verarbeiten von Informationen in einer relationalen Datenbank verwendet wird, und jede AWS Analyse-Engine verwendet ihre eigene Variante von SQL oder ihren eigenen SQL-Dialekt.

Sie erstellen eine Datenkatalogsicht in einem SQL-Dialekt mit einer der unterstützten Analytics-Abfrage-Engines. Anschließend können Sie die Ansicht aktualisieren, indem Sie die `ALTER VIEW` Anweisung in einem anderen SQL-Dialekt in jeder anderen unterstützten Analyse-Engine verwenden. Jeder Dialekt muss jedoch auf denselben Satz von Tabellen, Spalten und Datentypen verweisen.

Sie können über die `GetTable` API und die Konsole auf die verschiedenen Dialekte zugreifen, AWS CLI die für die Ansicht verfügbar sind. AWS Somit ist die Datenkatalogansicht sichtbar und kann über verschiedene unterstützte Analyse-Engines abgefragt werden.

Durch die Definition eines gemeinsamen Ansichtsschemas und eines Metadatenobjekts, das Sie von mehreren Engines abfragen können, ermöglichen Ihnen Datenkatalogansichten die Verwendung einheitlicher Ansichten für Ihren gesamten Data Lake.

Weitere Informationen darüber, wie das Schema für jeden Dialekt aufgelöst wird, finden Sie unter [dem Link zur API-Referenz.]() Weitere Informationen zu den Abgleichsregeln für verschiedene Typen finden Sie unter [dem Link zum entsprechenden Abschnitt im API-Dokument]().

## Integration mit Lake Formation Formation-Berechtigungen
<a name="lf-view-integ"></a>

Sie können AWS Lake Formation es verwenden, um die Berechtigungsverwaltung für AWS Glue Data Catalog Benutzeransichten zu zentralisieren. Sie können mithilfe der Methode für benannte Ressourcen oder mithilfe von LF-Tags detaillierte Berechtigungen für die Datenkatalogansichten gewähren und diese für AWS Organisationen und Organisationseinheiten AWS-Konten gemeinsam nutzen. Sie können die AWS-Regionen Datenkatalogansichten auch mithilfe von Ressourcenlinks gemeinsam nutzen und darauf zugreifen. Auf diese Weise können Benutzer auf Daten zugreifen, ohne die Datenquelle duplizieren und die zugrunde liegenden Tabellen gemeinsam nutzen zu müssen.

Die `CREATE VIEW` DDL-Anweisung einer Datenkatalogsicht kann auf die AWS Glue Standardtabellen und Tabellen in offenen Tabellenformaten (OTF) wie Hudi, Delta Lake und Iceberg verweisen, wobei die zugrunde liegenden Daten in Amazon S3 S3-Standorten gespeichert sind, die bei Lake Formation registriert sind, sowie auf die Verbundtabellen aus Amazon Redshift Datashare, die mit Lake Formation gemeinsam genutzt werden, gespeichert sind. Die Tabellen können ein beliebiges Dateiformat haben, sofern die Engine, mit der die Ansicht abgefragt wurde, dieses Format unterstützt. Sie können auch auf integrierte Funktionen der Engine verweisen, auf der sie ausgeführt wird. Andere modulspezifische Ressourcen sind jedoch möglicherweise nicht zulässig. Weitere Details finden Sie unter [Überlegungen und Einschränkungen im Datenkatalog](views-notes.md).

## Anwendungsfälle
<a name="views-use-cases"></a>

Im Folgenden sind die wichtigen Anwendungsfälle für Datenkatalog-Ansichten aufgeführt:
+ Erstellen und verwalten Sie Berechtigungen für ein einzelnes Ansichtsschema. Auf diese Weise können Sie das Risiko inkonsistenter Berechtigungen für doppelte Ansichten vermeiden, die in mehreren Engines erstellt wurden.
+ Erteilen Sie Benutzern Berechtigungen für eine Ansicht, die auf mehrere Tabellen verweist, ohne Berechtigungen direkt für die zugrunde liegenden Referenztabellen zu gewähren.
+ Filtern Sie Tabellen auf Zeilenebene mithilfe von LF-Tags (wobei LF-Tags nur bis zur Spaltenebene kaskadiert werden), indem Sie LF-Tags auf Ansichten anwenden und Benutzern auf LF-Tags basierende Berechtigungen gewähren. 

## Unterstützte Analysedienste für Ansichten AWS
<a name="views-supported-engines"></a>

Die folgenden AWS Analysedienste unterstützen die Erstellung von Datenkatalogansichten:
+ Amazon Redshift
+ Amazon Athena versie 3
+ Apache Spark auf EMR Serverless
+  Apache Spark auf Version 5.0 AWS Glue 

## Weitere Ressourcen
<a name="views-addtional-resources"></a>

In diesem Handbuch erfahren Sie mehr über den Datenkatalog und nutzen die folgenden Ressourcen:

Das folgende Video zeigt, wie Ansichten von Athena und Amazon Redshift erstellt und abgefragt werden.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/rFO2OoxVYxE?si=Z0qsyuvTp2ZJg-PL/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/rFO2OoxVYxE?si=Z0qsyuvTp2ZJg-PL)


**Topics**
+ [Differenzierung von Datenkatalogansichten von anderen Ansichtstypen](#diff-views)
+ [Was ist eine definere Ansicht?](#definer-view)
+ [Ein Framework für Ansichten mit mehreren Dialekten](#multi-dialect)
+ [Integration mit Lake Formation Formation-Berechtigungen](#lf-view-integ)
+ [Anwendungsfälle](#views-use-cases)
+ [Unterstützte Analysedienste für Ansichten AWS](#views-supported-engines)
+ [Weitere Ressourcen](#views-addtional-resources)
+ [Voraussetzungen für das Erstellen von Ansichten](views-prereqs.md)
+ [Datenkatalogsichten mithilfe von DDL-Anweisungen erstellen](create-views.md)
+ [Datenkatalogsichten erstellen mit AWS Glue APIs](views-api-usage.md)
+ [Erteilen von Berechtigungen für Datenkatalog-Ansichten](grant-perms-views.md)
+ [Materialisierte Ansichten](materialized-views.md)

# Voraussetzungen für das Erstellen von Ansichten
<a name="views-prereqs"></a>
+ Um Ansichten in Data Catalog zu erstellen, müssen Sie die zugrunde liegenden Amazon S3 S3-Datenspeicherorte der Referenztabellen bei Lake Formation registrieren. Einzelheiten zur Registrierung von Daten bei Lake Formation finden Sie unter[Hinzufügen eines Amazon S3 S3-Standorts zu Ihrem Data Lake](register-data-lake.md). 
+ Nur IAM-Rollen können Datenkatalogansichten erstellen. Andere IAM-Identitäten können keine Datenkatalogsichten erstellen.
+ Die IAM-Rolle, die die Ansicht definiert, muss über die folgenden Berechtigungen verfügen:
  + Lake Formation `SELECT` Formation-Genehmigung mit der `Grantable` Option für alle Referenztabellen, einschließlich aller Spalten.
  + Lake Formation `CREATE_TABLE` Formation-Berechtigung für die Zieldatenbank, in der Ansichten erstellt werden.
  + Eine Vertrauenspolitik, damit die Lake Formation und ihre AWS Glue Dienste die Rolle übernehmen. 

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "DataCatalogViewDefinerAssumeRole1",
                "Effect": "Allow",
                "Principal": {
                   "Service": [
                        "glue.amazonaws.com",
                        "lakeformation.amazonaws.com"
                     ]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```

------
  + Das Ziel: PassRole Genehmigung für AWS Glue und Lake Formation.

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "DataCatalogViewDefinerPassRole1",
                "Action": [
                    "iam:PassRole"
                ],
                "Effect": "Allow",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "iam:PassedToService": [ 
                            "glue.amazonaws.com",
                            "lakeformation.amazonaws.com"
                          ]
                    }
                }
            }
        ]
    }
    ```

------
  + AWS Glue und Genehmigungen für Lake Formation.

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
                     "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "Glue:GetDatabase",
                    "Glue:GetDatabases",
                    "Glue:CreateTable",
                    "Glue:GetTable",
                    "Glue:GetTables",
                    "Glue:BatchGetPartition",
                    "Glue:GetPartitions",
                    "Glue:GetPartition",
                    "Glue:GetTableVersion",
                    "Glue:GetTableVersions",
    				"Glue:PassConnection",
                    "lakeFormation:GetDataAccess"
                ],
                "Resource": "*"
            }
        ]   
    }
    ```

------
+ Sie können keine Ansichten in einer Datenbank erstellen, für die der `IAMAllowedPrincipals` Gruppe `ALL` Berechtigungen erteilt wurden. `Super` Sie können entweder der `IAMAllowedPrincipals` Gruppe die `Super` Berechtigung für eine Datenbank entziehen, sie einsehen oder eine neue Datenbank erstellen[Schritt 4: Stellen Sie Ihre Datenspeicher auf das Lake Formation Formation-Berechtigungsmodell um](upgrade-glue-lake-formation.md#upgrade-glue-lake-formation-step4), wobei das Kontrollkästchen **Nur IAM-Zugriffssteuerung für neue Tabellen in dieser Datenbank verwenden** unter **Standardberechtigungen für neu erstellte** Tabellen deaktiviert ist.

# Datenkatalogsichten mithilfe von DDL-Anweisungen erstellen
<a name="create-views"></a>

Sie können AWS Glue Data Catalog Ansichten mit SQL-Editoren für Athena, Amazon Redshift und mit dem AWS Glue APIs/erstellen.AWS CLI

Um eine Datenkatalogsicht mit SQL-Editoren zu erstellen, wählen Sie Athena oder Redshift Spectrum und erstellen Sie die Ansicht mit einer DDL-Anweisung (`CREATE VIEW`Data Definition Language). Nachdem Sie eine Ansicht im Dialekt der ersten Engine erstellt haben, können Sie eine `ALTER VIEW` DDL-Anweisung der zweiten Engine verwenden, um die zusätzlichen Dialekte hinzuzufügen.

Bei der Definition von Ansichten ist es wichtig, Folgendes zu berücksichtigen:
+ **Definition von Ansichten mit mehreren Dialekten** — Wenn Sie eine Ansicht mit mehreren Dialekten definieren, müssen die Schemas der verschiedenen Dialekte übereinstimmen. Jeder SQL-Dialekt hat eine etwas andere Syntaxspezifikation. Die Abfragesyntax, die die Datenkatalogansicht definiert, sollte in allen Dialekten exakt dieselbe Spaltenliste, einschließlich Typen und Namen, ergeben. Diese Informationen werden in `StorageDescriptor` der Ansicht gespeichert. Die Dialekte müssen auch auf dieselben zugrunde liegenden Tabellenobjekte aus dem Datenkatalog verweisen.

  Um einer Ansicht mithilfe von DDL einen weiteren Dialekt hinzuzufügen, können Sie die Anweisung verwenden. `ALTER VIEW` Wenn eine `ALTER VIEW` Anweisung versucht, die Sichtdefinition zu aktualisieren, z. B. den Speicherdeskriptor oder die zugrunde liegenden Tabellen der Ansicht zu ändern, gibt die Anweisung einen Fehler mit der Meldung „Eingabe und vorhandener Speicherdeskriptor stimmen nicht überein“. Sie können SQL-Cast-Operationen verwenden, um sicherzustellen, dass die Typen der View-Spalten übereinstimmen. 
+ **Eine Ansicht aktualisieren** — Um die Ansicht zu aktualisieren, können Sie die `UpdateTable` API verwenden. Wenn Sie die Ansicht aktualisieren, ohne dass die Speicherdeskriptoren oder die Referenztabellen übereinstimmen, können Sie das `FORCE` Flag angeben (die Syntax finden Sie in der Engine-SQL-Dokumentation). Nach einer erzwungenen Aktualisierung übernimmt die Ansicht die erzwungenen Tabellen `StorageDescriptor` und die Referenztabellen. Jede weitere `ALTER VIEW` DDL sollte den geänderten Werten entsprechen. Eine Ansicht, die aktualisiert wurde, sodass sie inkompatible Dialekte enthält, erhält den Status „Veraltet“. Der Status der Ansicht ist in der Lake Formation Formation-Konsole und bei Verwendung der `GetTable` Operation sichtbar.
+ Auf **einen Varchar-Spaltentyp als Zeichenfolge verweisen — Es ist nicht möglich, einen** Varchar-Spaltentyp von Redshift Spectrum in eine Zeichenfolge umzuwandeln. Wenn in Redshift Spectrum eine Ansicht mit einem Varchar-Spaltentyp erstellt wird und ein nachfolgender Dialekt versucht, auf dieses Feld als Zeichenfolge zu verweisen, behandelt der Datenkatalog es als Zeichenfolge, ohne dass das Flag erforderlich ist. `FORCE`
+ **Behandlung komplexer Typfelder** — Amazon Redshift behandelt alle komplexen Typen als [SUPER-Typen](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html), während Athena den komplexen Typ spezifiziert. Wenn eine Ansicht über ein `SUPER` Typfeld verfügt und eine andere Engine diese Spalte als einen bestimmten komplexen Typ referenziert, z. B. struct (`<street_address:struct<street_number:int, street_name:string, street_type:string>>`), geht der Datenkatalog davon aus, dass es sich bei dem Feld um einen spezifischen komplexen Typ handelt, und verwendet diesen im Speicherdeskriptor, ohne dass das Flag erforderlich ist. `Force`

Weitere Informationen zur Syntax für die Erstellung und Verwaltung von Datenkatalogsichten finden Sie unter:
+ [Verwenden von AWS Glue Data Catalog Ansichten](https://docs.aws.amazon.com/athena/latest/ug/views-glue.html) im Amazon Athena Athena-Benutzerhandbuch. 
+ Die [Abfragesyntax für die Glue-Datenkatalogansicht](https://docs.aws.amazon.com/athena/latest/ug/views-glue-ddl.html) finden Sie im Amazon Athena Athena-Benutzerhandbuch. 
+ [Erstellen von Ansichten AWS Glue Data Catalog im](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html) Amazon Redshift Database Developer Guide.

  Weitere Informationen zu den SQL-Befehlen für Ansichten im Datenkatalog finden Sie unter [CREATE EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_VIEW.html), [ALTER EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_EXTERNAL_VIEW.html) und [DROP EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_EXTERNAL_VIEW.html).

Nachdem Sie eine Datenkatalog-Ansicht erstellt haben, sind die Details der Ansicht in der Lake Formation Formation-Konsole verfügbar.

1. Wählen Sie in der Lake Formation Formation-Konsole unter Datenkatalog die Option **Ansichten** aus.

1. Eine Liste der verfügbaren Ansichten wird auf der Seite „Ansichten“ angezeigt.

1. Wählen Sie eine Ansicht aus der Liste aus und auf der Detailseite werden die Attribute der Ansicht angezeigt.

![\[Der untere Bereich enthält fünf horizontal angeordnete Registerkarten, wobei jede Registerkarte die entsprechenden Informationen enthält.\]](http://docs.aws.amazon.com/de_de/lake-formation/latest/dg/images/view-definition.png)


Schema  
Wählen Sie eine `Column` Zeile aus und wählen Sie **LF-Tags bearbeiten**, um Tag-Werte zu aktualisieren oder neue LF-Tags zuzuweisen.

SQL-Definitionen  
Sie können eine Liste der verfügbaren SQL-Definitionen sehen. Wählen Sie **SQL-Definition hinzufügen** und wählen Sie eine Abfrage-Engine aus, um eine SQL-Definition hinzuzufügen. Wählen Sie unter der `Edit definition` Spalte eine Abfrage-Engine (Athena oder Amazon Redshift) aus, um eine SQL-Definition zu aktualisieren.

LF-Tags  
Wählen Sie **LF-Tags bearbeiten**, um Werte für ein Tag zu bearbeiten oder neue Tags zuzuweisen. Sie können LF-Tags verwenden, um Berechtigungen für Ansichten zu erteilen.

Kontoübergreifender Zugriff  
Sie können eine Liste der Organisationen und Organisationseinheiten (OUs) sehen AWS-Konten, für die Sie die Datenkatalogansicht freigegeben haben.

Zugrundeliegende Tabellen  
Die zugrunde liegenden Tabellen, auf die in der SQL-Definition verwiesen wird, die zur Erstellung der Ansicht verwendet wurde, werden auf dieser Registerkarte angezeigt.

# Datenkatalogsichten erstellen mit AWS Glue APIs
<a name="views-api-usage"></a>

Sie können und verwenden AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html), [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) APIs um Ansichten im Datenkatalog zu erstellen und zu aktualisieren. Die `UpdateTable` Operationen `CreateTable` und haben eine neue `TableInput` Struktur für`ViewDefinition`,,`SearchTables`,`GetTable`, `GetTables``GetTableVersion`, `GetTableVersions` Operationen stellen die `ViewDefinition` Ausgabesyntax für Ansichten bereit. Darüber hinaus gibt es ein neues `Status` Feld in der `GetTable` API-Ausgabe. 

Zwei neue AWS Glue Verbindungen sind für die Validierung des SQL-Dialekts für jede unterstützte Abfrage-Engine Amazon Athena und Amazon Redshift verfügbar.

Die `CreateTable` und `UpdateTable` APIs sind asynchron, wenn sie mit Ansichten verwendet werden. Wenn diese mit mehreren SQL-Dialekten aufgerufen APIs werden, wird der Aufruf mit jeder Engine überprüft, um festzustellen, ob der Dialekt auf dieser Engine ausgeführt werden kann und ob das resultierende Schema der Ansicht aus jedem Dialekt übereinstimmt. Der AWS Glue Dienst verwendet diese Verbindungen, um interne Aufrufe an die Analyse-Engines zu tätigen. Diese Aufrufe simulieren, was die Engine tut, um zu überprüfen, ob eine `CREATE VIEW` oder eine `ALTER VIEW` SQL-DDL auf der Engine ausgeführt wurde.

Wenn das bereitgestellte SQL gültig ist und die Schemas in den verschiedenen View-Dialekten übereinstimmen, schreibt die AWS Glue API das Ergebnis atomar fest. Atomicity ermöglicht das Erstellen oder Ändern von Ansichten mit mehreren Dialekten ohne Ausfallzeiten. 

**Topics**
+ [AWS Glue Verbindungen werden hergestellt, um den Status zu überprüfen](views-api-usage-connection.md)
+ [Der Status der View-Generierung wird validiert](views-api-usage-get-table.md)
+ [Asynchrone Zustände und Operationen](views-api-usage-async-states.md)
+ [Sehen Sie sich Szenarien mit Fehlern bei der Erstellung bei asynchronen Vorgängen an](views-api-usage-errors.md)

# AWS Glue Verbindungen werden hergestellt, um den Status zu überprüfen
<a name="views-api-usage-connection"></a>

Um eine AWS Glue Data Catalog Ansicht mithilfe der `UpdateTable` Operationen `CreateTable` oder zu erstellen oder zu aktualisieren, müssen Sie einen neuen AWS Glue Verbindungstyp für die Validierung erstellen und ihn der unterstützten Analytics-Engine zur Verfügung stellen. Diese Verbindungen sind erforderlich, um Datenkatalogansichten mit Athena oder Amazon Redshift zu verwenden. Sie können diese Verbindungen nur mit AWS CLI AWS SDKs, oder erstellen. AWS Glue APIs Sie können das nicht verwenden AWS-Managementkonsole , um die AWS Glue Verbindung herzustellen.

**Anmerkung**  
Wenn die View Definer-Rolle und die Rolle, die `CreateTable` Or aufruft, unterschiedlich `UpdateTable` sind, benötigen beide in ihrer IAM-Richtlinienerklärung eine `glue:PassConnection` entsprechende Genehmigung.

Weitere Informationen finden Sie in der Dokumentation zum [Erstellen](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-connection.html) AWS CLI einer Verbindung.

**AWS CLI Befehl zum Erstellen einer Verbindung**  
Im Folgenden finden AWS CLI Sie einen Befehl zum Erstellen einer Verbindung:

```
aws glue create-connection --region us-east-1 
--endpoint-url https://glue.us-east-1.amazonaws.com 
--cli-input-json file:///root/path/to/create-connection.json
```

**AWS CLI Eingabe JSON**  
Für Amazon Redshift:

```
{
    "CatalogId": "123456789012",
    "ConnectionInput": {
        "ConnectionType": "VIEW_VALIDATION_REDSHIFT",
        "Name": "views-preview-cluster-connection-2",
        "Description": "My first Amazon Redshift validation connection",
        "ConnectionProperties": {
            "DATABASE": "dev",
            "CLUSTER_IDENTIFIER": "glue-data-catalog-views-preview-cluster"
        }
    }
}
```

Für Amazon Athena:

```
{
    "CatalogId": "123456789012",
    "ConnectionInput": {
        "ConnectionType": "VIEW_VALIDATION_ATHENA",
        "Name": "views-preview-cluster-connection-3",
        "Description": "My first Amazon Athena validation connection",
        "ConnectionProperties": {
            "WORKGROUP_NAME": "workgroup-name"
        }
    }
}
```

# Der Status der View-Generierung wird validiert
<a name="views-api-usage-get-table"></a>

Wenn Sie die `UpdateTable` Operationen `CreateTable` oder ausführen, zeigt das `Status` Feld für die `GetTable` API-Ausgabe die Details zum Status der Ansichtserstellung an. Für `create` Anfragen, bei denen die Tabelle noch nicht existiert, AWS Glue wird für die Dauer des asynchronen Prozesses eine leere Tabelle erstellt. Beim Aufrufen `GetTable` können Sie ein optionales boolesches Flag übergeben`IncludeStatusDetails`, das Diagnoseinformationen zur Anfrage anzeigt. Im Falle eines Fehlers zeigt dieses Flag eine Fehlermeldung mit individuellen Status für jeden Dialekt an.

Fehler bei Vorgängen zum Erstellen, Lesen, Aktualisieren und Löschen von Ansichten (CRUD) können entweder während der Verarbeitung im AWS Glue/Lake Formation Service oder während der View-SQL-Validierung in Amazon Redshift oder Athena auftreten. Wenn bei der Validierung in einer Engine ein Fehler auftritt, gibt der AWS Glue Service die Fehlermeldung aus, die die Engine zurückgibt.

**Statusfelder**  
Im Folgenden sind die Statusfelder aufgeführt:
+ Status: ein allgemeiner Status, der unabhängig von verschiedenen Arten von Jobs ist:
  + IN WARTESCHLANGE
  + IN\$1PROGRESS
  + ERFOLG
  + FEHLGESCHLAGEN
+ Aktion — Gibt an, welche Aktion für die Tabelle aufgerufen wurde. Derzeit sind nur `CREATE` `UPDATE` Operationen verfügbar.

  Bei der Arbeit mit Ansichten ist es wichtig, zwischen `CREATE` Operationen `UPDATE` und zu unterscheiden. Der Operationstyp bestimmt, wie Sie beim Abfragen der Tabellen vorgehen sollten.

   Eine `UPDATE` Operation bedeutet, dass die Tabelle bereits im Datenkatalog vorhanden ist. In diesem Fall können Sie die zuvor erstellte Tabelle problemlos weiter abfragen. Andererseits zeigt eine `CREATE ` Operation an, dass die Tabelle noch nie erfolgreich erstellt wurde. Wenn eine Tabelle als markiert ist`CREATE`, schlägt der Versuch, sie abzufragen, fehl, da die Tabelle noch nicht im System vorhanden ist. Daher ist es wichtig, den Operationstyp (UPDATE oder CREATE) zu identifizieren, bevor Sie versuchen, eine Tabelle abzufragen. 
+ RequestedBy — Der ARN des Benutzers, der die asynchrone Änderung angefordert hat.
+ UpdatedBy — Der ARN des Benutzers, der den asynchronen Änderungsprozess zuletzt manuell geändert hat, z. B. eine Stornierung oder Änderung beantragt hat.
+ Fehler — Dieses Feld wird nur angezeigt, wenn der Status **FAILED** lautet. Dies ist eine Ausnahmemeldung auf übergeordneter Ebene. Für jeden Dialekt können unterschiedliche Fehler auftreten.
  + ErrorCode — Die Art der Ausnahme.
  + ErrorMessage — eine kurze Beschreibung der Ausnahme.
+ RequestTime — eine nach ISO 8601 formatierte Datumszeichenfolge, die den Zeitpunkt angibt, zu dem die Änderung initiiert wurde.
+ UpdateTime — eine nach ISO 8601 formatierte Datumszeichenfolge, die den Zeitpunkt angibt, zu dem der Status zuletzt aktualisiert wurde.

# Asynchrone Zustände und Operationen
<a name="views-api-usage-async-states"></a>

Wenn Sie eine `glue:CreateTable` Anforderung ausführen, beginnt die asynchrone Erstellung der Datenkatalogansicht. In den folgenden Abschnitten beschreibt dieses Dokument die `Status` AWS Glue Ansicht, die in einer `glue:GetTable` Antwort verfügbar ist. Der Kürze halber wird in diesem Abschnitt die vollständige Antwort weggelassen.

```
{
    "Table": {
        ...
        "Status": {
            ...
            "Action": "CREATE",
            "State": "QUEUED",
        }
    }
}
```

Beide oben genannten Attribute stellen wichtige Diagnoseinformationen dar, die den Status des asynchronen Vorgangs sowie die Aktionen angeben, die in dieser Ansicht ausgeführt werden können. Im Folgenden sind die möglichen Werte aufgeführt, die diese Attribute annehmen können.

1. `Status.Action`

   1. CREATE

   1. UPDATE

1. `Status.State`

   1. IN WARTESCHLANGE

   1. IN\$1PROGRESS

   1. ERFOLG

   1. FEHLGESCHLAGEN

Es ist auch wichtig zu beachten, dass einige Aktualisierungen in einer Datenkatalogansicht keinen asynchronen Vorgang erfordern. Beispielsweise möchte man vielleicht das `Description` Attribut der Tabelle aktualisieren. Da hierfür keine asynchronen Operationen erforderlich sind, werden die resultierenden Tabellenmetadaten keine haben`Status`, und das Attribut schon. `NULL`

```
{
    "Table": {
        ...,
        "Description": "I changed this attribute!"
    }
}
```

Als Nächstes wird in diesem Thema untersucht, wie sich die obigen Statusinformationen auf Vorgänge auswirken können, die in einer AWS Glue Ansicht ausgeführt werden können.

**Klebstoff: CreateTable**  
Für diese API gibt es keine Änderungen im Vergleich zu den `glue:CreateTable` Funktionen für jede Glue-Tabelle. `CreateTable`kann für jeden Tabellennamen aufgerufen werden, der noch nicht existiert.

**kleben: UpdateTable**  
Dieser Vorgang kann nicht für eine AWS Glue Ansicht ausgeführt werden, die die folgenden Statusinformationen enthält:

1. Aktion == CREATE und Status == QUEUED

1. Aktion == CREATE und Status == IN\$1PROGRESS

1. Aktion == CREATE und Status == FAILED

1. Aktion == UPDATE und Status == QUEUED

1. Aktion == UPDATE und Status == IN\$1PROGRESS

Zusammenfassend lässt sich sagen, dass Sie eine Datenkatalogansicht nur aktualisieren können, wenn sie die folgenden Anforderungen erfüllt.

1. Sie wurde erfolgreich zum ersten Mal erstellt.

   1. Aktion == CREATE und State == SUCCESS

1. Es hat nach einem asynchronen Aktualisierungsvorgang einen Terminalstatus erreicht.

   1. Aktion == UPDATE und Status == ERFOLG

   1. Aktion == UPDATE und Status == FEHLGESCHLAGEN

1. Es hat ein `NULL` State-Attribut als Ergebnis einer synchronen Aktualisierung.

**kleben: DeleteTable**  
Bei dieser Operation gibt es keine Änderungen im Vergleich zu den `glue:DeleteTable` Funktionen für jede AWS Glue Tabelle. Sie können eine Datenkatalogansicht unabhängig von ihrem Status löschen.

**kleben: GetTable**  
Bei dieser Operation gibt es keine Änderungen im Vergleich zu den `glue:GetTable` Funktionen für jede AWS Glue Tabelle. Sie können eine Datenkatalogsicht jedoch erst dann von den Analytical Engines abfragen, wenn sie erfolgreich zum ersten Mal erstellt wurde. `Action == CREATE and State == SUCCESS`. Nachdem Sie eine Datenkatalogsicht zum ersten Mal erfolgreich erstellt haben, können Sie die Ansicht unabhängig von ihrem Status abfragen.

**Anmerkung**  
Alle Informationen in diesem Abschnitt gelten für alle gelesenen Tabellen APIs wie `GetTable``GetTables`, und`SearchTables`.

# Sehen Sie sich Szenarien mit Fehlern bei der Erstellung bei asynchronen Vorgängen an
<a name="views-api-usage-errors"></a>

Die folgenden Beispiele sind repräsentativ für die Arten von Fehlern, die aus API-Aufrufen `CreateTable` oder `UpdateTable` Anzeigen von API-Aufrufen resultieren können. Sie erheben keinen Anspruch auf Vollständigkeit, da die Fehleroberfläche von SQL-Abfragefehlern ziemlich groß ist.

## Szenario 1: Fehler bei der Amazon Redshift Redshift-Abfrage
<a name="views-api-usage-errors-scenario-1"></a>

Die für Amazon Redshift bereitgestellte Abfrage enthält einen falsch geschriebenen Tabellennamen, der während der Überprüfung nicht im Datenkatalog gefunden wurde. Der daraus resultierende Fehler wird in dem `Status` Feld in der `GetTable` Antwort für die Ansicht angezeigt.

`GetTable`Anfrage:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-72",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable`Antwort:

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-72",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:39:19-07:00",
        "UpdateTime": "2024-07-11T11:39:19-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:39:19-07:00",
            "UpdateTime": "2024-07-11T11:40:06-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-72",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:39:19-07:00",
        "UpdateTime": "2024-07-11T11:39:19-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:39:19-07:00",
            "UpdateTime": "2024-07-11T11:40:06-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection | Query Execution Id: ddb711d3-2415-4aa9-b251-6a76ab4f41b1 | Timestamp: Thu Jul 11 18:39:37 UTC 2024]: Redshift returned error for the statement: ERROR: AwsClientException: EntityNotFoundException from glue - Entity Not Found"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-72",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:40:06-07:00",
                        "State": "SUCCESS"
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                        "UpdateTime": "2024-07-11T11:39:37-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection | Query Execution Id: ddb711d3-2415-4aa9-b251-6a76ab4f41b1 | Timestamp: Thu
 Jul 11 18:39:37 UTC 2024]: Redshift returned error for the statement: ERROR: AwsClientException: EntityNotFoundException from glue - Entity Not Found"
                        }
                    }
                ]
            }
        }
    }
}
```

## Szenario 2: Ungültige Amazon Redshift Redshift-Verbindung
<a name="views-api-usage-errors-scenario-2"></a>

Die Amazon Redshift Redshift-Verbindung im folgenden Beispiel ist fehlerhaft, da sie auf eine Amazon Redshift Redshift-Datenbank verweist, die auf dem angegebenen Endpunkt nicht vorhanden ist. cluster/serverless Amazon Redshift kann die Ansicht nicht validieren und das `Status` Feld in der `GetTable` Antwort zeigt den Fehler an (`"State": "FAILED"`von Amazon Redshift).

`GetTable`Anfrage:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-73",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection-malformed"
                }
            ]
        }
    }
}
```

`GetTable`Antwort:

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-73",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:43:27-07:00",
        "UpdateTime": "2024-07-11T11:43:27-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:43:27-07:00",
            "UpdateTime": "2024-07-11T11:43:40-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-73",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:43:27-07:00",
        "UpdateTime": "2024-07-11T11:43:27-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:43:27-07:00",
            "UpdateTime": "2024-07-11T11:43:40-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection-malformed | Query Execution Id: 69bfafd4-3d51-4cb0-9320-7ce5404b1809 | Timestamp: Thu Jul 11 18:43:38 UTC 2024]: Redshift returned error for the statement: FATAL: database \"devooo\" does not exist"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-73",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:43:40-07:00",
                        "State": "SUCCESS"
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:43:38-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection-malformed | Query Execution Id: 69bfafd4-3d51-4cb0-9320-7ce5404b1809 | Time
stamp: Thu Jul 11 18:43:38 UTC 2024]: Redshift returned error for the statement: FATAL: database \"devooo\" does not exist"
                        }
                    }
                ]
            }
        }
    }
}
```

## Szenario 3: Fehler bei der Athena-Abfrage
<a name="views-api-usage-errors-scenario-3"></a>

Die SQL für Athena hier ist ungültig, weil die Abfrage den Datenbanknamen falsch buchstabiert. Die Athena-Abfragevalidierung fängt dies ab und der daraus resultierende Fehler wird durch das `Status` Objekt in einem Aufruf angezeigt. `GetTable`

`GetTable`Anfrage:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-70",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable`Antwort:

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-70",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:09:53-07:00",
        "UpdateTime": "2024-07-11T11:09:53-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:09:54-07:00",
            "UpdateTime": "2024-07-11T11:10:41-07:00",
            "Action": "CREATE",
            "State": "FAILED",
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-70",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:09:53-07:00",
        "UpdateTime": "2024-07-11T11:09:53-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:09:54-07:00",
            "UpdateTime": "2024-07-11T11:10:41-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: athena-connection | Query Execution Id: d9bb1e6d-ce26-4b35-8276-8a199af966aa | Timestamp: Thu Jul 11 18:10:
41 UTC 2024]: Athena validation FAILED: {ErrorCategory: 2,ErrorType: 1301,Retryable: false,ErrorMessage: line 1:118: Schema 'gdc--view-playground-db' does not exist}"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-70",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:10:41-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: athena-connection | Query Execution Id: d9bb1e6d-ce26-4b35-8276-8a199af966aa | Timestamp: Thu J
ul 11 18:10:41 UTC 2024]: Athena validation FAILED: {ErrorCategory: 2,ErrorType: 1301,Retryable: false,ErrorMessage: line 1:118: Schema 'gdc--view-playground-db' does not exist}"
                        }
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:10:41-07:00",
                        "State": "SUCCESS"
                    }
                ]
            }
        }
    }
}
```

## Szenario 4: Die Speicherdeskriptoren stimmen nicht überein
<a name="views-api-usage-errors-scenario-4"></a>

Das für den Athena-Dialekt bereitgestellte SQL wählt `col1` und, `col2` während das SQL für Redshift nur selektiert. `col1` Dies führt zu einem Fehler bei der Nichtübereinstimmung des Speicherdeskriptors.

`GetTable`Anfrage:

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-71",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable`Antwort:

```
IncludeStatusDetails = FALSE

{
    "Table": {
        "Name": "view-athena-redshift-71",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:22:02-07:00",
        "UpdateTime": "2024-07-11T11:22:02-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:22:02-07:00",
            "UpdateTime": "2024-07-11T11:23:19-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE

{
    "Table": {
        "Name": "view-athena-redshift-71",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:22:02-07:00",
        "UpdateTime": "2024-07-11T11:22:02-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:22:02-07:00",
            "UpdateTime": "2024-07-11T11:23:19-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "InvalidInputException",
                "ErrorMessage": "Engine and existing storage descriptor mismatch"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-71",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:23:19-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "InvalidInputException",
                            "ErrorMessage": "Engine and existing storage descriptor mismatch"
                        }
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:22:49-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "InvalidInputException",
                            "ErrorMessage": "Engine and existing storage descriptor mismatch"
                        }
                    }
                ]
            }
        }
    }
}
```

# Erteilen von Berechtigungen für Datenkatalog-Ansichten
<a name="grant-perms-views"></a>

 Nachdem Sie Ansichten in der erstellt haben AWS Glue Data Catalog, können Sie Prinzipalen in allen AWS-Konten Organisationen und Organisationseinheiten Data Lake-Berechtigungen für Ansichten gewähren. Sie können Berechtigungen mithilfe von LF-Tags oder der Methode mit der benannten Ressource erteilen. Weitere Informationen zum Markieren von Ressourcen finden Sie unter. [Tag-basierte Zugangskontrolle von Lake Formation](tag-based-access-control.md) Weitere Informationen zum direkten Erteilen von Berechtigungen für Ansichten finden Sie unter[Erteilen von Berechtigungen für Ansichten mithilfe der benannten Ressourcenmethode](granting-view-permissions.md).

# Materialisierte Ansichten
<a name="materialized-views"></a>

**Topics**
+ [Differenzierung materialisierter Ansichten von anderen Ansichtstypen](#materialized-views-differentiating)
+ [Anwendungsfälle](#materialized-views-use-cases)
+ [Die wichtigsten Konzepte](#materialized-views-key-concepts)
+ [Berechtigungen für materialisierte Ansichten](#materialized-views-permissions)
+ [Materialisierte Ansichten erstellen und verwalten](#materialized-views-creating-managing)
+ [Speicher und Datenzugriff](#materialized-views-storage-access)
+ [AWS Lake Formation Integration mit Berechtigungen](#materialized-views-lake-formation)
+ [Überwachung und Debugging](#materialized-views-monitoring-debugging)
+ [Verwaltung von Aktualisierungsaufträgen](#materialized-views-managing-refresh-jobs)
+ [Überwachung und Problembehebung](#materialized-views-monitoring-troubleshooting)
+ [Überlegungen und Einschränkungen](#materialized-views-considerations-limitations)

Im AWS Glue Datenkatalog ist eine materialisierte Ansicht eine verwaltete Tabelle, in der das vorberechnete Ergebnis einer SQL-Abfrage im Apache Iceberg-Format gespeichert wird. Im Gegensatz zu Standard-Datenkatalogsichten, die die Abfrage bei jedem Zugriff ausführen, speichern materialisierte Ansichten die Abfrageergebnisse physisch und aktualisieren sie, wenn sich die zugrunde liegenden Quelltabellen ändern. Sie können materialisierte Ansichten mit Apache Spark Version 3.5.6\$1 in Amazon Athena, Amazon EMR oder erstellen. AWS Glue

Materialisierte Ansichten verweisen auf Apache Iceberg-Tabellen, die im AWS Glue Datenkatalog registriert sind, wobei vorberechnete Daten als Apache Iceberg-Tabellen in Amazon S3 S3-Tabellen oder Amazon S3 S3-Allzweck-Buckets gespeichert sind, sodass sie von mehreren Abfrage-Engines wie Amazon Athena, Amazon Redshift und Iceberg-kompatiblen Engines von Drittanbietern aus zugänglich sind.

## Differenzierung materialisierter Ansichten von anderen Ansichtstypen
<a name="materialized-views-differentiating"></a>

Materialisierte Ansichten unterscheiden sich grundlegend von AWS Glue Datenkatalogansichten, Apache Spark-Ansichten und Amazon Athena Athena-Ansichten. Während es sich bei Datenkatalogsichten um virtuelle Tabellen handelt, die die SQL-Abfragedefinition bei jedem Zugriff ausführen, speichern materialisierte Ansichten die vorberechneten Abfrageergebnisse physisch. Dadurch werden redundante Berechnungen vermieden und die Abfrageleistung für komplexe Transformationen, auf die häufig zugegriffen wird, erheblich verbessert.

Materialisierte Ansichten unterscheiden sich auch von herkömmlichen Datentransformationspipelines, die mit AWS Glue ETL- oder benutzerdefinierten Spark-Jobs erstellt wurden. Anstatt benutzerdefinierten Code für die Änderungserkennung, inkrementelle Aktualisierungen und Workflow-Orchestrierung zu schreiben, definieren Sie materialisierte Ansichten mithilfe der Standard-SQL-Syntax. Der AWS Glue Datenkatalog überwacht automatisch Quelltabellen, erkennt Änderungen und aktualisiert materialisierte Ansichten mithilfe einer vollständig verwalteten Recheninfrastruktur.

## Anwendungsfälle
<a name="materialized-views-use-cases"></a>

Im Folgenden sind wichtige Anwendungsfälle für materialisierte Ansichten aufgeführt:
+ **Beschleunigen Sie komplexe analytische Abfragen** — Erstellen Sie materialisierte Ansichten, die teure Verknüpfungen, Aggregationen und Fensterfunktionen vorab berechnen. Spark-Engines schreiben nachfolgende Abfragen automatisch neu, um die im Voraus berechneten Ergebnisse zu verwenden, wodurch die Latenz von Abfragen und die Rechenkosten reduziert werden.
+ **Vereinfachen Sie Datenumwandlungs-Pipelines** — Ersetzen Sie komplexe ETL-Jobs, die sich um die Änderungserkennung, inkrementelle Updates und Workflow-Orchestrierung kümmern, durch einfache SQL-basierte Definitionen für materialisierte Ansichten. Der AWS Glue Datenkatalog verwaltet die gesamte betriebliche Komplexität automatisch.
+ **Ermöglichen Sie Self-Service-Analysen mit geregeltem Datenzugriff** — Erstellen Sie kuratierte materialisierte Ansichten, die Rohdaten in einsatzbereite Datensätze umwandeln. Gewähren Sie Benutzern Zugriff auf materialisierte Ansichten, ohne die zugrunde liegenden Quelltabellen offenzulegen. Dies vereinfacht das Sicherheitsmanagement und ermöglicht gleichzeitig Self-Service-Analysen.
+ **Optimieren Sie das Feature-Engineering für maschinelles Lernen** — Definieren Sie materialisierte Ansichten, die Feature-Transformationen für ML-Modelle implementieren. Die automatische Aktualisierungsfunktion stellt sicher, dass die Feature-Speicher bei der Weiterentwicklung der Quelldaten aktuell bleiben, während die inkrementelle Aktualisierung die Rechenkosten minimiert.
+ **Implementieren Sie eine effiziente gemeinsame Nutzung von Daten** — Erstellen Sie materialisierte Ansichten, die Daten für bestimmte Nutzer filtern und transformieren. Teilen Sie materialisierte Ansichten über Konten und Regionen hinweg AWS Lake Formation, indem Sie die Notwendigkeit von Datenduplikationen vermeiden und gleichzeitig eine zentralisierte Verwaltung aufrechterhalten.

## Die wichtigsten Konzepte
<a name="materialized-views-key-concepts"></a>

### Automatische Aktualisierung
<a name="materialized-views-automatic-refresh"></a>

Die automatische Aktualisierung ist eine Funktion, die Ihre Quelltabellen kontinuierlich überwacht und materialisierte Ansichten gemäß einem von Ihnen definierten Zeitplan aktualisiert. Wenn Sie eine materialisierte Ansicht erstellen, können Sie mithilfe einer zeitbasierten Planung mit Intervallen von bis zu einer Stunde eine Aktualisierungshäufigkeit angeben. Der AWS Glue Datenkatalog verwendet eine verwaltete Spark-Recheninfrastruktur, um Aktualisierungsvorgänge im Hintergrund auszuführen und alle Aspekte der Änderungserkennung und der inkrementellen Aktualisierungen transparent zu handhaben.

Wenn sich die Quelldaten zwischen den Aktualisierungsintervallen ändern, ist die materialisierte Ansicht vorübergehend veraltet. Abfragen, die direkt auf die materialisierte Ansicht zugreifen, geben möglicherweise veraltete Ergebnisse zurück, bis die nächste geplante Aktualisierung abgeschlossen ist. In Szenarien, die sofortigen Zugriff auf die aktuellsten Daten erfordern, können Sie mit dem `REFRESH MATERIALIZED VIEW` SQL-Befehl eine manuelle Aktualisierung ausführen.

### Inkrementelle Aktualisierung
<a name="materialized-views-incremental-refresh"></a>

Die inkrementelle Aktualisierung ist eine Optimierungstechnik, bei der nur die Daten verarbeitet werden, die sich in den Quelltabellen seit der letzten Aktualisierung geändert haben, anstatt die gesamte materialisierte Ansicht neu zu berechnen. Der AWS Glue Datenkatalog nutzt die Metadatenebene von Apache Iceberg, um Änderungen in Quelltabellen effizient nachzuverfolgen und festzustellen, welche Teile der materialisierten Ansicht aktualisiert werden müssen.

Dieser Ansatz reduziert die Rechenkosten und die Aktualisierungsdauer im Vergleich zu vollständigen Aktualisierungsvorgängen erheblich, insbesondere bei großen Datensätzen, bei denen sich nur ein kleiner Prozentsatz der Daten zwischen den Aktualisierungszyklen ändert. Der inkrementelle Aktualisierungsmechanismus funktioniert automatisch. Sie müssen keine benutzerdefinierte Logik schreiben, um geänderte Daten zu erkennen oder zu verarbeiten.

### Automatisches Umschreiben von Abfragen
<a name="materialized-views-automatic-query-rewrite"></a>

Automatisches Umschreiben von Abfragen ist eine Funktion zur Abfrageoptimierung, die in Spark-Engines von Amazon Athena, Amazon EMR und verfügbar ist. AWS Glue Wenn Sie eine Abfrage anhand von Basistabellen ausführen, analysiert der Spark-Optimierer Ihren Abfrageplan und ermittelt automatisch, ob verfügbare materialisierte Ansichten die Abfrage effizienter erfüllen können. Wenn eine geeignete materialisierte Ansicht vorhanden ist, schreibt der Optimierer die Abfrage transparent neu, sodass die vorberechneten Ergebnisse verwendet werden, anstatt die Basistabellen zu verarbeiten.

Diese Optimierung erfolgt, ohne dass Änderungen am Anwendungscode oder an den Abfrageanweisungen erforderlich sind. Der Spark-Optimierer stellt sicher, dass das automatische Umschreiben von Abfragen nur angewendet wird, wenn die materialisierte Ansicht aktuell ist und zu genauen Ergebnissen führen kann. Wenn eine materialisierte Ansicht veraltet ist oder die Abfrageanforderungen nicht vollständig erfüllt, führt der Optimierer den ursprünglichen Abfrageplan anhand der Basistabellen aus, wobei der Korrektheit Vorrang vor der Leistung eingeräumt wird.

### Rolle des View-Definers
<a name="materialized-views-view-definer-role"></a>

Eine materialisierte Ansicht funktioniert auf der Grundlage der Berechtigungen der IAM-Rolle, mit der sie erstellt wurde. Sie wird als View Definer-Rolle bezeichnet. Die Definerrolle muss Lesezugriff auf alle Basistabellen haben, auf die in der Definition der materialisierten Ansicht verwiesen wird, und muss über Berechtigungen zum Erstellen von Tabellen in der Zieldatenbank verfügen. Wenn der AWS Glue Datenkatalog eine materialisierte Ansicht aktualisiert, übernimmt er die Rolle des Definierers, um auf Quelltabellen zuzugreifen und aktualisierte Ergebnisse zu schreiben.

Dieses Sicherheitsmodell ermöglicht es Ihnen, Benutzern Zugriff auf materialisierte Ansichten zu gewähren, ohne ihnen direkte Berechtigungen für die zugrunde liegenden Quelltabellen zu gewähren. Wenn die Rolle des View Definers den Zugriff auf eine Basistabelle verliert, schlagen nachfolgende Aktualisierungsvorgänge fehl, bis die Berechtigungen wiederhergestellt sind.

## Berechtigungen für materialisierte Ansichten
<a name="materialized-views-permissions"></a>

Um materialisierte Ansichten zu erstellen und zu verwalten, müssen Sie Berechtigungen konfigurieren AWS Lake Formation . Die IAM-Rolle, die die materialisierte Ansicht erstellt (die Definer-Rolle), erfordert spezielle Berechtigungen für Quelltabellen und Zieldatenbanken.

### Erforderliche Berechtigungen für die Definer-Rolle
<a name="materialized-views-required-permissions-definer-role"></a>

Die Definiererrolle muss über die folgenden Lake Formation Formation-Berechtigungen verfügen:
+ Für Quelltabellen — SELECT- oder ALL-Berechtigungen ohne Zeilen-, Spalten- oder Zellenfilter
+ In der Zieldatenbank — CREATE\$1TABLE-Berechtigung
+ Über den AWS Glue Datenkatalog — GetTable und API-Berechtigungen CreateTable 

Wenn Sie eine materialisierte Ansicht erstellen, wird der ARN der Definiererrolle in der Ansichtsdefinition gespeichert. Der AWS Glue Datenkatalog übernimmt diese Rolle, wenn automatische Aktualisierungsvorgänge ausgeführt werden. Wenn die Definiererrolle den Zugriff auf Quelltabellen verliert, schlagen Aktualisierungsvorgänge fehl, bis die Berechtigungen wiederhergestellt sind.

### IAM-Berechtigungen für Jobs AWS Glue
<a name="materialized-views-iam-permissions-glue-jobs"></a>

Für die IAM-Rolle Ihres AWS Glue Jobs sind die folgenden Berechtigungen erforderlich:

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs",
                "glue:GetTable",
                "glue:GetTables",
                "glue:CreateTable",
                "glue:UpdateTable",
                "glue:DeleteTable",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*:/aws-glue/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        }
    ]
}
```

Die Rolle, die Sie für die automatische Aktualisierung von Materialized View verwenden, muss über die iam: PassRole -Berechtigung für die Rolle verfügen.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111122223333:role/materialized-view-role-name"
      ]
    }
  ]
}
```

Damit Glue die materialisierte Ansicht automatisch für Sie aktualisiert, muss die Rolle außerdem über die folgende Vertrauensrichtlinie verfügen, die es dem Dienst ermöglicht, die Rolle zu übernehmen.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

Wenn die Materialized View in S3 Tables Buckets gespeichert ist, müssen Sie der Rolle außerdem die folgende Berechtigung hinzufügen.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3tables:PutTableMaintenanceConfiguration"
      ],
      "Resource": "arn:aws:s3tables:*:123456789012:*"
    }
  ]
}
```

### Zugriff auf materialisierte Ansichten gewähren
<a name="materialized-views-granting-access"></a>

Um anderen Benutzern Zugriff auf die Abfrage einer materialisierten Ansicht zu gewähren, verwenden Sie, AWS Lake Formation um die SELECT-Berechtigung für die Materialized View-Tabelle zu gewähren. Benutzer können die Materialized View abfragen, ohne direkten Zugriff auf die zugrunde liegenden Quelltabellen zu benötigen.

Ausführliche Informationen zur Konfiguration von Lake Formation Formation-Berechtigungen finden Sie unter Erteilen und Widerrufen von Berechtigungen für Datenkatalogressourcen im AWS Lake Formation Entwicklerhandbuch.

## Materialisierte Ansichten erstellen und verwalten
<a name="materialized-views-creating-managing"></a>

Sie erstellen materialisierte Ansichten mithilfe der `CREATE MATERIALIZED VIEW` SQL-Anweisung in Spark-Engines. Die View-Definition spezifiziert die SQL-Abfrage, die die Transformationslogik, den Zieldatenbank- und Tabellennamen sowie die optionale Aktualisierungskonfiguration definiert. Sie können komplexe Transformationen definieren, einschließlich Aggregationen, Verknüpfungen über mehrere Tabellen hinweg, Filter und Fensterfunktionen.

```
CREATE MATERIALIZED VIEW sales_summary
AS
SELECT 
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(DISTINCT customer_id) as unique_customers
FROM sales_transactions
WHERE transaction_date >= current_date - interval '90' day
GROUP BY region, product_category;
```

Um die automatische Aktualisierung zu konfigurieren, nehmen Sie den Aktualisierungszeitplan in Ihre View-Definition auf:

```
CREATE MATERIALIZED VIEW sales_summary
SCHEDULE REFRESH EVERY 1 HOUR
AS
SELECT region, product_category, SUM(sales_amount) as total_sales
FROM sales_transactions
GROUP BY region, product_category;
```

Sie können eine materialisierte Ansicht jederzeit manuell aktualisieren, indem Sie den `REFRESH MATERIALIZED VIEW` folgenden Befehl verwenden:

```
REFRESH MATERIALIZED VIEW sales_summary;
```

Um den Aktualisierungszeitplan einer vorhandenen materialisierten Ansicht zu ändern, verwenden Sie die `ALTER MATERIALIZED VIEW` folgende Anweisung:

```
ALTER MATERIALIZED VIEW sales_summary
ADD SCHEDULE REFRESH EVERY 2 HOURS;
```

### Verschachtelte materialisierte Ansichten
<a name="materialized-views-nested"></a>

Sie können materialisierte Ansichten erstellen, die auf andere materialisierte Ansichten als Basistabellen verweisen, wodurch mehrstufige Datentransformationen ermöglicht werden. Wenn Sie verschachtelte Materialized Views erstellen, verfolgt der AWS Glue Datenkatalog Abhängigkeiten und verteilt Aktualisierungen automatisch über die Materialized View-Hierarchie. Wenn eine materialisierte Basisansicht aktualisiert wird, werden alle von ihr abhängigen Downstream-Materialized Views entsprechend aktualisiert.

Diese Funktion ermöglicht es Ihnen, komplexe Transformationen in logische Phasen zu zerlegen, was die Wartbarkeit verbessert und eine selektive Aktualisierung der Transformationsebenen auf der Grundlage Ihrer Datenaktualisierungsanforderungen ermöglicht.

## Speicher und Datenzugriff
<a name="materialized-views-storage-access"></a>

Materialisierte Ansichten speichern vorberechnete Ergebnisse als Apache Iceberg-Tabellen in S3-Tabellen-Buckets oder S3-Buckets für allgemeine Zwecke in Ihrem Konto. AWS Der AWS Glue Datenkatalog verwaltet alle Aspekte der Wartung von Iceberg-Tabellen, einschließlich der Komprimierung und Aufbewahrung von Snapshots, mithilfe der automatisierten Optimierungsfunktionen von S3 Tables.

Da materialisierte Ansichten als Iceberg-Tabellen gespeichert werden, können Sie sie direkt von jeder Iceberg-kompatiblen Engine lesen, einschließlich Amazon Athena, Amazon Redshift und Analyseplattformen von Drittanbietern. Dieser Zugriff auf mehrere Engines stellt sicher, dass Ihre vorberechneten Daten in Ihrem gesamten Analytics-Ökosystem ohne Datenduplizierung oder Formatkonvertierung zugänglich bleiben.

## AWS Lake Formation Integration mit Berechtigungen
<a name="materialized-views-lake-formation"></a>

Sie können es verwenden AWS Lake Formation , um detaillierte Berechtigungen für materialisierte Ansichten zu verwalten. Der Ersteller der Ansicht wird automatisch Eigentümer der materialisierten Ansicht und kann anderen Benutzern oder Rollen mithilfe der benannten Ressourcenmethode oder AWS Lake Formation LF-Tags Berechtigungen gewähren.

Wenn Sie einem Benutzer die `SELECT` Berechtigung für eine materialisierte Ansicht gewähren, kann er die vorberechneten Ergebnisse abfragen, ohne Zugriff auf die zugrunde liegenden Quelltabellen zu benötigen. Dieses Sicherheitsmodell vereinfacht die Datenzugriffsverwaltung und ermöglicht es Ihnen, das Prinzip der geringsten Rechte zu implementieren, sodass Benutzer nur auf die spezifischen Datentransformationen zugreifen können, die sie benötigen.

Mithilfe der Funktionen zur AWS kontenübergreifenden gemeinsamen Nutzung können Sie materialisierte Ansichten für Konten, AWS Organisationen und Organisationseinheiten gemeinsam nutzen AWS Lake Formation. Mithilfe von Ressourcenlinks können Sie auch AWS regionsübergreifend auf materialisierte Ansichten zugreifen und so eine zentrale Datenverwaltung mit verteiltem Datenzugriff ermöglichen.

## Überwachung und Debugging
<a name="materialized-views-monitoring-debugging"></a>

Der AWS Glue Datenkatalog veröffentlicht alle Aktualisierungsvorgänge von materialisierten Ansichten und die zugehörigen Metriken auf Amazon CloudWatch. Sie können die Startzeit, die Endzeit, die Dauer, das verarbeitete Datenvolumen und den Aktualisierungsstatus von Aktualisierungen anhand von CloudWatch Metriken überwachen. Wenn Aktualisierungsvorgänge fehlschlagen, werden Fehlermeldungen und Diagnoseinformationen in CloudWatch Protokollen erfasst.

Sie können CloudWatch Alarme einrichten, um Benachrichtigungen zu erhalten, wenn Aktualisierungsaufträge die erwartete Dauer überschreiten oder wiederholt fehlschlagen. Der AWS Glue Datenkatalog veröffentlicht auch Änderungsereignisse sowohl für erfolgreiche als auch für fehlgeschlagene Aktualisierungsläufe, sodass Sie Materialized View-Operationen in eine umfassendere Workflow-Automatisierung integrieren können.

Um den aktuellen Status einer materialisierten Ansicht zu überprüfen, verwenden Sie den `DESCRIBE MATERIALIZED VIEW` SQL-Befehl, der Metadaten zurückgibt, darunter den Verfallsstatus, den Zeitstempel der letzten Aktualisierung und die Konfiguration des Aktualisierungszeitplans.

## Verwaltung von Aktualisierungsaufträgen
<a name="materialized-views-managing-refresh-jobs"></a>

### Starten einer manuellen Aktualisierung
<a name="materialized-views-manual-refresh"></a>

Löst eine sofortige Aktualisierung außerhalb des geplanten Intervalls aus.

Erforderliche Berechtigung: Die für den API-Aufruf verwendeten AWS Anmeldeinformationen müssen über eine `glue:GetTable` Berechtigung für die materialisierte Ansicht verfügen.

Für den S3-Tabellenkatalog:

```
aws glue start-materialized-view-refresh-task-run \
    --catalog-id <ACCOUNT_ID>:s3tablescatalog/<CATALOG_NAME> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

Für Root Catalog:

```
aws glue start-materialized-view-refresh-task-run \
    --catalog-id <ACCOUNT_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

### Aktualisierungsstatus wird überprüft
<a name="materialized-views-checking-refresh-status"></a>

Rufen Sie den Status eines bestimmten Aktualisierungsauftrags ab:

```
aws glue get-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --materialized-view-refresh-task-run-id <TASK_RUN_ID>
```

### Aktualisierungsverlauf auflisten
<a name="materialized-views-listing-refresh-history"></a>

Alle Aktualisierungsaufträge für eine materialisierte Ansicht anzeigen:

```
aws glue list-materialized-view-refresh-task-runs \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

**Anmerkung**  
Wird `<ACCOUNT_ID>:s3tablescatalog/<CATALOG_NAME>` für S3-Tabellen oder `<ACCOUNT_ID>` für den Stammkatalog verwendet.

### Eine laufende Aktualisierung wird gestoppt
<a name="materialized-views-stopping-refresh"></a>

Brechen Sie einen laufenden Aktualisierungsauftrag ab:

```
aws glue stop-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

## Überwachung und Problembehebung
<a name="materialized-views-monitoring-troubleshooting"></a>

Es gibt drei Möglichkeiten, Aktualisierungsaufträge für Materialized Views zu überwachen:

### CloudWatch Metriken
<a name="materialized-views-cloudwatch-metrics"></a>

Sehen Sie sich aggregierte Metriken für all Ihre Materialized View Refresh-Jobs an unter: CloudWatch

Verfügbare Metriken:
+ AWS/Glue-Namespace mit Abmessungen:
  + CatalogId: Ihre Katalog-ID
  + DatabaseName: Datenbank, die die materialisierte Ansicht enthält
  + TableName: Name der materialisierten Ansicht
  + TaskType: Auf "“ MaterializedViewRefresh gesetzt

In der Konsole anzeigen:

1. Navigieren Sie zu CloudWatch Konsole → Metriken

1. Wählen Sie den AWS/Glue-Namespace

1. Nach Dimensionen filtern: CatalogId,,, DatabaseName TableName TaskType

1. Sehen Sie sich Kennzahlen für Erfolg, Misserfolg und Dauer von Aufträgen an

Beispiel für eine CloudWatch Metrik-Abfrage:

```
{AWS/Glue,CatalogId,DatabaseName,TableName,TaskType} MaterializedViewRefresh
```

Verwenden von AWS CLI:

```
aws cloudwatch get-metric-statistics \
    --namespace AWS/Glue \
    --metric-name <MetricName> \
    --dimensions Name=CatalogId,Value=<CATALOG_ID> \
                 Name=DatabaseName,Value=<DATABASE_NAME> \
                 Name=TableName,Value=<TABLE_NAME> \
                 Name=TaskType,Value=MaterializedViewRefresh \
    --start-time <START_TIME> \
    --end-time <END_TIME> \
    --period 3600 \
    --statistics Sum \
    --region <REGION>
```

### CloudWatch Logs
<a name="materialized-views-cloudwatch-logs"></a>

Detaillierte Ausführungsprotokolle für einzelne Ausführungen von Aktualisierungsaufgaben anzeigen:

Protokollgruppe: `/aws-glue/materialized-views/<task_run_id>`

Wo `<task_run_id>` ist eine UUID (z. B. abc12345-def6-7890-ghij-klmnopqrstuv).

Protokolle anzeigen:

```
# List log streams for a task run
aws logs describe-log-streams \
    --log-group-name /aws-glue/materialized-views/<TASK_RUN_ID> \
    --region <REGION>

# Get log events
aws logs get-log-events \
    --log-group-name /aws-glue/materialized-views/<TASK_RUN_ID> \
    --log-stream-name <LOG_STREAM_NAME> \
    --region <REGION>
```

In der CloudWatch Konsole:

1. Navigieren Sie zu CloudWatch → Protokollgruppen

1. Suchen Sie nach /aws-glue/materialized-views/

1. Wählen Sie die Protokollgruppe mit Ihrer Aufgabenausführungs-ID aus

1. Sehen Sie sich detaillierte Ausführungsprotokolle, Fehler und die Spark-Jobausgabe an

### Benachrichtigungen
<a name="materialized-views-eventbridge"></a>

Abonnieren Sie Ereignisse für Benachrichtigungen in Echtzeit über Statusänderungen bei der Aktualisierung von Jobs:

Verfügbare Ereignistypen:
+ Die Aufgabe zur Aktualisierung von Glue Materialized View wurde gestartet
+ Die Aktualisierungsaufgabe von Glue Materialized View war erfolgreich
+ Die Aktualisierungsaufgabe für Glue Materialized View ist fehlgeschlagen
+ Fehler beim Aufrufen der automatischen Aktualisierung von Glue Materialized View

Eine Regel erstellen:

```
aws events put-rule \
    --name materialized-view-refresh-notifications \
    --event-pattern '{
        "source": ["aws.glue"],
        "detail-type": [
            "Glue Materialized View Refresh Task Started",
            "Glue Materialized View Refresh Task Succeeded",
            "Glue Materialized View Refresh Task Failed",
            "Glue Materialized View Auto-Refresh Invocation Failure"
        ]
    }' \
    --region <REGION>
```

Ein Ziel hinzufügen (z. B. ein SNS-Thema):

```
aws events put-targets \
    --rule materialized-view-refresh-notifications \
    --targets "Id"="1","Arn"="arn:aws:sns:<REGION>:<ACCOUNT_ID>:<TOPIC_NAME>" \
    --region <REGION>
```

### Aktualisierungsstatus anzeigen
<a name="materialized-views-refresh-status"></a>

Überprüfen Sie den Status Ihrer Materialized View-Aktualisierungsaufträge mithilfe der AWS Glue API:

```
aws glue get-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --materialized-view-refresh-task-run-id <TASK_RUN_ID> \
    --region <REGION>
```

Oder listen Sie alle letzten Aktualisierungsläufe auf:

```
aws glue list-materialized-view-refresh-task-runs \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME> \
    --region <REGION>
```

Das zeigt:
+ Uhrzeit der letzten Aktualisierung
+ Aktualisierungsstatus (ERFOLGREICH, FEHLGESCHLAGEN, LÄUFT, GESTOPPT)
+ ID der Aufgabenausführung
+ Fehlermeldungen (falls fehlgeschlagen)

Allgemeine Aktualisierungsstatus:
+ WIRD AUSGEFÜHRT: Der Aktualisierungsjob wird gerade ausgeführt
+ ERFOLGREICH: Die Aktualisierung wurde erfolgreich abgeschlossen
+ FEHLGESCHLAGEN: Bei der Aktualisierung ist ein Fehler aufgetreten
+ GESTOPPT: Die Aktualisierung wurde manuell abgebrochen

Fehlerbehebung bei fehlgeschlagenen Aktualisierungen:

Wenn eine Aktualisierung fehlschlägt, überprüfen Sie:

1. IAM-Berechtigungen: Stellen Sie sicher, dass die Definiererrolle Zugriff auf alle Basistabellen und den Speicherort der materialisierten Ansicht hat

1. Verfügbarkeit von Basistabellen: Stellen Sie sicher, dass alle referenzierten Tabellen existieren und zugänglich sind

1. Gültigkeit der Abfrage: Stellen Sie sicher, dass die SQL-Abfrage für den Spark-SQL-Dialekt gültig ist

1. Ressourcenlimits: Prüfen Sie, ob Sie die Limits für gleichzeitige Aktualisierungen für Ihr Konto erreicht haben

Verwenden Sie die GetMaterializedViewRefreshTaskRun API, um detaillierte Fehlermeldungen abzurufen.

## Überlegungen und Einschränkungen
<a name="materialized-views-considerations-limitations"></a>
+ Materialisierte Ansichten können nur auf Apache Iceberg-Tabellen verweisen, die im AWS Glue Datenkatalog als Basistabellen registriert sind.
+ Die Erstellung von Ansichten und das automatische Umschreiben von Abfragen sind nur über Spark-Engines in Apache Spark Version 3.5.6 und höher in Amazon Athena, Amazon EMR und AWS Glue (Version 5.1) verfügbar.
+ Materialisierte Ansichten stimmen letztendlich mit Basistabellen überein. Während des Aktualisierungsfensters können Abfragen, die direkt auf die materialisierte Ansicht zugreifen, veraltete Daten zurückgeben. Führen Sie eine manuelle Aktualisierung durch, um sofort auf aktuelle Daten zugreifen zu können.
+ Das minimale automatische Aktualisierungsintervall beträgt eine Stunde. In Anwendungsfällen, die häufigere Updates erfordern, führen Sie manuelle Aktualisierungen programmgesteuert mit dem Befehl aus. `REFRESH MATERIALIZED VIEW`
+ Beim Umschreiben von Abfragen wird der Korrektheit Vorrang vor der Leistung eingeräumt. Wenn eine materialisierte Ansicht veraltet ist oder die Abfrageanforderungen nicht genau erfüllen kann, führen Spark-Engines die ursprüngliche Abfrage anhand der Basistabellen aus.