

 Amazon Redshift unterstützt UDFs ab Patch 198 nicht mehr die Erstellung von neuem Python. Das bestehende Python UDFs wird bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im [Blog-Posting](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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.

# SQL-Befehle
<a name="c_SQL_commands"></a>

Die SQL-Sprache besteht aus Befehlen, die Sie zum Erstellen und Bearbeiten von Datenbankobjekten, zum Ausführen von Abfragen, zum Laden von Tabellen und zum Ändern von Daten in Tabellen verwenden.

Amazon Redshift basiert auf PostgreSQL. Zwischen Amazon Redshift und PostgreSQL gibt es eine Reihe wichtiger Unterschiede, die Sie berücksichtigen müssen, wenn Sie Ihre Data-Warehouse-Anwendungen entwerfen und entwickeln. Weitere Informationen zu den Unterschieden zwischen Amazon-Redshift-SQL und PostgreSQL finden Sie unter [Amazon Redshift und PostgreSQL](c_redshift-and-postgres-sql.md).

**Anmerkung**  
Die maximal zulässige Größe für eine einzelne SQL-Anweisung ist 16 MB.

**Topics**
+ [ABORT](r_ABORT.md)
+ [ALTER DATABASE](r_ALTER_DATABASE.md)
+ [ALTER DATASHARE](r_ALTER_DATASHARE.md)
+ [ALTER DEFAULT PRIVILEGES](r_ALTER_DEFAULT_PRIVILEGES.md)
+ [ALTER EXTERNAL SCHEMA](r_ALTER_EXTERNAL_SCHEMA.md)
+ [ALTER EXTERNAL VIEW](r_ALTER_EXTERNAL_VIEW.md)
+ [ALTER FUNCTION](r_ALTER_FUNCTION.md)
+ [ALTER GROUP](r_ALTER_GROUP.md)
+ [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md)
+ [ALTER MASKING POLICY](r_ALTER_MASKING_POLICY.md)
+ [ALTER MATERIALIZED VIEW](r_ALTER_MATERIALIZED_VIEW.md)
+ [ALTER RLS POLICY](r_ALTER_RLS_POLICY.md)
+ [ALTER ROLE](r_ALTER_ROLE.md)
+ [ALTER PROCEDURE](r_ALTER_PROCEDURE.md)
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [ALTER SYSTEM](r_ALTER_SYSTEM.md)
+ [ALTER TABLE](r_ALTER_TABLE.md)
+ [ALTER TABLE APPEND](r_ALTER_TABLE_APPEND.md)
+ [VORLAGE ÄNDERN](r_ALTER_TEMPLATE.md)
+ [ALTER USER](r_ALTER_USER.md)
+ [ANALYZE](r_ANALYZE.md)
+ [ANALYZE COMPRESSION](r_ANALYZE_COMPRESSION.md)
+ [ANFÜGEN EINER MASKIERUNGSRICHTLINIE](r_ATTACH_MASKING_POLICY.md)
+ [ATTACH RLS POLICY](r_ATTACH_RLS_POLICY.md)
+ [BEGIN](r_BEGIN.md)
+ [CALL](r_CALL_procedure.md)
+ [CANCEL](r_CANCEL.md)
+ [CLOSE](close.md)
+ [COMMENT](r_COMMENT.md)
+ [COMMIT](r_COMMIT.md)
+ [COPY](r_COPY.md)
+ [CREATE DATABASE](r_CREATE_DATABASE.md)
+ [DATASHARE ERSTELLEN](r_CREATE_DATASHARE.md)
+ [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md)
+ [ERSTELLEN EINES EXTERNEN MODELLS](r_create_external_model.md)
+ [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)
+ [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)
+ [CREATE EXTERNAL VIEW](r_CREATE_EXTERNAL_VIEW.md)
+ [CREATE FUNCTION](r_CREATE_FUNCTION.md)
+ [CREATE GROUP](r_CREATE_GROUP.md)
+ [CREATE IDENTITY PROVIDER](r_CREATE_IDENTITY_PROVIDER.md)
+ [CREATE LIBRARY](r_CREATE_LIBRARY.md)
+ [ERSTELLEN EINER MASKIERUNGSRICHTLINIE](r_CREATE_MASKING_POLICY.md)
+ [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)
+ [CREATE MODEL](r_CREATE_MODEL.md)
+ [CREATE PROCEDURE](r_CREATE_PROCEDURE.md)
+ [CREATE RLS POLICY](r_CREATE_RLS_POLICY.md)
+ [CREATE ROLE](r_CREATE_ROLE.md)
+ [CREATE SCHEMA](r_CREATE_SCHEMA.md)
+ [CREATE TABLE](r_CREATE_TABLE_NEW.md)
+ [CREATE TABLE AS](r_CREATE_TABLE_AS.md)
+ [VORLAGE ERSTELLEN](r_CREATE_TEMPLATE.md)
+ [CREATE USER](r_CREATE_USER.md)
+ [CREATE VIEW](r_CREATE_VIEW.md)
+ [DEALLOCATE](r_DEALLOCATE.md)
+ [DECLARE](declare.md)
+ [DELETE](r_DELETE.md)
+ [DESC DATASHARE](r_DESC_DATASHARE.md)
+ [DESC IDENTITY PROVIDER](r_DESC_IDENTITY_PROVIDER.md)
+ [TRENNEN EINER MASKIERUNGSRICHTLINIE](r_DETACH_MASKING_POLICY.md)
+ [DETACH RLS POLICY](r_DETACH_RLS_POLICY.md)
+ [DROP DATABASE](r_DROP_DATABASE.md)
+ [DROP DATASHARE](r_DROP_DATASHARE.md)
+ [DROP EXTERNAL VIEW](r_DROP_EXTERNAL_VIEW.md)
+ [DROP FUNCTION](r_DROP_FUNCTION.md)
+ [DROP GROUP](r_DROP_GROUP.md)
+ [DROP IDENTITY PROVIDER](r_DROP_IDENTITY_PROVIDER.md)
+ [DROP LIBRARY](r_DROP_LIBRARY.md)
+ [ENTFERNEN EINER MASKIERUNGSRICHTLINIE](r_DROP_MASKING_POLICY.md)
+ [DROP MODEL](r_DROP_MODEL.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)
+ [DROP PROCEDURE](r_DROP_PROCEDURE.md)
+ [DROP RLS POLICY](r_DROP_RLS_POLICY.md)
+ [DROP ROLE](r_DROP_ROLE.md)
+ [DROP SCHEMA](r_DROP_SCHEMA.md)
+ [DROP TABLE](r_DROP_TABLE.md)
+ [VORLAGE LÖSCHEN](r_DROP_TEMPLATE.md)
+ [DROP USER](r_DROP_USER.md)
+ [DROP VIEW](r_DROP_VIEW.md)
+ [END](r_END.md)
+ [EXECUTE](r_EXECUTE.md)
+ [EXPLAIN](r_EXPLAIN.md)
+ [FETCH](fetch.md)
+ [GRANT](r_GRANT.md)
+ [INSERT](r_INSERT_30.md)
+ [INSERT (externe Tabelle)](r_INSERT_external_table.md)
+ [LOCK](r_LOCK.md)
+ [MERGE](r_MERGE.md)
+ [PREPARE](r_PREPARE.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [RESET](r_RESET.md)
+ [REVOKE](r_REVOKE.md)
+ [ROLLBACK](r_ROLLBACK.md)
+ [SELECT](r_SELECT_synopsis.md)
+ [SELECT INTO](r_SELECT_INTO.md)
+ [SET](r_SET.md)
+ [SET SESSION AUTHORIZATION](r_SET_SESSION_AUTHORIZATION.md)
+ [SET SESSION CHARACTERISTICS](r_SET_SESSION_CHARACTERISTICS.md)
+ [ZEIGEN](r_SHOW.md)
+ [SPALTE „ZUSCHÜSSE“ ANZEIGEN](r_SHOW_COLUMN_GRANTS.md)
+ [SHOW\$1COLUMNS](r_SHOW_COLUMNS.md)
+ [EINSCHRÄNKUNGEN ANZEIGEN](r_SHOW_CONSTRAINTS.md)
+ [SHOW EXTERNAL TABLE](r_SHOW_EXTERNAL_TABLE.md)
+ [SHOW DATABASES](r_SHOW_DATABASES.md)
+ [FUNKTIONEN ANZEIGEN](r_SHOW_FUNCTIONS.md)
+ [SHOW GRANTS](r_SHOW_GRANTS.md)
+ [SHOW MODEL](r_SHOW_MODEL.md)
+ [SHOW DATASHARES](r_SHOW_DATASHARES.md)
+ [PARAMETER ANZEIGEN](r_SHOW_PARAMETERS.md)
+ [RICHTLINIEN ANZEIGEN](r_SHOW_POLICIES.md)
+ [SHOW PROCEDURE](r_SHOW_PROCEDURE.md)
+ [ZEIGT PROZEDUREN](r_SHOW_PROCEDURES.md)
+ [SHOW SCHEMAS](r_SHOW_SCHEMAS.md)
+ [SHOW TABLE](r_SHOW_TABLE.md)
+ [SHOW TABLES](r_SHOW_TABLES.md)
+ [VORLAGE ANZEIGEN](r_SHOW_TEMPLATE.md)
+ [VORLAGEN ANZEIGEN](r_SHOW_TEMPLATES.md)
+ [SHOW VIEW](r_SHOW_VIEW.md)
+ [START TRANSACTION](r_START_TRANSACTION.md)
+ [TRUNCATE](r_TRUNCATE.md)
+ [UNLOAD](r_UNLOAD.md)
+ [UPDATE](r_UPDATE.md)
+ [USE](r_USE_command.md)
+ [VACUUM](r_VACUUM_command.md)

# ABORT
<a name="r_ABORT"></a>

Bricht die zurzeit ausgeführte Transaktion ab und verwirft alle Aktualisierungen, die durch diese Transaktion ausgeführt wurden. ABORT wirkt sich nicht auf bereits abgeschlossene Transaktionen aus.

Dieser Befehl hat die gleiche Funktion wie der Befehl ROLLBACK. Weitere Informationen finden Sie unter [ROLLBACK](r_ROLLBACK.md).

## Syntax
<a name="r_ABORT-synopsis"></a>

```
ABORT [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_ABORT-parameters"></a>

WORK  
Optionales Schlüsselwort.

TRANSACTION  
Optionales Schlüsselwort; WORK und TRANSACTION sind Synonyme.

## Beispiel
<a name="r_ABORT-example"></a>

Im folgenden Beispiel werden eine Tabelle erstellt und eine Transaktion gestartet, bei der Daten in die Tabelle eingefügt werden. Anschließend wird mit dem Befehl ABORT die Dateieinfügung zurückgenommen, um die Tabelle leer zu lassen.

Mit dem folgenden Befehl wird eine Beispieltabelle namens MOVIE\$1GROSS erstellt:

```
create table movie_gross( name varchar(30), gross bigint );
```

Mit dem nächsten Satz von Befehlen wird eine Transaktion gestartet, die zwei Datenzeilen in die Tabelle einfügt:

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

Als Nächstes werden mit dem folgenden Befehl die Daten aus der Tabelle ausgewählt, um zu zeigen, dass sie erfolgreich eingefügt wurden:

```
select * from movie_gross;
```

Die Befehlsausgabe zeigt, dass beide Zeilen erfolgreich eingefügt wurden:

```
         name           |  gross
------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

Mit diesem Befehl werden nun die Datenänderungen auf den Zeitpunkt zurückgesetzt, an dem die Transaktion gestartet wurde:

```
abort;
```

Wenn nun Daten aus der Tabelle ausgewählt werden, wird eine leere Tabelle gezeigt:

```
select * from movie_gross;

 name | gross
------+-------
(0 rows)
```

# ALTER DATABASE
<a name="r_ALTER_DATABASE"></a>

Ändert die Attribute einer Datenbank.

## Erforderliche Berechtigungen
<a name="r_ALTER_DATABASE-privileges"></a>

Um ALTER DATABASE zu benutzen, ist eine der folgenden Berechtigungen erforderlich.
+ Superuser
+ Benutzer mit der Berechtigung ALTER DATABASE.
+ Datenbankbesitzer

## Syntax
<a name="r_ALTER_DATABASE-synopsis"></a>

```
ALTER DATABASE database_name
{ 
  RENAME TO new_name
  | OWNER TO new_owner
  | [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
| INTEGRATION
 { 
  REFRESH { { ALL | INERROR } TABLES [ IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] }
   | SET 
     [ QUERY_ALL_STATES [=] { TRUE | FALSE } ] 
     [ ACCEPTINVCHARS [=] { TRUE | FALSE } ] 
     [ REFRESH_INTERVAL <interval> ]
     [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
     [ HISTORY_MODE [=] {TRUE | FALSE} [ FOR { {ALL} TABLES [IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] } ] ]
 }
}
```

## Parameters
<a name="r_ALTER_DATABASE-parameters"></a>

 *database\$1name*   
Der Name der Datenbank, die geändert werden soll. In der Regel ändern Sie eine Datenbank, mit der Sie zurzeit nicht verbunden sind. In jedem Fall werden die Änderungen nur in folgenden Sitzungen wirksam. Sie können den Besitzer der aktuellen Datenbank ändern, sie jedoch nicht umbenennen:  

```
alter database tickit rename to newtickit;
ERROR:  current database may not be renamed
```

RENAME TO   
Benennt die angegebene Datenbank um. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md). Sie können die Datenbanken dev, padb\$1harvest, template0 oder template1 oder sys:internal-Datenbanken nicht umbenennen. Nur der Datenbankbesitzer oder ein [superuser](r_superusers.md#def_superusers) können eine Datenbank umbenennen. Besitzer, die keine Superuser sind, benötigen ebenfalls das CREATEDB-Recht.

 *new\$1name*   
Neuer Datenbankname.

OWNER TO   
Ändert den Besitzer der angegebenen Datenbank. Sie können den Besitzer der aktuellen Datenbank oder einer anderen Datenbank ändern. Nur ein Superuser kann den Besitzer ändern.

 *new\$1owner*   
Neuer Datenbankbesitzer. Der neue Besitzer muss ein vorhandener Datenbankbenutzer mit Schreibberechtigungen sein. Weitere Informationen zu Benutzerrechten finden Sie in [GRANT](r_GRANT.md).

CONNECTION LIMIT \$1 *Limit* \$1 UNLIMITED \$1   
Redshift unterstützt das Schreiben von verschachteltem JSON-Code, wenn das Abfrageergebnis SUPER-Spalten enthält. Das Limit wird für Superuser nicht durchgesetzt. Mithilfe des Schlüsselworts UNLIMITED können Sie die maximale Zahl gleichzeitiger Verbindungen festlegen. Möglicherweise gilt auch ein Limit für die Zahl der Verbindungen für die einzelnen Benutzer. Weitere Informationen finden Sie unter [CREATE USER](r_CREATE_USER.md). Der Standardwert ist UNLIMITED. Um die aktuellen Verbindungen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [STV\$1SESSIONS](r_STV_SESSIONS.md) aus.  
Wenn sowohl für Benutzer- als auch für Datenbankverbindungen Limits gelten, muss ein ungenutzter Verbindungsplatz verfügbar sein, der sich innerhalb beider Grenzen befindet, wenn ein Benutzer versucht, eine Verbindung herzustellen.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Eine Klausel, die angibt, ob bei der Suche oder dem Vergleich von Zeichenfolgen zwischen Groß- und Kleinschreibung unterschieden wird oder nicht.   
Sie können die Unterscheidung zwischen Groß- und Kleinschreibung in der aktuellen, Datenbank ändern, selbst wenn diese leer ist.  
Sie müssen über ALTER-Berechtigung für die aktuelle Datenbank verfügen, um die Unterscheidung zwischen Groß-/Kleinschreibung zu ändern. Superuser oder Datenbankbesitzer mit der CREATE DATABASE-Berechtigung können ebenfalls die Unterscheidung zwischen Groß-/Kleinschreibung in der Datenbank ändern.  
CASE\$1SENSITIVE und CS sind austauschbar und liefern dieselben Ergebnisse. Ebenso sind CASE\$1INSENSITIVE und CI austauschbar und führen zu denselben Ergebnissen.

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
Eine Klausel, die die verwendete Isolationsstufe bei Abfragen für eine Datenbank angibt. Weitere Informationen zu Isolationsstufen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md).  
+ SNAPSHOT-Isolation – bietet eine Isolationsstufe mit Schutz vor Aktualisierungs- und Löschkonflikten 
+ SERIALIZABLE-Isolation (serialisierbare Isolation) – bietet volle Serialisierbarkeit für gleichzeitige Transaktionen.
Beachten Sie die folgenden Elemente, wenn Sie die Isolationsstufe einer Datenbank ändern:  
+ Sie müssen über Superuser-Rechte oder über die Berechtigung CREATE DATABASE (Datenbank erstellen) für die aktuelle Datenbank verfügen, um die Isolationsstufe für die Datenbank zu ändern.
+ Sie können die Isolationsstufe der `dev`-Datenbank nicht ändern. 
+ Sie können die Isolationsstufe innerhalb eines Transaktionsblocks nicht ändern.
+ Der Befehl zum Ändern der Isolationsstufe schlägt fehl, wenn andere Benutzer mit der Datenbank verbunden sind.
+ Mit dem Befehl zum Ändern der Isolationsstufe können die Isolationsstufen-Einstellungen der aktuellen Sitzung geändert werden.

INTEGRATION  
Ändern einer Null-ETL-Integrationsdatenbank.

REFRESH \$1\$1 ALL \$1 INERROR \$1 TABLES [IN SCHEMA *schema* [, ...]] \$1 TABLE *schema.table* [, ...]\$1  
Eine Klausel, die angibt, ob Amazon Redshift alle Tabellen oder Tabellen mit Fehlern im angegebenen Schema oder der Tabelle aktualisiert. Die Aktualisierung löst aus, dass die Tabellen im angegebenen Schema oder der angegebenen Tabelle vollständig aus der Quelldatenbank repliziert werden.  
Weitere Informationen finden Sie unter [Null-ETL-Integrationen](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html) im *Managementleitfaden zu Amazon Redshift*. Weitere Informationen zu Integrationszuständen finden Sie unter [SVV\$1INTEGRATION\$1TABLE\$1STATE](r_SVV_INTEGRATION_TABLE_STATE.md) und [SVV\$1INTEGRATION](r_SVV_INTEGRATION.md).

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
Die QUERY\$1ALL\$1STATES-Klausel legt fest, ob Null-ETL-Integrationstabellen in allen Status (`Synced`, `Failed`, `ResyncRequired` und `ResyncInitiated`) abgefragt werden können. Standardmäßig kann eine Null-ETL-Integrationstabelle nur im Status `Synced` abgefragt werden. 

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
Die ACCEPTINVCHARS-Klausel legt fest, ob Null-ETL-Integrationstabellen mit der Aufnahme fortfahren, wenn ungültige Zeichen für den VARCHAR-Datentyp erkannt werden. Wenn ungültige Zeichen gefunden werden, wird das ungültige Zeichen durch ein standardmäßiges `?`-Zeichen ersetzt.

REFRESH\$1INTERVAL <interval>  
Die REFRESH\$1INTERVAL-Klausel legt das ungefähre Zeitintervall in Sekunden für die Aktualisierung von Daten aus der Zero-ETL-Quelle in der Zieldatenbank fest. Das `interval` kann für Null-ETL-Integrationen mit dem Quelltyp Aurora MySQL, Aurora PostgreSQL oder RDS for MySQL auf 0–432 000 Sekunden (5 Tage) gesetzt werden. Für Null-ETL-Integrationen von Amazon DynamoDB kann das `interval` auf 900–432 000 Sekunden (15 Minuten – 5 Tage) festgelegt werden.  
Weitere Informationen zum Erstellen von Datenbanken mit Null-ETL-Integrationen finden Sie unter [Erstellen von Zieldatenbanken in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html) im *Managementleitfaden zu Amazon Redshift*.

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
Die TRUNCATECOLUMNS-Klausel legt fest, ob Null-ETL-Integrationstabellen mit der Aufnahme fortfahren, wenn die Werte für die VARCHAR-Spalten- oder SUPER-Spaltenattribute den Grenzwert überschreiten. Wenn `TRUE`, werden die Werte gekürzt, sodass sie in die Spalte passen, und die Werte von JSON-Attributen, die den verfügbaren Platz überschreiten, werden gekürzt, damit sie in die SUPER-Spalte passen.

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1 [ FOR \$1 \$1ALL\$1 TABLES [IN SCHEMA schema [, ...]] \$1 TABLE schema.table [, ...]\$1 ]  
Eine Klausel, die angibt, ob Amazon Redshift den Verlaufsmodus für alle Tabellen oder für Tabellen im angegebenen Schema festlegt, die an der Null-ETL-Integration teilnehmen. Diese Option gilt nur für Datenbanken, die für die Null-ETL-Integration erstellt wurden.  
Die HISTORY\$1MODE-Klausel kann auf `TRUE` oder `FALSE` gesetzt werden. Der Standardwert ist `FALSE`. Das Ein- und Ausschalten des Verlaufsmodus gilt nur für Tabellen, die sich im `Synced`-Status befinden. Informationen zu HISTORY\$1MODE finden Sie unter [Verlaufsmodus](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html) im *Managementleitfaden zu Amazon Redshift*.

## Nutzungshinweise
<a name="r_ALTER_DATABASE-usage-notes"></a>

ALTER DATABASE-Befehle gelten für folgende, nicht für aktuelle Sitzungen. Sie müssen die Verbindung mit der geänderten Datenbank erneut herstellen, um die Auswirkungen der Änderung anzuzeigen.

## Beispiele
<a name="r_ALTER_DATABASE-examples"></a>

Im folgenden Beispiel wird die Datenbank mit dem Namen TICKIT\$1SANDBOX in TICKIT\$1TEST umbenannt: 

```
alter database tickit_sandbox rename to tickit_test;
```

Im folgenden Beispiel wird der Besitzer der TICKIT-Datenbank (der aktuellen Datenbank) in DWUSER umbenannt: 

```
alter database tickit owner to dwuser;
```

Im folgenden Beispiel wird die Unterscheidung zwischen Groß-/Kleinschreibung in der Datenbank sampledb geändert:

```
ALTER DATABASE sampledb COLLATE CASE_INSENSITIVE;
```

Im folgenden Beispiel wird eine Datenbank namens **sampledb** mit der Isolationsstufe SNAPSHOT geändert.

```
ALTER DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

Im folgenden Beispiel werden die Tabellen **schema1.sample\$1table1** und **schema2.sample\$1table2** in der Datenbank **sample\$1integration\$1db** in Ihrer Null-ETL-Integration aktualisiert.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH TABLE schema1.sample_table1, schema2.sample_table2;
```

Im folgenden Beispiel werden alle synchronisierten und fehlgeschlagenen Tabellen in Ihrer Null-ETL-Integration aktualisiert.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH ALL tables;
```

Im folgenden Beispiel wird das Aktualisierungsintervall für Null-ETL-Integrationen auf 600 Sekunden festgelegt.

```
ALTER DATABASE sample_integration_db INTEGRATION SET REFRESH_INTERVAL 600;
```

Im folgenden Beispiel werden alle Tabellen aktualisiert, die sich im `ErrorState` im Schema **sample\$1schema** befinden.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH INERROR TABLES in SCHEMA sample_schema;
```

Im folgenden Beispiel wird der Verlaufsmodus für die Tabelle `myschema.table1` aktiviert.

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true FOR TABLE myschema.table1
```

Im folgenden Beispiel wird der Verlaufsmodus für alle Tabellen in `myschema` aktiviert. 

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true for ALL TABLES IN SCHEMA myschema
```

# ALTER DATASHARE
<a name="r_ALTER_DATASHARE"></a>

Ändert die Definition eines Datashares. Sie können mit ALTER DATASHARE Objekte hinzufügen oder entfernen. Sie können nur ein Datashare in der aktuellen Datenbank ändern. Fügen Sie Objekte aus der zugehörigen Datenbank einem Datashare hinzu oder entfernen Sie sie daraus. Der Besitzer des Datashares mit den erforderlichen Berechtigungen für die hinzuzufügenden oder zu entfernenden Datashare-Objekte kann das Datashare ändern.

## Erforderliche Berechtigungen
<a name="r_ALTER_DATASHARE-privileges"></a>

Für ALTER DATASHARE sind folgende Berechtigungen erforderlich:
+ Superuser.
+ Benutzer mit der Berechtigung ALTER DATASHARE.
+ Benutzer mit der Berechtigung ALTER oder ALL für das Datashare.
+ Um bestimmte Objekte zu einem Datashare hinzuzufügen, müssen diese Benutzer die Berechtigung für die Objekte haben. Für diesen Fall sollten Benutzer auch Besitzer der Objekte sein oder SELECT-, USAGE- oder ALL-Berechtigungen für die Objekte haben. 

## Syntax
<a name="r_ALTER_DATASHARE-synopsis"></a>

Die folgende Syntax veranschaulicht, wie Objekte zum Datashare hinzugefügt oder von diesem entfernt werden.

```
ALTER DATASHARE datashare_name { ADD | REMOVE } {
TABLE schema.table [, ...]
| SCHEMA schema [, ...]
| FUNCTION schema.sql_udf (argtype,...) [, ...]
| ALL TABLES IN SCHEMA schema [, ...]
| ALL FUNCTIONS IN SCHEMA schema [, ...] }
```

Die folgende Syntax veranschaulicht, wie die Eigenschaften eines Datashares konfiguriert werden.

```
ALTER DATASHARE datashare_name {
[ SET PUBLICACCESSIBLE [=] TRUE | FALSE ]
[ SET INCLUDENEW [=] TRUE | FALSE FOR SCHEMA schema ] }
```

## Parameters
<a name="r_ALTER_DATASHARE-parameters"></a>

*datashare\$1name*  
Der Name der zu ändernden Datashares. 

ADD \$1 REMOVE  
Eine Klausel, die angibt, ob dem Datashare Objekte hinzugefügt oder daraus entfernt werden sollen.

TABLE *schema*.*table* [, ...]  
Der Name der Tabelle oder Ansicht im angegebenen Schema, die dem Datashare hinzugefügt werden soll.

SCHEMA *schema* [, ...]   
Der Name des Schemas, das dem Datashare hinzugefügt werden soll.

FUNCTION *schema*.*sql\$1udf* (argtype,...) [, ...]  
Der Name der benutzerdefinierten SQL-Funktion mit Argumenttypen, die dem Datashare hinzugefügt werden soll.

ALL TABLES IN SCHEMA *schema* [, ...]   
Eine Klausel, die angibt, ob alle Tabellen und Ansichten im angegebenen Schema zum Datashare hinzugefügt werden sollen.

ALL FUNCTIONS IN SCHEMA *schema* [, ...] \$1  
Eine Klausel, die das Hinzufügen aller Funktionen im angegebenen Schema zum Datashare festlegt.

[ SET PUBLICACCESSIBLE [=] TRUE \$1 FALSE ]  
Eine Klausel, die angibt, ob ein Datashare für öffentlich zugängliche Cluster freigegeben werden kann.

[ SET INCLUDENEW [=] TRUE \$1 FALSE FOR SCHEMA *schema* ]  
Eine Klausel, die angibt, ob future Tabellen, Ansichten oder benutzerdefinierte SQL-Funktionen (UDFs), die im angegebenen Schema erstellt wurden, zur Datenfreigabe hinzugefügt werden sollen. Aktuelle Tabellen, Ansichten oder SQL UDFs im angegebenen Schema werden der Datenfreigabe nicht hinzugefügt. Nur Superuser können diese Eigenschaft für jedes Datashare-Schema-Paar ändern. Standardmäßig lautet die INCLUDENEW-Klausel „false“. 

## Nutzungshinweise für ALTER DATASHARE
<a name="r_ALTER_DATASHARE_usage"></a>
+ Die folgenden Benutzer können ein Datashare ändern:
  + Ein Superuser
  + Der Besitzer des Datashares
  + Benutzer mit ALTER- oder ALL-Privilegien für das Datashare
+ Um bestimmte Objekte zu einem Datashare hinzuzufügen, müssen Benutzer die richtigen Berechtigungen für die Objekte haben. Benutzer sollten auch Besitzer der Objekte sein oder SELECT, USAGE- oder ALL-Berechtigungen für die Objekte haben.
+ Sie können Schemas, Tabellen, reguläre Ansichten, Late-Binding-Ansichten, materialisierte Ansichten und benutzerdefinierte SQL-Funktionen () gemeinsam nutzen. UDFs Fügen Sie einem Datashare zuerst ein Schema hinzu, bevor Sie Objekte im Schema hinzufügen. 

  Wenn Sie ein Schema hinzufügen, fügt Amazon Redshift nicht alle untergeordneten Objekte hinzu. Sie müssen sie explizit hinzufügen. 
+ Wir empfehlen, dass Sie AWS Data Exchange Datashares erstellen, bei denen die Einstellung „Öffentlich zugänglich“ aktiviert ist.
+ Im Allgemeinen empfehlen wir, eine AWS Data Exchange Datenfreigabe nicht mit der ALTER DATASHARE-Anweisung zu ändern, um den öffentlichen Zugriff zu deaktivieren. Wenn Sie dies tun, verlieren die AWS-Konten , die Zugriff auf das Datashare haben, den Zugriff, wenn ihre Cluster öffentlich zugänglich sind. Diese Art der Änderung kann außerdem zu einer Verletzung der Datenproduktbedingungen in AWS Data Exchange führen. Eine Ausnahme dieser Empfehlung wird im Folgenden erklärt.

  Das folgende Beispiel zeigt einen Fehler, wenn ein AWS Data Exchange Datashare mit deaktivierter Einstellung erstellt wird.

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ERROR:  Alter of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value 'c670ba4db22f4b'
  ```

  Um zu ermöglichen, dass durch das Ändern eines AWS Data Exchange Datashare die Einstellung für den öffentlichen Zugriff deaktiviert wird, legen Sie die folgende Variable fest und führen Sie die ALTER DATASHARE-Anweisung erneut aus.

  ```
  SET datashare_break_glass_session_var to 'c670ba4db22f4b';
  ```

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ```

  In diesem Fall generiert Amazon Redshift einen zufälligen Einmalwert zur Festlegung der Sitzungsvariable, um ALTER DATASHARE SET PUBLICACCESSIBLE FALSE für ein AWS Data Exchange -Datashare zu erlauben.

## Beispiele
<a name="r_ALTER_DATASHARE_examples"></a>

Im folgenden Beispiel wird das Schema `public` zum Datashare `salesshare` hinzugefügt.

```
ALTER DATASHARE salesshare ADD SCHEMA public;
```

Im folgenden Beispiel wird die Tabelle `public.tickit_sales_redshift` zum Datashare `salesshare` hinzugefügt.

```
ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
```

Im folgenden Beispiel werden alle Tabellen zum Datashare `salesshare` hinzugefügt.

```
ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
```

Im folgenden Beispiel wird die Tabelle `public.tickit_sales_redshift` vom Datashare `salesshare` entfernt.

```
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
```

# ALTER DEFAULT PRIVILEGES
<a name="r_ALTER_DEFAULT_PRIVILEGES"></a>

Definiert den Standardsatz von Zugriffsberechtigungen, die auf Objekte angewendet werden sollen, die vom angegebenen Benutzer in der Zukunft erstellt werden. Standardmäßig können Benutzer nur ihre eigenen Standardzugriffsrechte ändern. Nur Superuser können Standardberechtigungen für andere Benutzer angeben.

Sie können Standardrechte auf Rollen, Benutzer oder Benutzergruppen anwenden. Sie können Standardberechtigungen global für alle Objekte festlegen, die in der aktuellen Datenbank erstellt werden, oder für Objekte, die nur in den angegebenen Schemas erstellt werden. 

Standardberechtigungen gelten nur für neue Objekte. Die Ausführung von ALTER DEFAULT PRIVILEGES ändert die Berechtigungen in Bezug auf vorhandene Objekte nicht. Informationen zum Erteilen von Berechtigungen für alle aktuellen und zukünftigen Objekte, die von einem beliebigen Benutzer in einer Datenbank oder einem Schema erstellt wurden, finden Sie unter [Bereichsbeschränkte Berechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/t_scoped-permissions.html). 

Um Informationen zu den Standardrechten für Datenbankbenutzer anzuzeigen, führen Sie eine Abfrage für die Systemkatalogtabelle [PG\$1DEFAULT\$1ACL](r_PG_DEFAULT_ACL.md) aus. 

Weitere Informationen zu Rechten finden Sie in [GRANT](r_GRANT.md).

## Erforderliche Berechtigungen
<a name="r_ALTER_DEFAULT_PRIVILEGES-privileges"></a>

Im Folgenden sind die erforderlichen Berechtigungen für ALTER DEFAULT PRIVILEGES aufgeführt:
+ Superuser
+ Benutzer mit der Berechtigung ALTER DEFAULT PRIVILEGES
+ Benutzer, die ihre eigenen Standardzugriffsberechtigungen ändern
+ Benutzer, die Berechtigungen für Schemas festlegen, auf die sie Zugriffsberechtigungen haben

## Syntax
<a name="r_ALTER_DEFAULT_PRIVILEGES-synopsis"></a>

```
ALTER DEFAULT PRIVILEGES
    [ FOR USER target_user [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    grant_or_revoke_clause

where grant_or_revoke_clause is one of:

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE  { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
```

## Parameters
<a name="r_ALTER_DEFAULT_PRIVILEGES-parameters"></a>

FOR USER *target\$1user*  <a name="default-for-user"></a>
Optional. Der Name des Benutzers, für den Standardrechte definiert sind. Nur Superuser können Standardrechte für andere Benutzer ändern. Der Standardwert ist der aktuelle Benutzer.

IN SCHEMA *schema\$1name*   <a name="default-in-schema"></a>
Optional. Wenn eine IN SCHEMA-Klausel angezeigt wird, gelten die angegebenen Standardrechte für neue Objekte, die im angegebenen *schema\$1name* erstellt werden. In diesem Fall müssen der Benutzer oder die Benutzergruppe, die das Ziel von ALTER DEFAULT PRIVILEGES ist, das CREATE-Recht für das angegebene Schema besitzen. Standardrechte, die für ein Schema spezifisch sind, werden vorhandenen globalen Standardrechten hinzugefügt. Standardmäßig werden Standardrechte global auf die gesamte Datenbank angewendet. 

GRANT   <a name="default-grant"></a>
Der Satz von Rechten, der den angegebenen Benutzern oder Gruppen für alle neuen Tabellen und Ansichten, Funktionen oder gespeicherten Prozeduren gewährt werden soll, die vom angegebenen Benutzer erstellt werden. Sie können mit der GRANT-Klausel die gleichen Rechte und Optionen wie mit dem Befehl [GRANT](r_GRANT.md) festlegen. 

WITH GRANT OPTION   <a name="default-grant-option"></a>
Eine Klausel, die angibt, dass der Benutzer, der die Rechte erhält, anderen Benutzern die gleichen Rechte gewähren kann. Sie können einer Gruppe oder PUBLIC keine Rechte WITH GRANT OPTION gewähren. 

TO *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*   <a name="default-to"></a>
Der Name des Benutzers, der Rolle oder der Benutzergruppe, auf die die angegebenen Standardrechte angewendet werden.

REVOKE   <a name="default-revoke"></a>
Der Satz von Rechten, der den angegebenen Benutzern oder Gruppen für alle neuen Tabellen, Funktionen oder gespeicherten Prozeduren entzogen werden soll, die vom angegebenen Benutzer erstellt werden. Sie können mit der REVOKE-Klausel die gleichen Rechte und Optionen wie mit dem Befehl [REVOKE](r_REVOKE.md) festlegen. 

GRANT OPTION FOR  <a name="default-revoke-option"></a>
 Eine Klausel, die nur die Option, anderen Benutzern ein spezifisches Recht zu gewähren, und nicht das Recht selbst widerruft. Sie können GRANT OPTION nicht für eine Gruppe oder PUBLIC widerrufen. 

FROM *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*  <a name="default-from"></a>
Der Name des Benutzers, der Rolle oder der Benutzergruppe, für die die angegebenen Standardrechte standardmäßig widerrufen werden.

RESTRICT   <a name="default-restrict"></a>
Die Option RESTRICT widerruft nur die Berechtigungen, die der Benutzer direkt gewährt hat. Dies ist die Standardeinstellung.

## Beispiele
<a name="r_ALTER_DEFAULT_PRIVILEGES-examples"></a>

Angenommen, Sie möchten einem Benutzer in der Benutzergruppe `report_readers` das Recht gewähren, alle Tabellen und Ansichten anzuzeigen, die vom Benutzer `report_admin` erstellt wurden. In diesem Fall führen Sie den folgenden Befehl als Superuser aus. 

```
alter default privileges for user report_admin grant select on tables to group report_readers; 
```

Im folgenden Beispiel gewährt der erste Befehl SELECT-Rechte für alle neuen Tabellen, die Sie erstellen. Jedes Mal, wenn Sie eine neue Ansicht erstellen, müssen Sie der Ansicht explizit Rechte gewähren oder den Befehl `alter default privileges` erneut ausführen.

```
alter default privileges grant select on tables to public; 
```

Im folgenden Beispiel wird der Benutzergruppe `sales_admin` das INSERT-Recht für alle neuen Tabellen und Ansichten gewährt, die Sie im Schema `sales` erstellen. 

```
alter default privileges in schema sales grant insert on tables to group sales_admin; 
```

Im folgenden Beispiel wird der Befehl ALTER DEFAULT PRIVILEGES im vorherigen Beispiel zurückgenommen. 

```
alter default privileges in schema sales revoke insert on tables from group sales_admin;
```

Standardmäßig besitzt die Benutzergruppe PUBLIC die Ausführungsberechtigung für alle neuen, von Benutzern definierten Funktionen. Um die `public`-Ausführungsberechtigungen für Ihre neuen Funktionen zu widerrufen und dann die Ausführungsberechtigung nur der Benutzergruppe `dev_test` zu gewähren, führen Sie die folgenden Befehle aus. 

```
alter default privileges revoke execute on functions from public;
alter default privileges grant execute on functions to group dev_test;
```

# ALTER EXTERNAL SCHEMA
<a name="r_ALTER_EXTERNAL_SCHEMA"></a>

Ändert ein vorhandenes externes Schema in der aktuellen Datenbank. Nur Schemabesitzer, Superuser oder Benutzer mit ALTER-Rechten für das Schema können es ändern. Nur externe Schemas, die aus DATA CATALOG, KAFKA oder MSK erstellt wurden, können geändert werden.

Der Besitzer dieses Schemas gibt den Befehl CREATE EXTERNAL SCHEMA aus. Mit dem Befehl ALTER SCHEMA können Sie den Besitzer eines externen Schemas ändern. Mit dem Befehl GRANT gewähren Sie anderen Benutzern oder Benutzergruppen Zugriff auf das Schema.

Sie können die Befehle GRANT oder REVOKE nicht für Berechtigungen in einer externen Tabelle verwenden. Gewähren oder widerrufen Sie stattdessen die Berechtigungen für das externe Schema. 

Weitere Informationen finden Sie hier:
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [GRANT](r_GRANT.md)
+ [REVOKE](r_REVOKE.md)
+ [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)
+ [Aktivieren der mTLS-Authentifizierung für ein vorhandenes externes Schema](materialized-view-streaming-ingestion-mtls.md#materialized-view-streaming-ingestion-mtls-alter)

Um Details zu externen Schemata anzuzeigen, führen Sie eine Abfrage für die Systemansicht SVV\$1EXTERNAL\$1SCHEMAS aus. Weitere Informationen finden Sie unter [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md).

## Syntax
<a name="r_ALTER_EXTERNAL_SCHEMA-synopsis"></a>

```
ALTER EXTERNAL SCHEMA schema_name
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'asm-secret-arn' ]
[ URI 'Kafka bootstrap URL' ]
```

Wenn Sie über ein vorhandenes externes Schema verfügen, das Sie für die Streaming-Aufnahme verwenden, und Sie gegenseitiges TLS für die Authentifizierung implementieren möchten, können Sie einen Befehl wie den folgenden ausführen, der die mTLS-Authentifizierung und den ARN des ACM-Zertifikats in ACM spezifiziert. 

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
AUTHENTICATION_ARN 'arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID';
```

Sie können auch die mTLS-Authentifizierung ändern, mit Verweis auf den geheimen ARN in Secrets Manager.

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
```

Das folgende Beispiel zeigt, wie der URI für ALTER EXTERNAL SCHEMA geändert wird:

```
ALTER EXTERNAL SCHEMA schema_name  
URI 'lkc-ghidef-67890.centralus.azure.glb.confluent.cloud:9092';
```

Das folgende Beispiel zeigt, wie die IAM-Rolle für ALTER EXTERNAL SCHEMA geändert wird:

```
ALTER EXTERNAL SCHEMA schema_name  
IAM_ROLE 'arn:aws:iam::012345678901:role/testrole';
```

## Parameters
<a name="r_ALTER_EXTERNAL_SCHEMA-parameters"></a>

 <role-name>IAM\$1ROLE [Standard \$1 'SESSION' \$1 'arn:aws:iam: :< Account-ID>:role/ ']AWS   
Verwenden Sie das Schlüsselwort `default`, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt ist.  
Verwenden Sie `'SESSION'`, wenn Sie über eine Verbundidentität eine Verbindung zu Ihrem Amazon-Redshift-Cluster herstellen und über das mit diesem Befehl erstellte externe Schema auf die Tabellen zugreifen.  
Weitere Informationen finden Sie unter [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

AUTHENTICATION  
Der für die Streaming-Erfassung definierte Authentifizierungstyp. Die Streaming-Erfassung mit Authentifizierungstypen kann mit Apache Kafka, Confluent Cloud und Amazon Managed Streaming für Apache Kafka verwendet werden. Weitere Informationen finden Sie unter [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

AUTHENTICATION\$1ARN  
Der ARN des AWS Certificate Manager Zertifikats, das von Amazon Redshift für die MTLS-Authentifizierung mit Apache Kafka, Confluent Cloud oder Amazon Managed Streaming for Apache Kafka (Amazon MSK) verwendet wird. Der ARN ist in der ACM-Konsole verfügbar, wenn Sie das ausgegebene Zertifikat auswählen.

SECRET\$1ARN  
Der Amazon-Ressourcenname (ARN) eines unterstützten Geheimnisses, das mit erstellt wurde AWS Secrets Manager. Informationen zum Erstellen und Abrufen eines ARN für ein Secret finden Sie unter [Secrets mit AWS Secrets Manager verwalten](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) im *AWS Secrets Manager -Benutzerhandbuch* und [Abrufen des Amazon-Ressourcennamens (ARN) des Secrets in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html).

URI  
Die Bootstrap-URL des Clusters in Apache Kafka, Confluent Cloud oder Amazon Managed Streaming für Apache Kafka (Amazon MSK). Der Endpunkt muss vom Amazon-Redshift-Cluster aus erreichbar (routingfähig) sein. Weitere Informationen finden Sie unter [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

# ALTER EXTERNAL VIEW
<a name="r_ALTER_EXTERNAL_VIEW"></a>

Verwenden Sie den Befehl ALTER EXTERNAL VIEW, um Ihre externe Ansicht zu aktualisieren. Je nachdem, welche Parameter Sie verwenden, können andere SQL-Engines wie Amazon Athena und Amazon EMR Spark, die ebenfalls auf diese Ansicht verweisen können, betroffen sein. Weitere Informationen zu Data-Catalog-Ansichten finden Sie unter [AWS Glue Data Catalog -Ansichten](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntax
<a name="r_ALTER_EXTERNAL_VIEW-synopsis"></a>

```
ALTER EXTERNAL VIEW schema_name.view_name
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
[FORCE] { AS (query_definition) | REMOVE DEFINITION }
```

## Parameters
<a name="r_ALTER_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Das Schema, das an Ihre AWS Glue Datenbank angehängt ist, gefolgt vom Namen der Ansicht.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Die Notation des Schemas, das beim Ändern der Ansicht verwendet werden soll. Sie können angeben AWS Glue Data Catalog, ob Sie eine von Ihnen erstellte Glue-Datenbank oder ein von Ihnen erstelltes externes Schema verwenden möchten. Weitere Informationen finden Sie unter [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) und [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

FORCE  
Gibt an, ob die Definition der Ansicht aktualisiert werden AWS Lake Formation soll, auch wenn die in der Tabelle referenzierten Objekte nicht mit anderen SQL-Engines übereinstimmen. Wenn Lake Formation die Ansicht aktualisiert, gilt die Ansicht für die anderen SQL-Engines als veraltet, bis auch diese Engines aktualisiert werden.

 *AS query\$1definition*   
Die Definition der SQL-Abfrage, die Amazon Redshift ausführt, um die Ansicht zu ändern.

REMOVE DEFINITION  
Ob die Ansichten gelöscht und neu erstellt werden sollen. Ansichten müssen gelöscht und neu erstellt werden, um sie als `PROTECTED` zu kennzeichnen.

## Beispiele
<a name="r_ALTER_EXTERNAL_VIEW-examples"></a>

Im folgenden Beispiel wird eine Datenkatalog-Ansicht mit dem Namen sample\$1schema.glue\$1data\$1catalog\$1view geändert.

```
ALTER EXTERNAL VIEW sample_schema.glue_data_catalog_view
FORCE
REMOVE DEFINITION
```

# ALTER FUNCTION
<a name="r_ALTER_FUNCTION"></a>

Benennt eine Funktion um oder ändert den Besitzer. Erforderlich sind sowohl der Name der Funktion als auch die Datentypen. Nur der Besitzer oder ein Superuser kann eine Funktion umbenennen. Nur ein Superuser kann den Besitzer einer Funktion ändern. 

## Syntax
<a name="r_ALTER_FUNCTION-synopsis"></a>

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     RENAME TO new_name
```

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## Parameters
<a name="r_ALTER_FUNCTION-parameters"></a>

 *function\$1name*   
Das Name der Funktion, die geändert werden soll. Geben Sie entweder den Namen der Funktion im aktuellen Suchpfad an oder verwenden Sie das Format `schema_name.function_name`, um ein spezifisches Schema zu verwenden.

*py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Optional. Eine Liste der Namen von Eingabeargumenten und Datentypen für die benutzerdefinierte Python-Funktion oder eine Liste der Datentypen von Eingabeargumenten für die benutzerdefinierte SQL-Funktion.

 *new\$1name*   
Ein neuer Name für die benutzerdefinierte Funktion. 

*new\$1owner* \$1 CURRENT\$1USER \$1 SESSION\$1USER  
Ein neuer Besitzer für die benutzerdefinierte Funktion. 

## Beispiele
<a name="r_ALTER_FUNCTION-examples"></a>

Im folgenden Beispiel wird der Namen einer Funktion von `first_quarter_revenue` in `quarterly_revenue` geändert.

```
ALTER FUNCTION first_quarter_revenue(bigint, numeric, int) 
         RENAME TO quarterly_revenue;
```

Im folgenden Beispiel wird der Besitzer der Funktion `quarterly_revenue` in `etl_user` geändert.

```
ALTER FUNCTION quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER GROUP
<a name="r_ALTER_GROUP"></a>

Ändert eine Benutzergruppe. Mit diesem Befehl können Sie der Gruppe Benutzer hinzufügen, Benutzer aus der Gruppe entfernen oder die Gruppe umbenennen. 

## Syntax
<a name="r_ALTER_GROUP-synopsis"></a>

```
ALTER GROUP group_name
{
ADD USER username [, ... ] |
DROP USER username [, ... ] |
RENAME TO new_name
}
```

## Parameters
<a name="r_ALTER_GROUP-parameters"></a>

 *group\$1name*   
Der Name der Benutzergruppe, die geändert werden soll. 

ADD   
Fügt einer Benutzergruppe einen Benutzer hinzu. 

DROP   
Entfernt einen Benutzer aus einer Benutzergruppe. 

 *username (Benutzername*   
Der Name des Benutzers, der der Gruppe hinzugefügt oder aus der Gruppe entfernt werden soll. 

RENAME TO   
Benennt die Benutzergruppe um. Gruppennamen, die mit zwei Unterstrichen beginnen, sind für die interne Verwendung durch Amazon Redshift reserviert. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md). 

 *new\$1name*   
Der neue Name der Benutzergruppe. 

## Beispiele
<a name="r_ALTER_GROUP-examples"></a>

Im folgenden Beispiel wird der Gruppe ADMIN\$1GROUP ein Benutzer mit dem Namen DWUSER hinzugefügt.

```
ALTER GROUP admin_group
ADD USER dwuser;
```

Im folgenden Beispiel wird die Gruppe ADMIN\$1GROUP in ADMINISTRATORS umbenannt. 

```
ALTER GROUP admin_group
RENAME TO administrators;
```

Im folgenden Beispiel werden der Gruppe ADMIN\$1GROUP zwei Benutzer hinzugefügt. 

```
ALTER GROUP admin_group
ADD USER u1, u2;
```

Im folgenden Beispiel werden aus der Gruppe ADMIN\$1GROUP zwei Benutzer entfernt. 

```
ALTER GROUP admin_group
DROP USER u1, u2;
```

# ALTER IDENTITY PROVIDER
<a name="r_ALTER_IDENTITY_PROVIDER"></a>

Ändert einen Identitätsanbieter, um neue Parameter und Werte zuzuweisen. Wenn Sie diesen Befehl ausführen, werden alle zuvor festgelegten Parameterwerte gelöscht, bevor die neuen Werte zugewiesen werden. Nur Superuser können Identitätsanbieter ändern.

## Syntax
<a name="r_ALTER_IDENTITY_PROVIDER-synopsis"></a>

```
ALTER IDENTITY PROVIDER identity_provider_name
[PARAMETERS parameter_string]
[NAMESPACE namespace]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
[DISABLE | ENABLE]
```

## Parameters
<a name="r_ALTER_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Name des neuen Identitätsanbieters. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

 *parameter\$1string*   
Eine Zeichenfolge mit einem ordnungsgemäß formatierten JSON-Objekt, das die für den spezifischen Identitätsanbieter erforderlichen Parameter und Werte enthält.

 *Namespace*   
Der Namespace der Organisation.

 *iam\$1role*   
Die IAM-Rolle, die Berechtigungen für die Verbindung zum IAM Identity Center bereitstellt. Dieser Parameter ist nur anwendbar, wenn der Identitätsanbietertyp ist. AWSIDC

 *auto\$1create\$1roles*   
Aktiviert oder deaktiviert das Feature für das automatische Erstellen von Rollen. Wenn der Wert TRUE ist, aktiviert Amazon Redshift das Feature zum automatischen Erstellen von Rollen. Wenn der Wert FALSE ist, deaktiviert Amazon Redshift das Feature zum automatischen Erstellen von Rollen. Wenn der Wert für diesen Parameter nicht angegeben ist, bestimmt Amazon Redshift den Wert mithilfe der folgenden Logik:   
+  Wenn `AUTO_CREATE_ROLES` bereitgestellt ist, der Wert jedoch nicht angegeben ist, wird der Wert auf TRUE festgelegt. 
+  Wenn er `AUTO_CREATE_ROLES` nicht angegeben wird und der Identitätsanbieter schon AWSIDC, wird der Wert auf FALSE gesetzt. 
+  Wenn `AUTO_CREATE_ROLES` nicht bereitgestellt ist und der Identitätsanbieter Azure ist, wird der Wert auf TRUE festgelegt. 
Um Gruppen einzuschließen, geben Sie `INCLUDE` an. Die Standardeinstellung ist „leer“. Das bedeutet, dass alle Gruppen eingeschlossen werden, wenn `AUTO_CREATE_ROLES` aktiviert ist.  
Um Gruppen auszuschließen, geben Sie `EXCLUDE` an. Die Standardeinstellung ist „leer“. Das bedeutet, dass keine Gruppen ausgeschlossen werden, wenn `AUTO_CREATE_ROLES` aktiviert ist.

 *filter\$1pattern*   
Ein gültiger UTF-8-Zeichenfolgenausdruck mit einem Muster zum Abgleichen von Gruppennamen. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)
Wenn *filter-pattern* keine Metazeichen enthält, repräsentiert das Muster die Zeichenfolge selbst. In diesem Fall liefert LIKE dasselbe Ergebnis wie der Gleichheitsoperator.   
*filter\$1pattern* unterstützt die folgenden Zeichen:  
+  Groß- und Kleinbuchstaben (A–Z und a–z) 
+  Ziffern (0–9) 
+  Die folgenden Sonderzeichen. 

  ```
  _ % ^ * + ? { } , $
  ```

 *DISABLE oder ENABLE*   
Aktiviert oder deaktiviert einen Identitätsanbieter. Der Standard ist ENABLE.

## Beispiele
<a name="r_ALTER_IDENTITY_PROVIDER-examples"></a>

Im folgenden Beispiel wird ein Identitätsanbieter mit dem Namen *oauth\$1standard* geändert. Dies gilt insbesondere, wenn Microsoft Azure AD der Identitätsanbieter ist.

```
ALTER IDENTITY PROVIDER oauth_standard
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

Das folgende Beispiel zeigt, wie der Namespace des Identitätsanbieters festgelegt wird. Dies kann für Microsoft Azure AD gelten, wenn es einer Anweisung wie im vorherigen Beispiel folgt, oder für einen anderen Identitätsanbieter. Dies kann auch für den Fall gelten, dass Sie einen vorhandenen, von Amazon Redshift bereitgestellten Cluster oder eine Arbeitsgruppe in Amazon Redshift Serverless mit IAM Identity Center verbinden, wenn Sie eine Verbindung über eine verwaltete Anwendung eingerichtet haben.

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
NAMESPACE 'MYCO';
```

Das folgende Beispiel legt die IAM-Rolle fest und gilt für den Anwendungsfall der Konfiguration der Redshift-Integration mit IAM Identity Center.

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
IAM_ROLE 'arn:aws:iam::123456789012:role/myadministratorrole';
```

Weitere Informationen zum Einrichten einer Verbindung mit IAM Identity Center aus Redshift finden Sie unter [Redshift mit IAM Identity Center verbinden, um Benutzern eine Single-Sign-On-Erfahrung zu bieten](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

**Deaktivieren eines Identitätsanbieters**

Die folgende Beispielanweisung zeigt, wie ein Identitätsanbieter deaktiviert wird. Wenn er deaktiviert ist, können sich Verbundbenutzer des Identitätsanbieters erst wieder beim Cluster anmelden, wenn er wieder aktiviert ist.

```
ALTER IDENTITY PROVIDER "redshift-idc-app" DISABLE;
```

# ALTER MASKING POLICY
<a name="r_ALTER_MASKING_POLICY"></a>

Ändert eine vorhandene Richtlinie für die dynamische Datenmaskierung. Weitere Informationen zur dynamischen Datenmaskierung finden Sie unter [Dynamische Datenmaskierung](t_ddm.md).

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Maskierungsrichtlinie ändern.

## Syntax
<a name="r_ALTER_MASKING_POLICY-synopsis"></a>

```
ALTER MASKING POLICY
{ policy_name | database_name.policy_name }
USING (masking_expression);
```

## Parameters
<a name="r_ALTER_MASKING_POLICY-parameters"></a>

*policy\$1name*   
 Der Name der Maskierungsrichtlinie. Dies muss der Name einer Maskierungsrichtlinie sein, die bereits in der Datenbank vorhanden ist. 

database\$1name  
Der Name der Datenbank, aus der die Richtlinie erstellt wurde. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

*masking\$1expression*  
Der SQL-Ausdruck, der zur Transformation der Zielspalten verwendet wird. Er kann mithilfe von Datenmanipulationsfunktionen wie z. B. Funktionen zur Zeichenkettenmanipulation oder in Verbindung mit benutzerdefinierten Funktionen geschrieben werden, die in SQL, Python oder mit AWS Lambda geschrieben wurden.   
 Der Ausdruck muss mit den Eingabespalten und Datentypen des ursprünglichen Ausdrucks übereinstimmen. Wenn die Eingabespalten der ursprünglichen Maskierungsrichtlinie beispielsweise `sample_1 FLOAT` und `sample_2 VARCHAR(10)` sind, können Sie die Maskierungsrichtlinie nicht so ändern, dass sie eine dritte Spalte oder FLOAT und BOOLEAN verwendet. Wenn Sie eine Konstante als Maskierungsausdruck verwenden, müssen Sie sie explizit in einen dem Eingabetyp entsprechenden Typ umwandeln.  
 Sie benötigen USAGE-Berechtigung für alle benutzerdefinierten Funktionen, die Sie im Maskierungsausdruck verwenden. 

Informationen zur Verwendung von ALTER MASKING POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# ALTER MATERIALIZED VIEW
<a name="r_ALTER_MATERIALIZED_VIEW"></a>

Ändert die Attribute einer materialisierten Ansicht. 

## Syntax
<a name="r_ALTER_MATERIALIZED_VIEW-synopsis"></a>

```
ALTER MATERIALIZED VIEW mv_name
{
AUTO REFRESH { YES | NO } 
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [FOR DATASHARES]
};
```

## Parameters
<a name="r_ALTER_MATERIALIZED_VIEW-parameters"></a>

*mv\$1name*  
Der Name der materialisierten Ansicht, der geändert werden soll.

AUTO REFRESH \$1 YES \$1 NO \$1  
Eine Klausel, die das automatische Aktualisieren einer materialisierten Ansicht aktiviert oder deaktiviert. Weitere Informationen zur automatischen Aktualisierung von materialisierten Ansichten finden Sie unter [Aktualisieren einer materialisierten Ansicht](materialized-view-refresh.md).

ALTER DISTSTYLE ALL  
Eine Klausel, die den vorhandenen Verteilungsstil einer Beziehung in `ALL` ändert. Berücksichtigen Sie dabei Folgendes:  
+ ALTER DISTSTYLE, ALTER SORTKEY und VACUUM können nicht gleichzeitig für dieselbe Beziehung ausgeführt werden. 
  + Wenn VACUUM derzeit ausgeführt wird, wird beim Ausführen von ALTER DISTSTYLE ALL ein Fehler zurückgegeben. 
  + Wenn ALTER DISTSTYLE ALL ausgeführt wird, wird keine Hintergrundbereinigung für eine Beziehung gestartet. 
+ Der Befehl ALTER DISTSTYLE ALL wird für Beziehungen mit verschachtelten Sortierschlüsseln und temporären Tabellen nicht unterstützt.
+ Wenn der Verteilungsstil zuvor als AUTO definiert war, ist die Beziehung kein Kandidat mehr für eine automatische Tabellenoptimierung. 
Weitere Informationen zu DISTSTYLE ALL finden Sie unter [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER DISTSTYLE EVEN  
Eine Klausel, die den vorhandenen Verteilungsstil einer Beziehung in `EVEN` ändert. Berücksichtigen Sie dabei Folgendes:  
+ ALTER DISTSTYLE, ALTER SORTKEY und VACUUM können nicht gleichzeitig für dieselbe Beziehung ausgeführt werden. 
  + Wenn VACUUM gerade ausgeführt wird, wird beim Ausführen von ALTER DISTSTYLE EVEN ein Fehler zurückgegeben. 
  + Wenn ALTER DISTSTYLE EVEN ausgeführt wird, wird keine Hintergrundbereinigung für eine Beziehung gestartet. 
+ Der Befehl ALTER DISTSTYLE EVEN wird für Beziehungen mit verschachtelten Sortierschlüsseln und temporären Tabellen nicht unterstützt.
+ Wenn der Verteilungsstil zuvor als AUTO definiert war, ist die Beziehung kein Kandidat mehr für eine automatische Tabellenoptimierung. 
Weitere Informationen zu DISTSTYLE EVEN finden Sie unter [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER DISTKEY *column\$1name* oder ALTER DISTSTYLE KEY DISTKEY *column\$1name*  
Eine Klausel, die die Spalte ändert, die als Verteilungsschlüssel einer Beziehung verwendet wird. Berücksichtigen Sie dabei Folgendes:  
+ VACUUM und ALTER DISTKEY können nicht gleichzeitig für dieselbe Beziehung ausgeführt werden. 
  + Wenn VACUUM bereits ausgeführt wird, gibt ALTER DISTKEY einen Fehler zurück.
  + Wenn ALTER DISTKEY ausgeführt wird, wird keine Hintergrundbereinigung für eine Beziehung gestartet.
  + Wenn ALTER DISTKEY ausgeführt wird, dann gibt die Vordergrundbereinigung einen Fehler zurück.
+ Sie können nur jeweils einen ALTER DISTKEY-Befehl für eine Beziehung ausführen. 
+ Der Befehl ALTER DISTKEY wird für Beziehungen mit verschachtelten Sortierschlüsseln nicht unterstützt. 
+ Wenn der Verteilungsstil zuvor als AUTO definiert war, ist die Beziehung kein Kandidat mehr für eine automatische Tabellenoptimierung. 
Wenn Sie DISTSTYLE KEY angeben, werden die Daten nach den Werten in der DISTKEY-Spalte verteilt. Weitere Informationen zu DISTSTYLE finden Sie unter [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER DISTSTYLE AUTO  
Eine Klausel, die den vorhandenen Verteilungsstil einer Beziehung in AUTO ändert.   
Wenn Sie einen Verteilungsstil auf AUTO ändern, wird der Verteilungsstil der Beziehung wie folgt festgelegt:   
+ Eine kleine Beziehung mit DISTSTYLE ALL wird in AUTO(ALL) umgewandelt. 
+ Eine kleine Beziehung mit DISTSTYLE EVEN wird in AUTO(ALL) umgewandelt. 
+ Eine kleine Beziehung mit DISTSTYLE KEY wird in AUTO(ALL) umgewandelt. 
+ Eine große Beziehung mit DISTSTYLE ALL wird in AUTO(EVEN) umgewandelt. 
+ Eine große Beziehung mit DISTSTYLE EVEN wird in AUTO(EVEN) umgewandelt. 
+ Eine große Beziehung mit DISTSTYLE KEY wird in AUTO(KEY) umgewandelt und der DISTKEY bleibt erhalten. In diesem Fall führt Amazon Redshift keine Änderungen für die Beziehung aus.
Wenn Amazon Redshift feststellt, dass ein neuer Verteilungsstil oder Schlüssel die Leistung von Abfragen verbessert, ändert Amazon Redshift den Verteilungsstil oder Schlüssel Ihrer Beziehung möglicherweise in der Zukunft. Beispielsweise könnte Amazon Redshift eine Beziehung mit dem DISTSTYLE-Wert AUTO(KEY) in AUTO(EVEN) konvertieren oder umgekehrt. Weitere Informationen zum Verhalten bei Änderungen von Verteilungsschlüsseln, einschließlich Datenneuverteilung und Sperren, finden Sie unter [Empfehlungen für Amazon Redshift Advisor](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation).  
Weitere Informationen zu DISTSTYLE AUTO finden Sie unter [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).   
Um den Verteilungsstil einer Beziehung anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1TABLE\$1INFO ab. Weitere Informationen finden Sie unter [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Um die Empfehlungen von Amazon Redshift Advisor für Beziehungen anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS ab. Weitere Informationen finden Sie unter [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Um die von Amazon Redshift durchgeführten Aktionen anzuzeigen, fragen Sie die Systemkatalogansicht SVL\$1AUTO\$1WORKER\$1ACTION ab. Weitere Informationen finden Sie unter [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
Eine Klausel, die den für eine Beziehung verwendeten Sortierschlüssel ändert oder hinzufügt. ALTER SORTKEY wird für temporäre Tabellen nicht unterstützt.  
Wenn Sie einen Sortierschlüssel ändern, kann sich die Kompressionskodierung von Spalten im neuen oder ursprünglichen Sortierschlüssel ändern. Wenn für die Beziehung keine Kodierung explizit definiert ist, weist Amazon Redshift automatisch Komprimierungskodierungen wie folgt zu:  
+ Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als die Datentypen BOOLEAN, REAL oder DOUBLE PRECISION definiert sind, wird die RAW-Kodierung zugewiesen.
+ Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird Komprimierung zugewiesen. AZ64
+ Spalten, die als CHAR oder VARCHAR definiert sind, wird LZO-Komprimierung zugewiesen.
Berücksichtigen Sie dabei Folgendes:  
+ Sie können maximal 400 Spalten für einen Sortierschlüssel pro Beziehung definieren. 
+ Sie können einen überlappenden Sortierschlüssel in einen zusammengesetzten Sortierschlüssel oder in keinen Sortierschlüssel ändern. Es ist jedoch nicht möglich, einen zusammengesetzten Sortierschlüssel in einen überlappenden Sortierschlüssel zu ändern. 
+ Wenn der Sortierschlüssel zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Beziehungsoptimierung. 
+ Amazon Redshift empfiehlt die Verwendung von RAW-Kodierung (keine Komprimierung) für Spalten, die als Sortierschlüssel definiert sind. Wenn Sie eine Spalte ändern, um sie als Sortierschlüssel zu wählen, wird die Komprimierung der Spalte auf RAW-Komprimierung (keine Komprimierung) geändert. Dies kann den Speicherbedarf der Beziehung erhöhen. Wie stark die Beziehungsgröße zunimmt, ist von der jeweiligen Beziehungsdefinition und dem Beziehungsinhalt abhängig. Weitere Informationen zur Komprimierung finden Sie unter [Kompressionskodierungen](c_Compression_encodings.md). 
Beim Laden von Daten in eine Beziehung werden die Daten in der Reihenfolge des Sortierschlüssels geladen. Wenn Sie den Sortierschlüssel ändern, ordnet Amazon Redshift die Daten neu an. Weitere Informationen zu SORTKEY finden Sie unter [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER SORTKEY AUTO  
Eine Klausel, die den Sortierschlüssel der Zielbeziehung in AUTO ändert oder hinzufügt. ALTER SORTKEY AUTO wird für temporäre Tabellen nicht unterstützt.   
Wenn Sie einen Sortierschlüssel in AUTO ändern, behält Amazon Redshift den vorhandenen Sortierschlüssel der Beziehung bei.   
Wenn Amazon Redshift feststellt, dass ein neuer Sortierschlüssel die Leistung von Abfragen verbessert, ändert Amazon Redshift den Sortierschlüssel Ihrer Beziehung möglicherweise in der Zukunft.   
Weitere Informationen zu SORTKEY AUTO finden Sie im Abschnitt [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).   
Um den Sortierschlüssel einer Beziehung anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1TABLE\$1INFO ab. Weitere Informationen finden Sie unter [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Um die Empfehlungen von Amazon Redshift Advisor für Beziehungen anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS ab. Weitere Informationen finden Sie unter [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Um die von Amazon Redshift durchgeführten Aktionen anzuzeigen, fragen Sie die Systemkatalogansicht SVL\$1AUTO\$1WORKER\$1ACTION ab. Weitere Informationen finden Sie unter [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER SORTKEY NONE  
Eine Klausel, die den Sortierschlüssel der Zielbeziehung entfernt.   
Wenn der Sortierschlüssel zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Beziehungsoptimierung. 

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
Eine Klausel, die die Sicherheit auf Zeilenebene für eine Relation aktiviert oder deaktiviert.  
Wenn die Sicherheit auf Zeilenebene für eine Relation aktiviert ist, können Sie nur die Zeilen lesen, für die Ihnen die Richtlinie auf Zeilenebene Zugriff gewährt. Wenn es keine Richtlinie gibt, die Ihnen Zugriff auf die Relation gewährt, können Sie keine Zeilen aus der Relation sehen. Nur Superuser und Benutzer oder Rollen, denen die `sys:secadmin`-Rolle zugewiesen ist, können die Klausel ROW LEVEL SECURITY festlegen. Weitere Informationen finden Sie unter [Sicherheit auf Zeilenebene](t_rls.md).  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  Eine Klausel, mit der Sie den Verbindungstyp einer Sicherheitsrichtlinie auf Zeilenebene für eine Relation auswählen können. Wenn einer Relation mehrere Sicherheitsrichtlinien auf Zeilenebene zugeordnet sind, können Sie die Richtlinien mit der AND- oder OR-Klausel kombinieren. Standardmäßig kombiniert Amazon Redshift RLS-Richtlinien mit der AND-Klausel. Superuser, Benutzer oder Rollen, denen diese `sys:secadmin`-Rolle zugewiesen wurde, können diese Klausel verwenden, um den Verbindungstyp der Sicherheitsrichtlinie auf Zeilenebene für eine Relation zu definieren. Weitere Informationen finden Sie unter [Kombinieren mehrerer Richtlinien pro Benutzer](t_rls_combine_policies.md). 
+ FOR DATASHARES

   Eine Klausel, die festlegt, ob auf eine RLS-geschützte Relation über Datashares zugegriffen werden kann. Standardmäßig kann auf eine RLS-geschützte Relation nicht über ein Datashare zugegriffen werden. Ein ALTER MATERIALIZED VIEW ROW LEVEL SECURITY-Befehl, der mit dieser Klausel ausgeführt wird, wirkt sich nur auf die Zugänglichkeitseigenschaft des Datashares der Relation aus. Die Eigenschaft ROW LEVEL SECURITY wird nicht geändert.

   Wenn Sie eine RLS-geschützte Relation über Datashares zugänglich machen, bietet die Relation in der Consumer-seitigen, gemeinsam genutzten Datenbank keine Sicherheit auf Zeilenebene. Die Relation behält ihre RLS-Eigenschaft auf der Produzentenseite. 

## Beispiele
<a name="r_ALTER_MATERIALIZED_VIEW-examples"></a>

Im folgenden Beispiel wird die materialisierte Ansicht `tickets_mv` automatisch aktualisiert.

```
ALTER MATERIALIZED VIEW tickets_mv AUTO REFRESH YES
```

# Beispiele für DISTSTYLE und SORTKEY für ALTER MATERIALIZED VIEW
<a name="r_ALTER_MATERIALIZED_VIEW-DISTSTYLE-SORTKEY-examples"></a>

Die Beispiele in diesem Thema zeigen, wie Sie DISTSTYLE- und SORTKEY-Änderungen mithilfe von ALTER MATERIALIZED VIEW ausführen.

Die folgenden Beispielabfragen zeigen, wie Sie eine DISTSTYLE KEY DISTKEY-Spalte anhand einer Beispiel-Basistabelle ändern:

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER diststyle KEY distkey inv_warehouse_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER distkey inv_item_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

Ändern einer materialisierten Ansicht in DISTSTYLE ALL:

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER MATERIALIZED VIEW inventory ALTER diststyle ALL;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

Die folgenden Befehle zeigen SORTKEY-Beispiele für ALTER MATERIALIZED VIEW anhand einer Beispiel-Basistabelle:

```
CREATE TABLE base_inventory (c0 int, c1 int);

INSERT INTO base_inventory VALUES(1,1);

CREATE materialized VIEW inventory interleaved sortkey(c0, c1) AS SELECT * FROM base_inventory;
SELECT "table", sortkey1 FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0, c1);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey NONE;
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

# ALTER RLS POLICY
<a name="r_ALTER_RLS_POLICY"></a>

Ändern Sie eine bestehende Sicherheitsrichtlinie auf Zeilenebene in einer Tabelle.

Superuser und Benutzer oder Rollen, denen die `sys:secadmin`-Rolle zugewiesen ist, können eine Richtlinie ändern.

## Syntax
<a name="r_ALTER_RLS_POLICY-synopsis"></a>

```
ALTER RLS POLICY
{ policy_name | database_name.policy_name }
USING ( using_predicate_exp );
```

## Parameters
<a name="r_ALTER_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der -Richtlinie.

database\$1name  
Der Name der Datenbank, aus der die Richtlinie erstellt wurde. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

MITHILFE VON (* using\$1predicate\$1exp *)  
Gibt einen Filter an, der auf die WHERE-Klausel der Abfrage angewendet wird. Amazon Redshift wendet ein Richtlinienprädikat vor den Benutzerprädikaten auf Abfrageebene an. Beispielsweise schränkt **current\$1user = ‘joe’ and price > 10** ein, dass Joe nur Datensätze mit einem Preis von mehr als 10 USD sehen kann.  
Der Ausdruck hat Zugriff auf die Variablen, die in der WITH-Klausel der Anweisung CREATE RLS POLICY deklariert sind, mit der die Richtlinie mit dem Namen policy\$1name erstellt wurde.

Informationen zur Verwendung von ALTER RLS POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Beispiele
<a name="r_ALTER_RLS_POLICY-examples"></a>

Im folgenden Beispiel wird eine RLS-Richtlinie geändert.

```
-- First create an RLS policy that limits access to rows where catgroup is 'concerts'.
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'concerts');

-- Then, alter the RLS policy to only show rows where catgroup is 'piano concerts'.
ALTER RLS POLICY policy_concerts
USING (catgroup = 'piano concerts');
```

# ALTER ROLE
<a name="r_ALTER_ROLE"></a>

Benennt eine Rolle um oder ändert den Besitzer. Eine Liste der systemdefinierten Amazon-Redshift-Rollen finden Sie unter [Systemdefinierte Amazon-Redshift-Rollen](r_roles-default.md).

## Erforderliche Berechtigungen
<a name="r_ALTER_ROLE-privileges"></a>

Für ALTER ROLE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung ALTER ROLE

## Syntax
<a name="r_ALTER_ROLE-synopsis"></a>

```
ALTER ROLE role [ WITH ]
  { { RENAME TO role } | { OWNER TO user_name } }[, ...]
  [ EXTERNALID TO external_id ]
```

## Parameters
<a name="r_ALTER_ROLE-parameters"></a>

 *Rolle*   
Der Name der zu ändernden Rolle.

RENAME TO  
Ein neuer Name für die Rolle.

OWNER TO *benutzer\$1name*  
Ein neuer Besitzer für die Rolle. 

EXTERNALID TO *external\$1id*  
Eine neue externe ID für die Rolle, die einem Identitätsanbieter zugeordnet ist. Weitere Informationen finden Sie unter [Nativer Identitätsanbieter(IdP)-Verbund für Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Beispiele
<a name="r_ALTER_ROLE-examples"></a>

Das folgende Beispiel ändert den Namen einer Rolle von `sample_role1` in `sample_role2`.

```
ALTER ROLE sample_role1 RENAME TO sample_role2;
```

Das folgende Beispiel ändert den Besitzer der Rolle.

```
ALTER ROLE sample_role1 WITH OWNER TO user1
```

Die Syntax von ALTER ROLE ähnelt der von ALTER PROCEDURE.

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

Das folgende Beispiel ändert den Besitzer einer Prozedur in `etl_user`.

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

Im folgenden Beispiel wird eine Rolle `sample_role1` mit einer neuen externen ID aktualisiert, die einem Identitätsanbieter zugeordnet ist.

```
ALTER ROLE sample_role1 EXTERNALID TO "XYZ456";
```

# ALTER PROCEDURE
<a name="r_ALTER_PROCEDURE"></a>

Benennt eine Prozedur um oder ändert den Besitzer. Erforderlich sind sowohl der Name der Prozedur als auch die Datentypen bzw. Signatur. Eine Prozedur kann nur vom Besitzer oder von einem Superuser umbenannt werden. Nur ein Superuser kann den Besitzer einer Prozedur ändern. 

## Syntax
<a name="r_ALTER_PROCEDURE-synopsis"></a>

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    RENAME TO new_name
```

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## Parameters
<a name="r_ALTER_PROCEDURE-parameters"></a>

 *sp\$1name*   
Der Name der Prozedur, die geändert werden soll. Geben Sie einfach den Namen der Prozedur im aktuellen Suchpfad an oder verwenden Sie das Format `schema_name.sp_procedure_name`, um ein spezifisches Schema zu verwenden.

*[argname] [ argmode] argtype*   
Eine Liste von Argumentnamen, Argumentmodi und Datentypen. Nur die Eingabedatentypen sind erforderlich. Diese werden zur Identifizierung der gespeicherten Prozedur verwendet. Alternativ können Sie auch die komplette Signatur angeben, die zum Erstellen der Prozedur verwendet wurde, einschließlich der Eingabe- und Ausgabeparameter mit ihren Modi.

 *new\$1name*   
Ein neuer Name für die gespeicherte Prozedur. 

*new\$1owner* \$1 CURRENT\$1USER \$1 SESSION\$1USER  
Ein neuer Besitzer für die gespeicherte Prozedur. 

## Beispiele
<a name="r_ALTER_PROCEDURE-examples"></a>

Das folgende Beispiel ändert den Namen einer Prozedur von `first_quarter_revenue` in `quarterly_revenue`.

```
ALTER PROCEDURE first_quarter_revenue(volume INOUT bigint, at_price IN numeric,
 result OUT int) RENAME TO quarterly_revenue;
```

Dieses Beispiel entspricht Folgendem.

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

Das folgende Beispiel ändert den Besitzer einer Prozedur in `etl_user`.

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER SCHEMA
<a name="r_ALTER_SCHEMA"></a>

Ändert die Definition eines vorhandenen Schemas. Mit diesem Befehl können Sie ein Schema umbenennen oder den Besitzer eines Schemas ändern. Sie können beispielsweise ein vorhandenes Schema umbenennen, um eine Sicherungskopie dieses Schemas zu behalten, wenn Sie planen, eine neue Version dieses Schemas zu erstellen. Weitere Informationen zu Schemata finden Sie unter [CREATE SCHEMA](r_CREATE_SCHEMA.md).

Um die konfigurierten Schemakontingente anzuzeigen, siehe [SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md).

Um die Datensätze anzuzeigen, bei denen die Schemakontingente überschritten wurden, siehe [STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md).

## Erforderliche Berechtigungen
<a name="r_ALTER_SCHEMA-privileges"></a>

Für ALTER SCHEMA sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung ALTER SCHEMA
+ Schemabesitzer

Beachten Sie beim Ändern eines Schemanamens, dass Objekte, die den alten Namen verwenden, wie z. B. gespeicherte Prozeduren oder materialisierte Ansichten, aktualisiert werden müssen, um den neuen Namen zu verwenden.

## Syntax
<a name="r_ALTER_SCHEMA-synopsis"></a>

```
ALTER SCHEMA schema_name
{
RENAME TO new_name |
OWNER TO new_owner |
QUOTA { quota [MB | GB | TB] | UNLIMITED }
}
```

## Parameters
<a name="r_ALTER_SCHEMA-parameters"></a>

 *schema\$1name*   
Der Name des Datenbankschemas, das geändert werden soll. 

RENAME TO   
Eine Klausel, die das Schema umbenennt. 

 *new\$1name*   
Der neue Name des Schemas. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md). 

OWNER TO   
Eine Klausel, die den Besitzer des Schemas ändert. 

 *new\$1owner*   
Der neue Besitzer des Schemas. 

QUOTA   
Die maximale Menge an Speicherplatz, die das angegebene Schema verwenden kann. Dieser Platz ist die Gesamtgröße aller Tabellen unter dem angegebenen Schema. Amazon Redshift konvertiert den ausgewählten Wert in Megabyte. Gigabyte ist die Standardmaßeinheit, wenn Sie keinen Wert angeben.   
Weitere Informationen zur Konfiguration von Schemakontingenten finden Sie unter [CREATE SCHEMA](r_CREATE_SCHEMA.md).

## Beispiele
<a name="r_ALTER_SCHEMA-examples"></a>

Im folgenden Beispiel wird das Schema SALES in US\$1SALES umbenannt.

```
alter schema sales
rename to us_sales;
```

Im folgenden Beispiel erhält der Benutzer DWUSER den Besitz des Schemas US\$1SALES.

```
alter schema us_sales
owner to dwuser;
```

Im folgenden Beispiel wird das Kontingent zu 300 GB geändert und das Kontingent entfernt.

```
alter schema us_sales QUOTA 300 GB;
alter schema us_sales QUOTA UNLIMITED;
```

# ALTER SYSTEM
<a name="r_ALTER_SYSTEM"></a>

Ändert eine Konfigurationsoption auf Systemebene für den Amazon-Redshift-Cluster oder die Redshift-Serverless-Arbeitsgruppe.

## Erforderliche Berechtigungen
<a name="r_ALTER_SYSTEM-privileges"></a>

Einer der folgenden Benutzertypen kann den Befehl ALTER SYSTEM ausführen:
+ Superuser
+ Admin-Benutzer

## Syntax
<a name="r_ALTER_SYSTEM-synopsis"></a>

```
ALTER SYSTEM SET system-level-configuration = {true| t | on | false | f | off}
```

## Parameters
<a name="r_ALTER_SYSTEM-parameters"></a>

 *system-level-configuration*   
Eine Konfiguration auf Systemebene. Gültiger Wert: `data_catalog_auto_mount` und `metadata_security`.

\$1true\$1 t \$1 on \$1 false \$1 f \$1 off\$1   
Ein Wert zum Aktivieren oder Deaktivieren der Konfiguration auf Systemebene. `true`, `t` oder `on` gibt an, die Konfiguration zu aktivieren. `false`, `f` oder `off` gibt an, die Konfiguration zu deaktivieren.

## Nutzungshinweise
<a name="r_ALTER_SYSTEM-usage-notes"></a>

Für einen bereitgestellten Cluster werden Änderungen an `data_catalog_auto_mount` beim nächsten Neustart des Clusters wirksam. Weitere Informationen finden Sie unter [Neustart eines Cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#reboot-cluster) im *Amazon-Redshift-Verwaltungshandbuch*.

Bei einer Serverless-Arbeitsgruppe werden die Änderungen an `data_catalog_auto_mount` nicht sofort wirksam.

## Beispiele
<a name="r_ALTER_SYSTEM-examples"></a>

Im folgenden Beispiel wird das automatische Mounting von AWS Glue Data Catalog aktiviert.

```
ALTER SYSTEM SET data_catalog_auto_mount = true;
```

Im folgenden Beispiel wird die Metadatensicherheit aktiviert.

```
ALTER SYSTEM SET metadata_security = true;
```

### Festlegen eines standardmäßigen Identitäts-Namespace einrichten
<a name="r_ALTER_SYSTEM-identity"></a>

Dieses Beispiel bezieht sich speziell auf die Arbeit mit einem Identitätsanbieter. Sie können Redshift mit IAM Identity Center und einem Identitätsanbieter integrieren, um das Identitätsmanagement für Redshift und andere Dienste zu zentralisieren. AWS 

Das folgende Beispiel zeigt, wie der standardmäßige Identitäts-Namespace für das System festgelegt wird. Wenn Sie ihn anschließend ausführen, vereinfacht dies die Ausführung der Anweisungen GRANT und CREATE, da Sie den Namespace nicht als Präfix für jede Identität angeben müssen.

```
ALTER SYSTEM SET default_identity_namespace = 'MYCO';
```

Nach der Ausführung des Befehls können Sie Anweisungen wie die folgenden ausführen:

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
               
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

Die Festlegung eines standardmäßigen Identitäts-Namespace bedeutet, dass er nicht für jede Identität als Präfix festgelegt werden muss. In diesem Beispiel wird `alice` durch `MYCO:alice` ersetzt. Das erfolgt für jede enthaltene Identität. Weitere Informationen zur Verwendung eines Identitätsanbieters mit Redshift finden Sie unter [Redshift mit IAM Identity Center verbinden, um Benutzern eine Single-Sign-On-Erfahrung zu bieten](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

Weitere Informationen zu Einstellungen, die die Redshift-Konfiguration mit IAM Identity Center betreffen, finden Sie unter [SET](r_SET.md) und [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md).

# ALTER TABLE
<a name="r_ALTER_TABLE"></a>

Dieser Befehl ändert die Definition einer Amazon-Redshift-Tabelle oder einer externen Amazon-Redshift-Spectrum-Tabelle. Dieser Befehl aktualisiert die von [CREATE TABLE](r_CREATE_TABLE_NEW.md) oder [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) festgelegten Werte und Eigenschaften. Sie können ALTER TABLE für eine Ansicht verwenden, um Sicherheit auf Zeilenebene (RLS) zu erzielen.

Sie können ALTER TABLE nicht für eine externe Tabelle innerhalb eines Transaktionsblocks (BEGIN ... END) ausführen. Weitere Informationen zu Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

ALTER TABLE sperrt die Tabelle für Lese- und Schreibvorgänge, bis die die Operation ALTER TABLE umschließende Transaktion abgeschlossen ist, es sei denn, in der Dokumentation ist ausdrücklich angegeben, dass Sie Daten abfragen oder andere Operationen an der Tabelle ausführen können, während sie geändert wird.

## Erforderliche Berechtigungen
<a name="r_ALTER_TABLE-privileges"></a>

Der Benutzer, der eine Tabelle ändert, benötigt die entsprechenden Berechtigungen, damit der Befehl erfolgreich ausgeführt werden kann. Je nach verwendetem Befehl ALTER TABLE ist eine der folgenden Berechtigungen erforderlich.
+ Superuser
+ Benutzer mit der Berechtigung ALTER TABLE
+ Tabellenbesitzer mit dem USAGE-Recht für das Schema

## Syntax
<a name="r_ALTER_TABLE-synopsis"></a>

```
ALTER TABLE table_name
{
ADD table_constraint
| DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
| OWNER TO new_owner
| RENAME TO new_name
| RENAME COLUMN column_name TO new_name
| ALTER COLUMN column_name TYPE updated_varchar_data_type_size
| ALTER COLUMN column_name ENCODE new_encode_type
| ALTER COLUMN column_name ENCODE encode_type,
| ALTER COLUMN column_name ENCODE encode_type, .....;
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ALTER ENCODE AUTO
| ADD [ COLUMN ] column_name column_type
  [ DEFAULT default_expr ]
  [ ENCODE encoding ]
  [ NOT NULL | NULL ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ] |
| DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] 
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [ FOR DATASHARES ]
| MASKING { ON | OFF } FOR DATASHARES }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )
| PRIMARY KEY ( column_name [, ... ] )
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value')
| PARTITION ( partition_column=partition_value [, ...] )
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
| ADD [IF NOT EXISTS]
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )
```

Um die Zeit für die Ausführung des Befehls ALTER TABLE zu verkürzen, können Sie einige Klauseln des Befehls ALTER TABLE kombinieren.

Amazon Redshift unterstützt die folgenden Kombinationen der ALTER TABLE-Klauseln:

```
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTKEY column_Id;
ALTER TABLE tablename ALTER DISTKEY column_Id, ALTER SORTKEY (column_list);
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTSTYLE ALL;
ALTER TABLE tablename ALTER DISTSTYLE ALL, ALTER SORTKEY (column_list);
```

## Parameters
<a name="r_ALTER_TABLE-parameters"></a>

 *table\$1name*   
Der Name der Tabelle, die geändert werden soll. Geben Sie einfach den Namen der Tabelle an oder verwenden Sie das Format *schema\$1name.table\$1name*, um ein spezifisches Schema zu verwenden. Externe Tabellen müssen durch einen externen Schemanamen qualifiziert werden. Sie können auch einen Anzeigenamen angeben, wenn Sie die Anweisung ALTER TABLE verwenden, um eine Ansicht umzubenennen oder ihren Eigentümer zu ändern. Die maximale Länge des Tabellennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

ADD *table\$1constraint*   
Eine Klausel, die der Tabelle die angegebene Einschränkung hinzufügt. Beschreibungen der gültigen Werte für *table\$1constraint* finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).  
Sie können einer löschbaren Spalte keine Einschränkung „primary-key“ hinzufügen. Wenn die Spalte ursprünglich mit der Einschränkung NOT NULL erstellt wurde, können Sie die Einschränkung „primary-key“ hinzufügen.

DROP CONSTRAINT *constraint\$1name*   
Eine Klausel, die die angegebene Einschränkung aus der Tabelle entfernt. Um eine Einschränkung zu entfernen, geben Sie den Namen der Einschränkung an, nicht den Typ der Einschränkung. Um Namen von Tabelleneinschränkungen anzuzeigen, führen Sie die folgende Abfrage aus.  

```
select constraint_name, constraint_type
from information_schema.table_constraints;
```

RESTRICT   
Eine Klausel, die nur die angegebene Einschränkung entfernt. RESTRICT ist eine Option für DROP CONSTRAINT. RESTRICT kann nicht mit CASCADE verwendet werden. 

CASCADE   
Eine Klausel, die die angegebene Einschränkung und alles, was von dieser Einschränkung abhängig ist, entfernt. CASCADE ist eine Option für DROP CONSTRAINT. CASCADE kann nicht mit RESTRICT verwendet werden.

OWNER TO *new\$1owner*   
Eine Klausel, die den Besitzer der Tabelle (oder Ansicht) in den Wert *new\$1owner* ändert.

RENAME TO *new\$1name*   
Eine Klausel, die die Tabelle (oder Ansicht) in den Wert ändert, der in *new\$1name* angegeben ist. Die maximale Länge des Tabellennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten.  
Sie können den Namen einer permanenten Tabelle nicht in einen Namen umbenennen, der mit „\$1“ beginnt. Ein Tabellenname, der mit „\$1“ beginnt, zeigt eine temporäre Tabelle an.  
Sie können eine externe Tabelle nicht umbenennen.

ALTER COLUMN *column\$1name* TYPE *updated\$1varchar\$1data\$1type\$1size*   
Eine Klausel, die die Größe einer Spalte ändert, die als VARCHAR-Datentyp definiert ist. Diese Klausel unterstützt nur eine Größenänderung für einen VARCHAR-Datentyp. Erwägen Sie die folgenden Einschränkungen:  
+ Sie können eine Spalte mit den Komprimierungskodierungen BYTEDICT, RUNLENGTH oder K nicht ändern. TEXT255 TEXT32 
+ Sie können die Größe nicht auf weniger als die maximale Größe vorhandener Daten reduzieren. 
+ Spalten mit Standardwerten können nicht geändert werden. 
+ Spalten mit UNIQUE, PRIMARY KEY oder FOREIGN KEY können nicht geändert werden. 
+ Spalten innerhalb eines Transaktionsblocks (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

ALTER COLUMN *column\$1name* ENCODE *new\$1encode\$1type*   
Eine Klausel, die die Komprimierungskodierung einer Spalte ändert. Wenn Sie die Komprimierungskodierung für eine Spalte angeben, wird die Tabelle nicht mehr auf ENCODE AUTO festgelegt. Weitere Informationen zur Komprimierungskodierung finden Sie unter [Spaltenkomprimierung zur Reduzierung der Größe der gespeicherten Daten](t_Compressing_data_on_disk.md).   
Wenn Sie die Komprimierungskodierung für eine Spalte ändern, bleibt die Tabelle zur Abfrage verfügbar.  
Erwägen Sie die folgenden Einschränkungen:  
+ Sie können eine Spalte nicht in dieselbe Kodierung ändern, die derzeit für die Spalte definiert ist. 
+ Sie können die Kodierung für eine Spalte in einer Tabelle mit einem überlappenden Sortierschlüssel nicht ändern. 

ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, .....;   
Eine Klausel, die die Komprimierungskodierung mehrerer Spalten in einem einzigen Befehl ändert. Weitere Informationen zur Komprimierungskodierung finden Sie unter [Spaltenkomprimierung zur Reduzierung der Größe der gespeicherten Daten](t_Compressing_data_on_disk.md).  
Wenn Sie die Komprimierungskodierung für eine Spalte ändern, bleibt die Tabelle zur Abfrage verfügbar.  
 Erwägen Sie die folgenden Einschränkungen:  
+ Sie können eine Spalte nicht mehrmals mit einem einzigen Befehl in denselben oder einen anderen Kodierungstyp ändern.
+ Sie können eine Spalte nicht in dieselbe Kodierung ändern, die derzeit für die Spalte definiert ist. 
+ Sie können die Kodierung für eine Spalte in einer Tabelle mit einem überlappenden Sortierschlüssel nicht ändern. 

ALTER DISTSTYLE ALL  
Eine Klausel, die den vorhandenen Verteilungsstil einer Tabelle in ändert `ALL`. Berücksichtigen Sie dabei Folgendes:  
+ ALTER DISTSTYLE, ALTER SORTKEY und VACUUM können nicht gleichzeitig für dieselbe Tabelle ausgeführt werden. 
  + Wenn VACUUM gerade ausgeführt wird, wird beim Ausführen von ALTER DISTSTYLE ALL ein Fehler zurückgegeben. 
  + Wenn ALTER DISTSTYLE ALL ausgeführt wird, startet eine Hintergrundbereinigung nicht für eine Tabelle. 
+ Der Befehl ALTER DISTSTYLE ALL wird für Tabellen mit verschachtelten Sortierschlüsseln und temporäre Tabellen nicht unterstützt.
+ Wenn der Verteilungsstil zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Tabellenoptimierung. 
Weitere Informationen zu DISTSTYLE ALL finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER DISTSTYLE EVEN  
Eine Klausel, die den vorhandenen Verteilungsstil einer Tabelle in ändert `EVEN`. Berücksichtigen Sie dabei Folgendes:  
+ ALTER DISTSYTLE, ALTER SORTKEY und VACUUM können nicht gleichzeitig für dieselbe Tabelle ausgeführt werden. 
  + Wenn VACUUM gerade ausgeführt wird, wird beim Ausführen von ALTER DISTSTYLE EVEN ein Fehler zurückgegeben. 
  + Wenn ALTER DISTSTYLE EVEN ausgeführt wird, startet eine Hintergrundbereinigung nicht für eine Tabelle. 
+ Der Befehl ALTER DISTSTYLE EVEN wird für Tabellen mit verschachtelten Sortierschlüsseln und temporäre Tabellen nicht unterstützt.
+ Wenn der Verteilungsstil zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Tabellenoptimierung. 
Weitere Informationen zu DISTSTYLE EVEN finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER DISTKEY *column\$1name* oder ALTER DISTSTYLE KEY DISTKEY *column\$1name*  
Eine Klausel, die die Spalte ändert, die als Verteilungsschlüssel einer Tabelle verwendet wird. Berücksichtigen Sie dabei Folgendes:  
+ VACUUM und ALTER DISTKEY können nicht gleichzeitig für dieselbe Tabelle ausgeführt werden. 
  + Wenn VACUUM bereits ausgeführt wird, gibt ALTER DISTKEY einen Fehler zurück.
  + Wenn ALTER DISTKEY ausgeführt wird, startet die Hintergrundbereinigung nicht für die Tabelle.
  + Wenn ALTER DISTKEY ausgeführt wird, dann gibt die Vordergrundbereinigung einen Fehler zurück.
+ Sie können nur jeweils einen ALTER DISTKEY-Befehl für eine Tabelle ausführen. 
+ Der Befehl ALTER DISTKEY wird für Tabellen mit verschachtelten Sortierschlüsseln nicht unterstützt. 
+ Wenn der Verteilungsstil zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Tabellenoptimierung. 
Wenn Sie DISTSTYLE KEY angeben, werden die Daten nach den Werten in der DISTKEY-Spalte verteilt. Weitere Informationen zu DISTSTYLE finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER DISTSTYLE AUTO  
Eine Klausel, die den vorhandenen Verteilungsstil einer Tabelle in AUTO ändert.   
Wenn Sie einen Verteilungsstil auf AUTO ändern, wird der Verteilungsstil der Tabelle folgendermaßen festgelegt:   
+ Eine kleine Tabelle mit DISTSTYLE ALL wird in AUTO(ALL) umgewandelt. 
+ Eine kleine Tabelle mit DISTSTYLE EVEN wird in AUTO(ALL) umgewandelt. 
+ Eine kleine Tabelle mit DISTSTYLE KEY wird in AUTO(ALL) umgewandelt. 
+ Eine große Tabelle mit DISTSTYLE ALL wird in AUTO(EVEN) umgewandelt. 
+ Eine große Tabelle mit DISTSTYLE EVEN wird in AUTO(EVEN) umgewandelt. 
+ Eine große Tabelle mit DISTSTYLE KEY wird in AUTO(KEY) umgewandelt und der DISTKEY bleibt erhalten. In diesem Fall nimmt Amazon Redshift keine Änderungen an der Tabelle vor.
Wenn Amazon Redshift feststellt, dass ein neuer Verteilungsstil oder Schlüssel die Leistung von Abfragen verbessert, dann kann Amazon Redshift den Verteilungsstil oder Schlüssel Ihrer Tabelle in Zukunft ändern. Beispielsweise könnte Amazon Redshift eine Tabelle mit dem DISTSTYLE-Wert AUTO(KEY) in AUTO(EVEN) konvertieren oder umgekehrt. Weitere Informationen zum Verhalten bei Änderungen von Verteilungsschlüsseln, einschließlich Datenumverteilung und Sperren, finden Sie unter [Empfehlungen für Amazon Redshift Advisor](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation).  
Weitere Informationen zu DISTSTYLE AUTO finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).   
Um den Verteilungsstil einer Tabelle anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1TABLE\$1INFO ab. Weitere Informationen finden Sie unter [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Um die Empfehlungen von Amazon Redshift Advisor für Tabellen anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS ab. Weitere Informationen finden Sie unter [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Um die von Amazon Redshift durchgeführten Aktionen anzuzeigen, fragen Sie die Systemkatalogansicht SVL\$1AUTO\$1WORKER\$1ACTION ab. Weitere Informationen finden Sie unter [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
Eine Klausel, die den für eine Tabelle verwendeten Sortierschlüssel ändert oder hinzufügt. ALTER SORTKEY wird für temporäre Tabellen nicht unterstützt.  
Wenn Sie einen Sortierschlüssel ändern, kann sich die Kompressionskodierung von Spalten im neuen oder ursprünglichen Sortierschlüssel ändern. Wenn für die Tabelle keine Kodierung explizit definiert ist, weist Amazon Redshift automatisch Komprimierungskodierungen wie folgt zu:  
+ Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als die Datentypen BOOLEAN, REAL oder DOUBLE PRECISION definiert sind, wird die RAW-Kodierung zugewiesen.
+ Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird Komprimierung zugewiesen. AZ64
+ Spalten, die als CHAR oder VARCHAR definiert sind, wird LZO-Komprimierung zugewiesen.
Berücksichtigen Sie dabei Folgendes:  
+ Sie können maximal 400 Spalten für einen Sortierschlüssel pro Tabelle definieren. 
+ Sie können einen überlappenden Sortierschlüssel in einen zusammengesetzten Sortierschlüssel oder in keinen Sortierschlüssel ändern. Es ist jedoch nicht möglich, einen zusammengesetzten Sortierschlüssel in einen überlappenden Sortierschlüssel zu ändern. 
+ Wenn der Sortierschlüssel zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Tabellenoptimierung. 
+ Amazon Redshift empfiehlt die Verwendung von RAW-Kodierung (keine Komprimierung) für Spalten, die als Sortierschlüssel definiert sind. Wenn Sie eine Spalte ändern, um sie als Sortierschlüssel zu wählen, wird die Komprimierung der Spalte auf RAW-Komprimierung (keine Komprimierung) geändert. Dadurch kann sich der Speicherbedarf der Tabelle erhöhen. Wie stark die Tabellengröße zunimmt, hängt von der jeweiligen Tabellendefinition und dem Tabelleninhalt ab. Weitere Informationen zur Komprimierung finden Sie unter . [Kompressionskodierungen](c_Compression_encodings.md) 
Beim Laden von Daten in eine Tabelle werden die Daten in der Reihenfolge des Sortierschlüssels geladen. Wenn Sie den Sortierschlüssel ändern, ordnet Amazon Redshift die Daten neu an. Weitere Informationen zu SORTKEY finden Sie im Abschnitt [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER SORTKEY AUTO  
Eine Klausel, die den Sortierschlüssel der Zieltabelle auf AUTO ändert oder hinzufügt. ALTER SORTKEY AUTO wird für temporäre Tabellen nicht unterstützt.   
Wenn Sie einen Sortierschlüssel auf AUTO ändern, behält Amazon Redshift den bestehenden Sortierschlüssel der Tabelle bei.   
Wenn Amazon Redshift feststellt, dass ein neuer Sortierschlüssel die Leistung von Abfragen verbessert, dann kann Amazon Redshift den Sortierschlüssel Ihrer Tabelle in Zukunft ändern.   
Weitere Informationen zu SORTKEY AUTO finden Sie im Abschnitt [CREATE TABLE](r_CREATE_TABLE_NEW.md).   
Um den Sortierschlüssel einer Tabelle anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1TABLE\$1INFO ab. Weitere Informationen finden Sie unter [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Um die Empfehlungen von Amazon Redshift Advisor für Tabellen anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS ab. Weitere Informationen finden Sie unter [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Um die von Amazon Redshift durchgeführten Aktionen anzuzeigen, fragen Sie die Systemkatalogansicht SVL\$1AUTO\$1WORKER\$1ACTION ab. Weitere Informationen finden Sie unter [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER SORTKEY NONE  
Eine Klausel, die den Sortierschlüssel der Zieltabelle entfernt.   
Wenn der Sortierschlüssel zuvor als AUTO definiert war, dann ist die Tabelle kein Kandidat mehr für die automatische Tabellenoptimierung. 

ALTER ENCODE AUTO  
Eine Klausel, die den Kodierungstyp der Spalten in der Zieltabelle auf AUTO ändert. Wenn Sie die Kodierung auf AUTO ändern, behält Amazon Redshift den bestehenden Kodierungstyp der Spalten in der Tabelle bei. Wenn Amazon Redshift dann feststellt, dass ein neuer Kodierungstyp die Abfrageleistung verbessern kann, kann Amazon Redshift den Kodierungstyp der Tabellenspalten ändern.   
Wenn Sie eine oder mehrere Spalten ändern, um eine Kodierung anzugeben, passt Amazon Redshift die Kodierung nicht mehr automatisch für alle Spalten in der Tabelle an. Die Spalten behalten die aktuellen Kodierungseinstellungen bei.  
Die folgenden Aktionen haben keinen Einfluss auf die Einstellung ENCODE AUTO für die Tabelle:   
+ Umbenennen der Tabelle.
+ Ändern der DISTSTYLE- oder SORTKEY-Einstellung für die Tabelle.
+ Hinzufügen oder Löschen einer Spalte mit einer ENCODE-Einstellung.
+ Verwendung der Option COMPUPDATE des Befehls COPY. Weitere Informationen finden Sie unter [Datenladeoperationen](copy-parameters-data-load.md).
Um die Kodierung einer Tabelle anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1TABLE\$1INFO ab. Weitere Informationen finden Sie unter [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md).

RENAME COLUMN *column\$1name* TO *new\$1name*   
Eine Klausel, die eine Spalte in den Wert ändert, der in *new\$1name* angegeben ist. Die maximale Länge des Spaltennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

ADD [ COLUMN ] *column\$1name*   
Eine Klausel, die der Tabelle eine Spalte mit dem angegebenen Namen hinzufügt. Sie können in jeder Anweisung ALTER TABLE nur eine Spalte hinzufügen.  
Sie können keine Spalte hinzufügen, die der Verteilungsschlüssel (DISTKEY) oder ein Sortierschlüssel (SORTKEY) der Tabelle ist.  
 Sie können den Befehl ALTER TABLE ADD COLUMN nicht verwenden, um die folgenden Tabellen- und Spaltenattribute zu ändern:   
+ UNIQUE
+ PRIMARY KEY
+ REFERENCES (Fremdschlüssel)
+ IDENTITY oder GENERATED BY DEFAULT AS IDENTITY
Die maximale Länge des Spaltennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Die maximale Anzahl der Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 1.600.  
Beim Hinzufügen von Spalten zu einer externen Tabelle gelten die folgenden Beschränkungen:  
+ Sie können keine Spalten zu einer externen Tabelle mit den Spaltenbeschränkungen DEFAULT, ENCODE; NOT NULL oder NULL hinzufügen. 
+ Sie können keine Spalten zu einer externen Tabelle hinzufügen, die mit dem AVRO-Dateiformat definiert ist. 
+ Falls Pseudospalten aktiviert sind, können Sie höchstens 1.598 Spalten in einer einzelnen externen Tabelle definieren. Falls Pseudospalten nicht aktiviert sind, können Sie höchstens 1.600 Spalten in einer einzelnen Tabelle definieren. 
Weitere Informationen finden Sie unter [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).

 *column\$1type*   
Der Datentyp der Spalte, die hinzugefügt wird. Im Fall der Spalten CHAR und VARCHAR können Sie das Schlüsselwort MAX verwenden, statt eine maximale Länge zu deklarieren. MAX legt die maximale Länge auf 4.096 Bytes für CHAR oder 65.535 Bytes für VARCHAR fest. Die maximale Größe eines GEOMETRY-Objekts beträgt 1.048.447 Byte..   
Informationen zu den Datentypen, die Amazon Redshift unterstützt, finden Sie unter [Datentypen](c_Supported_data_types.md).

DEFAULT *default\$1expr*   <a name="alter-table-default"></a>
Eine Klausel, die der Spalte einen Standarddatenwert zuweist. Der Datentyp von *default\$1expr* muss dem Datentyp der Spalte entsprechen. Der Wert DEFAULT muss ein variablenloser Ausdruck sein. Unterabfragen, Querreferenzen auf andere Spalten in der aktuellen Tabelle und benutzerdefinierte Funktionen sind nicht zulässig.  
Der *default\$1expr* wird in jeder INSERT-Operation verwendet, die keinen Wert für die Spalte angibt. Wenn kein Standardwert angegeben ist, ist der Standardwert für die Spalte null.  
Wenn eine COPY-Operation auf ein Null-Feld in einer Spalte mit dem Wert DEFAULT und der Einschränkung NOT NULL trifft, fügt der Befehl COPY den Wert von *default\$1expr* ein.   
DEFAULT wird für externe Tabellen nicht unterstützt.

ENCODE *encoding*   
Die Kompressionskodierung für eine Spalte. Standardmäßig verwaltet Amazon Redshift die Komprimierungskodierung für alle Spalten in einer Tabelle automatisch, wenn Sie keine Komprimierungskodierung für eine Spalte in der Tabelle angeben oder wenn Sie die Option ENCODE AUTO für die Tabelle verwenden.  
Wenn Sie die Komprimierungskodierung für eine beliebige Spalte in der Tabelle angeben oder nicht die Option ENCODE AUTO für die Tabelle angeben, weist Amazon Redshift den Spalten, für die Sie keine Komprimierungskodierung angeben, automatisch die Komprimierungskodierung wie folgt zu:  
+ Allen Spalten in temporären Tabellen wird standardmäßig die RAW-Kompression zugewiesen.
+ Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als Datentyp BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY oder GEOGRAPHY definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird Komprimierung zugewiesen. AZ64
+ Spalten, die als CHAR, VARCHAR oder VARBYTE definiert sind, wird LZO-Komprimierung zugewiesen.
Wenn Sie nicht möchten, dass eine Spalte komprimiert wird, geben Sie die RAW-Kodierung explizit an.
Die folgenden [compression encodings](c_Compression_encodings.md#compression-encoding-list) werden unterstützt:  
+ AZ64
+ BYTEDICT
+ DELTA
+ DELTA32K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (keine Kompression)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD
ENCODE wird für externe Tabellen nicht unterstützt.

NOT NULL \$1 NULL   
NOT NULL gibt an, dass die Spalte keine Null-Werte enthalten darf. Der Standardwert NULL gibt an, dass die Spalte Null-Werte akzeptiert.  
NOT NULL und NULL werden für externe Tabellen nicht unterstützt.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Eine Klausel, die angibt, ob beim Suchen oder Vergleichen von Zeichenfolgen in der Spalte zwischen Groß- und Kleinschreibung unterschieden wird oder nicht. Der Standardwert entspricht der aktuellen Konfiguration für die Beachtung der Groß-/Kleinschreibung in der Datenbank.  
Verwenden Sie den folgenden Befehl, um die Sortierinformationen der Datenbank zu ermitteln:  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE und CS sind austauschbar und liefern dieselben Ergebnisse. Ebenso sind CASE\$1INSENSITIVE und CI austauschbar und führen zu denselben Ergebnissen.

DROP [ COLUMN ] *column\$1name*   
Der Name der Spalte, die aus der Tabelle gelöscht werden soll.  
Die letzte Tabellenspalte kann nicht gelöscht werden. Eine Tabelle muss mindestens eine Spalte enthalten.  
Sie können keine Spalte entfernen, die der Verteilungsschlüssel (DISTKEY) oder ein Sortierschlüssel (SORTKEY) der Tabelle ist. Das Standardverhalten für DROP COLUMN ist RESTRICT, wenn die Spalte abhängige Objekte enthält, wie eine Ansicht, einen Primärschlüssel, einen Fremdschlüssel oder die Einschränkung UNIQUE.  
Beim Hineinziehen aus einer externen Tabelle gelten die folgenden Beschränkungen:  
+ Spalten, die als Partition verwendet werden, können nicht aus einer externen Tabelle entfernt werden.
+ Sie können keine Spalten aus einer externen Tabelle entfernen, die mit dem AVRO-Dateiformat definiert ist. 
+ RESTRICT und CASCADE werden für externe Tabellen ignoriert.
+ Sie können die Spalten der Richtlinientabelle, auf die innerhalb der Richtliniendefinition verwiesen wird, nicht löschen, es sei denn, Sie löschen oder trennen die Richtlinie. Dies gilt auch, wenn die Option CASCADE angegeben ist. Sie können andere Spalten in der Richtlinientabelle löschen.
Weitere Informationen finden Sie unter [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).

RESTRICT   
Wenn RESTRICT mit DROP COLUMN verwendet wird, bedeutet das, dass die Spalte, die entfernt werden soll, in den folgenden Fällen nicht entfernt wird:  
+ Wenn eine definierte Ansicht die Spalte referenziert, die entfernt werden soll
+ Wenn ein Fremdschlüssel die Spalte referenziert
+ Wenn die Spalte Teil eines mehrteiligen Schlüssels ist
RESTRICT kann nicht mit CASCADE verwendet werden.  
RESTRICT und CASCADE werden für externe Tabellen ignoriert.

CASCADE   
Bei Verwendung mit DROP COLUMN wird die angegebene Spalte und alles, was von dieser Spalte abhängig ist, entfernt. CASCADE kann nicht mit RESTRICT verwendet werden.  
RESTRICT und CASCADE werden für externe Tabellen ignoriert.

Die folgenden Optionen gelten nur für externe Tabellen.

SET LOCATION \$1 's3://*bucket/folder*/' \$1 's3://*bucket/manifest\$1file*' \$1  
Der Pfad zum Amazon S3-Ordner enthält die Datendateien oder eine Manifestdatei, die eine Liste der Amazon S3-Objektpfade enthält. Die Buckets müssen sich in derselben AWS -Region wie der Amazon-Redshift-Cluster befinden. Eine Liste der unterstützten Regionen finden Sie unter. AWS [Einschränkungen für Amazon Redshift Spectrum](c-spectrum-considerations.md) Weitere Informationen zur Verwendung einer Manifestdatei finden Sie unter LOCATION in der CREATE EXTERNAL TABLE-Referenz [Parameters](r_CREATE_EXTERNAL_TABLE.md#r_CREATE_EXTERNAL_TABLE-parameters).

SET FILE FORMAT *format*  
Das Dateiformat für externe Datendateien.  
Gültige Formate sind folgende:  
+ AVRO 
+ PARQUET
+ RCFILE
+ SEQUENCEFILE
+ TEXTFILE 

SET TABLE PROPERTIES ( '*property\$1name*'='*property\$1value*')   
Eine Klausel, die die Tabellendefinition für Tabelleneigenschaften für eine externe Tabelle festlegt.   
Bei Tabelleneigenschaften muss die Groß-/Kleinschreibung beachtet werden.  
'numRows'='*row\$1count*'   
Eine Eigenschaft, die den Wert numRows für die Tabellendefinition festlegt. Um die Statistiken einer externen Tabelle explizit zu aktualisieren, legen Sie mit der Eigenschaft numRows die Größe der Tabelle fest. Amazon Redshift analysiert keine externen Tabellen, um die Tabellenstatistiken zu generieren, die der Abfrageoptimierer verwendet, um einen Abfrageplan zu erstellen. Wenn für eine externe Tabelle keine Tabellenstatistiken festgelegt sind, generiert Amazon Redshift einen Abfrageausführungsplan. Dieser Plan basiert auf der Annahme, dass externe Tabellen die größeren Tabellen und lokale Tabellen die kleineren Tabellen sind.  
'skip.header.line.count'='*line\$1count*'  
Eine Eigenschaft, die die Anzahl der Reihen festgelegt, die am Anfang jeder Quelldatei übersprungen wird.

PARTITION ( *partition\$1column*=*partition\$1value* [, ...] SET LOCATION \$1 's3://*bucket*/*folder*' \$1 's3://*bucket*/*manifest\$1file*' \$1  
Eine Klausel, die einen neuen Speicherort für eine oder mehrere Partitionsspalten festlegt. 

ADD [ IF NOT EXISTS ] PARTITION ( *partition\$1column*=*partition\$1value* [, ...] ) LOCATION \$1 's3://*bucket*/*folder*' \$1 's3://*bucket*/*manifest\$1file*' \$1 [, ... ]  
Eine Klausel, die eine oder mehrere Partitionen hinzufügt. Sie können mehrere PARTITION-Klauseln mit einer einzelnen ALTER TABLE … ADD-Anweisung angeben.  
Wenn Sie den AWS Glue Katalog verwenden, können Sie mit einer einzigen ALTER TABLE-Anweisung bis zu 100 Partitionen hinzufügen.
Die IF NOT EXISTS-Klausel gibt an, dass der Befehl keine Änderungen ausführen soll, wenn die angegebene Partition bereits vorhanden ist. Darüber hinaus gibt sie an, dass der Befehl eine Meldung zurückgeben sollte, dass die Partition vorhanden ist, anstatt mit einem Fehler beendet zu werden. Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn ALTER TABLE versucht, eine Partition hinzuzufügen, die bereits vorhanden ist. 

DROP PARTITION (*partition\$1column*=*partition\$1value* [, ...] )   
Eine Klausel, die die angegebene Partition entfernt. Durch die Entfernung einer Partition werden nur die Metadaten der externen Tabelle geändert. Die Daten auf Amazon S3 sind nicht betroffen.

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
Eine Klausel, die die Sicherheit auf Zeilenebene für eine Relation aktiviert oder deaktiviert.  
Wenn die Sicherheit auf Zeilenebene für eine Relation aktiviert ist, können Sie nur die Zeilen lesen, für die Ihnen die Richtlinie auf Zeilenebene Zugriff gewährt. Wenn es keine Richtlinie gibt, die Ihnen Zugriff auf die Relation gewährt, können Sie keine Zeilen aus der Relation sehen. Nur Superuser und Benutzer oder Rollen, denen die `sys:secadmin`-Rolle zugewiesen ist, können die Klausel ROW LEVEL SECURITY festlegen. Weitere Informationen finden Sie unter [Sicherheit auf Zeilenebene](t_rls.md). Diese Anweisung wird in der verbundenen Datenbank oder in einer Datenbank mit Amazon Redshift-Verbundberechtigungen unterstützt. Die FOR DATASHARES-Klausel wird in einer Datenbank mit Amazon Redshift Redshift-Verbundberechtigungen nicht unterstützt.  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  Eine Klausel, mit der Sie den Verbindungstyp einer Sicherheitsrichtlinie auf Zeilenebene für eine Relation auswählen können. Wenn einer Relation mehrere Sicherheitsrichtlinien auf Zeilenebene zugeordnet sind, können Sie die Richtlinien mit der AND- oder OR-Klausel kombinieren. Standardmäßig kombiniert Amazon Redshift RLS-Richtlinien mit der AND-Klausel. Superuser, Benutzer oder Rollen, denen diese `sys:secadmin`-Rolle zugewiesen wurde, können diese Klausel verwenden, um den Verbindungstyp der Sicherheitsrichtlinie auf Zeilenebene für eine Relation zu definieren. Weitere Informationen finden Sie unter [Kombinieren mehrerer Richtlinien pro Benutzer](t_rls_combine_policies.md). 
+ FOR DATASHARES

  Eine Klausel, die festlegt, ob auf eine RLS-geschützte Relation über Datashares zugegriffen werden kann. Standardmäßig kann auf eine RLS-geschützte Relation nicht über ein Datashare zugegriffen werden. Ein ALTER TABLE ROW LEVEL SECURITY-Befehl, der mit dieser Klausel ausgeführt wird, wirkt sich nur auf die Zugänglichkeitseigenschaft des Datashares aus. Die Eigenschaft ROW LEVEL SECURITY wird nicht geändert. 

   Wenn Sie eine RLS-geschützte Relation über Datashares zugänglich machen, bietet die Relation in der Consumer-seitigen, gemeinsam genutzten Datenbank keine Sicherheit auf Zeilenebene. Die Relation behält ihre RLS-Eigenschaft auf der Produzentenseite. 

MASKING \$1 ON \$1 OFF \$1 FOR DATASHARES  
Eine Klausel, die festlegt, ob der Zugriff auf eine DDM-geschützte Beziehung über Datashares möglich ist oder nicht. Standardmäßig kann auf eine DDM-geschützte Beziehung nicht über ein Datashare zugegriffen werden. Wenn Sie eine DDM-geschützte Beziehung über Datashares zugänglich machen, bietet die Beziehung in der Consumer-seitigen, Datashare-Datenbank keinen Maskierungsschutz. Die Beziehung behält ihre Maskierungseigenschaft auf der Produzentenseite bei. Nur Superuser und Benutzer oder Rollen, denen die Rolle `sys:secadmin` zugewiesen ist, können die Klausel MASKING FOR DATASHARES festlegen. Weitere Informationen finden Sie unter [Dynamische Datenmaskierung](t_ddm.md). 

## Beispiele
<a name="r_ALTER_TABLE-examples"></a>

In den folgenden Abschnitten finden Sie Beispiele für die Verwendung des Befehls ALTER TABLE.
+ [Beispiele für ALTER TABLE](r_ALTER_TABLE_examples_basic.md)
+ [Beispiele für ALTER EXTERNAL TABLE](r_ALTER_TABLE_external-table.md)
+ [Beispiele für ALTER TABLE ADD und DROP COLUMN](r_ALTER_TABLE_COL_ex-add-drop.md)

# Beispiele für ALTER TABLE
<a name="r_ALTER_TABLE_examples_basic"></a>

Das folgende Beispiele zeigt die grundsätzliche Nutzung des Befehls ALTER TABLE. 

## Umbenennen einer Tabelle oder Ansicht
<a name="r_ALTER_TABLE_examples_basic-rename-a-table"></a>

Mit dem folgenden Befehl wird die Tabelle USERS in USERS\$1BKUP umbenannt: 

```
alter table users
rename to users_bkup;
```

 Sie können diese Art von Befehl auch verwenden, um eine Ansicht umzubenennen. 

## Ändern des Besitzers einer Tabelle oder Ansicht
<a name="r_ALTER_TABLE_examples_basic-change-the-owner-of-a-table-or-view"></a>

Mit dem folgenden Befehl wird der Besitzer der Tabelle VENUE in den Benutzer DWUSER geändert: 

```
alter table venue
owner to dwuser;
```

Die folgenden Befehle erstellen eine Ansicht und ändern anschließend deren Besitzer: 

```
create view vdate as select * from date;
alter table vdate owner to vuser;
```

## Umbenennen einer Spalte
<a name="r_ALTER_TABLE_examples_basic-rename-a-column"></a>

Mit dem folgenden Befehl wird die Spalte VENUESEATS in der Tabelle VENUE in VENUESIZE geändert: 

```
alter table venue
rename column venueseats to venuesize;
```

## Entfernen einer Tabelleneinschränkung
<a name="r_ALTER_TABLE_examples_drop-constraint"></a>

Um eine Tabelleneinschränkung zu entfernen, wie beispielsweise einen Primärschlüssel, einen Fremdschlüssel oder eine spezifische Einschränkung, suchen Sie zunächst den internen Namen der Einschränkung. Geben Sie anschließend den Namen der Einschränkung im Befehl ALTER TABLE ein. Im folgenden Beispiel werden die Einschränkungen für die Tabelle CATEGORY gesucht und anschließend der Primärschlüssel mit dem Namen entfernt `category_pkey`. 

```
select constraint_name, constraint_type
from information_schema.table_constraints
where constraint_schema ='public'
and table_name = 'category';

constraint_name | constraint_type
----------------+----------------
category_pkey   | PRIMARY KEY

alter table category
drop constraint category_pkey;
```

## Ändern einer VARCHAR-Spalte
<a name="r_ALTER_TABLE_examples_alter-column"></a>

Um Speicherplatz zu sparen, können Sie eine Tabelle zunächst mit VARCHAR-Spalten mit der Mindestgröße definieren, die für Ihre aktuellen Datenanforderungen erforderlich ist. Später können Sie längere Zeichenfolgen unterstützen, indem Sie die Spaltengröße in der Tabelle ändern. 

Im folgenden Beispiel wird die Größe der EVENTNAME-Spalte auf VARCHAR(300) erhöht. 

```
alter table event alter column eventname type varchar(300);
```

## Ändern einer VARBYTE-Spalte
<a name="r_ALTER_TABLE_examples_alter-varbyte-column"></a>

Um Speicherplatz zu sparen, können Sie eine Tabelle zunächst mit VARBYTE-Spalten mit der Mindestgröße definieren, die für Ihre aktuellen Datenanforderungen erforderlich ist. Später können Sie längere Zeichenfolgen unterstützen, indem Sie die Spaltengröße in der Tabelle ändern. 

Im folgenden Beispiel wird die Größe der Spalte EVENTNAME auf VARBYTE(300) erhöht. 

```
alter table event alter column eventname type varbyte(300);
```

## Ändern der Komprimierungskodierung für eine Spalte
<a name="r_ALTER_TABLE_examples_alter-column-encoding"></a>

Sie können die Komprimierungskodierung einer Spalte ändern. Nachstehend finden Sie eine Reihe von Beispielen, die diesen Ansatz veranschaulichen. Die Tabellendefinition für diese Beispielen lautet wie folgt.

```
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
```

Die folgende Anweisung ändert die Komprimierungskodierung für Spalte c0 von der LZO-Kodierung zur Kodierung. AZ64 

```
alter table t1 alter column c0 encode az64;
```

Die folgende Anweisung ändert die Komprimierungskodierung für Spalte c1 von der Z-Standardcodierung zur Kodierung. AZ64 

```
alter table t1 alter column c1 encode az64;
```

Die folgende Anweisung ändert die Komprimierungskodierung für Spalte c2 von LZO-Kodierung in Byte-Verzeichnis-Kodierung. 

```
alter table t1 alter column c2 encode bytedict;
```

Die folgende Anweisung ändert die Komprimierungskodierung für Spalte c3 von Zstandard-Kodierung in Runlength-Kodierung. 

```
alter table t1 alter column c3 encode runlength;
```

## Ändern einer DISTSTYLE KEY DISTKEY-Spalte
<a name="r_ALTER_TABLE_examples_alter-distkey"></a>

Die folgenden Beispiele illustrieren das Ändern von DISTSTYLE und DISTKEY in einer Tabelle.

Erstellen Sie eine Tabelle mit der Verteilung EVEN. Die Ansicht SVV\$1TABLE\$1INFO zeigt für DISTSTYLE den Wert EVEN. 

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

Ändern Sie die Tabelle DISTKEY in `inv_warehouse_sk`. Die Ansicht SVV\$1TABLE\$1INFO zeigt die Spalte `inv_warehouse_sk` als resultierenden Verteilerschlüssel an. 

```
alter table inventory alter diststyle key distkey inv_warehouse_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_warehouse_sk)
```

Ändern Sie die Tabelle DISTKEY in `inv_item_sk`. Die Ansicht SVV\$1TABLE\$1INFO zeigt die Spalte `inv_item_sk` als resultierenden Verteilerschlüssel an. 

```
alter table inventory alter distkey inv_item_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_item_sk)
```

## Ändern einer Tabelle in DISTSTYLE ALL
<a name="r_ALTER_TABLE_examples_alter-diststyle-all"></a>

Die folgenden Beispiele zeigen, wie Sie eine Tabelle in DISTSTYLE ALL ändern.

Erstellen Sie eine Tabelle mit der Verteilung EVEN. Die Ansicht SVV\$1TABLE\$1INFO zeigt für DISTSTYLE den Wert EVEN. 

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

Ändern Sie die Tabelle DISTSTYLE in ALL. Die Ansicht SVV\$1TABLE\$1INFO zeigt die geänderte DISTSYTLE an. 

```
alter table inventory alter diststyle all;

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     ALL
```

## Ändern des SORTKEY einer Tabelle
<a name="r_ALTER_TABLE_examples_alter-sortkey"></a>

Sie können festlegen, ob eine Tabelle einen zusammengesetzten Sortierschlüssel oder keinen Sortierschlüssel haben soll.

In der folgenden Tabellendefinition ist die Tabelle `t1` mit einem überlappenden Sortierschlüssel definiert.

```
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
```

Der folgende Befehle ändert die Tabelle so, dass aus dem überlappenden Sortierschlüssel ein zusammengesetzter Sortierschlüssel wird.

```
alter table t1 alter sortkey(c0, c1);
```

Der folgende Befehl ändert die Tabelle so, dass der überlappende Sortierschlüssel entfernt wird.

```
alter table t1 alter sortkey none;
```

In der folgenden Tabellendefinition ist die Tabelle `t1` mit der Spalte `c0` als Sortierschlüssel definiert.

```
create table t1 (c0 int, c1 int) sortkey(c0);
```

Der folgende Befehle ändert die Tabelle `t1` in einen zusammengesetzten Sortierschlüssel.

```
alter table t1 alter sortkey(c0, c1);
```

## Ändern einer Tabelle in ENCODE AUTO
<a name="r_ALTER_TABLE_examples_alter-encode-auto"></a>

Das folgende Beispiel zeigt, wie Sie eine Tabelle in ENCODE AUTO ändern. 

Die Tabellendefinition für dieses Beispiel lautet wie folgt. Die Spalte `c0` ist mit dem Kodierungstyp AZ64 und die Spalte `c1` mit dem Kodierungstyp LZO definiert.

```
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
```

Die folgende Anweisung ändert die Kodierung dieser Tabelle auf AUTO.

```
alter table t1 alter encode auto;
```

Das folgende Beispiel zeigt, wie Sie eine Tabelle ändern, um die Einstellung ENCODE AUTO zu entfernen. 

Die Tabellendefinition für dieses Beispiel lautet wie folgt. Die Tabellenspalten werden ohne Kodierung definiert. In diesem Fall ist die Kodierung standardmäßig auf ENCODE AUTO eingestellt.

```
create table t2(c0 int, c1 varchar);
```

Die folgende Anweisung ändert die Kodierung für Spalte c0 dieser Tabelle in LZO. Die Tabellenkodierung ist nicht mehr auf ENCODE AUTO eingestellt.

```
alter table t2 alter column c0 encode lzo;;
```

## Ändern einer Kontrolle der Sicherheit auf Zeilenebene
<a name="r_ALTER_TABLE_examples_basic-rls"></a>

Der folgende Befehl schaltet RLS für die Tabelle aus: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
```

Der folgende Befehl aktiviert RLS für die Tabelle: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
```

Der folgende Befehl aktiviert RLS für die Tabelle und macht es über Datashares zugänglich: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
```

Der folgende Befehl aktiviert RLS für die Tabelle und macht es über Datashares unzugänglich: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
```

Der folgende Befehl aktiviert RLS und setzt den RLS-Verbindungstyp für die Tabelle auf OR: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
```

Der folgende Befehl aktiviert RLS und setzt den RLS-Verbindungstyp für die Tabelle auf AND: 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;
```

# Beispiele für ALTER EXTERNAL TABLE
<a name="r_ALTER_TABLE_external-table"></a>

Die folgenden Beispiele verwenden einen Amazon S3 S3-Bucket in der Region USA Ost (Nord-Virginia) (`us-east-1`) AWS-Region und die in [Beispiele](r_CREATE_EXTERNAL_TABLE_examples.md) für CREATE TABLE erstellten Beispieltabellen. Weitere Informationen zur Verwendung von Partitionen mit externen Tabellen finden Sie unter [Partitionierung externer Redshift-Spectrum-Tabellen](c-spectrum-external-tables.md#c-spectrum-external-tables-partitioning). 

Im folgenden Beispiel wird die Tabelleneigenschaft numRows für die externe Tabelle SPECTRUM.SALES auf 170.000 Zeilen festgelegt.

```
alter table spectrum.sales
set table properties ('numRows'='170000');
```

Im folgenden Beispiel wird der Speicherort der externen Tabelle SPECTRUM.SALES geändert.

```
alter table spectrum.sales
set location 's3://redshift-downloads/tickit/spectrum/sales/';
```

Im folgenden Beispiel wird das Format der externen Tabelle SPECTRUM.SALES in Parquet geändert.

```
alter table spectrum.sales
set file format parquet;
```

Im folgenden Beispiel wird der externen Tabelle SPECTRUM.SALES\$1PART eine Partition hinzugefügt.

```
alter table spectrum.sales_part
add if not exists partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
```

Im folgenden Beispiel werden der Tabelle SPECTRUM.SALES\$1PART drei Partitionen hinzugefügt.

```
alter table spectrum.sales_part add if not exists
partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/'
partition(saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/'
partition(saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
```

Im folgenden Beispiel wird die externe Tabelle SPECTRUM.SALES\$1PART dahingehend geändert, dass die Partition entfernt wird `saledate='2008-01-01''`.

```
alter table spectrum.sales_part
drop partition(saledate='2008-01-01');
```

Im folgenden Beispiel wird ein neuer Amazon S3-Pfad für die Partition mit festgelegt `saledate='2008-01-01'`.

```
alter table spectrum.sales_part
partition(saledate='2008-01-01')
set location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01-01/';
```

Das folgende Beispiel ändert den Namen `sales_date` in `transaction_date`. 

```
alter table spectrum.sales rename column sales_date to transaction_date;
```

Im folgenden Beispiel wird das Spalten-Mapping auf die Positionszuweisung zu einer externen Tabelle gesetzt, die das ORC (Optimized Row Columnar) Format verwendet.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='position');
```

Im folgenden Beispiel wird das Spalten-Mapping auf die Namenszuweisung zu einer externen Tabelle gesetzt, die das ORC (Optimized Row Columnar) Format verwendet.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='name');
```

# Beispiele für ALTER TABLE ADD und DROP COLUMN
<a name="r_ALTER_TABLE_COL_ex-add-drop"></a>

In den folgenden Beispielen wird gezeigt, wie ALTER TABLE verwendet wird, um eine einfache Tabellenspalte hinzuzufügen und dann zu entfernen und eine Spalte mit einem abhängigen Objekt zu entfernen. 

## Hinzufügen (ADD) und Entfernen (DROP) einer einfachen Spalte
<a name="r_ALTER_TABLE_COL_ex-add-then-drop-a-basic-column"></a>

Im folgenden Beispiel wird der Tabelle USERS die eigenständige Spalte FEEDBACK\$1SCORE hinzugefügt. Diese Spalte enthält einfach eine Ganzzahl und der Standardwert für diese Spalte ist NULL (kein Feedbackergebnis). 

Führen Sie zunächst eine Abfrage für die Katalogtabelle PG\$1TABLE\$1DEF aus, um das Schema der Tabelle USERS anzuzeigen: 

```
column        | type                   | encoding | distkey | sortkey
--------------+------------------------+----------+---------+--------
userid        | integer                | delta    | true    |       1
username      | character(8)           | lzo      | false   |       0
firstname     | character varying(30)  | text32k  | false   |       0
lastname      | character varying(30)  | text32k  | false   |       0
city          | character varying(30)  | text32k  | false   |       0
state         | character(2)           | bytedict | false   |       0
email         | character varying(100) | lzo      | false   |       0
phone         | character(14)          | lzo      | false   |       0
likesports    | boolean                | none     | false   |       0
liketheatre   | boolean                | none     | false   |       0
likeconcerts  | boolean                | none     | false   |       0
likejazz      | boolean                | none     | false   |       0
likeclassical | boolean                | none     | false   |       0
likeopera     | boolean                | none     | false   |       0
likerock      | boolean                | none     | false   |       0
likevegas     | boolean                | none     | false   |       0
likebroadway  | boolean                | none     | false   |       0
likemusicals  | boolean                | none     | false   |       0
```

Fügen Sie nun die Spalte feedback\$1score hinzu: 

```
alter table users
add column feedback_score int
default NULL;
```

Wählen Sie die Spalte FEEDBACK\$1SCORE aus USERS aus, um zu überprüfen, ob sie hinzugefügt wurde: 

```
select feedback_score from users limit 5;

feedback_score
----------------
NULL
NULL
NULL
NULL
NULL
```

Entfernen Sie die Spalte, um die ursprüngliche DDL wiederherzustellen: 

```
alter table users drop column feedback_score;
```

## Entfernen einer Spalte mit einem abhängigen Objekt
<a name="r_ALTER_TABLE_COL_ex-dropping-a-column-with-a-dependent-object"></a>

In diesem Beispiel wird eine Spalte entfernt, die ein abhängiges Objekt enthält. Daher wird das abhängige Objekt ebenfalls entfernt. 

Fügen Sie zunächst der Tabelle USERS erneut die Spalte FEEDBACK\$1SCORE hinzu: 

```
alter table users
add column feedback_score int
default NULL;
```

Erstellen Sie als Nächstes eine Ansicht aus der Tabelle USERS mit dem Namen USERS\$1VIEW: 

```
create view users_view as select * from users;
```

Versuchen Sie nun, die Spalte FEEDBACK\$1SCORE aus der Spalte USERS zu entfernen. Diese DROP-Anweisung verwendet das Standardverhalten (RESTRICT): 

```
alter table users drop column feedback_score;
```

Amazon Redshift zeigt die Fehlermeldung an, dass die Spalte nicht entfernt werden kann, da ein anderes Objekt von ihr abhängig ist. 

Versuchen Sie erneut, die Spalte FEEDBACK\$1SCORE zu entfernen. Geben Sie dieses Mal CASCADE an, um alle abhängigen Objekte zu entfernen: 

```
alter table users
drop column feedback_score cascade;
```

# ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND"></a>

Fügt einer Zieltabelle Zeilen hinzu, indem Daten aus einer vorhandenen Quelltabelle verschoben werden. Daten in der Quelltabelle werden zu entsprechenden Spalten in der Zieltabelle verschoben. Die Reihenfolge der Spalten spielt keine Rolle. Nachdem die Daten der Zieltabelle erfolgreich angefügt wurden, ist die Quelltabelle leer. ALTER TABLE APPEND ist in der Regel sehr viel schneller als die vergleichbaren Operationen [CREATE TABLE AS](r_CREATE_TABLE_AS.md) oder [INSERT](r_INSERT_30.md), da die Daten verschoben und nicht dupliziert werden. 

**Anmerkung**  
ALTER TABLE APPEND verschiebt Datenblöcke zwischen der Quelltabelle und der Zieltabelle. Um die Leistung zu verbessern, komprimiert ALTER TABLE APPEND als Teil der append-Operation keinen Speicher. Dies hat zur Folge, dass die Nutzung von Arbeitsspeicher vorübergehend zunimmt. Um den Speicherplatz wieder zurückzugewinnen, führen Sie eine [VACUUM](r_VACUUM_command.md)-Operation durch.

Spalten mit den gleichen Namen müssen identische Spaltenattribute besitzen. Wenn weder die Quelltabelle noch die Zieltabelle Spalten enthält, die in der jeweils anderen Tabelle nicht vorhanden sind, verwenden Sie die Parameter IGNOREEXTRA oder FILLTARGET, um anzugeben, wie zusätzliche Spalten verwaltet werden sollen. 

Sie können keine Identitätsspalten anfügen. Wenn beide Tabellen eine Identitätsspalte enthalten, ist der Befehl nicht erfolgreich. Wenn nur eine Tabelle eine Identitätsspalte enthält, verwenden Sie die Parameter FILLTARGET oder IGNOREEXTRA. Weitere Informationen finden Sie unter [Nutzungshinweise für ALTER TABLE APPEND](#r_ALTER_TABLE_APPEND_usage).

Sie können eine GENERATED BY DEFAULT AS IDENTITY-Spalte anhängen. Sie können als GENERATED BY DEFAULT AS IDENTITY-Spalten mit von Ihnen angegebenen Werten aktualisieren. Weitere Informationen finden Sie unter [Nutzungshinweise für ALTER TABLE APPEND](#r_ALTER_TABLE_APPEND_usage). 

Bei der Zieltabelle muss es sich um eine permanente Tabelle handeln. Die Quelle kann jedoch eine permanente Tabelle oder eine materialisierte Ansicht sein, die für die Streaming-Erfassung konfiguriert ist. Beide Objekte müssen den gleichen Verteilungsstil und Verteilungsschlüssel verwenden, wenn einer definiert wurde. Wenn die Objekte sortiert sind, müssen beide Objekte den gleichen Sortierstil verwenden und die gleichen Spalten als Sortierschlüssel definieren.

Der Befehl ALTER TABLE APPEND führt automatisch vor Abschluss der Operation einen Commit aus. Es kann kein Rollback ausgeführt werden. Sie können ALTER TABLE APPEND nicht innerhalb eines Transaktionsblocks (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

## Erforderliche Berechtigungen
<a name="r_ALTER_TABLE_APPEND-privileges"></a>

Je nach verwendetem Befehl ALTER TABLE APPEND ist eine der folgenden Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Systemberechtigung ALTER TABLE
+ Benutzer mit Berechtigungen DELETE und SELECT für die Quelltabelle und der Berechtigung INSERT für die Zieltabelle

## Syntax
<a name="r_ALTER_TABLE_APPEND-synopsis"></a>

```
ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ]
[ IGNOREEXTRA | FILLTARGET ]
```

Das Anhängen aus einer materialisierten Ansicht funktioniert nur, wenn Ihre materialisierte Ansicht  für [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md) konfiguriert ist.

## Parameters
<a name="r_ALTER_TABLE_APPEND-parameters"></a>

 *target\$1table\$1name*   
Der Name der Tabelle, an die die Zeilen angefügt werden. Geben Sie einfach den Namen der Tabelle an, oder verwenden Sie das Format *schema\$1name.table\$1name*, um ein spezifisches Schema zu verwenden. Bei der Zieltabelle muss es sich um eine vorhandene permanente Tabelle handeln.

 FROM *source\$1table\$1name*   
Der Name der Tabelle, die die Zeilen bereitstellt, die angefügt werden sollen. Geben Sie einfach den Namen der Tabelle an, oder verwenden Sie das Format *schema\$1name.table\$1name*, um ein spezifisches Schema zu verwenden. Bei der Quelltabelle muss es sich um eine vorhandene permanente Tabelle handeln.

 FROM *source\$1materialized\$1view\$1name*   
Der Name der materialisierten Ansicht, die die Zeilen bereitstellt, die angefügt werden sollen. Das Anhängen aus einer materialisierten Ansicht funktioniert nur, wenn Ihre materialisierte Ansicht  für [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md) konfiguriert ist. Die materialisierte Quellansicht muss bereits vorhanden sein. 

IGNOREEXTRA   
Ein Schlüsselwort, das angibt, dass Daten in den zusätzlichen Spalten verworfen werden sollen, wenn die Quelltabelle Spalten enthält, die nicht in der Zieltabelle vorhanden sind. Sie können IGNOREEXTRA nicht mit FILLTARGET verwenden. 

FILLTARGET   
Ein Schlüsselwort, das angibt, dass die Spalten mit dem Spaltenwert [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default), wenn definiert, oder NULL ausgefüllt werden sollen, wenn die Zieltabelle Spalten enthält, die nicht in der Quelltabelle vorhanden sind. Sie können IGNOREEXTRA nicht mit FILLTARGET verwenden. 

## Nutzungshinweise für ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND_usage"></a>
+ ALTER TABLE APPEND verschiebt nur identische Spalten aus der Quelltabelle in die Zieltabelle. Die Reihenfolge der Spalten spielt keine Rolle. 
+  Wenn weder die Quelltabelle noch die Zieltabelle zusätzliche Spalten enthält, verwenden Sie FILLTARGET oder IGNOREEXTRA entsprechend den folgenden Regeln: 
  + Wenn die Quelltabelle Spalten enthält, die in der Zieltabelle nicht vorhanden sind, verwenden Sie IGNOREEXTRA. Durch diesen Befehl werden die zusätzlichen Spalten in der Quelltabelle ignoriert.
  + Wenn die Zieltabelle Spalten enthält, die in der Quelltabelle nicht vorhanden sind, verwenden Sie FILLTARGET. Der Befehl füllt die zusätzlichen Spalten in der Zieltabelle entweder mit dem Standardwert für die Spalte oder dem Wert IDENTITY aus, wenn definiert, oder NULL.
  + Wenn sowohl die Quelltabelle als auch die Zieltabelle zusätzliche Spalten enthalten, ist der Befehl nicht erfolgreich. Sie können nicht FILLTARGET und IGNOREEXTRA gleichzeitig verwenden. 
+ Wenn in den beiden Tabellen eine Spalte mit dem gleichen Namen, jedoch unterschiedlichen Attributen vorhanden ist, ist der Befehl nicht erfolgreich. Gleich benannten Spalten müssen die folgenden Attribute gemeinsam sein: 
  + Datentyp
  + Spaltengröße
  + Kompressionskodierung
  + Nicht null
  + Sortierstil
  + Sortierschlüsselspalten
  + Verteilungsstil
  + Verteilungschlüsselspalten
+ Sie können keine Identitätsspalten anfügen. Wenn sowohl die Quelltabelle als auch die Zieltabelle Identitätsspalten enthalten, ist der Befehl nicht erfolgreich. Wenn nur die Quelltabelle eine Identitätsspalte enthält, verwenden Sie den Parameter IGNOREXTRA, sodass die Identitätsspalte ignoriert wird. Wenn nur die Zieltabelle eine Identitätsspalte enthält, verwenden Sie den Parameter FILLTARGET, sodass die Identitätsspalte entsprechend der IDENTITY-Klausel ausgefüllt wird, die für die Tabelle definiert ist. Weitere Informationen finden Sie unter [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default). 
+ Sie können eine Standard-Identity-Spalte mit der Anweisung ALTER TABLE APPEND anhängen. Weitere Informationen finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md). 
+ Für ALTER TABLE APPEND-Operationen gelten exklusive Sperren, wenn sie auf materialisierten Streaming-Ansichten von Amazon Redshift ausgeführt werden, die mit einem der folgenden Objekte verbunden sind:
  +  Einem Amazon-Kinesis-Datenstrom 
  +  Einem Thema in Amazon Managed Streaming für Apache Kafka 
  +  Einem unterstützten externen Stream, z. B. einem Thema in Confluent Cloud Kafka 

  Weitere Informationen finden Sie unter [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md).

## Beispiele für ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND_examples"></a>

Nehmen Sie an, Ihre Organisation pflegt eine Tabelle namens SALES\$1MONTHLY, um aktuelle Verkaufstransaktionen zu erfassen. Sie möchten jeden Monat Daten aus der Transaktionstabelle in die Tabelle SALES verschieben. 

Sie können die Befehle INSERT INTO und TRUNCATE verwenden, um die Aufgabe auszuführen. 

```
insert into sales (select * from sales_monthly);
truncate sales_monthly;
```

Sie können diese Operation jedoch sehr viel effizienter ausführen, indem Sie den Befehl ALTER TABLE APPEND verwenden. 

Führen Sie zunächst eine Abfrage für die Systemkatalogtabelle [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md) aus, um zu überprüfen, ob beide Tabellen gleiche Spalten mit identischen Spaltenattributen enthalten. 

```
select trim(tablename) as table, "column", trim(type) as type,
encoding, distkey, sortkey, "notnull"
from pg_table_def where tablename like 'sales%';

table      | column     | type                        | encoding | distkey | sortkey | notnull
-----------+------------+-----------------------------+----------+---------+---------+--------
sales      | salesid    | integer                     | lzo      | false   |       0 | true
sales      | listid     | integer                     | none     | true    |       1 | true
sales      | sellerid   | integer                     | none     | false   |       2 | true
sales      | buyerid    | integer                     | lzo      | false   |       0 | true
sales      | eventid    | integer                     | mostly16 | false   |       0 | true
sales      | dateid     | smallint                    | lzo      | false   |       0 | true
sales      | qtysold    | smallint                    | mostly8  | false   |       0 | true
sales      | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
sales      | commission | numeric(8,2)                | delta32k | false   |       0 | false
sales      | saletime   | timestamp without time zone | lzo      | false   |       0 | false
salesmonth | salesid    | integer                     | lzo      | false   |       0 | true
salesmonth | listid     | integer                     | none     | true    |       1 | true
salesmonth | sellerid   | integer                     | none     | false   |       2 | true
salesmonth | buyerid    | integer                     | lzo      | false   |       0 | true
salesmonth | eventid    | integer                     | mostly16 | false   |       0 | true
salesmonth | dateid     | smallint                    | lzo      | false   |       0 | true
salesmonth | qtysold    | smallint                    | mostly8  | false   |       0 | true
salesmonth | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | commission | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

Betrachten Sie als Nächstes die Größe jeder Tabelle.

```
select count(*) from sales_monthly;
 count
-------
  2000
(1 row)

select count(*) from sales;
 count
-------
 412,214
(1 row)
```

Führen Sie nun den folgenden ALTER TABLE APPEND-Befehl aus.

```
alter table sales append from sales_monthly;         
```

Betrachten Sie erneut die Größe jeder Tabelle. Die Spalte SALES\$1MONTHLY hat nun 0 Zeilen und die Spalte SALES ist um 2000 Zeilen größer geworden.

```
select count(*) from sales_monthly;
 count
-------
     0
(1 row)

select count(*) from sales;
 count
-------
 414214
(1 row)
```

Wenn die Quelltabelle mehr Spalten als die Zieltabelle enthält, geben Sie den Parameter IGNOREEXTRA an. Im folgenden Beispiel wird der Parameter IGNOREEXTRA verwendet, um beim Anfügen an die Tabelle SALES zusätzliche Spalten in der Tabelle SALES\$1LISTING zu ignorieren.

```
alter table sales append from sales_listing ignoreextra;
```

Wenn die Zieltabelle mehr Spalten als die Quelltabelle enthält, geben Sie den Parameter FILLTARGET an. Im folgenden Beispiel wird der Parameter FILLTARGET verwendet, um Spalten in der Tabelle SALES\$1REPORT auszufüllen, die in der Tabelle SALES\$1MONTH nicht vorhanden sind.

```
alter table sales_report append from sales_month filltarget;
```

Das folgende Beispiel zeigt ein Beispiel für die Verwendung von ALTER TABLE APPEND mit einer materialisierten Ansicht als Quelle.

```
ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;
```

Die hier verwendeten Namen der Tabelle und der materialisierten Ansicht sind Beispiele. Das Anhängen aus einer materialisierten Ansicht funktioniert nur, wenn Ihre materialisierte Ansicht  für [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md) konfiguriert ist. Es werden alle Datensätze in der materialisierten Quellansicht in eine Zieltabelle mit demselben Schema wie die materialisierte Ansicht verschoben und die materialisierte Ansicht bleibt unverändert. Dies ist dasselbe Verhalten wie bei einer Tabelle als Datenquelle.

# VORLAGE ÄNDERN
<a name="r_ALTER_TEMPLATE"></a>

Ändert die Definition einer vorhandenen Vorlage. Verwenden Sie diesen Befehl, um eine Vorlage umzubenennen, den Besitzer einer Vorlage zu ändern, Parameter zur Vorlagendefinition hinzuzufügen oder zu entfernen oder Parameterwerte festzulegen.

## Erforderliche Berechtigungen
<a name="r_ALTER_TEMPLATE-privileges"></a>

Um eine Vorlage zu ändern, benötigen Sie eine der folgenden Voraussetzungen:
+ Superuser-Rechte
+ ALTER TEMPLATE-Privileg und USAGE-Privileg für das Schema, das die Vorlage enthält

## Syntax
<a name="r_ALTER_TEMPLATE-synopsis"></a>

```
ALTER TEMPLATE [database_name.][schema_name.]template_name
{
RENAME TO new_name
| OWNER TO new_owner
| ADD  parameter [AS] [value]
| DROP parameter
| SET parameter TO value1 [, parameter2 TO value2 , ...]
};
```

## Parameters
<a name="r_ALTER_TEMPLATE-parameters"></a>

 *database\$1name*   
(Optional) Der Name der Datenbank, in der die Vorlage erstellt wird. Wenn nicht angegeben, wird die aktuelle Datenbank verwendet. 

 *schema\$1name*   
(Optional) Der Name des Schemas, in dem die Vorlage erstellt wird. Wenn nicht angegeben, wird im aktuellen Suchpfad nach der Vorlage gesucht. 

 *Vorlagenname*   
Der Name der Vorlage, die geändert werden soll. 

RENAME TO   
Eine Klausel, die die Vorlage umbenennt. 

 *new\$1name*   
Der neue Name der Vorlage. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md). 

OWNER TO   
Eine Klausel, die den Besitzer der Vorlage ändert. 

 *new\$1owner*   
Der neue Besitzer der Vorlage. 

*ADD-Parameter* [AS] [*Wert*]  
Fügt der Vorlage einen neuen Parameter hinzu.  
+ Geben Sie für Parameter, die nur aus Schlüsselwörtern bestehen (wie CSV oder GZIP), nur den Parameternamen an.
+ Geben Sie für Parameter, die Werte erfordern, den Parameternamen gefolgt vom Wert an. Sie können optional AS zwischen dem Parameter und dem Wert einfügen. 

*DROP-Parameter*  
Entfernt den angegebenen Parameter aus der Vorlage. Es können nicht mehrere Parameter mit einem einzigen DROP-Befehl gelöscht werden.

*SET-Parameter* AUF *Wert1* [, *Parameter2 AUF *Wert2**,...]  
Aktualisiert die Werte vorhandener Vorlagenparameter. Nur für Parameter verwenden, die bereits Werte haben. In einem einzigen Befehl können mehrere Parameter aktualisiert werden.

## Beispiele
<a name="r_ALTER_TEMPLATE-examples"></a>

Im folgenden Beispiel wird die Vorlage test\$1template in demo\$1template umbenannt.

```
ALTER TEMPLATE test_template
RENAME TO demo_template;
```

Im folgenden Beispiel wird dem Benutzer bob der Besitz des Schemas demo\$1template übertragen.

```
ALTER TEMPLATE demo_template
OWNER TO bob;
```

Das folgende Beispiel fügt der Vorlage demo\$1template einen Parameter `CSV` hinzu

```
ALTER TEMPLATE demo_template
ADD CSV;
```

Das folgende Beispiel fügt der Vorlage demo\$1template einen Parameter `TIMEFORMAT 'auto'` hinzu

```
ALTER TEMPLATE demo_template
ADD TIMEFORMAT 'auto';
```

Im folgenden Beispiel wird der Parameter `ENCRYPTED` aus der Vorlage demo\$1template gelöscht

```
ALTER TEMPLATE demo_template
DROP ENCRYPTED;
```

Im folgenden Beispiel wird der `DELIMITER` Parameter auf `'|'` und der `TIMEFORMAT` Parameter auf gesetzt: `'epochsecs'`

```
ALTER TEMPLATE demo_template
SET DELIMITER TO '|', TIMEFORMAT TO 'epochsecs';
```

# ALTER USER
<a name="r_ALTER_USER"></a>

Ändert einen Datenbankbenutzer.

## Erforderliche Berechtigungen
<a name="r_ALTER_USER-privileges"></a>

Für ALTER USER sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung ALTER USER
+ Aktueller Benutzer, der sein eigenes Passwort ändern möchte

## Syntax
<a name="r_ALTER_USER-synopsis"></a>

```
ALTER USER username [ WITH ] option [, ... ]

where option is

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ VALID UNTIL 'expiration_date' ]
| RENAME TO new_name |
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit | RESET SESSION TIMEOUT
| SET parameter { TO | = } { value | DEFAULT }
| RESET parameter
| EXTERNALID external_id
```

## Parameters
<a name="r_ALTER_USER-parameters"></a>

 *username (Benutzername*   
Name des Benutzers. 

WITH   
Optionales Schlüsselwort. 

CREATEDB \$1 NOCREATEDB   
Mithilfe der Option CREATEDB kann der Benutzer neue Datenbanken erstellen. Der Standardwert ist NOCREATEDB. 

CREATEUSER \$1 NOCREATEUSER   
Die Option CREATEUSER erstellt einen Superuser mit allen Datenbankrechten einschließlich CREATE USER. Der Standardwert ist NOCREATEUSER. Weitere Informationen finden Sie unter [Superuser](r_superusers.md).

SYSLOG ACCESS \$1 RESTRICTED \$1 UNRESTRICTED \$1  <a name="alter-user-syslog-access"></a>
Eine Klausel, über die die Zugriffsebene eines Benutzers auf die Amazon-Redshift-Systemtabellen und -Ansichten festgelegt wird.   
Reguläre Benutzer mit der Berechtigung SYSLOG ACCESS RESTRICTED können nur die Zeilen anzeigen, die von den betreffenden Benutzern in für Benutzer sichtbaren Systemtabellen und Ansichten erstellt wurden. Die Standardeinstellung ist RESTRICTED.   
Reguläre Benutzer mit der Berechtigung SYSLOG ACCESS UNRESTRICTED können alle Zeilen in für Benutzer sichtbaren Systemtabellen und Ansichten anzeigen, einschließlich Zeilen, die von anderen Benutzern erstellt wurden. Über die Option UNRESTRICTED erhält ein Benutzer keinen Zugriff auf für Superuser sichtbare Tabellen. Nur Superuser können auf solche Tabellen zugreifen.   
Wenn Sie einem Benutzer uneingeschränkten Zugriff auf Systemtabellen gewähren, sieht der Benutzer auch Daten, die von anderen Benutzern generiert wurden. STL\$1QUERY und STL\$1QUERYTEXT enthalten beispielsweise den vollständigen Text von INSERT-, UPDATE- und DELETE-Anweisungen, die möglicherweise sensible von Benutzern generierte Daten enthalten. 
Alle Zeilen in SVV\$1TRANSACTIONS sind für alle Benutzer sichtbar.   
Weitere Informationen finden Sie unter [Sichtbarkeit der Daten in Systemtabellen und Ansichten](cm_chap_system-tables.md#c_visibility-of-data).

PASSWORD \$1 '*password*' \$1 '*md5hash*' \$1 '*sha256hash*' \$1 DISABLE \$1  
Legt das Benutzerpasswort fest.   
Standardmäßig können Benutzer ihre eigenen Passwörter ändern, es sei denn, das Passwort ist deaktiviert. Legen Sie zum Deaktivieren des Passworts eines Benutzers DISABLE fest. Wenn das Passwort eines Benutzers deaktiviert ist, wird das Passwort aus dem System gelöscht und der Benutzer kann sich nur mit temporären Benutzeranmeldeinformationen AWS Identity and Access Management (IAM) anmelden. Weitere Informationen finden Sie unter [Verwenden der IAM-Authentifizierung zur Erstellung von Benutzeranmeldeinformationen für die Datenbank](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html). Nur ein Superuser kann Passwörter aktivieren oder deaktivieren. Sie können das Passwort eines Superusers nicht deaktivieren. Führen Sie zum Aktivieren eines Passworts ALTER USER aus und legen Sie ein Passwort fest.  
Weitere Informationen zur Verwendung des PASSWORT-Parameters finden Sie unter [CREATE USER](r_CREATE_USER.md). 

VALID UNTIL '*expiration\$1date*'   
Gibt an, dass das Passwort ein Ablaufdatum hat. Verwenden Sie den Wert `'infinity'`, um ein Ablaufdatum zu vermeiden. Der gültige Datentyp für diesen Parameter ist timestamp.   
Nur Superuser können diesen Parameter verwenden.

RENAME TO   
Benennt den Benutzer um. 

 *new\$1name*   
Der neue Name des Benutzers. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).  
Wenn Sie einen Benutzer umbenennen, müssen Sie auch das Passwort des Benutzers ändern. Das neue Passwort muss sich nicht vom vorherigen Passwort unterscheiden. Der Benutzername wird als Teil der Passwortverschlüsselung verwendet. Daher wird das Passwort gelöscht, wen ein Benutzer umbenannt wird. Der Benutzer kann sich erst wieder anmelden, wenn das Passwort zurückgesetzt wurde. Beispiel:   

```
alter user newuser password 'EXAMPLENewPassword11'; 
```

CONNECTION LIMIT \$1 *Limit* \$1 UNLIMITED \$1   
Die maximale Zahl von Datenbankverbindungen, die der Benutzer gleichzeitig geöffnet haben darf. Das Limit wird für Superuser nicht durchgesetzt. Mithilfe des Schlüsselworts UNLIMITED können Sie die maximale Zahl gleichzeitiger Verbindungen festlegen. Möglicherweise gilt auch ein Limit für die Zahl der Verbindungen für die einzelnen Datenbanken. Weitere Informationen finden Sie unter [CREATE DATABASE](r_CREATE_DATABASE.md). Der Standardwert ist UNLIMITED. Um die aktuellen Verbindungen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [STV\$1SESSIONS](r_STV_SESSIONS.md) aus.  
Wenn sowohl für Benutzer- als auch für Datenbankverbindungen Limits gelten, muss ein ungenutzter Verbindungsplatz verfügbar sein, der sich innerhalb beider Grenzen befindet, wenn ein Benutzer versucht, eine Verbindung herzustellen.

SESSION TIMEOUT *limit* \$1 RESET SESSION TIMEOUT  
Die maximale Zeit in Sekunden, die eine Sitzung inaktiv oder untätig bleibt. Der Bereich liegt zwischen 60 Sekunden (einer Minute) und 1.728.000 Sekunden (20 Tagen). Wenn für den Benutzer kein Sitzungstimeout eingestellt ist, gilt die Clustereinstellung. Weitere Informationen finden Sie unter [ Kontingente und Limits in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) im *Verwaltungshandbuch zu Amazon Redshift*.  
Wenn Sie das Sitzungstimeout festlegen, wird es nur auf neue Sitzungen angewendet.  
Um Informationen über aktive Benutzersitzungen, einschließlich der Startzeit, des Benutzernamens und des Sitzungstimeouts anzuzeigen, fragen Sie die [STV\$1SESSIONS](r_STV_SESSIONS.md)-Systemansicht ab. Um Informationen über den Verlauf von Benutzersitzungen anzuzeigen, fragen Sie die [STL\$1SESSIONS](r_STL_SESSIONS.md)-Ansicht an. Um Informationen über Datenbankbenutzer, einschließlich Sitzungstimeouts, abzurufen, fragen Sie die [SVL\$1USER\$1INFO](r_SVL_USER_INFO.md)-Ansicht ab.

SET   
Legt für alle Sitzungen, die vom angegeben Benutzer ausgeführt werden, einen Konfigurationsparameter auf einen neuen Standardwert fest. 

RESET   
Setzt für den angegeben Benutzer einen Konfigurationsparameter auf den ursprünglichen Standardwert zurück. 

 *Parameter*   
Der Name des Parameters, der festgelegt oder zurückgesetzt werden soll. 

 *Wert*   
Neuer Wert des Parameters. 

DEFAULT   
Legt für alle Sitzungen, die vom angegeben Benutzer ausgeführt werden, den Konfigurationsparameter auf den Standardwert fest. 

EXTERNALID *external\$1id*   
Der Bezeichner für den Benutzer, der einem Identitätsanbieter zugeordnet ist. Der Benutzer muss sein Passwort deaktiviert haben. Weitere Informationen finden Sie unter [Nativer Identitätsanbieter(IdP)-Verbund für Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Nutzungshinweise
<a name="r_ALTER_USER_usage_notes"></a>
+ **Versuch, rdsdb zu ändern** – Sie können den Benutzer `rdsdb` nicht ändern. 
+ **Ein unbekanntes Passwort erstellen** — Wenn Sie die AWS Identity and Access Management (IAM-) Authentifizierung verwenden, um Datenbank-Benutzeranmeldeinformationen zu erstellen, möchten Sie möglicherweise einen Superuser erstellen, der sich nur mit temporären Anmeldeinformationen anmelden kann. Sie können das Passwort eines Superusers nicht deaktivieren, aber Sie können ein unbekanntes Passwort mithilfe einer zufällig generierten MD5 Hash-Zeichenfolge erstellen.

  ```
  alter user iam_superuser password 'md51234567890123456780123456789012';
  ```
+ **Festlegen von search\$1path** – Wenn Sie den Parameter [search\$1path](r_search_path.md) mit dem Befehl ALTER USER festlegen, wirkt sich die Änderung bei der nächsten Anmeldung des angegebenen Benutzers aus. Wenn Sie den „search\$1path“-Wert für den aktuellen Benutzer und die aktuelle Sitzung ändern möchten, verwenden Sie den Befehl SET. 
+ **Festlegen der Zeitzone** – Wenn Sie SET TIMEZONE mit dem Befehl ALTER USER verwenden, wirkt sich die Änderung bei der nächsten Anmeldung des angegebenen Benutzers aus.
+ **Arbeiten mit dynamischer Datenmaskierung und Sicherheitsrichtlinien auf Zeilenebene**: Wenn Ihr bereitgestellter Cluster oder Serverless-Namespace über dynamische Datenmaskierungs- oder Sicherheitsrichtlinien auf Zeilenebene verfügt, werden die folgenden Befehle für normale Benutzer blockiert: 

  ```
  ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
  ```

  Nur Superuser und Benutzer mit der ALTER USER-Berechtigung können diese Konfigurationsoptionen festlegen. Weitere Informationen zur Sicherheit auf Zeilenebene finden Sie unter [Sicherheit auf Zeilenebene](t_rls.md). Weitere Informationen zur dynamischen Datenmaskierung finden Sie unter [Dynamische Datenmaskierung](t_ddm.md). 

## Beispiele
<a name="r_ALTER_USER-examples"></a>

Im folgenden Beispiel erhält der Benutzer ADMIN das Recht, Datenbanken zu erstellen: 

```
alter user admin createdb;
```

Im folgenden Beispiel werden das Passwort des Benutzers ADMIN auf `adminPass9` festgelegt und Ablaufdatum und Ablaufzeit für das Passwort festgelegt: 

```
alter user admin password 'adminPass9'
valid until '2017-12-31 23:59';
```

Im folgenden Beispiel wird der Benutzer ADMIN in SYSADMIN umbenannt: 

```
alter user admin rename to sysadmin;
```

Im folgenden Beispiel wird das Timeout für eine Leerlaufsitzung für einen Benutzer auf 300 Sekunden aktualisiert.

```
ALTER USER dbuser SESSION TIMEOUT 300;
```

Setzt das Timeout für Leerlaufsitzungen des Benutzers zurück. Wenn Sie es zurücksetzen, gilt die Clustereinstellung. Sie müssen Datenbank-Superuser sein, um diesen Befehl auszuführen. Weitere Informationen finden Sie unter [Kontingente und Limits in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) im *Verwaltungshandbuch zu Amazon Redshift*.

```
ALTER USER dbuser RESET SESSION TIMEOUT;
```

Im folgenden Beispiel wird die externe ID für einen Benutzer namens `bob` aktualisiert. Der Namespace lautet `myco_aad`. Wenn der Namespace keinem registrierten Identitätsanbieter zugeordnet ist, führt dies zu einem Fehler.

```
ALTER USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

Im folgenden Beispiel wird die Zeitzone für alle von einem bestimmten Datenbankbenutzer ausgeführten Sitzungen eingerichtet. Die Zeitzone wird für aufeinander folgende Sitzungen, nicht für die aktuelle Sitzung geändert.

```
ALTER USER odie SET TIMEZONE TO 'Europe/Zurich';
```

Im folgenden Beispiel wird die maximale Anzahl von Datenbankverbindungen festgelegt, die der Benutzer `bob` geöffnet haben darf.

```
ALTER USER bob CONNECTION LIMIT 10;
```

# ANALYZE
<a name="r_ANALYZE"></a>

Aktualisiert Tabellenstatistiken zur Verwendung durch den Abfrageplaner. 

## Erforderliche Berechtigungen
<a name="r_ANALYZE-privileges"></a>

Für ANALYZE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung ANALYZE
+ Besitzer der Beziehung
+ Datenbankbesitzer, für den die Tabelle freigegeben wird.

## Syntax
<a name="r_ANALYZE-synopsis"></a>

```
ANALYZE [ VERBOSE ]
[ [ table_name [ ( column_name [, ...] ) ] ]
[ PREDICATE COLUMNS | ALL  COLUMNS ]
```

## Parameters
<a name="r_ANALYZE-parameters"></a>

VERBOSE   
Eine Klausel, die Nachrichten zum Fortschritt in Bezug auf die Operation ANALYZE zurückgibt. Diese Option ist nützlich, wenn Sie keine Tabelle angeben.

 *table\$1name*   
Sie können spezifische Tabellen analysieren, einschließlich temporärer Tabellen. Sie können die Tabelle mittels ihres Schemanamens qualifizieren. Optional können Sie einen table\$1name angeben, um eine einzelne Tabelle zu analysieren. Sie können nicht mehr als einen *table\$1name* mit einer einzelnen Anweisung ANALYZE *table\$1name* angeben. Wenn Sie keinen *table\$1name*-Wert angeben, werden alle Tabellen in der aktuell verbundenen Datenbank analysiert, einschließlich der persistenten Tabellen im Systemkatalog. Amazon Redshift überspringt die Analyse einer Tabelle, wenn der Prozentsatz der Zeilen, die seit dem letzten ANALYZE-Vorgang geändert wurden, unter dem Analyseschwellenwert liegt. Weitere Informationen finden Sie unter [Analyse-Schwellenwert](#r_ANALYZE-threshold).  
Sie müssen Amazon-Redshift-Systemtabellen (STL- und STV-Tabellen) nicht analysieren.

 *column\$1name*   
Wenn Sie einen *table\$1name* angeben, können Sie auch eine oder mehrere Spalten in der Tabelle angeben (als durch Komma getrennte Liste in Klammern). Wenn eine Spaltenliste angegeben ist, werden nur die aufgelisteten Spalten analysiert.

 PREDICATE COLUMNS \$1 ALL COLUMNS   
Klausel, die angibt, ob ANALYZE nur Prädikatspalten umfassen sollte. Geben Sie PREDICATE COLUMNS an, um nur Spalten zu analysieren, die in vorherigen Abfragen als Prädikate verwendet wurden oder wahrscheinlich als Prädikate verwendet werden. Geben Sie ALL COLUMNS an, um alle Spalten zu analysieren. Der Standardwert ist ALL COLUMNS.   
Eine Spalte wird nur dann in den Satz der Prädikatspalten aufgenommen, wenn Folgendes zutrifft:  
+ Die Spalte wurde in einer Abfrage als Teil eines Filters, einer Join-Bedingung oder einer Gruppe durch Klausel verwendet.
+ Die Spalte ist ein Verteilungsschlüssel.
+ Die Spalte ist Teil eines Sortierschlüssels.
Wenn keine Spalten als Prädikatspalten markiert sind, beispielsweise weil für die Tabelle noch keine Abfrage ausgeführt wurde, werden alle Spalten analysiert, auch wenn PREDICATE COLUMNS angegeben ist. In diesem Fall antwortet Amazon Redshift möglicherweise mit einer Meldung wie Keine Prädikatspalten für "" *table-name* gefunden. Alle Spalten werden analysiert. Weitere Informationen zu Prädikatspalten finden Sie unter [Analysieren von Tabellen](t_Analyzing_tables.md).

## Nutzungshinweise
<a name="r_ANALYZE-usage-notes"></a>

Amazon Redshift führt automatisch ANALYZE für Tabellen aus, die Sie mit den folgenden Befehlen erstellen: 
+ CREATE TABLE AS
+ CREATE TEMP TABLE AS 
+ SELECT INTO

 Sie können keine externen Tabellen analysieren.

Sie müssen den Befehl ANALYZE nicht für diese Tabellen ausführen, wenn sie erstellt werden. Wenn Sie sie ändern, sollten Sie sie jedoch genauso wie andere Tabellen analysieren.

### Analyse-Schwellenwert
<a name="r_ANALYZE-threshold"></a>

Um die Verarbeitungszeit zu reduzieren und die allgemeine Systemleistung zu verbessern, überspringt Amazon Redshift ANALYZE für eine Tabelle, wenn der Prozentsatz der Zeilen, die seit der letzten Ausführung des Befehls ANALYZE geändert wurden, niedriger als der durch den Parameter [analyze\$1threshold\$1percent](r_analyze_threshold_percent.md) angegebene Analyseschwellenwert ist. Der Standardwert für `analyze_threshold_percent` ist 10. Um `analyze_threshold_percent` für die aktuelle Sitzung zu ändern, führen Sie den Befehl [SET](r_SET.md) aus. Im folgenden Beispiel wird `analyze_threshold_percent` in 20 Prozent geändert.

```
set analyze_threshold_percent to 20;
```

Um Tabellen zu analysieren, wenn nur eine kleine Zahl von Zeilen geändert wurde, legen Sie `analyze_threshold_percent` auf eine beliebig kleine Zahl fest. Wenn Sie beispielsweise `analyze_threshold_percent` auf 0,01 festlegen, wird eine Tabelle mit 100.000.000 Zeilen nicht übersprungen, wenn mindestens 10.000 Zeilen geändert wurden. 

```
set analyze_threshold_percent to 0.01;
```

Wenn ANALYZE eine Tabelle überspringt, weil der Analyseschwellenwert nicht erreicht wird, gibt Amazon Redshift die folgende Meldung zurück.

```
ANALYZE SKIP
```

Um alle Tabellen zu analysieren, auch wenn keine Zeilen geändert wurden, legen Sie `analyze_threshold_percent` auf 0 fest.

Um die Ergebnisse von ANALYZE-Vorgängen anzuzeigen, führen Sie für die Systemtabelle [STL\$1ANALYZE](r_STL_ANALYZE.md) eine Abfrage aus. 

Weitere Informationen zum Analysieren von Tabellen finden Sie unter [Analysieren von Tabellen](t_Analyzing_tables.md).

## Beispiele
<a name="r_ANALYZE-examples"></a>

Analysiert alle Tabellen in der Datenbank TICKIT und gibt Fortschrittinformationen zurück.

```
analyze verbose;
```

Analysiert nur die Tabelle LISTING.

```
analyze listing;
```

Analysiert die Spalten VENUEID und VENUENAME in der Tabelle VENUE. 

```
analyze venue(venueid, venuename);
```

Analysiert nur Prädikatspalten in der Tabelle VENUE.

```
analyze venue predicate columns;
```

# ANALYZE COMPRESSION
<a name="r_ANALYZE_COMPRESSION"></a>

Führt Kompressionsanalysen aus und erstellt einen Bericht mit der vorgeschlagenen Spaltenkodierung für die analysierten Tabellen. Der Bericht enthält für jede Spalte eine Schätzung der potenziellen Reduzierung des benötigten Festplattenplatzes im Vergleich zur RAW-Kodierung.

## Syntax
<a name="r_ANALYZE_COMPRESSION-synopsis"></a>

```
ANALYZE COMPRESSION
[ [ table_name ]
[ ( column_name [, ...] ) ] ]
[COMPROWS numrows]
```

## Parameters
<a name="r_ANALYZE_COMPRESSION-parameters"></a>

 *table\$1name*   
Sie können die Kompression für spezifische Tabellen analysieren, einschließlich temporärer Tabellen. Sie können die Tabelle mittels ihres Schemanamens qualifizieren. Optional können Sie einen *table\$1name* angeben, um eine einzelne Tabelle zu analysieren. Wenn Sie keinen *table\$1name* angeben, werden alle Tabellen in der aktuell verbundenen Datenbank analysiert. Sie können nicht mehr als einen *table\$1name* mit einer einzelnen Anweisung ANALYZE COMPRESSION angeben.

 *column\$1name*   
Wenn Sie einen *table\$1name* angeben, können Sie auch eine oder mehrere Spalten in der Tabelle angeben (als durch Komma getrennte Liste in Klammern).

COMPROWS  
Die Anzahl der Zeilen, die beispielhaft für die Kompressionanalyse verwendet werden sollen. Die Analyse wird für Zeilen aus jedem Daten-Slice ausgeführt. Wenn Sie beispielsweise COMPROWS 1000000 (1.000.000) angeben und das System insgesamt 4 Slices enthält, werden nicht mehr als 250.000 Zeilen pro Slice gelesen und analysiert. Wenn COMPROWS nicht angegeben wird, werden standardmäßig 100.000 Zeilen pro Slice beispielhaft analysiert. Werte für COMPROWS, die niedriger als der Standardwert von 100.000 Zeilen pro Slice sind, werden automatisch auf den Standardwert aktualisiert. Die Komprimierungsanalyse gibt jedoch keine Empfehlungen aus, wenn die Menge der Daten in einer Tabelle nicht als aussagekräftige Grundlage für die Analyse ausreicht. Wenn der Wert für COMPROWS größer als die Anzahl der Zeilen in der Tabelle ist, wird der Befehl ANALYZE COMPRESSION dennoch fortgesetzt und die Kompressionsanalyse wird anhand aller verfügbaren Zeilen ausgeführt. Die Verwendung von COMPROWS führt zu einem Fehler, wenn keine Tabelle angegeben ist.

 *numrows*   
Die Anzahl der Zeilen, die beispielhaft für die Kompressionanalyse verwendet werden sollen. Der akzeptierte Bereich für *numrows* ist eine Zahl zwischen 1000 und 1000000000 (1.000.000.000).

## Nutzungshinweise
<a name="r_ANALYZE_COMPRESSION_usage_notes"></a>

ANALYZE COMPRESSION bewirkt eine exklusive Tabellensperrung, die gleichzeitig ausgeführte Lese- und Schreibvorgänge für die Tabelle verhindert. Führen Sie den Befehl ANALYZE COMPRESSION nur aus, wenn die Tabelle nicht verwendet wird.

Führen Sie ANALYZE COMPRESSION aus, um basierend auf einer Beispielauswahl der Tabelleninhalte Empfehlungen zu Kodierungsschemata für Spalten zu erhalten. ANALYZE COMPRESSION ist ein Empfehlungstool und ändert die Spaltenkodierung der Tabelle nicht. Sie können die vorgeschlagene Kodierung anwenden, indem Sie die Tabelle neu erstellen oder eine neue Tabelle mit demselben Schema erstellen. Die Neuerstellung einer nicht komprimierten Tabelle mit geeigneten Kodierungsschemas kann den Platzbedarf auf der Festplatte erheblich reduzieren. Dieser Ansatz spart Speicherplatz und verbessert die Abfrageleistung für I/O-gebundene Workloads.

ANALYZE COMPRESSION überspringt die eigentliche Analysephase und gibt direkt den ursprünglichen Kodierungstyp für jede Spalte zurück, die als SORTKEY bezeichnet ist. Dies geschieht, weil bereichseingeschränkte Scans möglicherweise geringe Leistung zeigen, wenn SORTKEY-Spalten viel stärker komprimiert werden als andere Spalten.

## Beispiele
<a name="r_ANALYZE_COMPRESSION-examples"></a>

Das folgende Beispiel zeigt die Codierung und die geschätzte prozentuale Reduzierung für die Spalten nur in der Tabelle LISTING:

```
analyze compression listing;
  
  Table  |     Column     | Encoding | Est_reduction_pct 
---------+----------------+----------+-------------------
 listing | listid         | az64     | 40.96
 listing | sellerid       | az64     | 46.92
 listing | eventid        | az64     | 53.37
 listing | dateid         | raw      | 0.00
 listing | numtickets     | az64     | 65.66
 listing | priceperticket | az64     | 72.94
 listing | totalprice     | az64     | 68.05
 listing | listtime       | az64     | 49.74
```

Das folgende Beispiel analysiert die Spalten QTYSOLD, COMMISSION und SALETIME in der Tabelle SALES.

```
analyze compression sales(qtysold, commission, saletime);

 Table |   Column   | Encoding | Est_reduction_pct 
-------+------------+----------+-------------------
 sales | salesid    | N/A      | 0.00
 sales | listid     | N/A      | 0.00
 sales | sellerid   | N/A      | 0.00
 sales | buyerid    | N/A      | 0.00
 sales | eventid    | N/A      | 0.00
 sales | dateid     | N/A      | 0.00
 sales | qtysold    | az64     | 83.06
 sales | pricepaid  | N/A      | 0.00
 sales | commission | az64     | 71.85
 sales | saletime   | az64     | 49.63
```

# ANFÜGEN EINER MASKIERUNGSRICHTLINIE
<a name="r_ATTACH_MASKING_POLICY"></a>

Fügt eine vorhandene Richtlinie für die dynamische Datenmaskierung an eine Spalte an. Weitere Informationen zur dynamischen Datenmaskierung finden Sie unter [Dynamische Datenmaskierung](t_ddm.md).

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Maskierungsrichtlinie anfügen.

## Syntax
<a name="r_ATTACH_MASKING_POLICY-synopsis"></a>

```
ATTACH MASKING POLICY 
{
  policy_name ON relation_name
  | database_name.policy_name ON database_name.schema_name.relation_name
}
( { output_column_names | output_path } )
[ USING ( { input_column_names | input_path } ) ]
TO { user_name | ROLE role_name | PUBLIC }
[ PRIORITY priority ];
```

## Parameters
<a name="r_ATTACH_MASKING_POLICY-parameters"></a>

*policy\$1name*   
Der Name der anzufügenden Maskierungsrichtlinie.

database\$1name  
Der Name der Datenbank, in der die Richtlinie und die Beziehung erstellt werden. Die Richtlinie und die Relation müssen sich in derselben Datenbank befinden. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

schema\$1name  
Der Name des Schemas, zu dem die Relation gehört.

 *relation\$1name*   
Der Name der Relation, an die die Maskierungsrichtlinie angefügt werden soll.

*output\$1column\$1names*   
Die Namen der Spalten, für die die Maskierungsrichtlinie gelten soll.

*output\$1paths*   
Der vollständige Pfad des SUPER-Objekts, für das die Maskierungsrichtlinie gelten soll, einschließlich des Spaltennamens. Beispielsweise könnte für eine Relation mit einer Spalte vom Typ SUPER mit dem Namen `person` der *output\$1path* `person.name.first_name` sein. 

*input\$1column\$1names*   
Die Namen der Spalten, die die Maskierungsrichtlinie als Eingabe verwenden wird. Dieser Parameter ist optional. Wenn nicht angegeben, verwendet die Maskierungsrichtlinie *output\$1column\$1names* als Eingaben.

*input\$1paths*   
Der vollständige Pfad des SUPER-Objekts, das die Maskierungsrichtlinie als Eingabe verwenden wird. Dieser Parameter ist optional. Wenn nicht angegeben, verwendet die Maskierungsrichtlinie *output\$1path* als Eingaben.

*user\$1name*   
Der Name des Benutzers, dem die Maskierungsrichtlinie angefügt werden soll. Sie können nicht derselben Kombination aus Benutzer und Spalte oder Rolle und Spalte zwei Richtlinien zuordnen. Sie können eine Richtlinie einem Benutzer und eine weitere Richtlinie der Rolle des Benutzers anfügen. In diesem Fall gilt die Richtlinie mit der höheren Priorität.  
In einem einzelnen Befehl ATTACH MASKING POLICY können Sie nur entweder user\$1name, role\$1name oder PUBLIC festlegen. 

*role\$1name*   
Der Name der Rolle, der die Maskierungsrichtlinie angefügt werden soll. Sie können nicht zwei Richtlinien demselben column/role Paar zuordnen. Sie können eine Richtlinie einem Benutzer und eine weitere Richtlinie der Rolle des Benutzers anfügen. In diesem Fall gilt die Richtlinie mit der höheren Priorität.  
In einem einzelnen Befehl ATTACH MASKING POLICY können Sie nur entweder user\$1name, role\$1name oder PUBLIC festlegen. 

*PUBLIC*   
Fügt die Maskierungsrichtlinie allen Benutzern an, die auf die Tabelle zugreifen. Sie müssen anderen Maskierungsrichtlinien, die bestimmten Richtlinien column/user oder column/role Paaren zugeordnet sind, eine höhere Priorität einräumen als der Richtlinie PUBLIC, damit sie gelten.  
In einem einzelnen Befehl ATTACH MASKING POLICY können Sie nur entweder user\$1name, role\$1name oder PUBLIC festlegen. 

*priority*   
Die Priorität der Maskierungsrichtlinie. Wenn mehrere Maskierungsrichtlinien für die Abfrage eines bestimmten Benutzers gelten, gilt die Richtlinie mit der höchsten Priorität.  
Sie können derselben Spalte nicht zwei verschiedene Richtlinien mit derselben Priorität zuordnen, auch wenn die beiden Richtlinien unterschiedlichen Benutzern oder Rollen zugeordnet sind. Sie können dieselbe Richtlinie mehrmals demselben Satz von Tabellen-, Ausgabespalten-, Eingabespalten- und Prioritätsparametern zuordnen, sofern der Benutzer oder die Rolle, an die die Richtlinie angefügt wird, jedes Mal ein(e) andere(r) ist.   
Sie können auf eine Spalte keine Richtlinie anwenden, die dieselbe Priorität wie eine andere dieser Spalte angefügte Richtlinie hat, auch wenn sie für unterschiedliche Rollen bestimmt ist. Dies ist ein optionales Feld. Wenn Sie keine Priorität angeben, wird die Maskierungsrichtlinie standardmäßig mit einer Priorität von 0 angefügt.

Informationen zur Verwendung von ATTACH MASKING POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# ATTACH RLS POLICY
<a name="r_ATTACH_RLS_POLICY"></a>

Weisen Sie einem oder mehreren Benutzern oder Rollen eine RLS-Richtlinie für eine Tabelle zu.

Superuser und Benutzer oder Rollen, die die `sys:secadmin`-Rolle haben, können eine Richtlinie anfügen.

## Syntax
<a name="r_ATTACH_RLS_POLICY-synopsis"></a>

```
ATTACH RLS POLICY 
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
TO { user_name | ROLE role_name | PUBLIC } [, ...]
```

## Parameters
<a name="r_ATTACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der -Richtlinie.

database\$1name  
Der Name der Datenbank, in der die Richtlinie und die Beziehung erstellt werden. Die Richtlinie und die Relation müssen sich in derselben Datenbank befinden. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

schema\$1name  
Der Name des Schemas, zu dem die Relation gehört.

table\$1name  
Die Relation, an die die Sicherheitsrichtlinie auf Zeilenebene angefügt ist.

AN \$1 *user\$1name* \$1 ROLE *role\$1name* \$1 PUBLIC\$1 [, ...]  
Gibt an, ob die Richtlinie einem oder mehreren angegebenen Benutzern oder Rollen zugeordnet ist. 

Informationen zur Verwendung von ATTACH RLS POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Nutzungshinweise
<a name="r_ATTACH_RLS_POLICY-usage"></a>

Beachten Sie bei der Arbeit mit der Anweisung ATTACH RLS POLICY Folgendes:
+ Die angefügte Tabelle sollte alle Spalten enthalten, die in der WITH-Klausel der Anweisung zur Richtlinienerstellung aufgeführt sind.
+ Amazon Redshift RLS unterstützt das Anfügen von RLS-Richtlinien an die folgenden Objekte:
  +  Tabellen 
  +  Ansichten
  +  Ansichten mit später Bindung 
  +  Materialisierte Ansichten
+ Amazon Redshift RLS unterstützt das Anfügen von RLS-Richtlinien an die folgenden Objekte nicht:
  +  Katalogtabellen 
  +  Datenbankübergreifende Relationen 
  +  Externe Tabellen 
  +  Temporäre Tabellen 
  +  Suchtabellen für Richtlinien
  + Basistabellen für materialisierte Ansicht
+ RLS-Richtlinien, die an Superuser oder an Benutzer mit der Berechtigung `sys:secadmin` angefügt sind, werden ignoriert.

## Beispiele
<a name="r_ATTACH_RLS_POLICY-examples"></a>

Im folgenden Beispiel wird eine RLS-Richtlinie an die angegebenen Kombinationen von Tabellen und Rollen angefügt. Die RLS-Richtlinie gilt für alle Benutzer mit den Rollen `analyst` oder `dbadmin`, wenn sie auf die Tabelle tickit\$1category\$1redshift zugreifen.

```
ATTACH RLS POLICY policy_concerts ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;
```

# BEGIN
<a name="r_BEGIN"></a>

Startet eine Transaktion. Synonym mit START TRANSACTION.

Eine Transaktion ist eine einzelne, logische Arbeitseinheit, unabhängig davon, ob sie aus einem einzigen oder aus mehreren Befehlen besteht. Im Allgemeinen werden alle Befehle in einer Transaktion für einen Snapshot der Datenbank ausgeführt, dessen Startzeit durch den Wert bestimmt wird, der für den Systemkonfigurationsparameter `transaction_snapshot_begin` festgelegt ist.

Standardmäßig werden einzelne Amazon-Redshift-Operationen (Abfragen, DDL-Anweisungen, Lasten) der Datenbank automatisch übergeben. Wenn Sie ein Commit für eine Operation aussetzen möchten, bis die anschließende Aufgabe abgeschlossen ist, müssen Sie eine Transaktion mit der BEGIN-Anweisung öffnen, die erforderlichen Befehle ausführen und dann die Transaktion mit der Anweisung [COMMIT](r_COMMIT.md) oder [END](r_END.md) schließen. Wenn notwendig, können Sie die Anweisung [ROLLBACK](r_ROLLBACK.md) verwenden, um eine Transaktion abzubrechen, die gerade ausgeführt wird. Eine Ausnahme von diesem Verhalten stellt der Befehl [TRUNCATE](r_TRUNCATE.md) dar, der einen Commit für die Transaktion ausführt, in der er ausgeführt wird, und für den kein Rollback möglich ist.

## Syntax
<a name="r_BEGIN-synopsis"></a>

```
BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

Where option is

SERIALIZABLE
| READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ

Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no
operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster 
by querying the stv_db_isolation_level table.
```

## Parameters
<a name="r_BEGIN-parameters"></a>

WORK   
Optionales Schlüsselwort.

TRANSACTION   
Optionales Schlüsselwort; WORK und TRANSACTION sind Synonyme.

ISOLATION LEVEL SERIALIZABLE   
Die serialisierbare Isolierung wird standardmäßig unterstützt. Daher bleibt das Verhalten der Transaktion stets gleich, unabhängig davon, ob diese Syntax in der Anweisung enthalten ist oder nicht. Weitere Informationen finden Sie unter [Verwalten gleichzeitiger Schreiboperationen](c_Concurrent_writes.md). Es werden keine anderen Isolierungsstufen unterstützt.  
Der SQL-Standard definiert vier Stufen der Transaktionsisolierung, um folgende Ereignisse zu verhindern: *nicht korrekte Lesevorgänge* (wenn eine Transaktion Daten liest, die von einer gleichzeitigen Transaktion geschrieben werden, für die kein Commit ausgeführt wurde), *nicht wiederholbare Lesevorgänge* (wenn eine Transaktion Daten erneut liest, die sie zuvor bereits gelesen hat, und feststellt, dass die Daten durch eine andere Transaktion geändert wurden, für die seit dem ersten Lesevorgang ein Commit ausgeführt wurde) und *Phantomlesevorgänge* (wenn eine Transaktion eine Anfrage erneut ausführt, einen Satz von Zeilen zurückgibt, die eine Suchbedingung erfüllen, und dann feststellt, dass der Satz von Zeilen aufgrund einer anderen Transaktion, für die vor Kurzem ein Commit ausgeführt wurde, geändert wurde):  
+ Lesen von Daten, für die kein Commit ausgeführt wurde: Nicht korrekte Lesungen, nicht wiederholbare Lesungen und Phantomlesungen sind möglich.
+ Lesen von Daten, für die ein Commit ausgeführt wurde: Nicht wiederholbare Lesungen und Phantomlesungen sind möglich.
+ Wiederholbare Lesungen: Phantomlesungen sind möglich.
+ Serialisierbar: Verhindert nicht korrekte Lesungen, nicht wiederholbare Lesungen und Phantomlesungen.
Obwohl Sie jede der vier Isolierungsstufen für Transaktionen verwenden können, verarbeitet Amazon Redshift alle Isolierungsstufen als serialisierbar.

READ WRITE   
Erteilt der Transaktion Lese- und Schreibberechtigungen.

READ ONLY   
Erteilt der Transaktion Leseberechtigungen.

## Beispiele
<a name="r_BEGIN-examples"></a>

Im folgenden Beispiel wird ein serialisierbarer Transaktionsblock gestartet: 

```
begin;
```

Im folgenden Beispiel wird der Transaktionsblock auf der serialisierbaren Isolierungsstufe und mit Lese- und Schreibberechtigungen gestartet: 

```
begin read write;
```

# CALL
<a name="r_CALL_procedure"></a>

Führt eine gespeicherte Prozedur aus. Der CALL-Befehl muss den Namen der Prozedur und die Werte der Eingabeargumente enthalten. Zum Aufrufen einer gespeicherten Prozedur verwenden Sie die CALL-Anweisung.

**Anmerkung**  
CALL kann nicht Teil einer regulären Abfrage sein.

## Syntax
<a name="r_CALL_procedure-synopsis"></a>

```
CALL sp_name ( [ argument ] [, ...] )
```

## Parameters
<a name="r_CALL_procedure-parameters"></a>

 *sp\$1name*   
Der Name der Prozedur, die ausgeführt werden soll. 

 *argument*   
Der Wert des Eingabearguments. Dieser Parameter kann auch ein Funktionsname sein, wie z. B. `pg_last_query_id()`. Abfragen können nicht als CALL-Argumente verwendet werden. 

## Nutzungshinweise
<a name="r_CALL_procedure-usage-notes"></a>

In Amazon Redshift gespeicherte Prozeduren unterstützen verschachtelte und rekursive Aufrufe wie im Nachfolgenden beschrieben. Stellen Sie außerdem sicher, dass Ihre Treiberunterstützung up-to-date, ebenfalls im Folgenden beschrieben, unterstützt wird.

**Topics**
+ [Verschachtelte Aufrufe](#r_CALL_procedure-nested-calls)
+ [Treiberunterstützung](#r_CALL_procedure-driver-support)

### Verschachtelte Aufrufe
<a name="r_CALL_procedure-nested-calls"></a>

In Amazon Redshift gespeicherte Prozeduren unterstützen verschachtelte und rekursive Aufrufe. Die zulässige Höchstanzahl an Verschachtelungsebenen beträgt 16. Verschachtelte Aufrufe können Geschäftslogik in kleineren Prozeduren verkapseln, die von mehreren Aufrufern geteilt werden können. 

Wenn Sie eine verschachtelte Prozedur aufrufen, die über Ausgabeparameter verfügt, muss die innere Prozedur INOUT-Argumente definieren. In diesem Fall wird die innere Prozedur in einer nicht konstanten Variable übergeben. OUT-Argumente sind nicht zulässig. Dies ist darauf zurückzuführen, dass eine Variable zum Aufnehmen der Ausgabe des inneren Aufrufs erforderlich ist.

Die Beziehung zwischen inneren und äußeren Prozeduren wird in der Spalte `from_sp_call` von [SVL\$1STORED\$1PROC\$1CALL](r_SVL_STORED_PROC_CALL.md) protokolliert. 

Das folgende Beispiel zeigt die Übergabe von Variablen an einen verschachtelten Prozeduraufruf über INOUT-Argumente.

```
CREATE OR REPLACE PROCEDURE inner_proc(INOUT a int, b int, INOUT c int) LANGUAGE plpgsql
AS $$
BEGIN
  a := b * a;
  c := b * c;
END;
$$;

CREATE OR REPLACE PROCEDURE outer_proc(multiplier int) LANGUAGE plpgsql
AS $$
DECLARE
  x int := 3;
  y int := 4;
BEGIN
  DROP TABLE IF EXISTS test_tbl;
  CREATE TEMP TABLE test_tbl(a int, b varchar(256));
  CALL inner_proc(x, multiplier, y);
  insert into test_tbl values (x, y::varchar);
END;
$$;

CALL outer_proc(5);

SELECT * from test_tbl;
 a  | b
----+----
 15 | 20
(1 row)
```

### Treiberunterstützung
<a name="r_CALL_procedure-driver-support"></a>

Wir empfehlen die Aktualisierung Ihrer Java Database Connectivity (JDBC)- und Open Database Connectivity (ODBC)-Treiber auf die neueste Version, die Unterstützung für in Amazon Redshift gespeicherte Prozeduren bietet. 

Wenn Ihr Clienttool Treiber-API-Operationen verwendet, die die CALL-Anweisungen an den Server übergeben, können Sie unter Umständen Ihren vorhandenen Treiber verwenden. Ausgabeparameter werden (sofern vorhanden) als Ergebnissatz mit einer Zeile zurückgegeben. 

Die neusten Versionen der Amazon Redshift JDBC- und ODBC-Treiber bieten Metadatenunterstützung für die Erkennung gespeicherter Prozeduren. Außerdem bieten sie `CallableStatement`-Unterstützung für individuelle Java-Anwendungen. Weitere Informationen zu Treibern finden Sie unter [Herstellen von Verbindungen mit Amazon-Redshift-Clustern mithilfe von SQL-Client-Tools](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-to-cluster.html) im *Amazon-Redshift-Verwaltungshandbuch*. 

Die folgenden Beispiele zeigen, wie Sie unterschiedliche API-Operationen des JDBC-Treibers für Aufrufe gespeicherter Prozeduren verwenden können.

```
void statement_example(Connection conn) throws SQLException {
  statement.execute("CALL sp_statement_example(1)");
}

void prepared_statement_example(Connection conn) throws SQLException {
  String sql = "CALL sp_prepared_statement_example(42, 84)";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.execute();
}

void callable_statement_example(Connection conn) throws SQLException {
  CallableStatement cstmt = conn.prepareCall("CALL sp_create_out_in(?,?)");
  cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
  cstmt.setInt(2, 42);
  cstmt.executeQuery();
  Integer out_value = cstmt.getInt(1);
}
```

## Beispiele
<a name="r_CALL_procedure-examples"></a>

Das folgende Beispiel ruft den Prozedurnamen auf `test_spl`.

```
call test_sp1(3,'book');
INFO:  Table "tmp_tbl" does not exist and will be skipped
INFO:  min_val = 3, f2 = book
```

Das folgende Beispiel ruft den Prozedurnamen auf `test_spl2`.

```
call test_sp2(2,'2019');

         f2          | column2
---------------------+---------
 2019+2019+2019+2019 | 2
(1 row)
```

# CANCEL
<a name="r_CANCEL"></a>

Bricht eine Datenbankabfrage ab, die zurzeit ausgeführt wird.

Der Befehl CANCEL erfordert die Prozess-ID oder Sitzungs-ID der ausgeführten Abfrage und zeigt eine Bestätigungsmeldung an, um zu bestätigen, dass die Abfrage abgebrochen wurde.

## Erforderliche Berechtigungen
<a name="r_CANCEL-privileges"></a>

Für CANCEL sind folgende Berechtigungen erforderlich:
+ Superuser bricht seine eigene Abfrage ab
+ Superuser bricht die Abfrage eines Benutzers ab
+ Benutzer mit der Berechtigung CANCEL bricht die Abfrage eines Benutzers ab
+ Benutzer storniert seine eigene Abfrage

## Syntax
<a name="r_CANCEL-synopsis"></a>

```
CANCEL process_id [ 'message' ]
```

## Parameters
<a name="r_CANCEL-parameters"></a>

 *process\$1id*   
Um eine Abfrage abzubrechen, die in einem Amazon-Redshift-Cluster ausgeführt wird, verwenden Sie die `pid` (Prozess-ID) aus [STV\$1RECENTS](r_STV_RECENTS.md), die der Abfrage entspricht, die Sie abbrechen möchten.  
Um eine Abfrage abzubrechen, die in einer Arbeitsgruppe in Amazon Redshift Serverless ausgeführt wird, verwenden Sie die `session_id` aus [SYS\$1QUERY\$1HISTORY](SYS_QUERY_HISTORY.md), die der Abfrage entspricht, die Sie abbrechen möchten.

'*message*'   
Eine optionale Bestätigungsmeldung, die angezeigt wird, wenn der Abbruch der Abfrage abgeschlossen ist. Wenn Sie keine Meldung angeben, zeigt Amazon Redshift die Standardmeldung als Verifizierung an. Sie müssen die Meldung in einfache Anführungszeichen setzen.

## Nutzungshinweise
<a name="r_CANCEL-usage-notes"></a>

Sie können eine Abfrage nicht durch Angabe einer *Abfrage-ID* abbrechen. Sie müssen die *Prozess-ID* (PID) oder die *Sitzungs-ID* der Abfrage angeben. Sie können nur Aufträge abbrechen, die zurzeit von Ihrem Benutzer ausgeführt werden. Superuser können alle Abfragen abbrechen.

Wenn Abfragen in mehreren Sitzungen dieselbe Tabelle sperren, können Sie die Funktion [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) verwenden, um eine der Sitzungen zu beenden. Dabei werden alle Transaktionen, die zurzeit in der beendeten Sitzung ausgeführt werden, gezwungen, alle Sperren aufzuheben und für die Transaktionen ein Rollback auszuführen. Führen Sie eine Abfrage für die Systemtabelle [STV\$1LOCKS](r_STV_LOCKS.md) aus, um die zurzeit vorhandenen Sperren anzuzeigen. 

Im Anschluss an bestimmte interne Ereignisse startet Amazon Redshift möglicherweise eine aktive Sitzung neu und weist eine neue PID zu. Wenn die PID geändert wurde, erhalten Sie möglicherweise die folgende Fehlermeldung.

```
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
```

Um die neue PID zu suchen, führen Sie eine Abfrage für die Systemtabelle [STL\$1RESTARTED\$1SESSIONS](r_STL_RESTARTED_SESSIONS.md) aus und filtern nach der Tabelle `oldpid`.

```
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
```

## Beispiele
<a name="r_CANCEL-examples"></a>

Um eine Abfrage abzubrechen, die aktuell in einem Amazon-Redshift-Cluster ausgeführt wird, rufen Sie zuerst die Prozess-ID für die Abfrage ab, die Sie abbrechen möchten. Geben Sie den folgenden Befehl ein, um den Prozess IDs für alle derzeit laufenden Abfragen zu ermitteln: 

```
select pid, starttime, duration,
trim(user_name) as user,
trim (query) as querytxt
from stv_recents
where status = 'Running';

pid |         starttime          | duration |   user   |    querytxt
-----+----------------------------+----------+----------+-----------------
802 | 2008-10-14 09:19:03.550885 |      132 | dwuser | select
venuename from venue where venuestate='FL', where venuecity not in
('Miami' , 'Orlando');
834 | 2008-10-14 08:33:49.473585 |  1250414 | dwuser | select *
from listing;
964 | 2008-10-14 08:30:43.290527 |   326179 | dwuser | select
sellerid from sales where qtysold in (8, 10);
```

Überprüfen Sie den Text der Abfrage, um festzustellen, welche Prozess-ID (POD) der Abfrage entspricht, die Sie abbrechen möchten.

Geben Sie den folgenden Befehl ein, um PID 802 zu verwenden und diese Abfrage abzubrechen: 

```
cancel 802;
```

Die Sitzung, in der die Abfrage ausgeführt wurde, zeigt die folgende Meldung an: 

```
ERROR:  Query (168) cancelled on user's request
```

`168` ist die Abfrage-ID (nicht die Prozess-ID, die für den Abbruch der Abfrage verwendet wurde).

Alternativ können Sie eine benutzerdefinierte Bestätigungsmeldung angeben, die statt der Standardmeldung angezeigt wird. Um eine benutzerdefinierte Meldung anzugeben, setzen Sie die Meldung am Ende des Befehls CANCEL (ABBRECHEN) in Anführungszeichen: 

```
cancel 802 'Long-running query';
```

Die Sitzung, in der die Abfrage ausgeführt wurde, zeigt die folgende Meldung an: 

```
ERROR:  Long-running query
```

# CLOSE
<a name="close"></a>

(Optional) Schließt alle freien Ressourcen, die mit einem offenen Cursor verbunden sind. [COMMIT](r_COMMIT.md), [END](r_END.md) und [ROLLBACK](r_ROLLBACK.md) schließen den Cursor automatisch, so dass es nicht erforderlich ist, den CLOSE-Befehl zu verwenden, um den Cursor explizit zu schließen. 

Weitere Informationen finden Sie unter [DECLARE](declare.md), [FETCH](fetch.md). 

## Syntax
<a name="close-synopsis"></a>

```
CLOSE cursor
```

## Parameters
<a name="close-parameters"></a>

*cursor*   
Der Name des Cursors, der geschlossen werden soll. 

## Beispiel für CLOSE
<a name="close-example"></a>

Mit den folgenden Befehlen werden der Cursor geschlossen und ein Commit ausgeführt, wodurch die Transaktion beendet wird:

```
close movie_cursor;
commit;
```

# COMMENT
<a name="r_COMMENT"></a>

Erstellt oder ändert einen Kommentar zu einem Datenbankobjekt.

## Syntax
<a name="r_COMMENT-synopsis"></a>

```
COMMENT ON
{
TABLE object_name |
COLUMN object_name.column_name |
CONSTRAINT constraint_name ON table_name |
DATABASE object_name |
VIEW object_name
}
IS 'text' | NULL
```

## Parameters
<a name="r_COMMENT-parameters"></a>

 *object\$1name*   
Der Name des Datenbankobjekts, das kommentiert wird. Sie können den folgenden Objekten Kommentare hinzufügen:  
+ TABLE
+ COLUMN (akzeptiert auch *column\$1name*).
+ CONSTRAINT (akzeptiert auch *constraint\$1name* und *table\$1name*).
+ DATABASE
+ VIEW
+ SCHEMA

IS '*text*' \$1 NULL  
Der Kommentartext, den Sie für das angegebene Objekt hinzufügen oder ersetzen möchten. Die *Text*-Zeichenfolge hat den Datentyp TEXT. Sie müssen den Kommentar in einfache Anführungszeichen einschließen. Setzen Sie den Wert auf NULL, um den Kommentartext zu entfernen.

 *column\$1name*   
Der Name der Spalte, die kommentiert wird. Parameter von COLUMN. Folgt einer Tabelle, die in angegeben ist `object_name`.

 *constraint\$1name*   
Der Name der Einschränkung, die kommentiert wird. Parameter von CONSTRAINT.

 *table\$1name*   
Der Name einer Tabelle, die die Einschränkung enthält. Parameter von CONSTRAINT.

## Nutzungshinweise
<a name="r_COMMENT-usage-notes"></a>

Sie müssen der Besitzer eines Datenbankobjekts sein, um einen Kommentar hinzufügen oder aktualisieren zu können.

Kommentare zu Datenbanken können nur auf die aktuelle Datenbank angewendet werden. Es wird eine Warnmeldung angezeigt, wenn Sie versuchen, eine andere Datenbank zu kommentieren. Dieselbe Warnung wird für Kommentare zu Datenbanken angezeigt, die nicht vorhanden sind.

Kommentare zu externen Tabellen, externen Spalten und Spalten von spätbindenden Ansichten werden nicht unterstützt.

## Beispiele
<a name="r_COMMENT-example"></a>

Im folgenden Beispiel wird der SALES-Tabelle ein neuer Kommentar hinzugefügt. 

```
COMMENT ON TABLE sales IS 'This table stores tickets sales data';
```

Im folgenden Beispiel wird der Kommentar zur SALES-Tabelle angezeigt. 

```
select obj_description('public.sales'::regclass);

obj_description
-------------------------------------
This table stores tickets sales data
```

Im folgenden Beispiel wird aus der SALES-Tabelle ein Kommentar entfernt. 

```
COMMENT ON TABLE sales IS NULL;
```

Im folgenden Beispiel wird der EVENTID-Spalte der SALES-Tabelle ein neuer Kommentar hinzugefügt. 

```
COMMENT ON COLUMN sales.eventid IS 'Foreign-key reference to the EVENT table.';
```

Im folgenden Beispiel wird der Kommentar zur EVENTID-Spalte (Spalte 5) der SALES-Tabelle angezeigt. 

```
select col_description( 'public.sales'::regclass, 5::integer );

col_description
-----------------------------------------
Foreign-key reference to the EVENT table.
```

Im folgenden Beispiel wird der Tabelle EVENT ein beschreibender Kommentar hinzugefügt. 

```
comment on table event is 'Contains listings of individual events.';
```

Zum Anzeigen von Kommentaren führen Sie eine Abfrage für den PG\$1DESCRIPTION-Systemkatalog aus. Das folgende Beispiel gibt die Beschreibung für die EVENT-Tabelle zurück.

```
select * from pg_catalog.pg_description
where objoid =
(select oid from pg_class where relname = 'event'
and relnamespace =
(select oid from pg_catalog.pg_namespace where nspname = 'public') );

objoid | classoid | objsubid | description
-------+----------+----------+----------------------------------------
116658 |     1259 |        0 | Contains listings of individual events.
```

# COMMIT
<a name="r_COMMIT"></a>

Führt einen Commit der aktuellen Transaktion an die Datenbank aus. Durch diesen Befehl werden die Datenbankupdates durch die Transaktion permanent.

## Syntax
<a name="r_COMMIT-synopsis"></a>

```
COMMIT [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_COMMIT-parameters"></a>

WORK  
Optionales Schlüsselwort. Dieses Schlüsselwort wird in einer gespeicherten Prozedur nicht unterstützt. 

TRANSACTION  
Optionales Schlüsselwort. WORK und TRANSACTION sind Synonyme. Beide werden in einer gespeicherten Prozedur nicht unterstützt. 

Informationen zur Verwendung von COMMIT innerhalb einer gespeicherten Prozedur finden Sie unter [Verwalten von Transaktionen](stored-procedure-transaction-management.md). 

## Beispiele
<a name="r_COMMIT-examples"></a>

In jedem der folgenden Beispiele wird ein Commit der aktuellen Transaktion an die Datenbank ausgeführt:

```
commit;
```

```
commit work;
```

```
commit transaction;
```

# COPY
<a name="r_COPY"></a>


|  | 
| --- |
| Die clientseitige Verschlüsselung für die Befehle COPY und UNLOAD steht Neukunden ab dem 30. April 2025 nicht mehr zur Verfügung. Wenn Sie in den 12 Monaten vor dem 30. April 2025 die clientseitige Verschlüsselung für die Befehle COPY und UNLOAD verwendet haben, können Sie die clientseitige Verschlüsselung für die Befehle COPY oder UNLOAD bis zum 30. April 2026 weiter verwenden. Nach dem 30. April 2026 können Sie die clientseitige Verschlüsselung für COPY und UNLOAD nicht mehr verwenden. Wir empfehlen, so schnell wie möglich zur serverseitigen Verschlüsselung für COPY und UNLOAD zu wechseln. Wenn Sie die serverseitige Verschlüsselung für COPY und UNLOAD bereits verwenden, ändert sich nichts und Sie können sie weiterhin verwenden, ohne Ihre Abfragen zu ändern. Weitere Informationen zur Verschlüsselung für COPY und UNLOAD finden Sie unten im Abschnitt zum Parameter ENCRYPTED. | 

Lädt Daten aus Datendateien oder aus einer Amazon-DynamoDB-Tabelle in eine Tabelle. Die Dateien können sich in einem Amazon-Simple-Storage-Service(Amazon S3)-Bucket, einem Amazon-EMR-Cluster oder auf einem Remote-Host befinden, auf den über eine Secure-Shell(SSH)-Verbindung zugegriffen wird.

**Anmerkung**  
Externe Tabellen von Amazon Redshift Spectrum sind schreibgeschützt. Sie können keinen COPY-Vorgang zu einer externen Tabelle ausführen.

Der COPY-Befehl fügt die Eingabedaten als zusätzliche Zeilen an die Tabelle an.

Die maximale Größe einer einzelnen Eingabezeile aus einer beliebigen Quelle beträgt 4 MB.

**Topics**
+ [Erforderliche Berechtigungen](#r_COPY-permissions)
+ [COPY-Syntax](#r_COPY-syntax)
+ [Erforderliche Parameter](#r_COPY-syntax-required-parameters)
+ [Optionale Parameter](#r_COPY-syntax-overview-optional-parameters)
+ [Nutzungshinweise und zusätzliche Ressourcen für den Befehl COPY](#r_COPY-using-the-copy-command)
+ [Befehlsbeispiele](#r_COPY-using-the-copy-command-examples)
+ [COPY JOB](r_COPY-JOB.md)
+ [Mit SCHABLONE KOPIEREN](r_COPY-WITH-TEMPLATE.md)
+ [COPY-Parameterreferenz](r_COPY-parameters.md)
+ [Nutzungshinweise](r_COPY_usage_notes.md)
+ [Beispiele für COPY](r_COPY_command_examples.md)

## Erforderliche Berechtigungen
<a name="r_COPY-permissions"></a>

Um den COPY-Befehl verwenden zu können, benötigen Sie das [INSERT](r_GRANT.md#grant-insert)-Recht für die Amazon-Redshift-Tabelle.

## COPY-Syntax
<a name="r_COPY-syntax"></a>

```
COPY table-name 
[ column-list ]
FROM data_source
authorization
[ [ FORMAT ] [ AS ] data_format ] 
[ parameter [ argument ] [, ... ] ]
```

Sie können COPY-Operationen mit nur drei Parametern ausführen: Tabellenname, Datenquelle und Autorisierung für den Zugriff auf die Daten. 

Amazon Redshift erweitert die Funktionalität des COPY-Befehls, damit Sie Daten in verschiedenen Datenformaten aus mehreren Datenquellen laden, den Zugriff auf das Laden von Daten steuern, Datentransformierungen verwalten und die Ladeoperation verwalten können. 

In den folgenden Abschnitten werden die erforderlichen Parameter für den COPY-Befehl vorgestellt und die optionalen Parameter nach Funktion gruppiert. Dazu werden die einzelnen Parameter beschrieben und es wird erläutert, wie die verschiedenen Optionen zusammenwirken. Sie können auch anhand der alphabetischen Liste der Parameter direkt zur Parameterbeschreibung wechseln. 

## Erforderliche Parameter
<a name="r_COPY-syntax-required-parameters"></a>

Der COPY-Befehl erfordert drei Elemente: 
+ [Table Name](#r_COPY-syntax-overview-table-name)
+ [Data Source](#r_COPY-syntax-overview-data-source)
+ [Authorization](#r_COPY-syntax-overview-credentials)

Der einfachste COPY-Befehl verwendet das folgende Format. 

```
COPY table-name 
FROM data-source
authorization;
```

Im folgenden Beispiel wird eine Tabelle namens CATDEMO erstellt. Anschließend wird die Tabelle mit Stichprobendaten aus einer Datendatei in Amazon S3 namens geladen `category_pipe.txt`. 

```
create table catdemo(catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50));
```

Im folgenden Beispiel ist die Datenquelle für den COPY-Befehl eine Datendatei namens `category_pipe.txt` im Ordner `tickit` eines Amazon-S3-Buckets namens `redshift-downloads`. Der COPY-Befehl ist autorisiert, über eine AWS Identity and Access Management (IAM-) Rolle auf den Amazon S3 S3-Bucket zuzugreifen. Wenn Ihr Cluster bereits eine IAM-Rolle mit Berechtigung für den Zugriff auf Amazon S3 besitzt, können Sie den Amazon-Ressourcennamen (ARN) Ihrer Rolle im folgenden COPY-Befehl einsetzen und diesen ausführen.

```
copy catdemo
from 's3://redshift-downloads/tickit/category_pipe.txt'
iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>'
region 'us-east-1';
```

Vollständige Anweisungen zur Verwendung von COPY-Befehlen zum Laden von Beispieldaten, einschließlich Anweisungen zum Laden von Daten aus anderen AWS Regionen, finden Sie unter [Load Sample Data from Amazon S3](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) im Amazon Redshift Getting Started Guide.

*table-name*  <a name="r_COPY-syntax-overview-table-name"></a>
Der Name der Zieltabelle für den COPY-Befehl. Die Tabelle muss in der Datenbank bereits vorhanden sein. Die Tabelle kann temporär oder persistent sein. Der COPY-Befehl fügt die neuen Eingabedaten den vorhandenen Zeilen in der Tabelle an.

FROM *data-source*  <a name="r_COPY-syntax-overview-data-source"></a>
Der Speicherort der Quelldaten, die in die Zieltabelle geladen werden sollen. Bei manchen Datenquellen kann eine Manifestdatei angegeben werden.   
Das am häufigsten verwendete Daten-Repository sind Amazon-S3-Buckets. Außerdem können Sie Daten aus Datendateien laden, die sich in einem Amazon-EMR-Cluster, einer Amazon-EC2-Instance oder auf einem Remote-Host befinden, auf den Ihr Cluster über eine SSH-Verbindung zugreifen kann. Sie können Daten auch direkt aus einer DynamoDB-Tabelle laden.   
+ [COPY aus Amazon S3](copy-parameters-data-source-s3.md)
+ [COPY aus Amazon EMR](copy-parameters-data-source-emr.md) 
+ [COPY von Remote-Hosts (SSH)](copy-parameters-data-source-ssh.md)
+ [COPY aus Amazon DynamoDB](copy-parameters-data-source-dynamodb.md)

Autorisierung  <a name="r_COPY-syntax-overview-credentials"></a>
Eine Klausel, die die Methode angibt, die Ihr Cluster für die Authentifizierung und Autorisierung für den Zugriff auf andere AWS Ressourcen verwendet. Der COPY-Befehl benötigt eine Autorisierung, um auf Daten in einer anderen AWS Ressource zuzugreifen, einschließlich in Amazon S3, Amazon EMR, Amazon DynamoDB und Amazon EC2. Sie können diese Autorisierung bereitstellen, indem Sie eine IAM-Rolle referenzieren, die Ihrem Cluster angefügt ist, oder indem Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel für einen IAM-Benutzer bereitstellen.   
+ [Autorisierungsparameter](copy-parameters-authorization.md) 
+ [Rollenbasierte Zugriffskontrolle](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based) 
+ [Schlüsselbasierte Zugriffssteuerung](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based) 

## Optionale Parameter
<a name="r_COPY-syntax-overview-optional-parameters"></a>

Sie können optional angeben, wie COPY den Spalten in der Zieltabelle Felddaten zuweist, Quelldatenattribute definieren, damit der COPY-Befehl die Quelldaten korrekt lesen und analysieren kann, und festlegen, welche Operation der COPY-Befehl während des Ladevorgangs ausführt. 
+ [Optionen für das Mapping von Spalten](copy-parameters-column-mapping.md)
+ [Datenformatparameter](#r_COPY-syntax-overview-data-format)
+ [Datenkonvertierungsparameter](#r_COPY-syntax-overview-data-conversion)
+ [Datenladeoperationen](#r_COPY-syntax-overview-data-load)

### Mapping von Spalten
<a name="r_COPY-syntax-overview-column-mapping"></a>

Standardmäßig fügt COPY Feldwerte in derselben Reihenfolge in die Spalten der Zieltabelle ein, die die Felder in den Datendateien haben. Wenn die standardmäßige Spaltenreihenfolge nicht funktioniert, können Sie eine Spaltenliste angeben oder JSONPath Ausdrücke verwenden, um Quelldatenfelder den Zielspalten zuzuordnen. 
+ [Column List](copy-parameters-column-mapping.md#copy-column-list)
+ [JSONPaths File](copy-parameters-column-mapping.md#copy-column-mapping-jsonpaths)

### Datenformatparameter
<a name="r_COPY-syntax-overview-data-format"></a>

Sie können Daten aus Textdateien in einem Format mit fester Breite, in einem Format mit Trennzeichen, in einem durch Komma getrennten Format (CSV) oder im JSON-Format laden. Sie können Daten auch aus Avro-Dateien laden.

Standardmäßig geht der COPY-Befehl davon aus, dass sich die Quelldaten in UTF-8-Textdateien mit Trennzeichen befinden. Das Standardtrennzeichen ist der senkrechte Strich (\$1). Wenn sich die Quelldaten in einem anderen Format befinden, verwenden Sie die folgenden Parameter, um das Datenformat anzugeben.
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter) 
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth) 
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile) 
+ [AVRO](copy-parameters-data-format.md#copy-avro) 
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json) 
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [GZIP](copy-parameters-file-compression.md#copy-gzip) 
+ [LZOP](copy-parameters-file-compression.md#copy-lzop) 
+ [PARQUET](copy-parameters-data-format.md#copy-parquet) 
+ [ORC](copy-parameters-data-format.md#copy-orc) 
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd) 

### Datenkonvertierungsparameter
<a name="r_COPY-syntax-overview-data-conversion"></a>

Wenn COPY die Tabelle lädt, versucht der Befehl implizit, die Zeichenfolgen in den Quelldaten in den Datentyp der Zielspalte zu konvertieren. Wenn Sie eine Konvertierung angeben müssen, die sich vom Standardverhalten unterscheidet, oder wenn die Standardkonvertierung zu Fehlern führt, können Sie Datenkonvertierungen verwalten, indem Sie die folgenden Parameter angeben.
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) 
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding) 
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape) 
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) 
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord) 
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines) 
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader) 
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as) 
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes) 
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 

### Datenladeoperationen
<a name="r_COPY-syntax-overview-data-load"></a>

Verwalten Sie das Standardverhalten der Ladeoperation, um Fehler zu beheben oder die Ladezeiten zu reduzieren, indem Sie die folgenden Parameter angeben. 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows) 
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate) 
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors) 
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror) 
+ [NOLOAD](copy-parameters-data-load.md#copy-noload) 
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate) 

## Nutzungshinweise und zusätzliche Ressourcen für den Befehl COPY
<a name="r_COPY-using-the-copy-command"></a>

Weitere Informationen zur Verwendung des COPY-Befehls finden Sie in den folgenden Themen: 
+ [Nutzungshinweise](r_COPY_usage_notes.md)
+ [Tutorial: So laden Sie Daten aus Amazon S3](tutorial-loading-data.md)
+ [Bewährte Methoden für Amazon Redshift zum Laden von Daten](c_loading-data-best-practices.md)
+ [Laden von Tabellen mit dem Befehl COPY](t_Loading_tables_with_the_COPY_command.md)
  + [So laden Sie Daten aus Amazon S3](t_Loading-data-from-S3.md)
  + [So laden Sie Daten aus Amazon EMR:](loading-data-from-emr.md)
  + [Laden von Daten aus Remote-Hosts](loading-data-from-remote-hosts.md) 
  + [Laden von Daten aus einer Amazon-DynamoDB-Tabelle](t_Loading-data-from-dynamodb.md)
+ [Fehlerbehebung bei Datenladevorgängen](t_Troubleshooting_load_errors.md)

## Befehlsbeispiele
<a name="r_COPY-using-the-copy-command-examples"></a>

Weitere Beispiele, die zeigen, wie aus verschiedenen Quellen, in unterschiedlichen Formaten und mit unterschiedlichen COPY-Optionen KOPIERT wird, finden Sie unter [Beispiele für COPY](r_COPY_command_examples.md).

# COPY JOB
<a name="r_COPY-JOB"></a>

Weitere Informationen zur Verwendung dieses Befehls finden Sie unter [Erstellen einer S3-Ereignisintegration, um Dateien automatisch aus Amazon-S3-Buckets zu kopieren](loading-data-copy-job.md).

Verwaltet COPY-Befehle, die Daten in eine Tabelle laden. Der Befehl COPY JOB ist eine Erweiterung des COPY-Befehls, der das Laden von Daten aus Amazon-S3-Buckets automatisiert. Wenn Sie einen COPY JOB erstellen, erkennt es Amazon Redshift, wenn neue Amazon-S3-Dateien in einem bestimmten Pfad erstellt werden, und lädt diese dann automatisch, ohne dass Sie eine Maßnahme ergreifen müssen. Beim Laden der Daten werden dieselben Parameter wie im ursprünglichen COPY-Befehl verwendet. Amazon Redshift verfolgt die geladenen Dateien (basierend auf dem Dateinamen), um sicherzustellen, dass sie nur einmal geladen werden.

**Anmerkung**  
Informationen zum COPY-Befehl, seiner Syntax, seinen Parametern und Berechtigungen, finden Sie unter [COPY](r_COPY.md).

## Erforderliche Berechtigung
<a name="r_COPY-JOB-privileges"></a>

Um den Befehl COPY JOB verwenden zu können, benötigen Sie zusätzlich zu allen für die Verwendung von COPY erforderlichen Berechtigungen eine der folgenden Berechtigungen:
+ Superuser
+  Alle der folgenden Berechtigungen: 
  +  Die relevante bereichsbezogene Berechtigung CREATE, ALTER oder DROP für COPY JOBS in der Datenbank, zu der Sie COPY ausführen möchten. 
  +  Die Berechtigung USAGE für das Schema, zu der Sie COPY ausführen möchten, oder die bereichsbezogene Berechtigung USAGE für Schemas in der Datenbank, zu der Sie COPY ausführen möchten. 
  +  Die Berechtigung INSERT für die Tabelle, zu der Sie COPY ausführen möchten, oder die bereichsbezogene Berechtigung INSERT für Tabellen im Schema oder in der Datenbank, zu der Sie COPY ausführen möchten. 

Die mit dem COPY-Befehl angegebene IAM-Rolle muss über die Berechtigung zum Zugriff auf die zu ladenden Daten verfügen. Weitere Informationen finden Sie unter [IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions).

## Syntax
<a name="r_COPY-JOB-syntax"></a>

Erstellen eines Kopierauftrags. Die Parameter des COPY-Befehls werden zusammen mit dem Kopierauftrag gespeichert.

Sie können COPY JOB CREATE nicht innerhalb eines Transaktionsblocks ausführen.

```
COPY copy-command JOB CREATE job-name
[AUTO ON | OFF]
```

Ändern der Konfiguration eines Kopierauftrags.

```
COPY JOB ALTER job-name
[AUTO ON | OFF]
```

Ausführen eines Kopierauftrags. Es werden die gespeicherten Parameter des COPY-Befehls verwendet.

```
COPY JOB RUN job-name
```

Auflisten aller Kopieraufträge.

```
COPY JOB LIST
```

Anzeigen der Details zu dem Kopierauftrag.

```
COPY JOB SHOW job-name
```

Löschen eines Kopierauftrags.

Sie können COPY JOB DROP nicht innerhalb eines Transaktionsblocks ausführen.

```
COPY JOB DROP job-name
```

## Parameters
<a name="r_COPY-JOB-parameters"></a>

*copy-command*  
Ein COPY-Befehl, der Daten aus Amazon S3 in Amazon Redshift lädt. Die Klausel enthält COPY-Parameter, die den Amazon-S3-Bucket, die Zieltabelle, die IAM-Rolle und andere Parameter definieren, die beim Laden von Daten verwendet werden. Es werden alle Parameter eines COPY-Befehls zum Laden von Amazon-S3-Daten unterstützt, mit folgenden Ausnahmen:  
+ Der COPY JOB nimmt keine bereits vorhandenen Dateien in dem Ordner auf, auf den der COPY-Befehl verweist. Nur Dateien, die nach dem Erstellungszeitstempel von COPY JOB erstellt wurden, werden aufgenommen.
+ Sie können einen COPY-Befehl nicht mit den Optionen MAXERROR oder IGNOREALLERRORS angeben.
+ Sie können keine Manifestdatei angeben. COPY JOB erfordert einen festgelegten Amazon-S3-Speicherort, um diesen auf neu erstellte Dateien überwachen zu können.
+ Sie können einen COPY-Befehl nicht mit Autorisierungstypen wie Zugriffsschlüsseln und geheimen Schlüsseln angeben. Es werden nur COPY-Befehle unterstützt, die den Parameter `IAM_ROLE` für die Autorisierung verwenden. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md).
+ Die dem Cluster zugeordnete standardmäßige IAM-Rolle wird von COPY JOB nicht unterstützt. Sie müssen die `IAM_ROLE` im COPY-Befehl angeben. 
Weitere Informationen finden Sie unter [COPY aus Amazon S3](copy-parameters-data-source-s3.md).

*job-name*  
Der Name des Auftrags, der verwendet wird, um auf den COPY-Auftrag zu verweisen. Der *job-name* darf keinen Bindestrich (‐) enthalten.

 [AUTO ON / OFF]   
Klausel, die angibt, ob Amazon-S3-Daten automatisch in Amazon-Redshift-Tabellen geladen werden.  
+ Bei Angabe von `ON` überwacht Amazon Redshift den Amazon-S3-Quellpfad auf neu erstellte Dateien. Falls welche gefunden werden, wird ein COPY-Befehl mit den COPY-Parametern aus der Auftragsdefinition ausgeführt. Dies ist die Standardeinstellung.
+ Bei Angabe von `OFF` führt Amazon Redshift den COPY JOB nicht automatisch aus.

## Nutzungshinweise
<a name="r_COPY-JOB-usage-notes"></a>

Die Optionen des COPY-Befehls werden erst zur Laufzeit validiert. Eine ungültige `IAM_ROLE` oder eine Amazon-S3-Datenquelle führt beispielsweise zu Laufzeitfehlern, wenn COPY JOB gestartet wird.

Wenn der Cluster angehalten ist, werden COPY JOBS nicht ausgeführt.

Informationen zur Abfrage von geladenen COPY-Befehlsdateien sowie zu Ladefehlern finden Sie unter [STL\$1LOAD\$1COMMITS](r_STL_LOAD_COMMITS.md), [STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md), [STL\$1LOADERROR\$1DETAIL](r_STL_LOADERROR_DETAIL.md). Weitere Informationen finden Sie unter [Überprüfung, ob die Daten korrekt geladen wurden](verifying-that-data-loaded-correctly.md).

COPY JOBS werden auf Zero-ETL-Datenbanken nicht unterstützt, da sie im schreibgeschützten Modus arbeiten.

## Beispiele
<a name="r_COPY-JOB-examples"></a>

Im folgenden Beispiel wird demonstriert, wie Sie einen COPY JOB erstellen, um Daten aus einem Amazon-S3-Bucket zu laden. 

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' 
JOB CREATE my_copy_job_name
AUTO ON;
```

# Mit SCHABLONE KOPIEREN
<a name="r_COPY-WITH-TEMPLATE"></a>

Sie können Redshift-Vorlagen mit COPY-Befehlen verwenden, um die Befehlssyntax zu vereinfachen und die Konsistenz zwischen Datenladevorgängen sicherzustellen. Anstatt dieselben Formatierungsparameter wiederholt anzugeben, definieren Sie sie einmal in einer Vorlage und verweisen in Ihren COPY-Befehlen auf die Vorlage. Wenn Sie eine Vorlage verwenden, kombiniert der Befehl COPY die Parameter aus der Vorlage mit allen direkt im Befehl angegebenen Parametern. Wenn derselbe Parameter sowohl in der Vorlage als auch im Befehl vorkommt, hat der Befehlsparameter Vorrang. Weitere Informationen finden Sie unter [VORLAGE ERSTELLEN](r_CREATE_TEMPLATE.md). 

Vorlagen für den Befehl COPY können wie folgt erstellt werden:
+ [Datenformatparameter](copy-parameters-data-format.md)
+ [Dateikomprimierungsparameter](copy-parameters-file-compression.md)
+ [Datenkonvertierungsparameter](copy-parameters-data-conversion.md)
+ [Datenladeoperationen](copy-parameters-data-load.md)

Eine vollständige Liste der unterstützten Parameter finden Sie unter [COPY](r_COPY.md) Befehl.

## Erforderliche Berechtigung
<a name="r_COPY-WITH-TEMPLATE-privileges"></a>

Um eine Vorlage in einem COPY-Befehl zu verwenden, benötigen Sie:
+ Alle erforderlichen Berechtigungen zur Ausführung des COPY-Befehls (siehe[Erforderliche Berechtigungen](r_COPY.md#r_COPY-permissions))
+ Eine der folgenden Vorlagenberechtigungen:
  + Superuser-Rechte
  + USAGE-Privileg für die Vorlage und USAGE-Privileg für das Schema, das die Vorlage enthält

## Syntax
<a name="r_COPY-WITH-TEMPLATE-syntax"></a>

```
COPY target_table FROM 's3://...'
authorization
[ option, ...]
USING TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameters
<a name="r_COPY-WITH-TEMPLATE-parameters"></a>

 *database\$1name*   
(Optional) Der Name der Datenbank, in der die Vorlage existiert. Wenn nicht angegeben, wird die aktuelle Datenbank verwendet.

 *schema\$1name*   
(Optional) Der Name des Schemas, in dem die Vorlage existiert. Wenn nicht angegeben, wird im aktuellen Suchpfad nach der Vorlage gesucht.

 *Vorlagenname*   
Der Name der Vorlage, die in COPY verwendet werden soll. 

## Nutzungshinweise
<a name="r_COPY-WITH_TEMPLATE-usage-notes"></a>
+ Befehlsspezifische Parameter (Quelle, Ziel, Autorisierung) müssen weiterhin im COPY-Befehl angegeben werden.
+ Vorlagen können keine Manifestdateispezifikationen für COPY-Befehle enthalten.

## Beispiele
<a name="r_COPY-WITH-TEMPLATE-examples"></a>

Die folgenden Beispiele zeigen, wie eine Vorlage erstellt und in COPY-Befehlen verwendet wird:

```
CREATE TEMPLATE public.test_template FOR COPY AS
CSV DELIMITER '|' IGNOREHEADER 1 MAXERROR 100;

COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
USING TEMPLATE public.test_template;
```

Wenn ein Parameter sowohl in der Vorlage als auch im Befehl vorhanden ist, hat der Befehlsparameter Vorrang. In diesem Beispiel wird das Kommatrennzeichen () aus dem Befehl anstelle des Pipe-Trennzeichens (`,`) aus der Vorlage verwendet, wenn die Vorlage `public.test_template` enthält, `DELIMITER '|'` aber der COPY-Befehl dies angibt`DELIMITER ','`. `|` 

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
DELIMITER ','
USING TEMPLATE public.test_template;
```

# COPY-Parameterreferenz
<a name="r_COPY-parameters"></a>

COPY hat viele Parameter, die in vielen Situationen verwendet werden können. Es werden jedoch nicht alle Parameter in jeder Situation unterstützt. Beispielsweise gibt es eine begrenzte Anzahl unterstützter Parameter, um aus ORC- oder PARQUET-Dateien zu laden. Weitere Informationen finden Sie unter [COPY aus spaltenbasierten Datenformaten](copy-usage_notes-copy-from-columnar.md).

**Topics**
+ [Datenquellen](copy-parameters-data-source.md)
+ [Autorisierungsparameter](copy-parameters-authorization.md)
+ [Optionen für das Mapping von Spalten](copy-parameters-column-mapping.md)
+ [Datenformatparameter](copy-parameters-data-format.md)
+ [Dateikomprimierungsparameter](copy-parameters-file-compression.md)
+ [Datenkonvertierungsparameter](copy-parameters-data-conversion.md)
+ [Datenladeoperationen](copy-parameters-data-load.md)
+ [Alphabetische Liste der Parameter](r_COPY-alphabetical-parm-list.md)

# Datenquellen
<a name="copy-parameters-data-source"></a>

Sie können Daten aus Textdateien in einem Amazon-S3-Bucket, in einem Amazon-EMR-Cluster oder auf einem Remote-Host laden, auf den Ihr Cluster über eine SSH-Verbindung zugreifen kann. Sie können Daten auch direkt aus einer DynamoDB-Tabelle laden. 

Die maximale Größe einer einzelnen Eingabezeile aus einer beliebigen Quelle beträgt 4 MB. 

Um Daten aus einer Tabelle in einen Satz von Dateien in einem Amazon-S3-Bucket zu exportieren, verwenden Sie den Befehl [UNLOAD](r_UNLOAD.md). 

**Topics**
+ [COPY aus Amazon S3](copy-parameters-data-source-s3.md)
+ [COPY aus Amazon EMR](copy-parameters-data-source-emr.md)
+ [COPY von Remote-Hosts (SSH)](copy-parameters-data-source-ssh.md)
+ [COPY aus Amazon DynamoDB](copy-parameters-data-source-dynamodb.md)

# COPY aus Amazon S3
<a name="copy-parameters-data-source-s3"></a>

Um Daten aus Dateien zu laden, die sich in einzelnen oder mehreren S3 Buckets befinden, verwenden Sie die FROM-Klausel. Diese Klausel gibt an, wie COPY die Dateien in Amazon S3 sucht. Sie können den Objektpfad zu den Datendateien als Teil der FROM-Klausel bereitstellen oder den Speicherort einer Manifestdatei angeben, die eine Liste von Amazon-S3-Objektpfaden enthält. COPY aus Amazon S3 verwendet eine HTTPS-Verbindung. Stellen Sie sicher, dass die S3-IP-Bereiche zu Ihrer Zulassungsliste hinzugefügt werden. Weitere Informationen zu den erforderlichen S3-IP-Bereichen finden Sie unter [Netzwerkisolierung](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation).

**Wichtig**  
Wenn sich die Amazon S3 S3-Buckets, die die Datendateien enthalten, nicht in derselben AWS Region wie Ihr Cluster befinden, müssen Sie den [REGION](#copy-region) Parameter verwenden, um die Region anzugeben, in der sich die Daten befinden. 

**Topics**
+ [Syntax](#copy-parameters-data-source-s3-syntax)
+ [Beispiele](#copy-parameters-data-source-s3-examples)
+ [Optionale Parameter](#copy-parameters-data-source-s3-optional-parms)
+ [Nicht unterstützte Parameter](#copy-parameters-data-source-s3-unsupported-parms)

## Syntax
<a name="copy-parameters-data-source-s3-syntax"></a>

```
FROM { 's3://objectpath' | 's3://manifest_file' }
authorization
| MANIFEST
| ENCRYPTED
| REGION [AS] 'aws-region'
| optional-parameters
```

## Beispiele
<a name="copy-parameters-data-source-s3-examples"></a>

Im folgenden Beispiel wird ein Objektpfad verwendet, um Daten aus Amazon S3 zu laden. 

```
copy customer
from 's3://amzn-s3-demo-bucket/customer' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Im folgenden Beispiel wird eine Manifestdatei verwendet, um Daten aus Amazon S3 zu laden. 

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

### Parameters
<a name="copy-parameters-data-source-s3-parameters"></a>

FROM  <a name="copy-parameters-from"></a>
Die Quelle der Daten, die geladen werden sollen. Weitere Informationen zur Kodierung der Amazon-S3-Datei finden Sie unter [Datenkonvertierungsparameter](copy-parameters-data-conversion.md).

's3://*copy\$1from\$1s3\$1objectpath*'   <a name="copy-s3-objectpath"></a>
Gibt den Pfad zu den Amazon-S3-Objekten an, die die Daten enthalten, z. B. `'s3://amzn-s3-demo-bucket/custdata.txt'`. Der Parameter *s3://copy\$1from\$1s3\$1objectpath* kann eine einzelne Datei, einen Satz von Objekten oder Ordner mit denselben Schlüsselpräfixen referenzieren. Beispielsweise ist der Name `custdata.txt` ein Schlüsselpräfix, der sich auf eine Anzahl physischer Dateien bezieht: `custdata.txt`, `custdata.txt.1`, `custdata.txt.2`, `custdata.txt.bak` usw. Das Schlüsselpräfix kann auch eine Anzahl von Ordnern referenzieren. Beispielsweise bezieht sich `'s3://amzn-s3-demo-bucket/custfolder'` auf die Ordner `custfolder`, `custfolder_1`, `custfolder_2` usw. Wenn ein Schlüsselpräfix mehrere Ordner referenziert, werden alle Dateien in den Ordnern geladen. Wenn ein Schlüsselpräfix mit einer Datei und einem Ordner übereinstimmt, beispielsweise `custfolder.log`, versucht COPY, auch die Datei zu laden. Wenn ein Schlüsselpräfix dazu führen könnte, dass COPY versucht, nicht erwünschte Dateien zu laden, verwenden Sie eine Manifestdatei. Weitere Informationen finden Sie unter [copy_from_s3_manifest_file](#copy-manifest-file).   
Wenn sich der S3-Bucket, der die Datendateien enthält, nicht in derselben AWS Region wie Ihr Cluster befindet, müssen Sie den [REGION](#copy-region) Parameter verwenden, um die Region anzugeben, in der sich die Daten befinden.
Weitere Informationen finden Sie unter [So laden Sie Daten aus Amazon S3](t_Loading-data-from-S3.md).

's3://*copy\$1from\$1s3\$1manifest\$1file*'   <a name="copy-manifest-file"></a>
Gibt den Amazon-S3-Objektschlüssel für eine Manifestdatei an, die die Datendateien auflistet, die geladen werden sollen. Das Argument *'s3://*copy\$1from\$1s3\$1manifest\$1file'** muss explizit auf eine einzelne Datei verweisen, z. B. `'s3://amzn-s3-demo-bucket/manifest.txt'`. Es darf kein Schlüsselpräfix referenzieren.  
Das Manifest ist eine Textdatei im JSON-Format, die die URL jeder Datei auflistet, die aus Amazon S3 geladen werden soll. Die URL enthält den Bucket-Namen und den vollständigen Objektpfad für die Datei. Die im Manifest angegebenen Dateien können sich in verschiedenen Buckets befinden, aber alle Buckets müssen sich in derselben AWS Region wie der Amazon Redshift Redshift-Cluster befinden. Wenn eine Datei zweimal aufgelistet wird, wird die Datei zweimal geladen. Im folgenden Beispiel wird der JSON-Code für ein Manifest gezeigt, das drei Dateien lädt.   

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1","mandatory":false}
  ]
}
```
Die doppelten Anführungszeichen sind erforderlich. Es muss sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarten“ Anführungszeichen sein. Jeder Eintrag im Manifest kann optional ein `mandatory`-Flag enthalten. Wenn `mandatory` auf `true` gesetzt ist, wird COPY beendet, wenn der Befehl die Datei für diesen Eintrag nicht findet. Andernfalls wird COPY fortgesetzt. Der Standardwert für den `mandatory` beträgt `false`.   
Beim Laden aus Datendateien im ORC- oder Parquet-Format ist ein `meta`-Feld erforderlich, wie im folgenden Beispiel gezeigt.  

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```
Die Manifestdatei darf nicht verschlüsselt oder komprimiert sein, auch wenn die Optionen ENCRYPTED, GZIP, LZOP oder ZSTD angegeben BZIP2 sind. COPY gibt einen Fehler zurück, wenn die angegebene Manifestdatei nicht gefunden wird oder die Manifestdatei nicht korrekt formatiert ist.   
Wenn ein Manifestdatei verwendet wird, muss der Parameter MANIFEST für den COPY-Befehl angegeben werden. Wenn der Parameter MANIFEST nicht angegeben ist, nimmt COPY an, dass die für FROM angegebene Datei eine Datendatei ist.   
Weitere Informationen finden Sie unter [So laden Sie Daten aus Amazon S3](t_Loading-data-from-S3.md).

*Autorisierung*  
Der COPY-Befehl benötigt eine Autorisierung für den Zugriff auf Daten in anderen AWS -Ressourcen, einschließlich Amazon S3, Amazon EMR, Amazon DynamoDB und Amazon EC2. Sie können diese Autorisierung gewähren, indem Sie auf eine AWS Identity and Access Management (IAM-) Rolle verweisen, die Ihrem Cluster zugeordnet ist (rollenbasierte Zugriffskontrolle), oder indem Sie die Zugangsdaten für einen Benutzer angeben (schlüsselbasierte Zugriffskontrolle). Um Sicherheit und Flexibilität zu verbessern, wird die Verwendung der IAM-rollenbasierten Zugriffssteuerung empfohlen. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md).

MANIFEST  <a name="copy-manifest"></a>
Gibt an, dass ein Manifest verwendet wird, um die Datendateien aufzulisten, die aus Amazon S3 geladen werden sollen. Wenn der Parameter MANIFEST verwendet wird, lädt COPY Daten aus den in dem Manifest aufgelisteten Dateien, das durch *'s3://copy\$1from\$1s3\$1manifest\$1file'* referenziert wird. Wenn die Manifestdatei nicht gefunden wird oder nicht korrekt formatiert ist, schlägt COPY fehl. Weitere Informationen finden Sie unter [Verwenden eines Manifests für die Angabe von Datendateien](loading-data-files-using-manifest.md).

ENCRYPTED  <a name="copy-encrypted"></a>
Eine Klausel, die angibt, dass die Eingabedateien in Amazon S3 mittels clientseitiger Verschlüsselung mit vom Kunden verwalteten Schlüsseln verschlüsselt sind. Weitere Informationen finden Sie unter [Laden verschlüsselter Datendateien aus Amazon S3](c_loading-encrypted-files.md). Geben Sie ENCRYPTED nicht an, wenn die Eingabedateien mittels serverseitiger Amazon S3-Verschlüsselung (SSE-KMS or SSE-S3) verschlüsselt sind. COPY liest serverseitig verschlüsselte Dateien automatisch.  
Wenn Sie den Parameter ENCRYPTED angeben, müssen Sie auch den Parameter [MASTER_SYMMETRIC_KEY](#copy-master-symmetric-key) angeben oder den Wert für **master\$1symmetric\$1key** in die Zeichenfolge [Verwenden des Parameters CREDENTIALS](copy-parameters-authorization.md#copy-credentials) einfügen.  
Wenn die verschlüsselten Dateien in komprimiertem Format vorliegen, fügen Sie den Parameter GZIP, LZOP oder ZSTD hinzu. BZIP2  
Manifestdateien und JSONPaths Dateien dürfen nicht verschlüsselt werden, auch wenn die Option ENCRYPTED angegeben ist.

MASTER\$1SYMMETRIC\$1KEY '*root\$1key*'  <a name="copy-master-symmetric-key"></a>
Der symmetrische Root-Schlüssel, der für die Verschlüsselung von Datendateien in Amazon S3 verwendet wurde. Wenn MASTER\$1SYMMETRIC\$1KEY angegeben ist, muss auch der Parameter [ENCRYPTED](#copy-encrypted) angegeben werden. MASTER\$1SYMMETRIC\$1KEY kann nicht mit dem Parameter CREDENTIALS verwendet werden. Weitere Informationen finden Sie unter [Laden verschlüsselter Datendateien aus Amazon S3](c_loading-encrypted-files.md).  
Wenn die verschlüsselten Dateien im komprimierten Format vorliegen, fügen Sie den Parameter GZIP, LZOP oder BZIP2 ZSTD hinzu.

REGION [AS] '*aws-region*'  <a name="copy-region"></a>
Gibt die AWS Region an, in der sich die Quelldaten befinden. REGION ist für COPY aus einem Amazon-S3-Bucket oder einer DynamoDB-Tabelle erforderlich, wenn sich die AWS -Ressource, die die Daten enthält, nicht in derselben Region wie der Amazon-Redshift-Cluster befindet.   
Der Wert für *aws\$1region* muss einer Region entsprechen, die in der Tabelle [Amazon-Redshift-Regionen und -Endpunkte](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region) aufgeführt ist.  
Wenn der Parameter REGION angegeben ist, müssen sich alle Ressourcen in der angegebenen Region befinden, einschließlich einer Manifestdatei oder mehrerer Amazon-S3-Buckets.   
Für die Übertragung von Daten zwischen Regionen werden dem Amazon-S3-Bucket oder der DynamoDB-Tabelle, die die Daten enthält, zusätzliche Gebühren berechnet. Weitere Informationen zu den Preisen finden Sie unter **Ausgehende Datenübertragung von Amazon S3 in eine andere AWS Region** auf der [Amazon S3 S3-Preisseite](https://aws.amazon.com/s3/pricing/) und **Ausgehende Datenübertragung** auf der [Preisseite von Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/). 
Standardmäßig nimmt COPY an, dass sich die Daten in derselben Region wie der Amazon-Redshift-Cluster befinden. 

## Optionale Parameter
<a name="copy-parameters-data-source-s3-optional-parms"></a>

Sie können für COPY aus Amazon S3 optional die folgenden Parameter angeben: 
+ [Optionen für das Mapping von Spalten](copy-parameters-column-mapping.md)
+ [Datenformatparameter](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Datenkonvertierungsparameter](copy-parameters-data-conversion.md)
+ [Datenladeoperationen](copy-parameters-data-load.md)

## Nicht unterstützte Parameter
<a name="copy-parameters-data-source-s3-unsupported-parms"></a>

Die folgenden Parameter können Sie für COPY aus Amazon S3 nicht verwenden: 
+ SSH
+ READRATIO

# COPY aus Amazon EMR
<a name="copy-parameters-data-source-emr"></a>

Sie können den COPY-Befehl verwenden, um Daten parallel aus einem Amazon-EMR-Cluster zu laden, das für das Schreiben von Textdateien zum Hadoop Distributed File System (HDFS) in Form von Dateien mit fester Breite, von durch Zeichen getrennten Dateien, von CSV-Dateien, von JSON-Dateien oder von Avro-Dateien konfiguriert wurde.

**Topics**
+ [Syntax](#copy-parameters-data-source-emr-syntax)
+ [Beispiel](#copy-parameters-data-source-emr-example)
+ [Parameters](#copy-parameters-data-source-emr-parameters)
+ [Unterstützte Parameter](#copy-parameters-data-source-emr-optional-parms)
+ [Nicht unterstützte Parameter](#copy-parameters-data-source-emr-unsupported-parms)

## Syntax
<a name="copy-parameters-data-source-emr-syntax"></a>

```
FROM 'emr://emr_cluster_id/hdfs_filepath'  
authorization
[ optional_parameters ]
```

## Beispiel
<a name="copy-parameters-data-source-emr-example"></a>

Im folgenden Beispiel werden Daten aus einem Amazon-EMR-Cluster geladen. 

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Parameters
<a name="copy-parameters-data-source-emr-parameters"></a>

FROM  
Die Quelle der Daten, die geladen werden sollen. 

 'emr://*emr\$1cluster\$1id*/*hdfs\$1file\$1path*'  <a name="copy-emr"></a>
Der eindeutige Bezeichner für den Amazon-EMR-Cluster und den HDFS-Dateipfad, der die Datendateien für den COPY-Befehl referenziert. Die HDFS-Datendateinamen dürfen nicht die Platzhalterzeichen Sternchen (\$1) und Fragezeichen (?) enthalten.   
Der Amazon-EMR-Cluster muss weiter ausgeführt werden, bis die COPY-Operation abgeschlossen ist. Wenn eine der HDFS-Datendateien vor Abschluss der COPY-Operation geändert oder gelöscht wird, kann dies zu unerwarteten Ergebnissen führen. Es ist auch möglich, dass die COPY-Operation fehlschlägt. 
Sie können die Platzhalterzeichen Sternchen (\$1) und Fragezeichen (?) als Teil des *hdfs\$1file\$1path*-Arguments verwenden, um mehrere zu ladende Dateien anzugeben. Beispielsweise identifiziert `'emr://j-SAMPLE2B500FC/myoutput/part*'` die Dateien `part-0000`, `part-0001` usw. Wenn der Dateipfad keine Platzhalterzeichen enthält, wird er als Zeichenfolgeliteral behandelt. Wenn Sie nur einen Ordnernamen angeben, versucht COPY, alle Dateien im Ordner zu laden.   
Wenn Sie Platzhalterzeichen oder nur den Ordnernamen verwenden, müssen Sie überprüfen, ob unerwünschte Dateien geladen werden. Einige Prozesse schreiben beispielsweise eine Protokolldatei in den Ausgabeordner.
Weitere Informationen finden Sie unter [So laden Sie Daten aus Amazon EMR:](loading-data-from-emr.md).

*Autorisierung*  
Der COPY-Befehl benötigt eine Autorisierung für den Zugriff auf Daten in anderen AWS -Ressourcen, einschließlich Amazon S3, Amazon EMR, Amazon DynamoDB und Amazon EC2. Sie können diese Autorisierung erteilen, indem Sie auf eine AWS Identity and Access Management (IAM-) Rolle verweisen, die Ihrem Cluster zugeordnet ist (rollenbasierte Zugriffskontrolle), oder indem Sie die Zugangsdaten für einen Benutzer angeben (schlüsselbasierte Zugriffskontrolle). Um Sicherheit und Flexibilität zu verbessern, wird die Verwendung der IAM-rollenbasierten Zugriffssteuerung empfohlen. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md).

## Unterstützte Parameter
<a name="copy-parameters-data-source-emr-optional-parms"></a>

Sie können für COPY aus Amazon EMR optional die folgenden Parameter angeben: 
+ [Optionen für das Mapping von Spalten](copy-parameters-column-mapping.md)
+ [Datenformatparameter](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Datenkonvertierungsparameter](copy-parameters-data-conversion.md)
+ [Datenladeoperationen](copy-parameters-data-load.md)

## Nicht unterstützte Parameter
<a name="copy-parameters-data-source-emr-unsupported-parms"></a>

Die folgenden Parameter können Sie für COPY aus Amazon EMR nicht verwenden: 
+ ENCRYPTED
+ MANIFEST
+ REGION
+ READRATIO
+ SSH

# COPY von Remote-Hosts (SSH)
<a name="copy-parameters-data-source-ssh"></a>

Sie können den Befehl COPY verwenden, um Daten parallel Daten aus einem oder mehreren Remote-Hosts wie Amazon-Elastic-Compute-Cloud(Amazon EC2)-Instances oder anderen Computern zu laden. COPY stellt über Secure Shell (SSH) eine Verbindung zu den Remote-Hosts her und führt Befehle auf den Remote-Hosts aus, um Textausgaben zu generieren. Beim Remote-Host kann es sich um eine EC2-Linux-Instance oder einen anderen Unix- oder Linux-Computer handeln, der für die Annahme von SSH-Verbindungen konfiguriert wurde. Amazon Redshift kann eine Verbindung zu mehreren Hosts herstellen und für jeden Host mehrere SSH-Verbindungen öffnen. Amazon Redshift sendet über jede Verbindung einen eindeutigen Befehl, um die Textausgabe an die Standardausgabe des Hosts zu generieren. Amazon Redshift liest diese dann wie eine Textdatei.

Verwenden Sie die FROM-Klausel, um den Amazon S3-Objektschlüssel für die Manifestdatei anzugeben, die die Informationen bereitstellt, die COPY zum Öffnen von SSH-Verbindungen und zum Ausführen der Remote-Befehle verwendet. 

**Topics**
+ [Syntax](#copy-parameters-data-source-ssh-syntax)
+ [Beispiele](#copy-parameters-data-source-ssh-examples)
+ [Parameters](#copy-parameters-data-source-ssh-parameters)
+ [Optionale Parameter](#copy-parameters-data-source-ssh-optional-parms)
+ [Nicht unterstützte Parameter](#copy-parameters-data-source-ssh-unsupported-parms)

**Wichtig**  
 Wenn sich der S3 Bucket, der die Manifestdatei enthält, nicht in derselben AWS -Region wie der Cluster befindet, müssen Sie den Parameter REGION verwenden, um die Region anzugeben, in der sich der Bucket befindet. 

## Syntax
<a name="copy-parameters-data-source-ssh-syntax"></a>

```
FROM 's3://'ssh_manifest_file' }
authorization
SSH
| optional-parameters
```

## Beispiele
<a name="copy-parameters-data-source-ssh-examples"></a>

Im folgenden Beispiel wird eine Manifestdatei verwendet, um Daten über SSH aus einem Remote-Host zu laden. 

```
copy sales
from 's3://amzn-s3-demo-bucket/ssh_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
ssh;
```

## Parameters
<a name="copy-parameters-data-source-ssh-parameters"></a>

FROM  
Die Quelle der Daten, die geladen werden sollen. 

's3://*copy\$1from\$1ssh\$1manifest\$1file*'  <a name="copy-ssh-manifest"></a>
Der COPY-Befehl kann über SSH Verbindungen zu mehreren Hosts herstellen und für jeden Host mehrere SSH-Verbindungen erstellen. COPY führt über jede Hostverbindung einen Befehl aus und lädt anschließend die Ausgabe der Befehle parallel in die Tabelle. Das Argument *s3://copy\$1from\$1ssh\$1manifest\$1file* gibt den Amazon-S3-Objektschlüssel für die Manifestdatei an, die die Informationen bereitstellt, die COPY zum Öffnen von SSH-Verbindungen und zum Ausführen der Remote-Befehle verwendet.  
Das Argument *s3://copy\$1from\$1ssh\$1manifest\$1file* muss explizit eine einzelne Datei referenzieren; es darf sich nicht um ein Schlüsselpräfix handeln. Im Folgenden sehen Sie ein Beispiel:  

```
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
```
Die Manifestdatei ist eine Textdatei im JSON-Format, die Amazon Redshift zum Herstellen der Verbindung zum Host verwendet. Die Manifestdatei gibt die Endpunkte des SSH-Hosts und die Befehle an, die auf den Hosts ausgeführt werden, um Daten an Amazon Redshift zurückzugeben. Optional können Sie den öffentlichen Schlüssel des Hosts, den Anmeldebenutzernamen und ein obligatorisches Flag für die einzelnen Einträge einschließen. Im folgenden Beispiel wird eine Manifestdatei gezeigt, die zwei SSH-Verbindungen erstellt:   

```
{ 
    "entries": [ 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"}, 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"} 
     ] 
}
```
Die Manifestdatei enthält für jede SSH-Verbindung jeweils ein `"entries"`-Konstrukt. Es kann mehrere Verbindungen zu einem einzelnen Host oder mehrere Verbindungen zu mehreren Hosts geben. Doppelte Anführungszeichen sind sowohl für Feldnamen als auch für Werte erforderlich. Es muss sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarten“ Anführungszeichen sein. Der einzige Wert, der keine doppelten Anführungszeichen benötigt, ist der boolesche Wert `true` oder `false` für das Feld `"mandatory"`.   
Die folgende Liste beschreibt die Felder in der Manifestdatei.     
endpoint  <a name="copy-ssh-manifest-endpoint"></a>
Die URL- oder IP-Adresse des Hosts, z. B. `"ec2-111-222-333.compute-1.amazonaws.com"` oder `"198.51.100.0"`.   
command  <a name="copy-ssh-manifest-command"></a>
Der Befehl, der durch den Host ausgeführt werden soll, um eine Textausgabe oder eine Binärausgabe im gzip-, lzop-, bzip2- oder zstd-Format zu generieren. Bei diesem Befehl kann es sich um jeden Befehl handeln, zu dessen Ausführung der Benutzer *host\$1user\$1name* berechtigt ist. Beim Befehl kann es sich um einen einfachen Befehl zum Drucken einer Datei oder um die Abfrage einer Datenbank oder das Starten eines Skripts handeln. Die Ausgabe (Textdatei, binäre gzip-Datei, binäre lzop-Datei oder binäre bzip2-Datei) muss ein Format aufweisen, das der Amazon-Redshift-Befehl COPY verarbeiten kann. Weitere Informationen finden Sie unter [Vorbereiten der Eingabedaten](t_preparing-input-data.md).  
publickey  <a name="copy-ssh-manifest-publickey"></a>
(Optional) Der öffentliche Schlüssel des Hosts. Wenn angegeben, verwendet Amazon Redshift den öffentlichen Schlüssel, um den Host zu identifizieren. Wenn der öffentliche Schlüssel nicht angegeben ist, versucht Amazon Redshift nicht, den Host zu identifizieren. Wenn beispielsweise der öffentliche Schlüssel des Remote-Hosts `ssh-rsa AbcCbaxxx…Example root@amazon.com` ist, geben Sie den folgenden Text in das Feld für den öffentlichen Schlüssel ein: `"AbcCbaxxx…Example"`.  
mandatory  <a name="copy-ssh-manifest-mandatory"></a>
(Optional) Eine Klausel, die anzeigt, ob der COPY-Befehl fehlschlagen soll, wenn der Verbindungsversuch fehlschlägt. Der Standardwert ist `false`. Wenn Amazon Redshift nicht mindestens eine Verbindung herstellt, schlägt der COPY-Befehl fehl.  
username  <a name="copy-ssh-manifest-username"></a>
(Optional) Der Benutzername, der für die Anmeldung am Hostsystem und die Ausführung des Remotebefehls verwendet wird. Der Benutzeranmeldename muss mit dem Anmeldenamen identisch sein, der zum Hinzufügen des öffentlichen Schlüssels des Amazon-Redshift-Clusters zur Datei des Hosts mit den autorisierten Schlüsseln verwendet wurde. Der Standardbenutzername ist `redshift`.
Weitere Informationen zum Erstellen einer Manifestdatei finden Sie unter [Prozess für das Laden von Daten](loading-data-from-remote-hosts.md#load-from-host-process).  
Um eine COPY-Operation aus einem Remote-Host auszuführen, muss für den COPY-Befehl der Parameter SSH angegeben werden. Wenn der Parameter SSH nicht angegeben ist, nimmt COPY an, dass die für FROM angegebene Datei eine Datendatei ist und schlägt fehl.   
Wenn Sie die automatische Komprimierung verwenden, führt der COPY-Befehl zwei Datenleseoperationen aus. Das bedeutet, dass der Remotebefehl zweimal ausgeführt wird. Die erste Leseoperation dient dazu, eine Datenstichprobe zur Kompressionsanalyse bereitzustellen. In der zweiten Leseoperation werden die Daten tatsächlich geladen. Wenn die zweimalige Ausführung des Remotebefehls Probleme verursachen könnte, sollten Sie die automatische Kompression deaktivieren. Um die automatische Kompression zu deaktivieren, führen Sie den COPY-Befehl aus, wobei Sie den Parameter COMPUPDATE auf OFF festlegen. Weitere Informationen finden Sie unter [Laden von Tabellen mit automatischer Kompression](c_Loading_tables_auto_compress.md).  
Details zur Verwendung der COPY-Operation aus SSH finden Sie unter [Laden von Daten aus Remote-Hosts](loading-data-from-remote-hosts.md).

*Autorisierung*  
Der COPY-Befehl benötigt eine Autorisierung für den Zugriff auf Daten in anderen AWS -Ressourcen, einschließlich Amazon S3, Amazon EMR, Amazon DynamoDB und Amazon EC2. Sie können diese Autorisierung erteilen, indem Sie auf eine AWS Identity and Access Management (IAM-) Rolle verweisen, die Ihrem Cluster zugeordnet ist (rollenbasierte Zugriffskontrolle), oder indem Sie die Zugangsdaten für einen Benutzer angeben (schlüsselbasierte Zugriffskontrolle). Um Sicherheit und Flexibilität zu verbessern, wird die Verwendung der IAM-rollenbasierten Zugriffssteuerung empfohlen. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md).

SSH  <a name="copy-ssh"></a>
Eine Klausel, die angibt, dass die Daten über das SSH-Protokoll aus einem Remote-Host geladen werden sollen. Wenn Sie SSH angeben, müssen Sie auch unter Verwendung des Arguments [s3://copy_from_ssh_manifest_file](#copy-ssh-manifest) eine Manifestdatei angeben.   
Wenn Sie SSH verwenden, um von einem Host mit einer privaten IP-Adresse in einem Remote-VPC zu kopieren, muss für den VPC erweitertes VPC-Routing aktiviert sein. Für weitere Informationen zu erweitertem VPC-Routing vgl. [Amazon Redshift Enhanced VPC Routing](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html).

## Optionale Parameter
<a name="copy-parameters-data-source-ssh-optional-parms"></a>

Sie können für COPY aus SSH optional die folgenden Parameter angeben: 
+ [Optionen für das Mapping von Spalten](copy-parameters-column-mapping.md)
+ [Datenformatparameter](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Datenkonvertierungsparameter](copy-parameters-data-conversion.md)
+ [Datenladeoperationen](copy-parameters-data-load.md)

## Nicht unterstützte Parameter
<a name="copy-parameters-data-source-ssh-unsupported-parms"></a>

Die folgenden Parameter können Sie für COPY aus SSH nicht verwenden: 
+ ENCRYPTED
+ MANIFEST
+ READRATIO

# COPY aus Amazon DynamoDB
<a name="copy-parameters-data-source-dynamodb"></a>

Um Daten aus einer vorhandenen DynamoDB-Tabelle zu laden, verwenden Sie die FROM-Klausel, um den Namen der DynamoDB-Tabelle anzugeben.

**Topics**
+ [Syntax](#copy-parameters-data-source-dynamodb-syntax)
+ [Beispiele](#copy-parameters-data-source-dynamodb-examples)
+ [Optionale Parameter](#copy-parameters-data-source-dynamodb-optional-parms)
+ [Nicht unterstützte Parameter](#copy-parameters-data-source-dynamodb-unsupported-parms)

**Wichtig**  
Wenn sich die DynamoDB-Tabelle nicht in derselben Region wie Ihr Amazon-Redshift-Cluster befindet, müssen Sie den Parameter REGION verwenden, um die Region anzugeben, in der sich die Daten befinden. 

## Syntax
<a name="copy-parameters-data-source-dynamodb-syntax"></a>

```
FROM 'dynamodb://table-name' 
authorization
READRATIO ratio
| REGION [AS] 'aws_region'  
| optional-parameters
```

## Beispiele
<a name="copy-parameters-data-source-dynamodb-examples"></a>

Im folgenden Beispiel werden Daten aus einer DynamoDB-Tabelle geladen. 

```
copy favoritemovies from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
readratio 50;
```

### Parameters
<a name="copy-parameters-data-source-dynamodb-parameters"></a>

FROM  
Die Quelle der Daten, die geladen werden sollen. 

'dynamodb://*table-name*'  <a name="copy-dynamodb"></a>
Der Name der DynamoDB-Tabelle, die die Daten enthält, beispielsweise `'dynamodb://ProductCatalog'`. Details dazu, wie DynamoDB-Attribute den Amazon-Redshift-Spalten zugewiesen werden, finden Sie unter [Laden von Daten aus einer Amazon-DynamoDB-Tabelle](t_Loading-data-from-dynamodb.md).  
Ein DynamoDB-Tabellenname ist für ein AWS Konto eindeutig, das durch die AWS Zugangsdaten identifiziert wird.

*Autorisierung*  
Der COPY-Befehl benötigt eine Autorisierung für den Zugriff auf Daten in anderen AWS -Ressourcen, einschließlich Amazon S3, Amazon EMR, DynamoDB und Amazon EC2. Sie können diese Autorisierung gewähren, indem Sie auf eine AWS Identity and Access Management (IAM-) Rolle verweisen, die Ihrem Cluster zugeordnet ist (rollenbasierte Zugriffskontrolle), oder indem Sie die Zugangsdaten für einen Benutzer angeben (schlüsselbasierte Zugriffskontrolle). Um Sicherheit und Flexibilität zu verbessern, wird die Verwendung der IAM-rollenbasierten Zugriffssteuerung empfohlen. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md).

READRATIO [AS] *ratio*  <a name="copy-readratio"></a>
Der Prozentsatz des für die DynamoDB-Tabelle bereitgestellten Durchsatzes, der für das Laden der Daten verwendet werden soll. READRATIO ist für COPY aus DynamoDB erforderlich. Der Parameter kann nicht für COPY aus Amazon S3 verwendet werden. Es wird nachdrücklich empfohlen, das Verhältnis auf einen Wert festzulegen, der kleiner als der durchschnittliche Wert für nicht genutzten bereitgestellten Durchsatz ist. Gültige Werte sind Ganzzahlen von 1 bis 200.  
Wenn Sie READRATIO auf 100 oder höher festlegen, kann Amazon Redshift den gesamten Durchsatz nutzen, der für die DynamoDB-Tabelle bereitgestellt wurde. Dies führt zu einer erheblich schlechteren Leistung für Leseoperationen, die für dieselbe Tabelle gleichzeitig mit der COPY-Sitzung ausgeführt werden. Der Schreibdatenverkehr ist nicht betroffen. Werte über 100 sind zulässig, um Fehler im Zusammenhang mit seltenen Szenarien zu beheben, wenn Amazon Redshift den für die Tabelle bereitgestellten Durchsatz nicht erreicht. Wenn Sie kontinuierlich Daten aus DynamoDB in Amazon Redshift laden, sollten Sie Ihre DynamoDB-Tabellen als Zeitreihe organisieren, um den Live-Datenverkehr von der COPY-Operation zu trennen.

## Optionale Parameter
<a name="copy-parameters-data-source-dynamodb-optional-parms"></a>

Sie können für COPY aus Amazon DynamoDB optional die folgenden Parameter angeben: 
+ [Optionen für das Mapping von Spalten](copy-parameters-column-mapping.md)
+ Folgende Datenkonvertierungsparameter werden unterstützt:
  + [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
  + [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
  + [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
  + [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
  + [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
  + [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
  + [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
  + [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 
+ [Datenladeoperationen](copy-parameters-data-load.md)

## Nicht unterstützte Parameter
<a name="copy-parameters-data-source-dynamodb-unsupported-parms"></a>

Die folgenden Parameter können Sie für COPY aus DynamoDB nicht verwenden: 
+ Alle Datenformatparameter
+ ESCAPE
+ FILLRECORD
+ IGNOREBLANKLINES
+ IGNOREHEADER
+ NULL
+ REMOVEQUOTES
+ ACCEPTINVCHARS
+ MANIFEST
+ ENCRYPTED

# Autorisierungsparameter
<a name="copy-parameters-authorization"></a>

Der COPY-Befehl benötigt eine Autorisierung, um auf Daten in einer anderen AWS Ressource zuzugreifen, einschließlich in Amazon S3, Amazon EMR, Amazon DynamoDB und Amazon EC2. Sie gewähren diese Autorisierung durch die Referenzierung einer [IAM-Rolle (AWS Identity and Access Management )](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html), die mit Ihrem Cluster verbunden ist (*rollenbasierte Zugriffskontrolle*). Sie können Ihre Ladedaten auf Amazon S3 verschlüsseln. 

In den folgenden Themen finden Sie weitere Details und Beispiele für Authentifizierungsoptionen:
+ [IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)
+ [Rollenbasierte Zugriffskontrolle](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)
+ [Schlüsselbasierte Zugriffssteuerung](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based)

Verwenden Sie eines der folgenden Verfahren, um eine Autorisierung für den COPY-Befehl bereitzustellen: 
+ [Verwenden des Parameters IAM\$1ROLE](#copy-iam-role) Parameter
+ [Verwenden der Parameter ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY](#copy-access-key-id) parameters
+ [Verwenden des Parameters CREDENTIALS](#copy-credentials)-Klausel

## Verwenden des Parameters IAM\$1ROLE
<a name="copy-iam-role"></a>

### IAM\$1ROLE
<a name="copy-iam-role-iam"></a>

Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der COPY-Befehl ausgeführt wird. 

Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Wenn Sie IAM\$1ROLE angeben, können Sie ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN oder CREDENTIALS nicht verwenden.

Im Folgenden wird die Syntax für den Parameter IAM\$1ROLE gezeigt. 

```
IAM_ROLE { default | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' }
```

Weitere Informationen finden Sie unter [Rollenbasierte Zugriffskontrolle](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

## Verwenden der Parameter ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id"></a>

### ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id-access"></a>

Diese Autorisierungsmethode wird nicht empfohlen. 

**Anmerkung**  
Es wird nach nachdrücklich empfohlen, eine rollenbasierte Authentifizierung durch Angabe des Parameters IAM\$1ROLE zu verwenden, statt die Zugriffsanmeldeinformationen in Textform bereitzustellen. Weitere Informationen finden Sie unter [Rollenbasierte Zugriffskontrolle](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

### SESSION\$1TOKEN
<a name="copy-token"></a>

Das Sitzungstoken, das für temporäre Zugriffsanmeldeinformationen verwendet wird. Wenn SESSION\$1TOKEN angegeben wird, müssen Sie auch ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY verwenden, um temporäre Zugriffsschlüssel-Anmeldeinformationen bereitzustellen. Wenn Sie SESSION\$1TOKEN angeben, können Sie IAM\$1ROLE oder CREDENTIALS nicht verwenden. Weitere Informationen finden Sie unter [Temporäre Sicherheitsanmeldeinformationen](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials) im IAM-Benutzerhandbuch.

**Anmerkung**  
Es wird nach nachdrücklich empfohlen, eine rollenbasierte Authentifizierung zu verwenden, statt temporäre Sicherheitsanmeldeinformationen zu erstellen. Wenn Sie eine Autorisierung unter Verwendung einer IAM-Rolle ausführen, erstellt Amazon Redshift automatisch für jede Sitzung temporäre Benutzeranmeldeinformationen. Weitere Informationen finden Sie unter [Rollenbasierte Zugriffskontrolle](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

Im Folgenden wird die Syntax für den Parameter SESSION\$1TOKEN mit den Parametern ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY gezeigt. 

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

Wenn Sie SESSION\$1TOKEN angeben, können Sie CREDENTIALS oder IAM\$1ROLE nicht verwenden. 

## Verwenden des Parameters CREDENTIALS
<a name="copy-credentials"></a>

### CREDENTIALS
<a name="copy-credentials-cred"></a>

Eine Klausel, die angibt, welche Methode Ihr Cluster beim Zugriff auf andere AWS Ressourcen verwenden wird, die Datendateien oder Manifestdateien enthalten. Sie können den Parameter CREDENTIALS nicht mit IAM\$1ROLE oder ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY verwenden.

Im Folgenden wird die Syntax für den Parameter CREDENTIALS gezeigt.

```
[WITH] CREDENTIALS [AS] 'credentials-args'
```

**Anmerkung**  
Um die Flexibilität zu verbessern, wird die Verwendung des Parameters [IAM\$1ROLE](#copy-iam-role-iam) anstelle des Parameters CREDENTIALS empfohlen.

Wenn der Parameter [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) verwendet wird, stellt die Zeichenfolge *credentials-args* auch den Verschlüsselungsschlüssel bereit.

Die Zeichenfolge *credentials-args* unterscheidet zwischen Groß- und Kleinschreibung und darf keine Leerzeichen enthalten.

Die Schlüsselwörter WITH und AS sind optional und werden ignoriert.

Sie können entweder [role-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based.phrase) oder [key-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based.phrase) angeben. In beiden Fällen müssen die IAM-Rolle oder der Benutzer die nötigen Berechtigungen besitzen, um auf die angegebenen AWS -Ressourcen zuzugreifen. Weitere Informationen finden Sie unter [IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions). 

**Anmerkung**  
Um Ihre AWS Anmeldeinformationen und vertrauliche Daten zu schützen, empfehlen wir dringend, die rollenbasierte Zugriffskontrolle zu verwenden. 

Um die rollenbasierte Zugriffssteuerung anzugeben, stellen Sie die Zeichenfolge *credentials-args* im folgenden Format bereit.

```
'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
```

Um temporäre Token-Anmeldeinformationen zu verwenden, müssen Sie die temporäre Zugriffschlüssel-ID, den temporären geheimen Zugriffschlüssel und das temporäre Token bereitstellen. Die *credentials-args*-Zeichenfolge hat das folgende Format. 

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>'
```

Ein COPY-Befehl mit einer rollenbasierten Zugriffssteuerung mit temporären Anmeldeinformationen würde der folgenden Beispielanweisung ähnlich sein: 

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key-id>;token=<temporary-token>'
```

 Weitere Informationen finden Sie unter [Temporäre Sicherheitsanmeldeinformationen](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials).

Wenn der [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) Parameter verwendet wird, hat die Zeichenfolge *credentials args das* folgende Format, wobei es sich um den Wert des Stammschlüssels *<root-key>* handelt, der zum Verschlüsseln der Dateien verwendet wurde.

```
CREDENTIALS
'<credentials-args>;master_symmetric_key=<root-key>'
```

Ein COPY-Befehl mit einer rollenbasierten Zugriffssteuerung mit einem Verschlüsselungsschlüssel würde der folgenden Beispielanweisung ähnlich sein:

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS 
'aws_iam_role=arn:aws:iam::<account-id>:role/<role-name>;master_symmetric_key=<root-key>'
```

# Optionen für das Mapping von Spalten
<a name="copy-parameters-column-mapping"></a>

Standardmäßig fügt COPY Werte in derselben Reihenfolge in die Spalten der Zieltabelle ein, die die Felder in den Datendateien haben. Wenn die standardmäßige Spaltenreihenfolge nicht funktioniert, können Sie eine Spaltenliste angeben oder JSONPath Ausdrücke verwenden, um Quelldatenfelder den Zielspalten zuzuordnen. 
+ [Column List](#copy-column-list)
+ [JSONPaths File](#copy-column-mapping-jsonpaths)

## Spaltenliste
<a name="copy-column-list"></a>

Sie können eine durch Komma getrennte Liste von Spaltennamen angeben, um Quelldatenfelder in spezifische Zielspalten zu laden. Die Spalten können in der COPY-Anweisung eine beliebige Reihenfolge aufweisen. Wenn sie jedoch aus Flat-Files geladen werden, beispielsweise in einem Amazon-S3-Bucket, muss ihre Reihenfolge mit der Reihenfolge der Quelldaten übereinstimmen. 

Beim Laden aus einer Amazon-DynamoDB-Tabelle spielt die Reihenfolge keine Rolle. Der COPY-Befehl gleicht Attributnamen in den Elementen, die aus der DynamoDB-Tabelle abgerufen wurden, mit Spaltennamen in der Amazon-Redshift-Tabelle ab. Weitere Informationen finden Sie unter [Laden von Daten aus einer Amazon-DynamoDB-Tabelle](t_Loading-data-from-dynamodb.md)

 Das Format einer Spaltenliste ist wie folgt.

```
COPY tablename (column1 [,column2, ...]) 
```

Wenn eine Spalte in der Zieltabelle aus der Spaltenliste ausgelassen wird, lädt COPY den [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default)-Ausdruck der Zielspalte.

Wenn die Zielspalte keinen Standardwert besitzt, versucht COPY, NULL zu laden.

Wenn COPY versucht, einer Spalte NULL zuzuweisen, die als NOT NULL definiert ist, schlägt der COPY-Befehl fehl. 

Wenn eine [IDENTITY](r_CREATE_TABLE_NEW.md#identity-clause)-Spalte in der Spaltenliste enthalten ist, muss auch [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) angegeben werden. Wenn keine IDENTITY-Spalte angegeben ist, kann EXPLICIT\$1IDS nicht angegeben werden. Wenn keine Spaltenliste angegeben ist, verhält sich der Befehl, als ob eine vollständige, reihenfolgegerechte Spaltenliste angegeben ist, wobei IDENTITY-Spalten ausgelassen werden, wenn EXPLICIT\$1IDS nicht angegeben wurde.

Wenn eine Spalte mit GENERATED BY DEFAULT AS IDENTITY definiert ist, kann sie kopiert werden. Die Werte werden mit den von Ihnen angegebenen Werten generiert oder aktualisiert. Die Option EXPLICIT\$1IDS ist nicht erforderlich. COPY aktualisiert nicht die Identity High Watermark. Weitere Informationen finden Sie unter [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

## JSONPaths Datei
<a name="copy-column-mapping-jsonpaths"></a>

Beim Laden von Daten aus Datendateien im JSON- oder Avro-Format weist COPY die Datenelemente in den JSON- oder Avro-Quelldaten automatisch den Spalten in der Zieltabelle zu. Dies geschieht durch den Abgleich von Feldnamen im Avro-Schema mit den Spaltennamen in der Zieltabelle oder Spaltenliste.

In einigen Fällen werden die Spaltennamen und Feldnamen nicht übereinstimmen oder Sie müssen Zuweisungen tiefer in der Datenhierarchie vornehmen. In diesen Fällen können Sie eine JSONPaths Datei verwenden, um JSON- oder Avro-Datenelemente explizit Spalten zuzuordnen. 

Weitere Informationen finden Sie unter [JSONPaths Datei](copy-parameters-data-format.md#copy-json-jsonpaths). 

# Datenformatparameter
<a name="copy-parameters-data-format"></a>

Standardmäßig geht der COPY-Befehl davon aus, dass es sich bei den Quelldaten um UTF-8-Text mit Trennzeichen handelt. Das Standardtrennzeichen ist der senkrechte Strich (\$1). Wenn sich die Quelldaten in einem anderen Format befinden, verwenden Sie die folgenden Parameter, um das Datenformat anzugeben: 
+ [FORMAT](#copy-format)
+ [CSV](#copy-csv)
+ [DELIMITER](#copy-delimiter) 
+ [FIXEDWIDTH](#copy-fixedwidth) 
+ [SHAPEFILE](#copy-shapefile) 
+ [AVRO](#copy-avro) 
+ [JSON format for COPY](#copy-json) 
+ [PARQUET](#copy-parquet) 
+ [ORC](#copy-orc) 

Neben den Standarddatenformaten unterstützt COPY die folgenden spaltenbasierten Datenformate für COPY aus Amazon S3: 
+ [ORC](#copy-orc) 
+ [PARQUET](#copy-parquet) 

COPY aus einem spaltenbasierten Format wird mit bestimmten Einschränkungen unterstützt. Weitere Informationen finden Sie unter [COPY aus spaltenbasierten Datenformaten](copy-usage_notes-copy-from-columnar.md). <a name="copy-data-format-parameters"></a>Datenformatparameter

FORMAT [AS]  <a name="copy-format"></a>
(Optional) Identifiziert Datenformatschlüsselwörter. Die FORMAT-Argumente werden im Folgenden beschrieben.

CSV [ QUOTE [AS] *'quote\$1character'* ]  <a name="copy-csv"></a>
Ermöglicht die Verwendung des CSV-Formats in den Eingabedaten. Um Trennzeichen, Zeichen für neue Zeilen und Zeilenumbrüche automatisch mit Escape-Zeichen zu markieren, schließen Sie das Feld in das durch den Parameter QUOTE angegebene Zeichen ein. Das Standardanführungszeichen ist das doppelte Anführungszeichen ("). Wird das Anführungszeichen innerhalb des Feldes verwendet, verwenden Sie ein weiteres Anführungszeichen als Escape-Zeichen. Wenn beispielsweise das Anführungszeichen ein doppeltes Anführungszeichen ist und die Zeichenfolge `A "quoted" word` eingefügt werden soll, sollte die Eingabedatei die Zeichenfolge `"A ""quoted"" word"` enthalten. Wenn der CSV-Parameter verwendet wird, ist das Standardtrennzeichen ein Komma (,). Sie können ein anderes Trennzeichen angeben, indem Sie den Parameter DELIMITER verwenden.   
Wenn ein Feld in Anführungszeichen eingeschlossen wird, werden Leerzeichen zwischen Trennzeichen und Anführungszeichen ignoriert. Wenn das Trennzeichen ein Leerzeichen ist, beispielsweise ein Tabulatorzeichen, wird das Trennzeichen nicht als Leerzeichen behandelt.  
Das CSV-Format kann nicht mit FIXEDWIDTH, REMOVEQUOTES oder ESCAPE verwendet werden.     
QUOTE [AS] *'quote\$1character'*  <a name="copy-csv-quote"></a>
Optional. Gibt das Zeichen an, das als Anführungszeichen verwendet werden soll, wenn der CSV-Parameter verwendet wird. Der Standardwert ist das doppelte Anführungszeichen ("). Wenn Sie den Parameter QUOTE verwenden, um ein anderes Anführungszeichen als ein doppeltes Anführungszeichen zu definieren, müssen Sie doppelte Anführungszeichen innerhalb des Felds nicht mit Escape-Zeichen markieren. Der Parameter QUOTE kann nur mit dem Parameter CSV verwendet werden. Das Schlüsselwort AS ist optional.

DELIMITER [AS] ['*delimiter\$1char*']   <a name="copy-delimiter"></a>
Gibt Zeichen an, die verwendet werden, um Felder in der Eingabedatei zu trennen, beispielsweise das Pipe-Zeichen (`|`), das Komma (`,`), das Tabulatorzeichen (`\t`) oder mehrere Zeichen (z. B. `|~|`). Nicht druckbare Zeichen werden unterstützt. Zeichen können auch oktal als ihre UTF-8-Codeeinheiten dargestellt werden. Verwenden Sie für die oktale Darstellung das Format „\$1ddd“, wobei „d“ eine Oktalziffer ist (0–7). Das Standardtrennzeichen ist das Pipe-Zeichen (`|`), wenn nicht der Parameter CSV verwendet wird. In diesem Fall ist das Standardtrennzeichen das Komma (`,`). Das Schlüsselwort AS ist optional. DELIMITER kann nicht mit FIXEDWIDTH verwendet werden.

FIXEDWIDTH '*fixedwidth\$1spec*'   <a name="copy-fixedwidth"></a>
Lädt die Daten aus einer Datei, in der jede Spalte eine feste Breite hat, statt durch ein Trennzeichen abgetrennt zu werden. *fixedwidth\$1spec* ist eine Zeichenfolge, die eine benutzerdefinierte Spaltenbezeichnung und eine benutzerdefinierte Spaltenbreite angibt. Die Spaltenbezeichnung kann eine Textzeichenfolge oder eine Ganzzahl sein, abhängig davon, wofür sich der Benutzer entscheidet. Spaltenbezeichnung und Spaltenname sind nicht aufeinander bezogen. Die Reihenfolge der label/width Paare muss exakt mit der Reihenfolge der Tabellenspalten übereinstimmen. FIXEDWIDTH kann nicht mit CSV oder DELIMITER verwendet werden. In Amazon Redshift wird die Länge der CHAR- und VARCHAR-Spalten in Bytes ausgedrückt. Achten Sie daher darauf, dass die von Ihnen angegebene Spaltenbreite beim Vorbereiten der Datei auf das Laden die binäre Länge von Multibyte-Zeichen berücksichtigt. Weitere Informationen finden Sie unter [Zeichentypen](r_Character_types.md).   
Das Format für *fixedwidth\$1spec* wird im Folgenden gezeigt:   

```
'colLabel1:colWidth1,colLabel:colWidth2, ...'
```

SHAPEFILE [ SIMPLIFY [AUTO] [*'Toleranz'*] ]  <a name="copy-shapefile"></a>
Ermöglicht die Verwendung des SHAPEFILE-Formats in den Eingabedaten. Standardmäßig ist die erste Spalte des Shapefile entweder eine `GEOMETRY`- oder `IDENTITY`-Spalte. Alle nachfolgenden Spalten folgen der im Shapefile angegebenen Reihenfolge.  
SHAPEFILE kann nicht mit FIXEDWIDTH, REMOVEQUOTES oder ESCAPE verwendet werden.   
Um `GEOGRAPHY`-Objekte mit `COPY FROM SHAPEFILE` zu verwenden, erfassen Sie zuerst in eine `GEOMETRY`-Spalte und wandeln dann die Objekte in `GEOGRAPHY`-Objekte um.    
SIMPLIFY [*Toleranz*]  <a name="copy-shapefile-simplify"></a>
(Optional) Vereinfacht alle Geometrien während des Aufnahmeprozesses mithilfe des Ramer-Douglas-Peucker Algorithmus und der angegebenen Toleranz.   
SIMPLIFY AUTO [*Toleranz*]  <a name="copy-shapefile-simplify"></a>
(Optional) Vereinfacht nur Geometrien, die größer als die maximale Geometriegröße sind. Bei dieser Vereinfachung werden der Ramer-Douglas-Peucker Algorithmus und die automatisch berechnete Toleranz verwendet, sofern diese die angegebene Toleranz nicht überschreitet. Der Algorithmus berechnet die Größe zum Speichern von Objekten innerhalb der angegebenen Toleranz. Der *Toleranz*-Wert ist optional.
Beispiele zum Laden von Shapefiles finden Sie unter [Laden eines Shapefile in Amazon Redshift](r_COPY_command_examples.md#copy-example-spatial-copy-shapefile).

AVRO [AS] '*avro\$1option*'  <a name="copy-avro"></a>
Gibt an, dass die Quelldaten im Avro-Format vorliegen.   
Das Avro-Format wird durch folgende Services und Protokolle für den COPY-Befehl unterstützt:  
+ Amazon S3 
+ Amazon EMR 
+ Remote-Hosts (SSH) 
Avro wird für COPY aus DynamoDB nicht unterstützt.   
Avro ist ein Protokoll für die Datenserialisierung. Eine Avro-Quelldatei enthält ein Schema, das die Struktur der Daten definiert. Der Avro-Schematyp muss sein `record`. COPY akzeptiert Avro-Dateien, die unter Verwendung des standardmäßigen nicht komprimierten Codec sowie der Komprimierungs-Codecs `deflate` und `snappy` erstellt wurden. Weitere Informationen zu Avro finden Sie unter [Apache Avro](https://avro.apache.org/).   
Gültige Werte für *avro\$1option* sind folgende:  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
Der Standardwert ist `'auto'`.  
COPY weist die Datenelemente in den Avro-Quelldaten automatisch den Spalten in der Zieltabelle zu. Dies geschieht durch den Abgleich von Feldnamen im Avro-Schema mit den Spaltennamen in der Zieltabelle. Mit `'auto'` wird beim Abgleich die Groß-/Kleinschreibung beachtet, mit `'auto ignorecase'` nicht.   
Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende Feldnamen ebenfalls Kleinbuchstaben verwenden, wenn Sie die Option `'auto'` verwenden. Wenn die Feldnamen nicht alle Kleinbuchstaben sind, können Sie die Option `'auto ignorecase'` verwenden. Mit dem Standardargument `'auto'` erkennt COPY nur die erste Ebene von Feldern bzw. die *äußeren Felder* in der Struktur.   
Um den Avro-Feldnamen explizit Spaltennamen zuzuordnen, können Sie verwenden [JSONPaths Datei](#copy-json-jsonpaths).   
Standardmäßig versucht COPY, alle Spalten in der Zieltabelle mit Avro-Feldnamen abzugleichen. Um einen Subsatz der Spalten zu laden, können Sie optional eine Spaltenliste angeben. Wenn eine Spalte in der Zieltabelle aus der Spaltenliste ausgelassen wird, lädt COPY den [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default)-Ausdruck der Zielspalte. Wenn die Zielspalte keinen Standardwert besitzt, versucht COPY, NULL zu laden. Wenn eine Spalte in der Spaltenliste enthalten ist und COPY in den Avro-Daten kein übereinstimmendes Feld findet, versucht COPY, NULL in die Spalte zu laden.   
Wenn COPY versucht, einer Spalte NULL zuzuweisen, die als NOT NULL definiert ist, schlägt der COPY-Befehl fehl.   
<a name="copy-avro-schema"></a>**Avro-Schema**  
Eine Avro-Quelldatendatei enthält ein Schema, das die Struktur der Daten definiert. COPY liest das Schema, das Teil der Avro-Quelldatendatei ist, um Datenelemente zu Zieltabellenspalten zuzuweisen. Die folgende Abbildung zeigt ein Avro-Schema.   

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"}]
}
```
Das Avro-Schema wird unter Verwendung des JSON-Formats definiert. Das JSON-Objekt auf der obersten Ebene enthält drei Name/Wert-Paare mit den Namen bzw. *Schlüsseln* `"name"`, `"type"` und `"fields"`.   
Der `"fields"`-Schlüssel wird mit einem Array von Objekten verknüpft, die den Namen und Datentyp der einzelnen Felder in der Datenstruktur definieren. Standardmäßig gleicht COPY die Feldnamen mit Spaltennamen ab. Spaltennamen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende Feldnamen ebenfalls Kleinbuchstaben verwenden, außer Sie geben die Option `‘auto ignorecase’` an. Feldnamen, die mit keiner Spalte übereinstimmen, werden ignoriert. Die Reihenfolge spielt keine Rolle. Im vorherigen Beispiel führt COPY einen Abgleich mit den Spaltennamen `id`, `guid`, `name` und `address` aus.   
Bei Verwendung des Standardarguments `'auto'` gleicht COPY nur Objekte auf der ersten Ebene mit Spalten ab. Verwenden Sie eine Datei, um die Zuordnung zu tieferen Ebenen im Schema vorzunehmen oder wenn Feld- und Spaltennamen nicht übereinstimmen, definieren Sie die Zuordnung mithilfe einer JSONPaths Datei. Weitere Informationen finden Sie unter [JSONPaths Datei](#copy-json-jsonpaths).   
Wenn es sich bei dem Wert, der mit einem Schlüssel verknüpft ist, um einen komplexen Avro-Datentyp wie Byte, Array, Datensatz, Zuweisung oder Link handelt, lädt COPY den Wert als Zeichenfolge. Hier ist die Zeichenfolge die JSON-Darstellung der Daten. COPY lädt Avro-Aufzählungsdatentypen als Zeichenfolgen, wobei der Inhalt der Name des Typs ist. Ein Beispiel finden Sie unter [COPY von JSON-Format](copy-usage_notes-copy-from-json.md).  
Die maximale Größe des Avro-Dateiheaders, der das Schema und die Dateimetadaten enthält, beträgt 1 MB.     
Die maximale Größe eines einzelnen Avro-Datenblocks beträgt 4 MB. Dies ist etwas anderes als die maximale Zeilengröße. Wenn die maximale Größe eines einzelnen Avro-Datenblocks überschritten wird, schlägt der COPY-Befehl fehl. Dies ist auch dann der Fall, wenn die entsprechende Zeilengröße unter der Grenze von 4 MB für Zeilengrößen liegt.   
Bei der Berechnung der Zeilengröße zählt Amazon Redshift intern Pipe-Zeichen (\$1) zweimal. Wenn Ihre Eingabedaten eine sehr große Zahl von Pipe-Zeichen enthalten, ist es möglich, dass die Zeilengröße 4 MB überschreitet, auch wenn der Datenblock kleiner als 4 MB ist.

JSON [AS] '*json\$1option*'  <a name="copy-json"></a>
Die Quelldaten weisen das JSON-Format auf.   
Das JSON-Format wird durch folgende Services und Protokolle für den COPY-Befehl unterstützt:  
+ Amazon S3
+ COPY aus Amazon EMR
+ COPY aus SSH
JSON wird für COPY aus DynamoDB nicht unterstützt.   
Gültige Werte für *json\$1option* sind folgende:  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
+ `'noshred'` 
Der Standardwert ist `'auto'`. Amazon Redshift zerlegt die Attribute von JSON-Strukturen beim Laden eines JSON-Dokuments nicht in mehrere Spalten.  
Standardmäßig versucht COPY, alle Spalten in der Zieltabelle mit JSON-Feldnamenschlüsseln abzugleichen. Um einen Subsatz der Spalten zu laden, können Sie optional eine Spaltenliste angeben. Wenn die JSON-Feldnamenschlüssel nicht nur Kleinbuchstaben verwenden, können Sie `'auto ignorecase'` oder [JSONPaths Datei](#copy-json-jsonpaths) verwenden, um Spaltennamen explizit zu JSON-Feldnamenschlüsseln zuzuweisen.  
Wenn eine Spalte in der Zieltabelle aus der Spaltenliste ausgelassen wird, lädt COPY den [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default)-Ausdruck der Zielspalte. Wenn die Zielspalte keinen Standardwert besitzt, versucht COPY, NULL zu laden. Wenn eine Spalte in der Spaltenliste enthalten ist und COPY in den JSON-Daten kein übereinstimmendes Feld findet, versucht COPY, NULL in die Spalte zu laden.   
Wenn COPY versucht, einer Spalte NULL zuzuweisen, die als NOT NULL definiert ist, schlägt der COPY-Befehl fehl.   
COPY weist die Datenelemente in den JSON-Quelldaten den Spalten in der Zieltabelle zu. Dies geschieht durch den Abgleich der *Objektschlüssel* oder -namen in den Name-Wert-Paaren der Quelle mit den Namen der Spalten in der Zieltabelle.   
Im Folgenden finden Sie nähere Angaben zu den einzelnen *json\$1option*-Werten:    
'auto'  <a name="copy-json-auto"></a>
Bei dieser Option wird zwischen Groß- und Kleinschreibung unterschieden. Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende JSON-Feldnamen ebenfalls Kleinbuchstaben verwenden, wenn Sie die Option `'auto'` verwenden.  
'auto ignorecase'  <a name="copy-json-auto-ignorecase"></a>
Bei dieser Option wird nicht zwischen Groß- und Kleinschreibung unterschieden. Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Wenn Sie die Option `'auto ignorecase'` verwenden, können entsprechende JSON-Feldnamen Kleinbuchstaben, Großbuchstaben oder beides verwenden.   
's3://*jsonpaths\$1file*'  <a name="copy-json-pathfile"></a>
Bei dieser Option verwendet COPY die benannte JSONPaths Datei, um die Datenelemente in den JSON-Quelldaten den Spalten in der Zieltabelle zuzuordnen. Das *`s3://jsonpaths_file`*-Argument muss ein Amazon S3-Objektschlüssel sein, der explizit auf eine einzelne Datei verweist. Ein Beispiel ist `'s3://amzn-s3-demo-bucket/jsonpaths.txt`'. Das Argument darf kein Schlüsselpräfix sein. Weitere Hinweise zur Verwendung einer JSONPaths Datei finden Sie unter[JSONPaths Datei](#copy-json-jsonpaths).  
In einigen Fällen hat die von `jsonpaths_file` angegebene Datei dasselbe Präfix wie der von `copy_from_s3_objectpath` angegebene Pfad für die Datendateien. Falls ja, liest COPY die JSONPaths Datei als Datendatei und gibt Fehler zurück. Nehmen wir zum Beispiel an, dass Ihre Datendateien den Objektpfad verwenden `s3://amzn-s3-demo-bucket/my_data.json` und Ihre JSONPaths Datei bereits`s3://amzn-s3-demo-bucket/my_data.jsonpaths`. In diesem Fall versucht COPY, `my_data.jsonpaths` als Datendatei zu laden.  
'noshred'  <a name="copy-json-noshred"></a>
Mit dieser Option zerlegt Amazon Redshift die Attribute von JSON-Strukturen beim Laden eines JSON-Dokuments nicht in mehrere Spalten.

## JSON-Datendatei
<a name="copy-json-data-file"></a>

Die JSON-Datendatei enthält einen Satz von Objekten oder einen Satz von Arrays. COPY lädt jedes JSON-Objekt oder -Array in eine einzige Zeile in der Zieltabelle. Jedes Objekt oder Array, das einer Zeile entspricht, muss eine eigenständige Struktur auf Stammebene besitzen, d. h., es darf kein Mitglied einer anderen JSON-Struktur sein.

Ein JSON-*Objekt* beginnt und endet mit geschweiften Klammern (\$1\$1) und enthält eine nicht geordnete Sammlung von Name/Wert-Paaren. Name und Wert in einem Paar werden durch einen Doppelpunkt getrennt und die Paare werden durch Kommas getrennt. Standardmäßig muss der *Objektschlüssel* bzw. Name in den Name-Wert-Paaren mit dem Namen der entsprechenden Spalte in der Tabelle übereinstimmen. Spaltennamen in Amazon-Redshift-Tabellen verwenden stets Kleinbuchstaben. Daher müssen übereinstimmende JSON-Feldnamenschlüssel ebenfalls Kleinbuchstaben verwenden. Wenn Ihre Spaltennamen und JSON-Schlüssel nicht übereinstimmen, verwenden Sie [JSONPaths Datei](#copy-json-jsonpaths), um Spalten explizit Schlüsseln zuzuweisen. 

Die Reihenfolge in einem JSON-Objekt spielt keine Rolle. Namen, die mit keiner Spalte übereinstimmen, werden ignoriert. Im Folgenden wird die Struktur eines einfachen JSON-Objekts gezeigt.

```
{
  "column1": "value1",
  "column2": value2,
  "notacolumn" : "ignore this value"
}
```

Ein JSON-*Array* beginnt und endet mit eckigen Klammern ([]) und enthält eine geordnete Sammlung von Werten, getrennt durch Kommas. Wenn Ihre Datendateien Arrays verwenden, müssen Sie eine JSONPaths Datei angeben, um die Werte den Spalten zuzuordnen. Im Folgenden wird die Struktur eines einfachen JSON-Arrays gezeigt. 

```
["value1", value2]
```

JSON muss wohl geformt sein. Die Objekte oder Arrays dürfen beispielsweise nicht durch Kommas oder andere Zeichen getrennt werden, sondern nur durch Leerzeichen. Zeichenfolgen müssen in doppelte Anführungszeichen eingeschlossen werden. Bei den Anführungszeichen muss es sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarten“ Anführungszeichen sein.

Die maximale Größe eines einzelnen JSON-Objekts oder -Arrays einschließlich geschweifter oder eckiger Klammern beträgt 4 MB. Dies ist etwas anderes als die maximale Zeilengröße. Wenn die maximale Größe eines einzelnen JSON-Objekts oder Arrays überschritten wird, schlägt der COPY-Befehl fehl. Dies ist auch dann der Fall, wenn die entsprechende Zeilengröße unter der Grenze von 4 MB für Zeilengrößen liegt. 

Bei der Berechnung der Zeilengröße zählt Amazon Redshift intern Pipe-Zeichen (\$1) zweimal. Wenn Ihre Eingabedaten eine sehr große Zahl von Pipe-Zeichen enthalten, ist es möglich, dass die Zeilengröße 4 MB überschreitet, auch wenn die Objektgröße weniger als 4 MB beträgt.

COPY lädt `\n` als Zeichen für neue Zeilen und `\t` als Tabulatorzeichen. Um einen Backslash zu laden, muss ein Backslash als Escape-Zeichen verwendet werden ( `\\` ).

COPY durchsucht die angegebene JSON-Quelle nach einem wohl geformten, gültigen JSON-Objekt oder -Array. Wenn COPY vor dem Auffinden einer verwendbaren JSON-Struktur oder zwischen gültigen JSON-Objekten oder -Arrays auf Zeichen stößt, die keine Leerzeichen sind, gibt COPY für jede Instance einen Fehler zurück. Diese Fehler werden auf die MAXERROR-Fehlerzahl angerechnet. Wenn die Fehlerzahl gleich oder größer als MAXERROR ist, schlägt COPY fehl. 

Für jeden Fehler zeichnet Amazon Redshift eine Zeile in der Systemtabelle STL\$1LOAD\$1ERRORS auf. Die Spalte LINE\$1NUMBER zeichnet die letzte Zeile des JSON-Objekts auf, das den Fehler verursacht hat. 

Wenn IGNOREHEADER angegeben ist, ignoriert COPY die angegebene Zahl von Zeilen in den JSON-Daten. Zeichen für neue Zeilen in den JSON-Daten werden stets für IGNOREHEADER-Berechnungen berücksichtigt. 

COPY lädt leere Zeichenfolgen standardmäßig als leere Felder. Wenn EMPTYASNULL angegeben ist, lädt COPY leere Zeichenfolgen für CHAR- und VARCHAR-Felder als NULL. Leere Zeichenfolgen für andere Datentypen, beispielsweise INT, werden stets mit NULL geladen. 

Die folgenden Optionen werden für JSON nicht unterstützt: 
+ CSV
+ DELIMITER 
+ ESCAPE
+ FILLRECORD 
+ FIXEDWIDTH
+ IGNOREBLANKLINES
+ NULL AS
+ READRATIO
+ REMOVEQUOTES 

Weitere Informationen finden Sie unter [COPY von JSON-Format](copy-usage_notes-copy-from-json.md). Weitere Informationen zu JSON-Datenstrukturen finden Sie unter [www.json.org](https://www.json.org/). 

## JSONPaths Datei
<a name="copy-json-jsonpaths"></a>

Wenn Sie Daten aus Quelldaten im JSON-Format oder aus Avro-Quelldaten laden, weist COPY standardmäßig die Datenelemente auf der ersten Ebene in den Quelldaten den Spalten in der Zieltabelle zu. Dazu wird jeder Name bzw. Objektschlüssel in einem Name-Wert-Paar mit dem Namen einer Spalte in der Zieltabelle abgeglichen. 

Wenn Ihre Spaltennamen und Objektschlüssel nicht übereinstimmen oder um sie tieferen Ebenen in der Datenhierarchie zuzuordnen, können Sie eine JSONPaths Datei verwenden, um JSON- oder Avro-Datenelemente explizit Spalten zuzuordnen. Die JSONPaths Datei ordnet JSON-Datenelemente Spalten zu, indem sie die Spaltenreihenfolge in der Zieltabelle oder Spaltenliste anpasst.

Die JSONPaths Datei darf nur ein einzelnes JSON-Objekt (kein Array) enthalten. Das JSON-Objekt ist ein Name-Wert-Paar. Der *Objektschlüssel* (der Name im Name-Wert-Paar) muss `"jsonpaths"` sein. *Der *Wert* im Name-Wert-Paar ist ein Array von JSONPath Ausdrücken.* Jeder JSONPath Ausdruck verweist auf ein einzelnes Element in der JSON-Datenhierarchie oder im Avro-Schema, ähnlich wie ein XPath Ausdruck auf Elemente in einem XML-Dokument verweist. Weitere Informationen finden Sie unter [JSONPath Ausdrücke](#copy-json-jsonpath-expressions).

Um eine JSONPaths Datei zu verwenden, fügen Sie dem Befehl COPY das Schlüsselwort JSON oder AVRO hinzu. Geben Sie den S3-Bucket-Namen und den Objektpfad der JSONPaths Datei im folgenden Format an.

```
COPY tablename 
FROM 'data_source' 
CREDENTIALS 'credentials-args' 
FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
```

Der `s3://jsonpaths_file`-Wert muss ein Amazon S3-Objektschlüssel sein, der explizit auf eine einzelne Datei verweist, z. B. `'s3://amzn-s3-demo-bucket/jsonpaths.txt'`. Es darf kein Schlüsselpräfix sein. 

Bei Ladevorgängen aus Amazon S3 hat die von `jsonpaths_file` angegebene Datei in einigen Fällen dasselbe Präfix wie der von `copy_from_s3_objectpath` angegebene Pfad für die Datendateien. Falls ja, liest COPY die JSONPaths Datei als Datendatei und gibt Fehler zurück. Nehmen wir zum Beispiel an, dass Ihre Datendateien den Objektpfad verwenden `s3://amzn-s3-demo-bucket/my_data.json` und Ihre JSONPaths Datei bereits`s3://amzn-s3-demo-bucket/my_data.jsonpaths`. In diesem Fall versucht COPY, `my_data.jsonpaths` als Datendatei zu laden.

 Wenn der Schlüsselname eine andere Zeichenfolge als `"jsonpaths"` ist, gibt der COPY-Befehl keinen Fehler zurück, sondern ignoriert *jsonpaths\$1file* und verwendet stattdessen das Argument `'auto'`. 

Wenn eine der folgenden Bedingungen zutrifft, schlägt der COPY-Befehl fehl:
+ Der JSON-Code ist schlecht geformt.
+ Es gibt mehr als ein JSON-Objekt.
+ Außerhalb des Objekts sind Zeichen (außer Leerzeichen) vorhanden.
+ Ein Array-Element ist eine leere Zeichenfolge oder keine Zeichenfolge.

MAXERROR gilt nicht für die JSONPaths Datei. 

Die JSONPaths Datei darf nicht verschlüsselt sein, auch wenn die [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) Option angegeben ist.

Weitere Informationen finden Sie unter [COPY von JSON-Format](copy-usage_notes-copy-from-json.md). 

## JSONPath Ausdrücke
<a name="copy-json-jsonpath-expressions"></a>

Die JSONPaths Datei verwendet JSONPath Ausdrücke, um Datenfelder Zielspalten zuzuordnen. Jeder JSONPath Ausdruck entspricht einer Spalte in der Amazon Redshift Redshift-Zieltabelle. Die Reihenfolge der JSONPath Array-Elemente muss mit der Reihenfolge der Spalten in der Zieltabelle oder der Spaltenliste übereinstimmen, wenn eine Spaltenliste verwendet wird. 

Doppelte Anführungszeichen sind sowohl für Feldnamen als auch für Werte erforderlich. Es muss sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarten“ Anführungszeichen sein.

Wenn ein Objektelement, auf das ein JSONPath Ausdruck verweist, in den JSON-Daten nicht gefunden wird, versucht COPY, einen NULL-Wert zu laden. Wenn das referenzierte Objekt schlecht geformt ist, gibt COPY einen Ladefehler zurück. 

Wenn ein Array-Element, auf das von einem JSONPath Ausdruck verwiesen wird, in den JSON- oder Avro-Daten nicht gefunden wird, schlägt COPY mit dem folgenden Fehler fehl: `Invalid JSONPath format: Not an array or index out of range.` Entfernen Sie alle Array-Elemente aus dem JSONPaths , die in den Quelldaten nicht vorhanden sind, und überprüfen Sie, ob die Arrays in den Quelldaten korrekt geformt sind.  

Die JSONPath Ausdrücke können entweder die Klammernotation oder die Punktnotation verwenden, aber Sie können Notationen nicht mischen. Das folgende Beispiel zeigt JSONPath Ausdrücke, die die Klammernotation verwenden. 

```
{
    "jsonpaths": [
        "$['venuename']",
        "$['venuecity']",
        "$['venuestate']",
        "$['venueseats']"
    ]
}
```

Das folgende Beispiel zeigt JSONPath Ausdrücke in Punktnotation. 

```
{
    "jsonpaths": [
        "$.venuename",
        "$.venuecity",
        "$.venuestate",
        "$.venueseats"
    ]
}
```

Im Kontext der Amazon Redshift COPY-Syntax muss ein JSONPath Ausdruck den expliziten Pfad zu einem einzelnen Namenselement in einer hierarchischen JSON- oder Avro-Datenstruktur angeben. Amazon Redshift unterstützt keine JSONPath Elemente wie Platzhalterzeichen oder Filterausdrücke, die zu einem mehrdeutigen Pfad oder mehreren Namenselementen aufgelöst werden könnten.

Weitere Informationen finden Sie unter [COPY von JSON-Format](copy-usage_notes-copy-from-json.md). 

## Verwendung JSONPaths mit Avro Data
<a name="using-jsonpath-with-avro"></a>

Im folgenden Beispiel wird ein Avro-Schema mit mehreren Ebenen gezeigt.

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "isActive", "type": "boolean"},
        {"name": "age", "type": "int"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"},
        {"name": "latitude", "type": "double"},
        {"name": "longitude", "type": "double"},
        {
            "name": "tags",
            "type": {
                        "type" : "array",
                        "name" : "inner_tags",
                        "items" : "string"
                    }
        },
        {
            "name": "friends",
            "type": {
                        "type" : "array",
                        "name" : "inner_friends",
                        "items" : {
                                    "name" : "friends_record",
                                    "type" : "record",
                                    "fields" : [
                                                 {"name" : "id", "type" : "int"},
                                                 {"name" : "name", "type" : "string"}
                                               ]
                                  }
                    }
        },
        {"name": "randomArrayItem", "type": "string"}
    ]
}
```

Das folgende Beispiel zeigt eine JSONPaths Datei, die AvroPath Ausdrücke verwendet, um auf das vorherige Schema zu verweisen. 

```
{
    "jsonpaths": [
        "$.id",
        "$.guid",
        "$.address",
        "$.friends[0].id"
    ]
}
```

Das JSONPaths Beispiel umfasst die folgenden Elemente:

jsonpaths  
Der Name des JSON-Objekts, das die AvroPath Ausdrücke enthält.

[ … ]  
Eckige Klammern schließen das JSON-Array ein, das die Pfadelemente enthält.

\$1  
Das Dollarzeichen bezieht sich auf das Stammelement im Avro-Schema, das das `"fields"`-Array ist.

"\$1.id",  
Das Ziel des AvroPath Ausdrucks. In diesem Fall ist das Ziel das Element im `"fields"`-Array mit dem Namen `"id"`. Die Ausdrücke werden durch Kommas getrennt.

"\$1.friends[0].id"  
Klammern geben einen Array-Index an. JSONPath Ausdrücke verwenden eine nullbasierte Indizierung, sodass dieser Ausdruck auf das erste Element im `"friends"` Array mit dem Namen verweist. `"id"`

Die Avro-Schemasyntax erfordert die Verwendung von *internen Feldern*, um die Struktur der Datensatz- und Array-Datentypen zu definieren. Die inneren Felder werden von den Ausdrücken ignoriert. AvroPath Beispielsweise definiert das Feld `"friends"` ein Array namens `"inner_friends"`, das wiederum einen Datensatz namens `"friends_record"` definiert. Der AvroPath Ausdruck, der auf das Feld verweist, `"id"` kann die zusätzlichen Felder ignorieren, um direkt auf das Zielfeld zu verweisen. Die folgenden AvroPath Ausdrücke verweisen auf die beiden Felder, die zum `"friends"` Array gehören.

```
"$.friends[0].id"
"$.friends[0].name"
```

## Spaltendatenformat-Parameter
<a name="copy-parameters-columnar-data"></a>

Neben den Standarddatenformaten unterstützt COPY die folgenden spaltenbasierten Datenformate für COPY aus Amazon S3. COPY aus einem Spaltenformat wird mit bestimmten Einschränkungen unterstützt. Weitere Informationen finden Sie unter [COPY aus spaltenbasierten Datenformaten](copy-usage_notes-copy-from-columnar.md). 

ORC  <a name="copy-orc"></a>
Lädt die Daten aus einer Datei im Optimized Row Columnar (ORC)-Format. 

PARQUET  <a name="copy-parquet"></a>
Lädt die Daten aus einer Datei im Parquet-Format. 

# Dateikomprimierungsparameter
<a name="copy-parameters-file-compression"></a>

Sie können Daten aus komprimierten Datendateien laden, indem Sie die folgenden Parameter angeben. Dateikomprimierungsparameter

BZIP2   <a name="copy-bzip2"></a>
Ein Wert, der angibt, dass die Eingabedatei oder die Eingabedateien das komprimierte bzip2-Format (.bz2-Dateien) aufweist/aufweisen. Die COPY-Operation liest jede komprimierte Datei und entkomprimiert die Daten während des Ladens.

GZIP   <a name="copy-gzip"></a>
Ein Wert, der angibt, dass die Eingabedatei oder die Eingabedateien das komprimierte gzip-Format (.gz-Dateien) aufweist/aufweisen. Die COPY-Operation liest jede komprimierte Datei und entkomprimiert die Daten während des Ladens.

LZOP   <a name="copy-lzop"></a>
Ein Wert, der angibt, dass die Eingabedatei oder die Eingabedateien das komprimierte lzop-Format (.lzo-Dateien) aufweist/aufweisen. Die COPY-Operation liest jede komprimierte Datei und entkomprimiert die Daten während des Ladens.  
COPY unterstützt keine Dateien, die mittels der lzop-Option *--filter* komprimiert wurden.

ZSTD   <a name="copy-zstd"></a>
Ein Wert, der angibt, dass die Eingabedatei oder die Eingabedateien das komprimierte Zstandard-Format (.zst-Dateien) aufweist/aufweisen. Die COPY-Operation liest jede komprimierte Datei und entkomprimiert die Daten während des Ladens.  
ZSTD wird nur für COPY aus Amazon S3 unterstützt.

# Datenkonvertierungsparameter
<a name="copy-parameters-data-conversion"></a>

Wenn COPY die Tabelle lädt, versucht der Befehl implizit, die Zeichenfolgen in den Quelldaten in den Datentyp der Zielspalte zu konvertieren. Wenn Sie eine Konvertierung angeben müssen, die sich vom Standardverhalten unterscheidet, oder wenn die Standardkonvertierung zu Fehlern führt, können Sie Datenkonvertierungen verwalten, indem Sie die folgenden Parameter angeben. Weitere Informationen zur Syntax dieser Parameter finden Sie unter [COPY-Syntax](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax).
+ [ACCEPTANYDATE](#copy-acceptanydate) 
+ [ACCEPTINVCHARS](#copy-acceptinvchars) 
+ [BLANKSASNULL](#copy-blanksasnull) 
+ [DATEFORMAT](#copy-dateformat) 
+ [EMPTYASNULL](#copy-emptyasnull) 
+ [ENCODING](#copy-encoding) 
+ [ESCAPE](#copy-escape) 
+ [EXPLICIT_IDS](#copy-explicit-ids) 
+ [FILLRECORD](#copy-fillrecord) 
+ [IGNOREBLANKLINES](#copy-ignoreblanklines) 
+ [IGNOREHEADER](#copy-ignoreheader) 
+ [NULL AS](#copy-null-as) 
+ [REMOVEQUOTES](#copy-removequotes) 
+ [ROUNDEC](#copy-roundec) 
+ [TIMEFORMAT](#copy-timeformat) 
+ [TRIMBLANKS](#copy-trimblanks) 
+ [TRUNCATECOLUMNS](#copy-truncatecolumns) <a name="copy-data-conversion-parameters"></a>Datenkonvertierungsparameter

ACCEPTANYDATE   <a name="copy-acceptanydate"></a>
Ermöglicht das Laden jedes Datumsformats einschließlich ungültiger Formate wie `00/00/00 00:00:00`, ohne dass ein Fehler generiert wird. Dieser Parameter gilt nur für die Spalten TIMESTAMP und DATE. Verwenden Sie ACCEPTANYDATE stets mit dem Parameter DATEFORMAT. Wenn das Datumsformat für die Daten nicht der Spezifikation DATEFORMAT entspricht, fügt Amazon Redshift einen NULL-Wert in das betreffende Feld ein.

ACCEPTINVCHARS [AS] ['*replacement\$1char*']   <a name="copy-acceptinvchars"></a>
Ermöglicht das Laden von Daten in VARCHAR-Spalten, auch wenn die Daten ungültige UTF-8-Zeichen enthalten. Wenn ACCEPTINVCHARS angegeben ist, ersetzt COPY jedes ungültige UTF-8-Zeichen durch eine Zeichenfolge mit gleicher Länge, die aus dem Zeichen besteht, das von *replacement\$1char* angegeben wird. Wenn das Ersetzungszeichen beispielsweise `^` ist, wird ein ungültiges Zeichen mit drei Bytes durch `^^^` ersetzt.  
 Das Ersetzungszeichen kann aus jedem ASCII-Zeichen außer NULL bestehen. Der Standardwert ist das Fragezeichen (?). Informationen zu ungültigen UTF-8-Zeichen finden Sie unter [Fehler beim Laden von Multibyte-Zeichen](multi-byte-character-load-errors.md).  
COPY gibt die Anzahl der Zeilen mit ungültigen UTF-8-Zeichen zurück und fügt der Systemtabelle [STL\$1REPLACEMENTS](r_STL_REPLACEMENTS.md) einen Eintrag für jede betroffene Zeile hinzu (bis zu maximal 100 Zeilen pro Knoten-Slice). Zusätzliche ungültige UTF-8-Zeichen werden ebenfalls ersetzt. Diese Ersetzungsereignisse werden jedoch nicht aufgezeichnet.  
Wenn ACCEPTINVCHARS nicht angegeben ist, gibt COPY einen Fehler zurück, wenn der Befehl auf ein ungültiges UTF-8-Zeichen trifft.   
ACCEPTINVCHARS ist nur für VARCHAR-Spalten gültig.

BLANKSASNULL   <a name="copy-blanksasnull"></a>
Lädt leere Felder, die nur aus Leerzeichen bestehen, als NULL. Diese Option gilt nur für CHAR- und VARCHAR-Spalten. Leere Felder für andere Datentypen, beispielsweise INT, werden stets mit NULL geladen. Beispielsweise wird eine Zeichenfolge, die drei aufeinanderfolgende Leerzeichen (und keine anderen Zeichen) enthält, als NULL geladen. Das Standardverhalten (ohne Angabe dieser Option) besteht im Laden der Leerzeichen wie vorhanden. 

DATEFORMAT [AS] \$1'*dateformat\$1string*' \$1 'auto' \$1  <a name="copy-dateformat"></a>
Wenn kein DATEFORMAT angegeben ist, ist das Standardformat `'YYYY-MM-DD'`. Ein alternatives gültiges Format ist beispielsweise `'MM-DD-YYYY'`.   
Wenn der COPY-Befehl das Format Ihrer Datums- oder Zeitwerte nicht erkennt oder Ihre Datums- oder Zeitwerte unterschiedliche Formate verwenden, verwenden Sie das Argument `'auto'` mit dem Parameter DATEFORMAT oder TIMEFORMAT. Das Argument `'auto'` erkennt verschiedene Formate, die bei der Verwendung einer DATEFORMAT- und TIMEFORMAT-Zeichenfolge nicht unterstützt werden. Das Schlüsselwort `'auto'` unterscheidet zwischen Groß- und Kleinschreibung. Weitere Informationen finden Sie unter [Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT](automatic-recognition.md).   
Das Datumsformat kann Zeitinformationen (Stunde, Minuten, Sekunden) enthalten. Diese Informationen werden jedoch ignoriert. Das Schlüsselwort AS ist optional. Weitere Informationen finden Sie unter [DATEFORMAT- und TIMEFORMAT-ZeichenfolgenBeispiel](r_DATEFORMAT_and_TIMEFORMAT_strings.md).

EMPTYASNULL   <a name="copy-emptyasnull"></a>
Zeigt an, dass Amazon Redshift leere CHAR- und VARCHAR-Felder als NULL laden soll. Leere Felder für andere Datentypen, beispielsweise INT, werden stets mit NULL geladen. Leere Felder treten auf, wenn Daten zwei aufeinanderfolgende Trennzeichen enthalten, ohne dass sich zwischen den Trennzeichen Zeichen befinden. EMPTYASNULL und NULL AS '' (leere Zeichenfolge) führen zum selben Verhalten.

ENCODING [AS] *file\$1encoding*  <a name="copy-encoding"></a>
Gibt den Kodierungstyp der Daten an, die geladen werden. Der COPY-Befehl konvertiert während des Ladens die Daten aus der angegebenen Kodierung in UTF-8.   
Gültige Werte für *file\$1encoding* sind folgende:  
+ `UTF8`
+ `UTF16`
+ `UTF16LE`
+ `UTF16BE`
+ `ISO88591`
Der Standardwert ist `UTF8`.  
Quelldateinamen müssen UTF-8-Kodierung verwenden.  
Die folgenden Dateien müssen UTF-8-Kodierung verwenden, auch wenn für die Daten, die geladen werden, eine andere Kodierung angegeben ist:  
+ Manifestdateien
+ JSONPaths Dateien
Die mit den folgenden Parametern bereitgestellten Argumentzeichenfolgen müssen UTF-8 verwenden:  
+ FIXEDWIDTH '*fixedwidth\$1spec*'
+ ACCEPTINVCHARS '*replacement\$1char*'
+ DATEFORMAT '*dateformat\$1string*'
+ TIMEFORMAT '*timeformat\$1string*'
+ NULL AS '*null\$1string*'
Datendateien mit fester Breite müssen UTF-8-Kodierung verwenden. Die Feldbreiten basieren auf der Anzahl der Zeichen, nicht der Bytes.   
Alle geladenen Daten müssen die angegebene Kodierung verwenden. Wenn COPY auf eine andere Kodierung trifft, werden die Datei übersprungen und ein Fehler zurückgegeben.   
Wenn Sie `UTF16` angeben, müssen Ihre Daten eine Byte-Reihenfolgenmarkierung (Byte Order Mark, BOM) besitzen. Wenn Sie wissen, ob Ihre UTF-16-Daten little-endian (LE) oder big-endian (BE) sind, können Sie unabhängig vom Vorhandensein einer BOM `UTF16LE` oder `UTF16BE` verwenden.   
Um die Kodierung ISO-8859-1 zu verwenden, geben Sie `ISO88591` an. Weitere Informationen finden Sie unter [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1) in *Wikipedia*.

ESCAPE   <a name="copy-escape"></a>
Wenn dieser Parameter angegeben ist, wird das Backslash-Zeichen (`\`) in Eingabedaten als Escape-Zeichen behandelt. Das Zeichen, das dem Backslash-Zeichen folgt, wird als Teil des aktuellen Spaltenwerts in die Tabelle geladen, auch wenn es sich um ein Zeichen handelt, das normalerweise einem speziellen Zweck dient. Sie können diesen Parameter beispielsweise verwenden, um das Trennzeichen, ein Fragezeichen, ein eingebettetes Zeichen für neue Zeilen oder das Escape-Zeichen selbst mit einer Escape-Markierung zu markieren, wenn eines dieser Zeichen legitimer Teil eines Spaltenwerts ist.  
Wenn Sie den Parameter ESCAPE in Kombination mit dem Parameter REMOVEQUOTES angeben, können Sie Anführungszeichen (`'` oder `"`) mit Escape-Zeichen markieren und beibehalten, die ansonsten möglicherweise entfernt würden. Die standardmäßige Null-Zeichenfolge `\N` funktioniert wie vorhanden, kann jedoch in den Eingabedaten ebenfalls mit einem Escape-Zeichen markiert werden: `\\N`. Solange sie keine alternative Null-Zeichenfolge mit dem Parameter NULL AS angeben, führen `\N` und `\\N` zu denselben Ergebnissen.  
Das Steuerzeichen `0x00` (NUL) kann nicht mit einem Escape-Zeichen markiert werden und sollte aus den Eingabedaten entfernt werden oder konvertiert werden. Dieses Zeichen wird als Markierung für das Ende von Datensätzen (End of Record, EOR) verwendet, was dazu führt, dass der Rest des Datensatzes abgeschnitten wird.
Sie können den Parameter ESCAPE nicht bei FIXEDWIDTH-Ladevorgängen verwenden. Darüber hinaus können Sie das Escape-Zeichen selbst nicht angeben; das Escape Zeichen ist stets das Backslash-Zeichen. Außerdem müssen Sie sicherstellen, dass die Eingabedaten das Escape-Zeichen an den richtigen Stellen enthalten.  
Im Folgenden finden Sie einige Beispiele für Eingabedaten und die entsprechenden geladenen Daten, wenn der Parameter ESCAPE angegeben ist. Das Ergebnis für Zeile 4 geht davon aus, dass der Parameter REMOVEQUOTES ebenfalls angegeben ist. Die Eingabedaten bestehen aus zwei Feldern, die durch das Pipe-Zeichen getrennt sind:   

```
1|The quick brown fox\[newline]
jumped over the lazy dog.
2| A\\B\\C
3| A \| B \| C
4| 'A Midsummer Night\'s Dream'
```
Die Daten, die in Spalte 2 geladen wurden, sehen wie folgt aus:   

```
The quick brown fox
jumped over the lazy dog.
A\B\C
A|B|C
A Midsummer Night's Dream
```
Die Anwendung des Escape-Zeichens auf die Eingabedaten, die geladen werden sollen, liegt in der Verantwortung der Benutzer. Eine Ausnahme für diese Anforderung liegt dann vor, wenn Sie Daten erneut laden, die zuvor mit dem Parameter ESCAPE entladen wurden. In diesem Fall enthalten die Daten die notwendigen Escape-Zeichen bereits.
Der Parameter ESCAPE interpretiert keine Oktal-, Hex-, Unicode- oder andere Escape-Sequenznotierungen. Wenn Ihre Quelldaten beispielsweise den oktalen Zeilen-Feed-Wert (`\012`) enthalten und Sie versuchen, diese Daten mit dem Parameter ESCAPE zu laden, lädt Amazon Redshift den Wert `012` in die Tabelle und interpretiert diesen Wert nicht als Zeilen-Feed, der mit einem Escape-Zeichen markiert wurde.  
Um in Daten, die aus Microsoft Windows-Plattformen stammen, das Zeichen für neue Zeilen mit einem Escape-Zeichen zu markieren, müssen Sie möglicherweise zwei Escape-Zeichen verwenden: ein Zeichen für die Zeilenumschaltung und ein Zeichen für den Zeilen-Feed. Alternativ können Sie die Zeilenumschaltungen vor dem Laden der Datei entfernen (beispielsweise durch Verwendung des Hilfsprogramms dos2unix).

EXPLICIT\$1IDS   <a name="copy-explicit-ids"></a>
Verwenden Sie EXPLICIT\$1IDS für Tabellen, die IDENTITY-Spalten besitzen, wenn Sie die automatisch generierten Werte durch explizite Werte aus den Quelldatendateien für die Tabellen überschreiben möchten. Wenn der Befehl eine Spaltenliste enthält, muss diese Liste die IDENTITY-Spalten enthalten, um diesen Parameter verwenden zu können. Das Datenformat für EXPLICIT\$1IDS-Werte muss mit dem IDENTITY-Format übereinstimmen, das von der Definition CREATE TABLE angegeben wird.  
Nachdem Sie einen COPY-Befehl mit der EXPLICIT\$1IDS-Option für eine Tabelle ausgeführt haben, überprüft Amazon Redshift die Eindeutigkeit von IDENTITY-Spalten in der Tabelle nicht.  
Wenn eine Spalte mit GENERATED BY DEFAULT AS IDENTITY definiert ist, kann sie kopiert werden. Die Werte werden mit den von Ihnen angegebenen Werten generiert oder aktualisiert. Die Option EXPLICIT\$1IDS ist nicht erforderlich. COPY aktualisiert nicht die Identity High Watermark.  
 Ein Beispiel für einen COPY-Befehl mit EXPLICIT\$1IDS finden Sie unter [Laden von VENUE mit expliziten Werte für eine IDENTITY-Spalte](r_COPY_command_examples.md#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column).

FILLRECORD   <a name="copy-fillrecord"></a>
Ermöglicht das Laden von Datendateien, wenn am Ende einiger Datensätze angrenzende Spalten fehlen. Die fehlenden Spalten werden geladen als NULLs. Wenn es sich bei der fehlenden Spalte bei Text- und CSV-Formaten um eine VARCHAR-Spalte handelt, werden stattdessen leere Zeichenketten geladen. NULLs Um Daten aus Text und CSV NULLs in VARCHAR-Spalten zu laden, geben Sie das Schlüsselwort EMPTYASNULL an. Die NULL-Ersetzung funktioniert nur, wenn die Spaltendefinition dies zulässt. NULLs  
Wenn die Tabellendefinition beispielsweise vier nullwertfähige CHAR-Spalten enthält und ein Datensatz die Werte `apple, orange, banana, mango` enthält, könnte der COPY-Befehl einen Datensatz laden und ausfüllen, der nur die Werte `apple, orange` enthält. Die fehlenden CHAR-Werte würden als NULL-Werte geladen.

IGNOREBLANKLINES   <a name="copy-ignoreblanklines"></a>
Ignoriert leere Zeilen, die nur einen Zeilen-Feed in einer Datendatei enthalten, und versucht nicht, sie zu laden.

IGNOREHEADER [ AS ] *number\$1rows*   <a name="copy-ignoreheader"></a>
Behandelt die angegebene *number\$1rows* als Dateiheader und lädt sie nicht. Sie verwenden IGNOREHEADER, um in einem parallelen Ladevorgang Dateiheader in allen Dateien zu überspringen.

NULL AS '*null\$1string*'   <a name="copy-null-as"></a>
Lädt Felder, die mit *null\$1string* als NULL übereinstimmen, wobei *null\$1string* jede Zeichenfolge sein kann. Wenn Ihre Daten einen Null-Terminator enthalten, auch als NUL (UTF-8 0000) oder Binär-Null (0x000) bezeichnet, behandelt COPY diesen als ein beliebiges anderes Zeichen. Zum Beispiel wird ein Datensatz, der '1' \$1\$1 NUL \$1\$1 '2' enthält, als Zeichenkette der Länge 3 Bytes kopiert. Wenn ein Feld nur NUL enthält, können Sie NULL AS verwenden, um den Nullterminator durch NULL zu ersetzen, indem Sie `'\0'` oder `'\000'`angeben, z. B. `NULL AS '\0'` oder `NULL AS '\000'`. Wenn ein Feld eine Zeichenfolge enthält, die mit NUL endet, und NULL AS angegeben ist, wird die Zeichenfolge mit NUL am Ende eingefügt. Verwenden Sie für den *null\$1string*-Wert nicht '\$1n' (Zeilenumbruch). Amazon Redshift reserviert '\$1n' für die Verwendung als Zeilentrennzeichen. Der Standardwert für *null\$1string* ist `'\N`'.  
Wenn Sie versuchen, Null-Werte in eine Spalte zu laden, die als NOT NULL definiert ist, schlägt der Befehl COPY fehl.

REMOVEQUOTES   <a name="copy-removequotes"></a>
Entfernt in den eingehenden Daten Anführungszeichen, die Zeichenfolgen umschließen. Alle Zeichen innerhalb der Anführungszeichen einschließlich Trennzeichen bleiben bewahrt. Wenn eine Zeichenfolge mit einem einfachen oder doppelten Anführungszeichen beginnt, es jedoch kein entsprechendes schließendes Anführungszeichen gibt, lädt der COPY-Befehl diese Zeile nicht und gibt einen Fehler zurück. In der folgenden Tabelle werden einige einfache Beispiele für Zeichenfolgen mit Anführungszeichen und die entsprechenden geladenen Werte gezeigt.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/copy-parameters-data-conversion.html)

ROUNDEC   <a name="copy-roundec"></a>
Rundet numerische Werte auf, wenn die Skala des Eingabewerts größer als die Skala der Spalte ist. Standardmäßig schneidet COPY Werte ab, wenn notwendig, um sie an die Spaltenskala anzupassen. Wenn beispielsweise der Wert `20.259` in eine DECIMAL(8,2)-Spalte geladen wird, schneidet COPY den Wert standardmäßig auf `20.25` ab. Wenn ROUNDEC angegeben ist, rundet COPY den Wert auf auf `20.26`. Der INSERT-Befehl rundet Werte stets, wenn notwendig, um sie an die Spaltenskala anzupassen. Daher weist ein COPY-Befehl mit dem Parameter ROUNDEC dasselbe Verhalten wie ein INSERT-Befehl auf.

TIMEFORMAT [AS] \$1'*timeformat\$1string*' \$1 'auto' \$1 'epochsecs' \$1 'epochmillisecs' \$1  <a name="copy-timeformat"></a>
Gibt das Zeitformat an. Wenn TIMEFORMAT nicht angegeben wird, ist das Standardformat `YYYY-MM-DD HH:MI:SS` für TIMESTAMP-Spalten oder `YYYY-MM-DD HH:MI:SSOF` für TIMESTAMPTZ-Spalten, wobei `OF` der Unterschied zur Coordinated Universal Time (UTC) ist. Sie können in der *Zeitformatzeichenfolge* keinen Zeitzonenspezifikator verwenden. Um TIMESTAMPTZ-Daten zu laden, die sich in einem anderen Format als dem Standardformat befinden, geben Sie 'auto' an. Weitere Informationen finden Sie unter [Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT](automatic-recognition.md). Weitere Informationen zu *timeformat\$1string* finden Sie unter [DATEFORMAT- und TIMEFORMAT-ZeichenfolgenBeispiel](r_DATEFORMAT_and_TIMEFORMAT_strings.md).  
Das Argument `'auto'` erkennt verschiedene Formate, die bei der Verwendung einer DATEFORMAT- und TIMEFORMAT-Zeichenfolge nicht unterstützt werden. Wenn der COPY-Befehl das Format Ihrer Datums- oder Zeitwerte nicht erkennt oder Ihre Datums- oder Zeitwerte unterschiedliche verwenden, verwenden Sie das Argument `'auto'` mit dem Parameter DATEFORMAT oder TIMEFORMAT. Weitere Informationen finden Sie unter [Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT](automatic-recognition.md).   
Wenn Ihre Quelldaten als Epochenzeit dargestellt werden, d. h. als Zahl der Sekunden oder Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC, geben Sie `'epochsecs'` oder `'epochmillisecs'` an.   
Die Schlüsselwörter `'auto'`, `'epochsecs'` und `'epochmillisecs'` unterscheiden zwischen Groß- und Kleinschreibung.  
Das Schlüsselwort AS ist optional.

TRIMBLANKS   <a name="copy-trimblanks"></a>
Entfernt Leerzeichen am Ende von VARCHAR-Zeichenfolgen. Dieser Parameter gilt nur für die Spalten mit dem Datentyp VARCHAR.

TRUNCATECOLUMNS   <a name="copy-truncatecolumns"></a>
Schneidet Daten in Spalten auf die entsprechende Zahl von Zeichen ab, sodass sie der Spaltenspezifikation entsprechen. Gilt nur für Spalten mit dem Datentyp VARCHAR und CHAR und Zeilen mit einer Größe von 4 MB oder weniger.

# Datenladeoperationen
<a name="copy-parameters-data-load"></a>

Verwalten Sie das Standardverhalten der Ladeoperation, um Fehler zu beheben oder die Ladezeiten zu reduzieren, indem Sie die folgenden Parameter angeben. 
+ [COMPROWS](#copy-comprows) 
+ [COMPUPDATE](#copy-compupdate) 
+ [IGNOREALLERRORS](#copy-ignoreallerrors) 
+ [MAXERROR](#copy-maxerror) 
+ [NOLOAD](#copy-noload) 
+ [STATUPDATE](#copy-statupdate) <a name="copy-data-load-parameters"></a>Parameters

COMPROWS *numrows*   <a name="copy-comprows"></a>
Gibt die Anzahl der Zeilen an, die als Stichprobengröße für Kompressionsanalysen verwendet werden soll. Die Analyse wird für Zeilen aus jedem Daten-Slice ausgeführt. Wenn Sie beispielsweise `COMPROWS 1000000` (1.000.000) angeben und das System insgesamt vier Slices enthält, werden nicht mehr als 250.000 Zeilen pro Slice gelesen und analysiert.  
Wenn COMPROWS nicht angegeben wird, werden standardmäßig 100.000 Zeilen pro Slice als Stichprobe analysiert. Werte für COMPROWS, die niedriger als der Standardwert von 100.000 Zeilen pro Slice sind, werden automatisch auf den Standardwert aktualisiert. Es findet jedoch keine automatische Kompression statt, wenn die Menge der geladenen Daten nicht für eine relevante Stichrobe reicht.  
Wenn der Wert für COMPROWS größer als die Anzahl der Zeilen in der Eingabedatei ist, wird der Befehl COPY dennoch fortgesetzt und die Kompressionsanalyse wird für alle verfügbaren Zeilen ausgeführt. Der akzeptierte Bereich für dieses Argument ist eine Zahl zwischen 1000 und 2147483647 (2,147,483,647).

COMPUPDATE [ PRESET \$1 \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-compupdate"></a>
Steuert, ob während einer COPY-Operation automatisch komprimierende Codierungen angewendet werden.   
Während COMPUPDATE den Wert PRESET hat, wählt der COPY-Befehl die Komprimierungscodierung für jede Spalte, wenn die Zieltabelle leer ist. Dies gilt auch, wenn die Spalten bereits eine andere Codierung als RAW aufweisen. Aktuell angegebene Spaltenkodierungen können ersetzt werden. Die Codierung jeder Spalte basiert auf dem Datentyp der Spalte. Es werden keine Stichproben der Daten genommen. Amazon Redshift weist die Komprimierungskodierung automatisch wie folgt zu:  
+ Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als die Datentypen BOOLEAN, REAL oder DOUBLE PRECISION definiert sind, wird die RAW-Kodierung zugewiesen.
+ Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird Komprimierung zugewiesen. AZ64 
+ Spalten, die als CHAR oder VARCHAR definiert sind, wird LZO-Komprimierung zugewiesen.
Wenn COMPUPDATE ausgelassen wird, wählt der COPY-Befehl die Komprimierungskodierung für die einzelnen Spalten nur dann aus, wenn die Zieltabelle leer ist und Sie keine Kodierung (außer RAW) für die Spalten angegeben haben. Die Kodierung einer jeden Spalte wird durch Amazon Redshift bestimmt. Es werden keine Stichproben der Daten genommen.   
Wenn COMPUDATE auf ON (oder TRUE) festgelegt ist oder COMPUPDATE ohne Option angegeben wird, wendet der COPY-Befehl die automatische Komprimierung an, wenn die Tabelle leer ist, auch wenn die Tabellenspalten bereits andere Kodierungen als RAW aufweisen. Aktuell angegebene Spaltenkodierungen können ersetzt werden. Die Kodierung einer jeden Spalte basiert auf der Analyse von Stichprobendaten. Weitere Informationen finden Sie unter [Laden von Tabellen mit automatischer Kompression](c_Loading_tables_auto_compress.md).  
Wenn COMPUPDATE auf OFF (oder FALSE eingestellt ist), wird die automatische Kompression deaktiviert. Spaltenkodierungen werden nicht geändert.  
Informationen zur Systemtabelle für die Analyse der Komprimierung finden Sie unter [STL\$1ANALYZE\$1COMPRESSION](r_STL_ANALYZE_COMPRESSION.md). 

IGNOREALLERRORS   <a name="copy-ignoreallerrors"></a>
Sie können diese Option angeben, wenn alle Fehler, die während des Ladevorgangs auftreten, ignoriert werden sollen.   
Sie können die Option IGNOREALLERRORS nicht angeben, wenn Sie die Option MAXERROR verwenden. Sie können die Option IGNOREALLERRORS nicht für spaltenbasierte Formate wie ORC und Parquet angeben.

MAXERROR [AS] *error\$1count*   <a name="copy-maxerror"></a>
Wenn der Ladevorgang *error\$1count* Fehler oder mehr zurückgibt, schlägt der Ladevorgang fehl. Wenn der Ladevorgang weniger Fehler zurückgibt, wird er fortgesetzt und gibt eine INFO-Meldung zurück, die die Anzahl der Zeilen angibt, die nicht geladen werden konnten. Sie verwenden diesen Parameter, um die Fortsetzung von Ladevorgängen zuzulassen, wenn bestimmte Zeilen aufgrund von Formatierungsfehlern oder aufgrund anderer Inkonsistenzen in den Daten nicht in die Tabelle geladen werden können.   
Legen Sie diesen Wert auf `0` oder `1` fest, wenn der Ladevorgang fehlschlagen soll, sobald der erste Fehler auftritt. Das Schlüsselwort AS ist optional. Der Standardwert für MAXERROR ist `0` und das Limit ist `100000`.  
 Aufgrund der parallelen Struktur von Amazon Redshift kann die tatsächliche Zahl der gemeldeten Fehler größer als der für MAXERROR angegebene Wert sein. Wenn ein Knoten im Amazon-Redshift-Cluster feststellt, dass MAXERROR ausgeführt wurde, melden alle Knoten alle Fehler, die sie festgestellt haben.

NOLOAD   <a name="copy-noload"></a>
Prüft die Gültigkeit der Datendatei, ohne die Daten tatsächlich zu laden. Verwenden Sie den Parameter NOLOAD, um zu prüfen, ob die Datendatei ohne Fehler geladen wird, bevor der tatsächliche Datenladevorgang ausgeführt wird. COPY mit angegebenem Parameter NOLOAD ist sehr viel schneller als das Laden der Daten, da die Dateien lediglich analysiert werden.

STATUPDATE [ \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-statupdate"></a>
Regelt die automatische Berechnung und die Aktualisierung der Optimierungsstatistik am Ende eines erfolgreichen COPY-Befehls. Wenn der Parameter STATUPDATE nicht verwendet wird, werden die Statistiken automatisch aktualisiert, wenn die Tabelle anfangs leer ist.  
Wenn durch das Hinzufügen von Daten zu einer nicht leeren Tabelle die Größe der Tabelle erheblich verändert wird, sollten Sie die Statistik aktualisieren, indem Sie entweder einen [ANALYZE](r_ANALYZE.md)-Befehl ausführen oder das Argument STATUPDATE ON verwenden.  
Bei Verwendung des Arguments STATUPDATE ON (oder TRUE) werden die Statistiken automatisch aktualisiert, unabhängig davon, ob die Tabelle anfangs leer ist. Wenn STATUPDATE verwendet wird, muss der aktuelle Benutzer entweder der Tabellenbesitzer oder ein Superuser sein. Wenn STATUPDATE nicht angegeben ist, ist nur die INSERT-Berechtigung erforderlich.  
Bei Angabe von STATUPDATE OFF (oder FALSE) werden die Statistiken niemals aktualisiert.  
Weitere Informationen finden Sie unter [Analysieren von Tabellen](t_Analyzing_tables.md).

# Alphabetische Liste der Parameter
<a name="r_COPY-alphabetical-parm-list"></a>

In der folgenden List werden Links zur Beschreibung der einzelnen Parameter des COPY-Befehls in alphabetischer Reihenfolge bereitgestellt.
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate)
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars)
+ [ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id-access)
+ [AVRO](copy-parameters-data-format.md#copy-avro)
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull)
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows)
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate)
+ [CREDENTIALS](copy-parameters-authorization.md#copy-credentials-cred)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter)
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull)
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding)
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted)
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape)
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth)
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
+ [GZIP](copy-parameters-file-compression.md#copy-gzip)
+ [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role-iam)
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors)
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines)
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader)
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json)
+ [LZOP](copy-parameters-file-compression.md#copy-lzop)
+ [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
+ [MASTER_SYMMETRIC_KEY](copy-parameters-data-source-s3.md#copy-master-symmetric-key)
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror)
+ [NOLOAD](copy-parameters-data-load.md#copy-noload)
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as)
+ [READRATIO](copy-parameters-data-source-dynamodb.md#copy-readratio)
+ [REGION](copy-parameters-data-source-s3.md#copy-region)
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes)
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec)
+ [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token)
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile)
+ [SSH](copy-parameters-data-source-ssh.md#copy-ssh)
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate)
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat)
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks)
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns)
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd)

# Nutzungshinweise
<a name="r_COPY_usage_notes"></a>

**Topics**
+ [Berechtigungen AWS für den Zugriff auf andere Ressourcen](copy-usage_notes-access-permissions.md)
+ [Verwenden von COPY mit Amazon-S3-Zugriffspunkt-Aliasen](copy-usage_notes-s3-access-point-alias.md)
+ [Laden von Multibyte-Daten aus Amazon S3](copy-usage_notes-multi-byte.md)
+ [Laden einer Spalte des Datentyps GEOMETRY oder GEOGRAPHY](copy-usage_notes-spatial-data.md)
+ [Laden des Datentyps HLLSKETCH](copy-usage_notes-hll.md)
+ [Laden einer Spalte des Datentyps VARBYTE](copy-usage-varbyte.md)
+ [Fehler beim Lesen mehrerer Dateien](copy-usage_notes-multiple-files.md)
+ [COPY von JSON-Format](copy-usage_notes-copy-from-json.md)
+ [COPY aus spaltenbasierten Datenformaten](copy-usage_notes-copy-from-columnar.md)
+ [DATEFORMAT- und TIMEFORMAT-Zeichenfolgen](r_DATEFORMAT_and_TIMEFORMAT_strings.md)
+ [Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT](automatic-recognition.md)

# Berechtigungen AWS für den Zugriff auf andere Ressourcen
<a name="copy-usage_notes-access-permissions"></a>

 Um Daten zwischen Ihrem Cluster und einer anderen AWS Ressource wie Amazon S3, Amazon DynamoDB, Amazon EMR oder Amazon EC2 zu verschieben, muss Ihr Cluster über die Berechtigung verfügen, auf die Ressource zuzugreifen und die erforderlichen Aktionen auszuführen. Um beispielsweise Daten aus Amazon S3 zu laden, muss COPY über LIST-Zugriff auf den Bucket und GET-Zugriff auf die Bucket-Objekte verfügen. Weitere Informationen zu den mindestens erforderlichen Berechtigungen finden Sie unter [IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY](#copy-usage_notes-iam-permissions).

Um die Autorisierung für den Zugriff auf die Ressource zu erhalten, muss Ihr Cluster authentifiziert werden. Sie können eine der beiden folgenden Authentifizierungsmethoden verwenden: 
+ [Rollenbasierte Zugriffskontrolle](#copy-usage_notes-access-role-based)— Für die rollenbasierte Zugriffskontrolle geben Sie eine AWS Identity and Access Management (IAM-) Rolle an, die Ihr Cluster für die Authentifizierung und Autorisierung verwendet. Um Ihre AWS Anmeldeinformationen und vertraulichen Daten zu schützen, empfehlen wir dringend, die rollenbasierte Authentifizierung zu verwenden.
+ [Schlüsselbasierte Zugriffssteuerung](#copy-usage_notes-access-key-based)— Für die schlüsselbasierte Zugriffskontrolle geben Sie die Zugangsdaten ( AWS Zugriffsschlüssel-ID und geheimer Zugriffsschlüssel) für einen Benutzer als Klartext an.

## Rollenbasierte Zugriffskontrolle
<a name="copy-usage_notes-access-role-based"></a>

Mit einer <a name="copy-usage_notes-access-role-based.phrase"></a>rollenbasierten Zugriffssteuerung übernimmt Ihr Cluster vorübergehend in Ihrem Namen eine IAM-Rolle. Anschließend kann Ihr Cluster auf der Basis der Autorisierungen, die der Rolle gewährt wurden, auf die erforderlichen AWS -Ressourcen zugreifen.

Das Erstellen einer IAM-*Rolle* ähnelt insofern dem Erteilen von Berechtigungen für einen Benutzer, als es sich um eine AWS -Identität mit Berechtigungsrichtlinien handelt, die festlegen, welche Aktionen die Identität in AWS ausführen kann und welche nicht. Eine Rolle ist jedoch nicht einem einzigen Benutzer zugeordnet, sondern kann von allen Entitäten angenommen werden, die diese Rolle benötigen. Einer Rolle sind auch keine Anmeldeinformationen (Passwort oder Zugriffsschlüssel) zugeordnet. Wenn eine Rolle mit einem Cluster verknüpft ist, werden die Zugriffsschlüssel stattdessen dynamisch erstellt und dem Cluster bereitgestellt.

Wir empfehlen die Verwendung einer rollenbasierten Zugriffskontrolle, da sie zusätzlich zum Schutz Ihrer Anmeldeinformationen eine sicherere und detailliertere Steuerung des Zugriffs auf AWS Ressourcen und vertrauliche Benutzerdaten ermöglicht. AWS 

Die rollenbasierte Authentifizierung bietet folgende Vorteile:
+ Sie können AWS Standard-IAM-Tools verwenden, um eine IAM-Rolle zu definieren und die Rolle mehreren Clustern zuzuordnen. Wenn Sie die Zugriffsrichtlinie für eine Rolle ändern, werden die Änderungen automatisch auf alle Cluster angewendet, die diese Rolle verwenden.
+ Sie können detaillierte IAM-Richtlinien definieren, die bestimmten Clustern und Datenbankbenutzern Berechtigungen für den Zugriff auf bestimmte Ressourcen und Aktionen gewähren. AWS 
+ Ihr Cluster erhält temporäre Sitzungsanmeldeinformationen zur Laufzeit. Die Anmeldeinformationen werden wie benötigt aktualisiert, bis die Operation abgeschlossen ist. Wenn Sie schlüsselbasierte temporäre Anmeldeinformationen verwenden, schlägt die Operation fehl, wenn die temporären Anmeldeinformationen ablaufen, bevor die Operation abgeschlossen ist.
+ Die Zugriffsschlüssel-ID und die ID des geheimen Zugriffsschlüssels werden nicht übertragen oder im SQL-Code gespeichert.

Um die rollenbasierte Zugriffssteuerung zu verwenden, müssen Sie zunächst unter Verwendung des Amazon-Redshift-Servicerollentyps eine IAM-Rolle erstellen und die Rolle anschließend Ihrem Cluster hinzufügen. Die Rolle muss mindestens die in aufgelisteten Berechtigungen besitzen [IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY](#copy-usage_notes-iam-permissions). Schritte zum Erstellen einer IAM-Rolle und zum Anhängen dieser Rolle an Ihren Cluster finden Sie unter [Autorisieren von Amazon Redshift, in Ihrem Namen auf andere AWS Services zuzugreifen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) im *Amazon Redshift* Management Guide.

Sie können über die Amazon-Redshift-Managementkonsole, die CLI oder eine API einem Cluster eine Rolle hinzufügen oder die Rollen anzeigen, die mit einem Cluster verknüpft sind. Weitere Informationen finden Sie unter [Verknüpfen einer IAM-Rolle mit einem Cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) im *Amazon-Redshift-Verwaltungshandbuch*.

Beim Erstellen einer IAM-Rolle gibt IAM einen Amazon-Ressourcennamen (ARN) für die Rolle zurück. Um eine IAM-Rolle anzugeben, geben Sie für den ARN der Rolle entweder den Parameter [Verwenden des Parameters IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role) oder den Parameter [Verwenden des Parameters CREDENTIALS](copy-parameters-authorization.md#copy-credentials) an. 

Angenommen, die folgende Rolle ist dem Cluster angefügt.

```
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
```

Im folgenden Beispiel für den COPY-Befehl wird der Parameter IAM\$1ROLE mit dem ARN im vorherigen Beispiel verwendet, um Authentifizierung und Zugriff auf Amazon S3 bereitzustellen.

```
copy customer from 's3://amzn-s3-demo-bucket/mydata'  
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Im folgenden Beispiel für den COPY-Befehl wird der Parameter CREDENTIALS verwendet, um die IAM-Rolle anzugeben.

```
copy customer from 's3://amzn-s3-demo-bucket/mydata' 
credentials 
'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Darüber hinaus kann ein Superuser Datenbankbenutzern und -gruppen das Privileg ASSUMEROLE gewähren, um einer Rolle Zugriff auf COPY-Operationen zu ermöglichen. Weitere Informationen finden Sie unter [GRANT](r_GRANT.md).

## Schlüsselbasierte Zugriffssteuerung
<a name="copy-usage_notes-access-key-based"></a>

Bei der <a name="copy-usage_notes-access-key-based.phrase"></a>schlüsselbasierten Zugriffskontrolle geben Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel für einen IAM-Benutzer an, der berechtigt ist, auf die Ressourcen zuzugreifen, die die Daten enthalten. AWS Sie können entweder die Parameter [Verwenden der Parameter ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id) zusammen verwenden oder den Parameter [Verwenden des Parameters CREDENTIALS](copy-parameters-authorization.md#copy-credentials) verwenden.

**Anmerkung**  
Es wird nachdrücklich empfohlen, eine IAM-Rolle für die Authentifizierung zu verwenden, statt eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel im Textformat bereitzustellen. Wenn Sie sich für die schlüsselbasierte Zugriffskontrolle entscheiden, verwenden Sie niemals Ihre AWS Kontoanmeldeinformationen (Root). Erstellen Sie stets einen IAM-Benutzer und geben Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel für diesen Benutzer an. Schritte zum Erstellen eines IAM-Benutzers finden Sie unter [Erstellen eines IAM-Benutzers in Ihrem AWS -Konto](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html).

Um sich mit ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY zu authentifizieren, ersetzen Sie und durch die Zugriffsschlüssel-ID *<access-key-id>* und den vollständigen *<secret-access-key>* geheimen Zugriffsschlüssel eines autorisierten Benutzers, wie unten gezeigt. 

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>';
```

Um sich mit dem CREDENTIALS-Parameter zu authentifizieren, ersetzen Sie *<access-key-id>* und durch die Zugriffsschlüssel-ID und den *<secret-access-key>* vollständigen geheimen Zugriffsschlüssel eines autorisierten Benutzers, wie im Folgenden dargestellt.

```
CREDENTIALS
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
```

Der IAM-Benutzer muss mindestens die in aufgelisteten Berechtigungen besitzen [IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY](#copy-usage_notes-iam-permissions).

### Temporäre Sicherheitsanmeldeinformationen
<a name="r_copy-temporary-security-credentials"></a>

 Wenn Sie die schlüsselbasierte Zugriffssteuerung verwenden, können Sie den Zugriff weiter einschränken, den Benutzer auf Ihre Daten haben, indem Sie temporäre Sicherheitsanmeldeinformationen verwenden. Die rollenbasierte Authentifizierung verwendet automatisch temporäre Anmeldeinformationen. 

**Anmerkung**  
Es wird nachdrücklich empfohlen, die [role-based access control](#copy-usage_notes-access-role-based.phrase) zu verwenden, statt temporäre Anmeldeinformationen zu erstellen und Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel in Form von reinem Text bereitzustellen. Die rollenbasierte Zugriffssteuerung verwendet automatisch temporäre Anmeldeinformationen. 

Temporäre Sicherheitsanmeldeinformationen bieten erweiterte Sicherheit, da sie nur kurzlebig sind und nach ihrem Ablauf nicht erneut verwendet werden können. Die Zugriffsschlüssel-ID und der geheime Zugriffsschlüssel, die mit dem Token generiert werden, können nicht ohne das Token verwendet werden. Ein Benutzer, der diese temporären Sicherheitsanmeldeinformationen besitzt, kann auf Ihre Ressourcen nur solange zugreifen, bis die Anmeldeinformationen ablaufen.

Um Benutzern temporären Zugriff auf Ihre Ressourcen zu gewähren, rufen Sie AWS -Security-Token-Service (AWS STS) API-Operationen auf. Die AWS STS API-Operationen geben temporäre Sicherheitsanmeldeinformationen zurück, die aus einem Sicherheitstoken, einer Zugriffsschlüssel-ID und einem geheimen Zugriffsschlüssel bestehen. Sie geben die temporären Sicherheitsanmeldeinformationen an die Benutzer aus, die temporären Zugriff auf Ihre Ressourcen benötigen. Bei diesen Benutzern kann es sich um vorhandene IAM-Benutzer oder um Benutzer außerhalb von AWS handeln. Weitere Informationen zum Erstellen temporärer Sicherheitsanmeldeinformationen finden Sie unter [Temporäre Sicherheitsanmeldeinformationen](https://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html) im IAM-Benutzerhandbuch.

Sie können die [Verwenden der Parameter ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id)-Parameter zusammen mit dem Parameter [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token) oder dem Parameter [Verwenden des Parameters CREDENTIALS](copy-parameters-authorization.md#copy-credentials) verwenden. Sie müssen auch die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel bereitstellen, die mit dem Token bereitgestellt wurden.

Um sich mit ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY und SESSION\$1TOKEN zu authentifizieren, ersetzen Sie, und wie im Folgenden gezeigt. *<temporary-access-key-id>* *<temporary-secret-access-key>* *<temporary-token>* 

```
ACCESS_KEY_ID '<temporary-access-key-id>'
SECRET_ACCESS_KEY '<temporary-secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

Um die Authentifizierung mittels CREDENTIALS durchzuführen, fügen Sie `session_token=<temporary-token>` in die Anmeldezeichenfolge ein wie im Folgenden gezeigt. 

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>';
```

Im folgenden Beispiel wird ein COPY-Befehl mit temporären Sicherheitsanmeldeinformationen gezeigt.

```
copy table-name
from 's3://objectpath'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>';
```

Im folgenden Beispiel wird die Tabelle LISTING unter Verwendung temporärer Anmeldeinformationen und Dateiverschlüsselung geladen.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>'
master_symmetric_key '<root-key>'
encrypted;
```

Im folgenden Beispiel wird die Tabelle LISTING unter Verwendung des Parameters CREDENTIALS mit temporären Anmeldeinformationen und Dateiverschlüsselung geladen.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
credentials 
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>;master_symmetric_key=<root-key>'
encrypted;
```

**Wichtig**  
Die temporären Sicherheitsanmeldeinformationen müssen für die gesamte Dauer der COPY- oder UNLOAD-Operation gültig sein. Wenn die temporären Sicherheitsanmeldeinformationen während der Operation ablaufen, schlägt der Befehl fehl und für die Transaktion wird ein Rollback ausgeführt. Wenn die temporären Sicherheitsanmeldeinformationen beispielsweise nach 15 Minuten ablaufen und die COPY-Operation eine Stunde benötigt, schlägt die Operation fehl, bevor sie abgeschlossen ist. Wenn Sie den rollenbasierten Zugriff verwenden, werden die temporären Sicherheitsanmeldeinformationen automatisch aktualisiert, bis die Operation abgeschlossen ist.

## IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY
<a name="copy-usage_notes-iam-permissions"></a>

Die IAM-Rolle oder der Benutzer, die bzw. der durch den Parameter CREDENTIALS referenziert wird, muss mindestens die folgenden Berechtigungen besitzen:
+ Für COPY aus Amazon S3 die LIST-Berechtigung für Amazon-S3-Buckets und die GET-Berechtigung für Amazon-S3-Objekte, die geladen werden, sowie die Manifestdatei, falls eine solche verwendet wird.
+ Für COPY von Amazon S3, Amazon EMR und Remote-Hosts (SSH) mit JSON-formatierten Daten die Berechtigung, die JSONPaths Datei auf Amazon S3 aufzulisten und abzurufen, falls eine verwendet wird. 
+ Für COPY aus DynamoDB, SCAN- und DESCRIBE-Berechtigung für die DynamoDB-Tabelle, die geladen wird. 
+ Für COPY aus einem Amazon-EMR-Cluster die Berechtigung für die `ListInstances`-Aktion auf dem Amazon EMR-Cluster. 
+ Für UNLOAD zu Amazon S3, GET-, LIST- und PUT-Berechtigungen für den Amazon-S3-Bucket, in den die Datendateien entladen werden.
+ Für CREATE LIBRARY aus Amazon S3 die LIST-Berechtigung für Amazon-S3-Buckets und die GET-Berechtigung für die zu importierenden Amazon-S3-Objekte.

**Anmerkung**  
Wenn Sie bei Ausführung eines COPY-, UNLOAD- oder CREATE LIBRARY-Befehls die Fehlermeldung `S3ServiceException: Access Denied` erhalten, besitzt Ihr Cluster nicht die korrekten Zugriffsberechtigungen für Amazon S3.

Sie können IAM-Berechtigungen verwalten, indem Sie einer IAM-Rolle, die Ihrem Cluster angefügt ist, Ihrem Benutzer oder der Gruppe, zu der Ihr Benutzer gehört, eine IAM-Richtlinie anfügen. Beispielsweise gewährt die verwaltete `AmazonS3ReadOnlyAccess`-Richtlinie LIST- und GET-Berechtigungen in Bezug auf Amazon-S3-Ressourcen. Weitere Informationen zu IAM-Richtlinien finden Sie unter [Verwalten von IAM-Richtlinien](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) im *IAM-Benutzerhandbuch*. 

# Verwenden von COPY mit Amazon-S3-Zugriffspunkt-Aliasen
<a name="copy-usage_notes-s3-access-point-alias"></a>

COPY unterstützt Amazon-S3-Zugriffspunkt-Aliase. Weitere Informationen finden Sie unter [Verwenden eines Alias im Bucket-Stil für Ihren Zugriffspunkt](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html) im *Amazon-Simple-Storage-Service-Benutzerhandbuch*.

# Laden von Multibyte-Daten aus Amazon S3
<a name="copy-usage_notes-multi-byte"></a>

Wenn Ihre Daten Multibyte-Zeichen enthalten, die andere als ASCII-Zeichen verwenden (beispielsweise chinesische oder kyrillische Zeichen), müssen Sie die Daten in VARCHAR-Spalten laden. Der VARCHAR-Datentyp unterstützt UTF-8-Zeichen mit vier Bytes. Der CHAR-Datentyp unterstützt jedoch nur ASCII-Zeichen mit einem Byte. Sie können keine Zeichen mit fünf Bytes oder mehr in Amazon-Redshift-Tabellen laden. Weitere Informationen finden Sie unter [Multibyte-Zeichen](c_Supported_data_types.md#c_Supported_data_types-multi-byte-characters). 

# Laden einer Spalte des Datentyps GEOMETRY oder GEOGRAPHY
<a name="copy-usage_notes-spatial-data"></a>

COPY in `GEOMETRY`- oder `GEOGRAPHY`-Spalten funktioniert nur aus Daten in einer zeichengetrennten Textdatei, z. B. einer CSV-Datei. Die Daten müssen in hexadezimaler Form des Well-Known-Binary-Formats (WKB oder EWKB) oder des Well-Known-Text-Formats (WKT oder EWKT) vorliegen und der maximalen Größe einer einzelnen Eingabezeile im COPY-Befehl angepasst sein. Weitere Informationen finden Sie unter [COPY](r_COPY.md). 

Weitere Informationen zum Laden aus einem Shapefile finden Sie unter [Laden eines Shapefile in Amazon Redshift](spatial-copy-shapefile.md).

Weitere Informationen zum `GEOMETRY`- oder `GEOGRAPHY`-Datentyp finden Sie unter [Abfrage von Geodaten in Amazon Redshift](geospatial-overview.md).

# Laden des Datentyps HLLSKETCH
<a name="copy-usage_notes-hll"></a>

Sie können HLL-Skizzen nur im Sparse- oder Dense-Format kopieren, das von Amazon Redshift unterstützt wird. Um den Befehl COPY für HyperLogLog Skizzen zu verwenden, verwenden Sie das Base64-Format für dichte Skizzen und das JSON-Format für HyperLogLog Skizzen mit geringer Dichte. HyperLogLog Weitere Informationen finden Sie unter [HyperLogLog Funktionen](hyperloglog-functions.md). 

Das folgende Beispiel importiert Daten aus einer CSV-Datei in eine Tabelle mit CREATE TABLE und COPY. Im Beispiel wird zunächst die Tabelle `t1` mit CREATE TABLE erstellt.

```
CREATE TABLE t1 (sketch hllsketch, a bigint);
```

Dann werden mit COPY Daten aus einer CSV-Datei in die Tabelle importiert `t1`. 

```
COPY t1 FROM s3://amzn-s3-demo-bucket/unload/' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' CSV;
```

# Laden einer Spalte des Datentyps VARBYTE
<a name="copy-usage-varbyte"></a>

Sie können Daten aus einer Datei im CSV-, Parquet- und ORC-Format laden. Bei Verwendung des CSV-Formats werden die Daten aus einer Datei in hexadezimaler Darstellung der VARBYTE-Daten geladen. Sie können keine VARBYTE-Daten mit der `FIXEDWIDTH`-Option laden. Die COPY-Optionen `ADDQUOTES` und `REMOVEQUOTES` werden nicht unterstützt. VARBYTE-Spalten können nicht als Partitionsspalten verwendet werden. 

# Fehler beim Lesen mehrerer Dateien
<a name="copy-usage_notes-multiple-files"></a>

Der COPY-Befehl ist atomisch und transaktional. Mit anderen Worten, der gesamte Prozess wird als einzelne Transaktion behandelt, auch wenn der COPY-Befehl Daten aus mehreren Dateien liest. Wenn COPY beim Lesen einer Datei auf einen Fehler trifft, wird der Vorgang automatisch wiederholt, bis die Prozesszeit abläuft (siehe [statement\$1timeout](r_statement_timeout.md)) oder wenn über einen längeren Zeitraum (zwischen 15 und 30 Minuten) keine Daten aus Amazon S3 heruntergeladen werden können. Dabei wird sichergestellt, dass jede Datei nur einmal geladen wird. Wenn der COPY-Befehl fehlschlägt, wird die gesamte Transaktion abgebrochen und es wird ein Rollback für alle Änderungen ausgeführt. Weitere Informationen zur Handhabung von Fehlern beim Laden finden Sie unter [Fehlerbehebung bei Datenladevorgängen](t_Troubleshooting_load_errors.md). 

Wenn ein COPY-Befehl erfolgreich gestartet wurde, schlägt er nicht fehl, wenn die Sitzung beendet wird, beispielsweise, wenn die Verbindung des Clients getrennt wird. Wenn sich der COPY-Befehl jedoch innerhalb eines BEGIN … END-Transaktionsblocks befindet, der nicht abgeschlossen wird, weil die Sitzung beendet wird, wird für die gesamte Transaktion einschließlich der COPY-Operation ein Rollback ausgeführt. Weitere Informationen Transaktionen finden Sie unter [BEGIN](r_BEGIN.md).

# COPY von JSON-Format
<a name="copy-usage_notes-copy-from-json"></a>

Die JSON-Datenstruktur besteht aus einem Satz von Objekten oder Arrays. Ein JSON-*Objekt* beginnt und endet mit geschweiften Klammern und enthält eine nicht geordnete Sammlung von Name-Wert-Paaren. Jeder Name und jeder Wert werden durch einen Doppelpunkt getrennt und die Paare werden durch Kommas getrennt. Der Name ist eine Zeichenfolge in doppelten Anführungszeichen. Bei den Anführungszeichen muss es sich um normale Anführungszeichen (0x22) handeln. Es dürfen keine schrägen oder „smarte“ doppelte Anführungszeichen sein. 

Ein JSON-*Array* beginnt und endet mit eckigen Klammern und enthält eine geordnete Sammlung von Werten, getrennt durch Kommas. Ein Wert kann eine Zeichenfolge in doppelten Anführungszeichen, eine Zahl, ein boolescher Wert (wahr oder falsch), null, ein JSON-Objekt oder ein Array sein. 

JSON-Objekte und -Arrays können verschachtelt sein, was eine hierarchische Datenstruktur ermöglicht. Im folgenden Beispiel wird eine JSON-Datenstruktur mit zwei gültigen Objekten gezeigt. 

```
{
    "id": 1006410,
    "title": "Amazon Redshift Database Developer Guide"
}
{
    "id": 100540,
    "name": "Amazon Simple Storage Service User Guide"
}
```

Im Folgenden werden dieselben Daten als zwei JSON-Arrays gezeigt.

```
[
    1006410,
    "Amazon Redshift Database Developer Guide"
]
[
    100540,
    "Amazon Simple Storage Service User Guide"
]
```

## COPY-Optionen für JSON
<a name="copy-usage-json-options"></a>

Sie können die folgenden Optionen angeben, wenn Sie COPY mit Daten im JSON-Format verwenden: 
+ `'auto' ` – COPY lädt automatisch Felder aus der JSON-Datei. 
+ `'auto ignorecase'` – COPY lädt automatisch Felder aus der JSON-Datei, die Groß-/Kleinschreibung von Feldnamen wird ignoriert.
+ `s3://jsonpaths_file`— COPY verwendet eine JSONPaths Datei, um die JSON-Quelldaten zu analysieren. Eine *JSONPaths Datei* ist eine Textdatei, die ein einzelnes JSON-Objekt enthält, dessen Name mit einer Reihe von JSONPath Ausdrücken `"jsonpaths"` gepaart ist. Handelt es sich bei dem Namen um eine andere Zeichenfolge als`"jsonpaths"`, verwendet COPY das `'auto'` Argument anstelle der JSONPaths Datei. 

Beispiele, die zeigen, wie Daten mithilfe von`'auto'`, oder einer JSONPaths Datei geladen werden`'auto ignorecase'`, wobei entweder JSON-Objekte oder Arrays verwendet werden, finden Sie unter[Beispiele für die COPY-Operation aus JSON](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json). 

## JSONPath Option
<a name="copy-usage-json-options"></a>

In der Amazon Redshift COPY-Syntax gibt ein JSONPath Ausdruck den expliziten Pfad zu einem einzelnen Namenselement in einer hierarchischen JSON-Datenstruktur an, wobei entweder Klammern oder Punkte verwendet werden. Amazon Redshift unterstützt keine JSONPath Elemente wie Platzhalterzeichen oder Filterausdrücke, die zu einem mehrdeutigen Pfad oder mehreren Namenselementen aufgelöst werden könnten. Daher kann Amazon Redshift keine komplexen Datenstrukturen mit mehreren Ebenen analysieren.

Im Folgenden finden Sie ein Beispiel für eine JSONPaths Datei mit JSONPath Ausdrücken, die die Klammernotation verwenden. Das Dollarzeichen (\$1) stellt die Stammebenenstruktur dar. 

```
{
    "jsonpaths": [
       "$['id']",
       "$['store']['book']['title']",
	"$['location'][0]" 
    ]
}
```

 Im vorherigen Beispiel referenziert `$['location'][0]` das erste Element in einem Array. JSON verwendet eine nullbasierte Array-Indizierung. Bei Array-Indizes muss es sich um positive Ganzzahlen handeln (größer als oder gleich null).

Das folgende Beispiel zeigt die vorherige JSONPaths Datei in Punktnotation. 

```
{
    "jsonpaths": [
       "$.id",
       "$.store.book.title",
	"$.location[0]"
    ]
}
```

Sie können Klammer- und Punktnotierung im `jsonpaths`-Array nicht mischen. Eckige Klammern können sowohl in der Klammer- als auch in der Punktnotierung verwendet werden, um ein Array-Element zu referenzieren. 

Bei Verwendung der Punktnotation dürfen die JSONPath Ausdrücke die folgenden Zeichen nicht enthalten: 
+ Einfache gerade Anführungszeichen (') 
+ Punkt (.) 
+ Eckige Klammern ([]), es sei denn, sie werden verwendet, um ein Array-Element zu referenzieren 

Wenn es sich bei dem Wert in dem Name-Wert-Paar, auf das ein JSONPath Ausdruck verweist, um ein Objekt oder ein Array handelt, wird das gesamte Objekt oder die Matrix als Zeichenfolge geladen, einschließlich der geschweiften Klammern. Angenommen, Ihre JSON-Daten enthalten das folgende Objekt. 

```
{
    "id": 0,
    "guid": "84512477-fa49-456b-b407-581d0d851c3c",
    "isActive": true,
    "tags": [
        "nisi",
        "culpa",
        "ad",
        "amet",
        "voluptate",
        "reprehenderit",
        "veniam"
    ],
    "friends": [
        {
            "id": 0,
            "name": "Martha Rivera"
        },
        {
            "id": 1,
            "name": "Renaldo"
        }
    ]
}
```

Der JSONPath Ausdruck gibt `$['tags']` dann den folgenden Wert zurück. 

```
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]" 
```

Der JSONPath Ausdruck gibt `$['friends'][1]` dann den folgenden Wert zurück. 

```
"{"id": 1,"name": "Renaldo"}" 
```

Jeder JSONPath Ausdruck im `jsonpaths` Array entspricht einer Spalte in der Amazon Redshift Redshift-Zieltabelle. Die Reihenfolge der `jsonpaths`-Array-Elemente muss der Reihenfolge der Spalten in der Zieltabelle oder Spaltenliste entsprechen, wenn eine Spaltenliste verwendet wird. 

Beispiele, die zeigen, wie Daten entweder mit dem `'auto'` Argument oder einer JSONPaths Datei geladen werden und dabei entweder JSON-Objekte oder Arrays verwendet werden, finden Sie unter. [Beispiele für die COPY-Operation aus JSON](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json) 

Informationen zum Kopieren mehrerer JSON-Dateien finden Sie unter [Verwenden eines Manifests für die Angabe von Datendateien](loading-data-files-using-manifest.md).

## Escape-Zeichen in JSON
<a name="copy-usage-json-escape-characters"></a>

COPY lädt `\n` als Zeichen für neue Zeilen und `\t` als Tabulatorzeichen. Um einen Backslash zu laden, muss ein Backslash als Escape-Zeichen verwendet werden ( `\\` ).

Angenommen, es gibt die folgenden JSON-Daten in einer Datei namens `escape.json` im Bucket `s3://amzn-s3-demo-bucket/json/`.

```
{
  "backslash": "This is a backslash: \\",
  "newline": "This sentence\n is on two lines.",
  "tab": "This sentence \t contains a tab."
}
```

Führen Sie die folgenden Befehle aus, um die Tabelle ESCAPES zu erstellen und JSON zu laden.

```
create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35));

copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as json 'auto';
```

Führen Sie eine Abfrage für die Tabelle ESCAPES aus, um die Ergebnisse anzuzeigen.

```
select * from escapes;

       backslash        |      newline      |               tab
------------------------+-------------------+----------------------------------
 This is a backslash: \ | This sentence     | This sentence    contains a tab.
                        :  is on two lines.
(1 row)
```

## Verlust der numerischen Präzision
<a name="copy-usage-json-rounding"></a>

Wenn Sie Zahlen aus Datendateien im JSON-Format in eine Spalte laden, die als numerischer Datentyp formatiert ist, geht möglicherweise die Präzision verloren. Einige Gleitpunktwerte werden in Rechnersystemen nicht genau dargestellt. Dies hat zur Folge, dass aus einer JSON-Datei kopierte Daten nicht wie von Ihnen erwartet gerundet werden. Um einen Verlust der Präzision zu vermeiden, raten wir zur Verwendung einer der folgenden Alternativen:
+ Stellen Sie die Zahl als eile Zeichenfolge dar, deren Wert in doppelte Anführungszeichen gesetzt wird.
+ Verwenden Sie [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec), um die Zahl zu runden, anstatt sie zu kürzen.
+ Verwenden Sie anstelle von JSON- oder Avro-Dateien CSV-, durch Zeichen begrenzte oder Textdateien fester Breite.

# COPY aus spaltenbasierten Datenformaten
<a name="copy-usage_notes-copy-from-columnar"></a>

COPY kann Daten aus Amazon S3 in folgenden spaltenbasierten Formaten laden:
+ ORC
+ Parquet

Beispiele für die Verwendung von COPY aus spaltenbasierten Datenformaten finden Sie unter [Beispiele für COPY](r_COPY_command_examples.md).

COPY unterstützt Daten im Spaltenformat unter Berücksichtigung der folgenden Überlegungen:
+ Der Amazon S3 S3-Bucket muss sich in derselben AWS Region wie die Amazon Redshift Redshift-Datenbank befinden. 
+ Um über einen VPC-Endpunkt auf Ihre Amazon-S3-Daten zugreifen zu können, richten Sie den Zugriff mithilfe von IAM-Richtlinien und IAM-Rollen ein, wie unter [Verwendung von Amazon Redshift Spectrum mit Enhanced VPC-Routing](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html) im *Amazon-Redshift-Verwaltungshandbuch* beschrieben. 
+ COPY wendet Kompressionskodierungen nicht automatisch an. 
+ Es werden nur die folgenden COPY-Parameter unterstützt: 
  + [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) beim Kopieren aus einer ORC- oder Parquet-Datei.
  + [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
  + [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
  + [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role)
  + [CREDENTIALS](copy-parameters-authorization.md#copy-credentials)
  + [STATUPDATE ](copy-parameters-data-load.md#copy-statupdate)
  + [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
  + [EXPLICIT\$1IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ Tritt beim Laden ein Fehler auf, schlägt der COPY-Befehl fehl. ACCEPTANYDATE und MAXERROR werden für spaltenbasierte Datentypen nicht unterstützt.
+ Fehlermeldungen werden an den SQL-Client gesendet. Einige Fehler werden in STL\$1LOAD\$1ERRORS und STL\$1ERROR protokolliert.
+ COPY fügt Werte in derselben Reihenfolge in die Spalten der Zieltabelle ein, in der die Spalten in den spaltenbasierten Datendateien vorkommen. Die Anzahl der Spalten in der Zieltabelle und die Anzahl der Spalten in der Datendatei müssen übereinstimmen.
+ Wenn die Datei, die Sie für die COPY-Operation angeben, eine der folgenden Erweiterungen besitzt, werden die Daten dekomprimiert, ohne dass Parameter hinzugefügt werden müssen: 
  + `.gz`
  + `.snappy`
  + `.bz2`
+ COPY aus den Dateiformaten Parquet und ORC verwendet Redshift Spectrum und den Bucket-Zugriff. Um COPY für diese Formate zu verwenden, stellen Sie sicher, dass es keine IAM-Richtlinien gibt, die die Verwendung von Amazon S3 URLs vorsigniert blockieren. Die von Amazon Redshift URLs generierten vorsignierten Dateien sind 1 Stunde gültig, sodass Amazon Redshift genügend Zeit hat, um alle Dateien aus dem Amazon S3 S3-Bucket zu laden. Für jede von COPY gescannte Datei aus spaltenbasierten Datenformaten wird eine eindeutige vorsignierte URL generiert. Sie müssen bei Bucket-Richtlinien, die die Aktion `s3:signatureAge` enthalten, den Wert auf mindestens 3.600.000 Millisekunden festlegen. Weitere Informationen finden Sie unter [Verwenden von Amazon Redshift Spectrum mit Enhanced VPC Routing](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html).
+ Der Parameter REGION wird bei COPY aus spaltenbasierten Datenformaten nicht unterstützt. Selbst wenn sich Ihr Amazon S3 S3-Bucket und Ihre Datenbank im selben Ordner befinden AWS-Region, kann es zu einem Fehler kommen, z. B. dass das Argument REGION für das PARQUET-basierte COPY nicht unterstützt wird.
+ COPY aus Spaltenformaten unterstützt jetzt die Parallelitätsskalierung. Informationen zur Aktivierung der Parallelitätsskalierung finden Sie unter [Konfigurieren von Warteschlangen mit Parallelitätsskalierung](https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html#concurrency-scaling-queues).

# DATEFORMAT- und TIMEFORMAT-Zeichenfolgen
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings"></a>

Der COPY-Befehl verwendet die Optionen DATEFORMAT und TIMEFORMAT zur Analyse von Datums- und Zeitwerten in Ihren Quelldaten. DATEFORMAT und TIMEFORMAT sind formatierte Zeichenfolgen, die dem Format der Datums- und Zeitwerte Ihrer Quelldaten entsprechen müssen. Ein COPY-Befehl, der Quelldaten mit dem Datumswert `Jan-01-1999` lädt, muss beispielsweise die folgende DATEFORMAT-Zeichenfolge enthalten:

```
COPY ...
            DATEFORMAT AS 'MON-DD-YYYY'
```

Weitere Informationen zur Verwaltung von COPY-Datenkonvertierungen finden Sie unter [Datenkonvertierungsparameter](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html). 

Die DATEFORMAT- oder TIMEFORMAT-Zeichenfolgen können Datums-/Uhrzeittrennzeichen (wie „`-`“, „`/`“ oder „`:`“) sowie die Datumsteil– und Zeitteilformate in der folgenden Tabelle enthalten.

**Anmerkung**  
Wenn Sie das Format Ihrer Datums- oder Zeitwerte nicht mit den folgenden Datumsteilen und Zeitteilen abgleichen können oder wenn Ihre Datums- und Zeitwerte unterschiedliche Formate aufweisen, verwenden Sie das Argument `'auto'` mit dem Parameter DATEFORMAT oder TIMEFORMAT. Das Argument `'auto'` erkennt verschiedene Formate, die bei der Verwendung einer DATEFORMAT- oder TIMEFORMAT-Zeichenfolge nicht unterstützt werden. Weitere Informationen finden Sie unter [Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT](automatic-recognition.md).

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

Das Standard-Datumsformat ist. YYYY-MM-DD Das Standardformat für Zeitstempel ohne Zeitzone (TIMESTAMP) ist YYYY-MM-DD HH:MI:SS. Der Standardzeitstempel im Zeitzonenformat (TIMESTAMPTZ) ist YYYY-MM-DD HH:MI:SSOF, wobei OF der UTC-Wert ist (z. B. - 8:00). Sie können keinen Zeitzonenbezeichner (TZ, tz oder OF) in die timeformat\$1string aufnehmen. Das Feld Sekunden (SS) unterstützt auch Sekundenbruchteile bis zu einer Detailgenauigkeit von Mikrosekunden. Um TIMESTAMPTZ-Daten zu laden, die sich in einem anderen Format als dem Standardformat befinden, geben Sie 'auto' an.

Im Folgenden finden Sie einige Beispiele für Datumsangaben oder Uhrzeiten, die Sie in Ihren Quelldaten finden können, sowie die entsprechenden DATEFORMAT- oder TIMEFORMAT-Zeichenfolgen.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

## Beispiel
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings-examples"></a>

Ein Beispiel für die Verwendung von TIMEFORMAT finden Sie unter [Laden eines Zeit- oder Datumsstempels](r_COPY_command_examples.md#r_COPY_command_examples-load-a-time-datestamp).

# Verwenden der automatischen Erkennung bei DATEFORMAT und TIMEFORMAT
<a name="automatic-recognition"></a>

Wenn Sie `'auto'` als Argument für den Parameter DATEFORMAT oder TIMEFORMAT angeben, erkennt Amazon Redshift automatisch das Datums- oder Zeitformat in Ihren Quelldaten und konvertiert es. Es folgt ein Beispiel.

```
copy favoritemovies from 'dynamodb://ProductCatalog' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
dateformat 'auto';
```

Wenn COPY mit dem Argument `'auto'` für DATEFORMAT und TIMEFORMAT verwendet wird, erkennt COPY die Datums- und Zeitformate, die in der Tabelle in [DATEFORMAT- und TIMEFORMAT-ZeichenfolgenBeispiel](r_DATEFORMAT_and_TIMEFORMAT_strings.md) aufgelistet sind. Zusätzlich erkennt das Argument `'auto'` die folgenden Formate, die bei Verwendung einer DATEFORMAT- und TIMEFORMAT-Zeichenfolge nicht unterstützt werden.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/automatic-recognition.html)

Die automatische Erkennung unterstützt keine Epochensekunden und Epochenmillisekunden.

Um herauszufinden, ob ein Datums- oder Zeitstempelwert automatisch konvertiert wird, verwenden Sie eine CAST-Funktion, um zu versuchen, die Zeichenfolge in einen Datums- oder Zeitstempelwert zu konvertieren. Mit den folgenden Befehlen wird beispielsweise der Zeitstempelwert getestet `'J2345678 04:05:06.789'`:

```
create table formattest (test char(21));
insert into formattest values('J2345678 04:05:06.789');
select test, cast(test as timestamp) as timestamp, cast(test as date) as date from formattest;

        test          |      timestamp      |	date
----------------------+---------------------+------------
J2345678 04:05:06.789   1710-02-23 04:05:06	1710-02-23
```

Wenn die Quelldaten für eine DATE-Spalte Zeitinformationen enthalten, wird die Zeitkomponente abgeschnitten. Wenn die Quelldaten für eine TIMESTAMP-Spalte Zeitinformationen auslassen, wird für die Zeitkomponente 00:00:00 verwendet.

# Beispiele für COPY
<a name="r_COPY_command_examples"></a>

**Anmerkung**  
In den folgenden Beispielen werden aus Gründen der Lesbarkeit Zeilenumbrüche verwendet. Verwenden Sie in Ihrer Zeichenfolge *credentials-args* keine Zeilenumbrüche oder Leerzeichen.

**Topics**
+ [Laden von FAVORITEMOVIES aus einer DynamoDB-Tabelle](#r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table)
+ [Laden von LISTING aus einem Amazon-S3-Bucket](#r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket)
+ [Laden von LISTING aus einem Amazon-EMR-Cluster](#copy-command-examples-emr)
+ [Example: COPY from Amazon S3 using a manifest](#copy-command-examples-manifest)
+ [Laden von LISTING aus einer Datei mit Pipe-Zeichen als Trennzeichen (Standardtrennzeichen)](#r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter)
+ [Laden von LISTING unter Verwendung von Spaltendaten im Parquet-Format](#r_COPY_command_examples-load-listing-from-parquet)
+ [Laden von LISTING unter Verwendung von Spaltendaten im ORC-Format](#r_COPY_command_examples-load-listing-from-orc)
+ [Laden von EVENT mit Optionen](#r_COPY_command_examples-load-event-with-options)
+ [Laden von VENUE aus einer Datendatei mit festen Spaltenbreiten](#r_COPY_command_examples-load-venue-from-a-fixed-width-data-file)
+ [Laden von CATEGORY aus einer CSV-Datei](#load-from-csv)
+ [Laden von VENUE mit expliziten Werte für eine IDENTITY-Spalte](#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)
+ [Laden von TIME aus einer GZIP-Datei mit Pipe-Zeichen als Trennzeichen](#r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file)
+ [Laden eines Zeit- oder Datumsstempels](#r_COPY_command_examples-load-a-time-datestamp)
+ [Laden von Daten aus einer Datei mit Standardwerten](#r_COPY_command_examples-load-data-from-a-file-with-default-values)
+ [COPY-Operation für Daten mit der Option ESCAPE](#r_COPY_command_examples-copy-data-with-the-escape-option)
+ [Beispiele für die COPY-Operation aus JSON](#r_COPY_command_examples-copy-from-json)
+ [Beispiele für die Kopie aus Avro](#r_COPY_command_examples-copy-from-avro)
+ [Vorbereiten von Dateien auf die COPY-Operation mit der Option ESCAPE](#r_COPY_preparing_data)
+ [Laden eines Shapefile in Amazon Redshift](#copy-example-spatial-copy-shapefile)
+ [COPY-Befehl mit der Option NOLOAD](#r_COPY_command_examples-load-noload-option)
+ [Befehl COPY mit Multibyte-Trennzeichen und Option ENCODING](#r_COPY_command_examples-load-encoding-multibyte-delimiter-option)

## Laden von FAVORITEMOVIES aus einer DynamoDB-Tabelle
<a name="r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table"></a>

*Sie AWS SDKs enthalten ein einfaches Beispiel für die Erstellung einer DynamoDB-Tabelle namens Movies.* (Informationen zu diesem Beispiel finden Sie unter [Erste Schritte mit DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html).) Im folgenden Beispiel wird die Amazon-Redshift-Tabelle MOVIES mit Daten aus der DynamoDB-Tabelle geladen. Die Amazon-Redshift-Tabelle muss in der Datenbank bereits vorhanden sein.

```
copy favoritemovies from 'dynamodb://Movies'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
readratio 50;
```

## Laden von LISTING aus einem Amazon-S3-Bucket
<a name="r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket"></a>

Im folgenden Beispiel wird LISTING aus einem Amazon-S3-Bucket geladen. Der COPY-Befehl lädt alle Dateien im Ordner `/data/listing/`.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listing/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Laden von LISTING aus einem Amazon-EMR-Cluster
<a name="copy-command-examples-emr"></a>

Im folgenden Beispiel wird die Tabelle SALES mit durch Tabulatoren getrennten Daten aus lzop-komprimierten Dateien in einem Amazon-EMR-Cluster geladen. COPY lädt jede Datei im Ordner `myoutput/`, die mit `part-` beginnt.

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '\t' lzop;
```

Im folgenden Beispiel wird die Tabelle SALES mit JSON-formatierten Daten in einem Amazon-EMR-Cluster geladen. COPY lädt jede Datei im Ordner `myoutput/json/`.

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/json/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON 's3://amzn-s3-demo-bucket/jsonpaths.txt';
```

## Verwenden eines Manifests für die Angabe von Datendateien
<a name="copy-command-examples-manifest"></a>

Sie können ein Manifest verwenden, um sicherzustellen, dass der COPY-Befehl alle erforderlichen Dateien aus Amazon S3 und nur diese lädt. Sie können ein Manifest auch verwenden, wenn Sie mehrere Dateien aus verschiedenen Buckets laden müssen oder Dateien, die nicht dasselbe Präfix besitzen. 

Angenommen, Sie müssen die folgenden drei Dateien laden: `custdata1.txt`, `custdata2.txt` und `custdata3.txt`. Sie könnten den folgenden Befehl verwenden, um alle Dateien in `amzn-s3-demo-bucket` zu laden, die mit `custdata` beginnen, indem Sie ein Präfix angeben: 

```
copy category
from 's3://amzn-s3-demo-bucket/custdata' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Wenn aufgrund eines Fehlers nur zwei der Dateien vorhanden sind, lädt COPY nur diese beiden Dateien und wird erfolgreich abgeschlossen. Dies führt zu einem unvollständigen Datenladevorgang. Wenn der Bucket auch eine nicht erwünschte Datei enthält, die zufällig dasselbe Präfix verwendet, beispielsweise eine Datei namens `custdata.backup`, lädt COPY diese Datei ebenfalls. Dies führt dazu, dass nicht erwünschte Daten geladen werden.

Um sicherzustellen, dass alle erforderlichen Dateien geladen werden, und zu verhindern, dass nicht erwünschte Dateien geladen werden, können Sie eine Manifestdatei verwenden. Die Manifestdatei ist eine JSON formatierte Textdatei, die die Dateien auflistet, die durch den COPY-Befehl verarbeitet werden sollen. Beispielsweise lädt das folgende Manifest die drei Dateien aus dem vorherigen Beispiel.

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.1",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.2",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.3",
         "mandatory":true
      }
   ]
}
```

Das optionale `mandatory`-Flag gibt an, ob COPY beendet werden soll, wenn die Datei nicht vorhanden ist. Der Standardwert ist `false`. Unabhängig von obligatorischen Einstellungen wird COPY beendet, wenn keine Dateien gefunden werden. In diesem Beispiel gibt COPY einen Fehler zurück, wenn eine der Dateien nicht gefunden wird. Nicht erwünschte Dateien, die möglicherweise geladen werden, wenn Sie nur ein Schlüsselpräfix angeben, beispielsweise `custdata.backup`, werden ignoriert, da sie nicht im Manifest aufgelistet werden. 

Beim Laden aus Datendateien im ORC- oder Parquet-Format ist ein `meta`-Feld erforderlich, wie im folgenden Beispiel gezeigt.

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```

Im folgenden Beispiel wird ein Manifest namens verwendet `cust.manifest`. 

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc
manifest;
```

Sie können ein Manifest verwenden, um Dateien aus verschiedenen Buckets hochzuladen oder Dateien, die nicht das gleiche Präfix verwenden. Das folgende Beispiel zeigt das JSON-Format, um Daten aus Dateien zu laden, deren Namen mit einem Datumsstempel beginnen.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/2013-10-04-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-05-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-06-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-07-custdata.txt","mandatory":true}
  ]
}
```

Das Manifest kann Dateien auflisten, die sich in verschiedenen Buckets befinden, sofern sich die Buckets in derselben AWS Region wie der Cluster befinden. 

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata2.txt","mandatory":false}
  ]
}
```

## Laden von LISTING aus einer Datei mit Pipe-Zeichen als Trennzeichen (Standardtrennzeichen)
<a name="r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter"></a>

Das folgende Beispiel stellt einen sehr einfachen Fall dar, in dem keine Optionen angegeben sind und die Eingabedatei das Standardtrennzeichen enthält, ein Pipe-Zeichen (\$1). 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Laden von LISTING unter Verwendung von Spaltendaten im Parquet-Format
<a name="r_COPY_command_examples-load-listing-from-parquet"></a>

Im folgenden Beispiel werden Daten aus einem Ordner in einem von Amazon S3 benannten Parquet geladen. 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/parquet/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as parquet;
```

## Laden von LISTING unter Verwendung von Spaltendaten im ORC-Format
<a name="r_COPY_command_examples-load-listing-from-orc"></a>

Im folgenden Beispiel werden Daten aus einem Ordner in Amazon S3 mit dem Namen `orc` geladen. 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/orc/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc;
```

## Laden von EVENT mit Optionen
<a name="r_COPY_command_examples-load-event-with-options"></a>

Im folgenden Beispiel werden durch Pipe-Zeichen getrennte Daten in die Tabelle EVENT geladen und anschließend die folgenden Regeln angewendet: 
+ Wenn Zeichenfolgen durch Paare von Angebotszeichen eingeschlossen werden, werden sie entfernt.
+ Sowohl leere Zeichenfolgen als auch Zeichenfolgen, die Leerzeichen enthalten, werden als NULL-Werte geladen.
+ Der Ladevorgang schlägt fehl, wenn mehr als 5 Fehler zurückgegeben werden.
+ Zeitstempelwerte müssen das angegebene Format einhalten. Ein gültiger Zeitstempel ist beispielsweise `2008-09-26 05:43:12`.

```
copy event
from 's3://amzn-s3-demo-bucket/data/allevents_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
removequotes
emptyasnull
blanksasnull
maxerror 5
delimiter '|'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

## Laden von VENUE aus einer Datendatei mit festen Spaltenbreiten
<a name="r_COPY_command_examples-load-venue-from-a-fixed-width-data-file"></a>

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

Im vorherigen Beispiel wird angenommen, dass die Datendatei auf dieselbe Weise wie die gezeigten Beispieldateien formatiert ist. Im folgenden Beispiel dienen Leerzeichen als Platzhalter, sodass alle Spalten dieselbe Breite wie in der Spezifikation angegeben haben: 

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
```

## Laden von CATEGORY aus einer CSV-Datei
<a name="load-from-csv"></a>

Angenommen, Sie möchten CATEGORY mit den Werten laden, die in der folgenden Tabelle gezeigt werden.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_COPY_command_examples.html)

Im folgenden Beispiel werden die Inhalte einer Textdatei gezeigt, deren Feldwerte durch Kommas getrennt sind.

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,All "non-musical" theatre  
14,Shows,Opera,All opera, light, and "rock" opera
15,Concerts,Classical,All symphony, concerto, and choir concerts
```

Wenn Sie die Datei mit dem Parameter DELIMITER laden, um Eingabedaten mit Kommas als Trennzeichen anzugeben, schlägt der COPY-Befehl fehl, da einige Eingabefelder Kommas enthalten. Sie können dieses Problem beheben, indem Sie den Parameter CSV verwenden und die Felder, die Kommas enthalten, in Anführungszeichen einschließen. Wenn ein Anführungszeichen innerhalb einer Zeichenfolge vorkommt, die durch Anführungszeichen eingeschlossen wird, müssen Sie dieses mit einer Escape-Markierung versehen, indem Sie das Anführungszeichen verdoppeln. Das Standardanführungszeichen ist ein doppeltes Anführungszeichen. Daher müssen Sie jedes doppelte Anführungszeichen mit einem zusätzlichen doppelten Anführungszeichen als Escape-Zeichen verwenden. Ihre neue Eingabedatei sieht ungefähr wie folgt aus. 

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,"All ""non-musical"" theatre"
14,Shows,Opera,"All opera, light, and ""rock"" opera"
15,Concerts,Classical,"All symphony, concerto, and choir concerts"
```

Angenommen, der Dateiname ist `category_csv.txt`, dann können Sie die Datei mittels des folgenden COPY-Befehls laden:

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv;
```

Um die Notwendigkeit zu vermeiden, die doppelten Anführungszeichen in Ihrer Eingabe durch Escape-Zeichen zu markieren, können Sie ein anderes Anführungszeichen angeben, indem Sie den Parameter QUOTE AS verwenden. Beispielsweise verwendet die folgende Version von `category_csv.txt` '`%`' als Anführungszeichen:

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,%All "non-musical" theatre%
14,Shows,Opera,%All opera, light, and "rock" opera%
15,Concerts,Classical,%All symphony, concerto, and choir concerts%
```

Der folgende COPY-Befehl verwendet QUOTE AS, um zu laden `category_csv.txt`:

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv quote as '%';
```

## Laden von VENUE mit expliziten Werte für eine IDENTITY-Spalte
<a name="r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column"></a>

Im folgenden Beispiel wird angenommen, dass bei Erstellung der Tabelle VENUE mindestens eine Spalte (beispielsweise die Spalte `venueid`) als IDENTITY-Spalte angegeben wurde. Dieser Befehl überschreibt das IDENTITY-Standardverhalten, bei dem Werte für eine IDENTITY-Spalte automatisch generiert werden, und lädt stattdessen die expliziten Werte aus der Datei venue.txt. Amazon Redshift überprüft nicht, ob doppelte IDENTITY-Werte in die Tabelle geladen werden, wenn die Option EXLICIT\$1IDS verwendet wird. 

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
explicit_ids;
```

## Laden von TIME aus einer GZIP-Datei mit Pipe-Zeichen als Trennzeichen
<a name="r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file"></a>

Im folgenden Beispiel wird die Tabelle TIME aus einer GZIP-Datei mit Pipe-Zeichen als Trennzeichen geladen:

```
copy time
from 's3://amzn-s3-demo-bucket/data/timerows.gz' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
gzip
delimiter '|';
```

## Laden eines Zeit- oder Datumsstempels
<a name="r_COPY_command_examples-load-a-time-datestamp"></a>

Im folgenden Beispiel werden Daten mit formatierten Zeitstempeln geladen.

**Anmerkung**  
Das TIMEFORMAT von `HH:MI:SS` kann auch Bruchteile von Sekunden jenseits von `SS` bis zu einer Detailtiefe von Mikrosekunden unterstützen. Die in diesem Beispiel verwendete Datei `time.txt` enthält eine einzige Zeile, `2009-01-12 14:15:57.119568`.

```
copy timestamp1 
from 's3://amzn-s3-demo-bucket/data/time.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

Das Ergebnis dieser COPY-Operation ist wie folgt: 

```
select * from timestamp1;
c1
----------------------------
2009-01-12 14:15:57.119568
(1 row)
```

## Laden von Daten aus einer Datei mit Standardwerten
<a name="r_COPY_command_examples-load-data-from-a-file-with-default-values"></a>

Im folgenden Beispiel wird eine Variante der Tabelle VENUE in der Datenbank TICKIT verwendet. Betrachten Sie die Tabelle VENUE\$1NEW, die mit der folgenden Anweisung definiert wird: 

```
create table venue_new(
venueid smallint not null,
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

Betrachten Sie die Datendatei venue\$1noseats.txt, die keine Werte für die Spalte VENUESEATS enthält, wie im folgenden Beispiel gezeigt: 

```
1|Toyota Park|Bridgeview|IL|
2|Columbus Crew Stadium|Columbus|OH|
3|RFK Stadium|Washington|DC|
4|CommunityAmerica Ballpark|Kansas City|KS|
5|Gillette Stadium|Foxborough|MA|
6|New York Giants Stadium|East Rutherford|NJ|
7|BMO Field|Toronto|ON|
8|The Home Depot Center|Carson|CA|
9|Dick's Sporting Goods Park|Commerce City|CO|
10|Pizza Hut Park|Frisco|TX|
```

Die folgende COPY-Anweisung lädt die Tabelle erfolgreich aus der Datei und wendet den Standardwert (1000) auf die ausgelassene Spalte an: 

```
copy venue_new(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_noseats.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

Betrachten Sie nun die geladene Tabelle: 

```
select * from venue_new order by venueid;
venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |       1000
2 | Columbus Crew Stadium      | Columbus        | OH         |       1000
3 | RFK Stadium                | Washington      | DC         |       1000
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |       1000
5 | Gillette Stadium           | Foxborough      | MA         |       1000
6 | New York Giants Stadium    | East Rutherford | NJ         |       1000
7 | BMO Field                  | Toronto         | ON         |       1000
8 | The Home Depot Center      | Carson          | CA         |       1000
9 | Dick's Sporting Goods Park | Commerce City   | CO         |       1000
10 | Pizza Hut Park             | Frisco          | TX         |       1000
(10 rows)
```

Im folgenden Beispiel wird zusätzlich zur Annahme, dass in der Datei keine VENUESEATS-Daten enthalten sind, auch angenommen, dass keine VENUENAME-Daten enthalten sind: 

```
1||Bridgeview|IL|
2||Columbus|OH|
3||Washington|DC|
4||Kansas City|KS|
5||Foxborough|MA|
6||East Rutherford|NJ|
7||Toronto|ON|
8||Carson|CA|
9||Commerce City|CO|
10||Frisco|TX|
```

 Bei Verwendung derselben Tabellendefinition schlägt die COPY-Anweisung fehl, da für VENUENAME kein DEFAULT-Wert angegeben wurde und VENUENAME eine NOT NULL-Spalte ist: 

```
copy venue(venueid, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

Betrachten Sie nun eine Variante der Tabelle VENUE, die eine IDENTITY-Spalte verwendet: 

```
create table venue_identity(
venueid int identity(1,1),
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

Nehmen Sie wie im vorherigen Beispiel an, dass es für die Spalte VENUESEATS keine entsprechenden Werte in der Quelldatei gibt. Die folgende COPY-Anweisung lädt die Tabelle erfolgreich einschließlich der vordefinierten IDENTITY-Datenwerte, anstatt diese Werte automatisch zu generieren: 

```
copy venue(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

Diese Anweisung schlägt fehl, da sie die Spalte IDENTITY nicht enthält (VENUEID fehlt in der Spaltenliste), aber den Parameter EXPLICIT\$1IDS einschließt: 

```
copy venue(venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

Diese Anweisung schlägt fehl, da sie den Parameter EXPLICIT\$1IDS nicht enthält: 

```
copy venue(venueid, venuename, venuecity, venuestate)
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

## COPY-Operation für Daten mit der Option ESCAPE
<a name="r_COPY_command_examples-copy-data-with-the-escape-option"></a>

Im folgenden Beispiel wird gezeigt, wie Zeichen geladen werden, die mit dem Trennzeichen übereinstimmen (in diesem Fall dem Pipe-Zeichen). Stellen Sie sicher, dass in der Eingabedatei alle Pipe-Zeichen (\$1), die Sie laden möchten, mit dem Backslash-Zeichen (\$1) als Escape-Zeichen markiert sind. Laden Sie die Datei anschließend unter Verwendung des Parameters ESCAPE. 

```
$ more redshiftinfo.txt
1|public\|event\|dwuser
2|public\|sales\|dwuser

create table redshiftinfo(infoid int,tableinfo varchar(50));

copy redshiftinfo from 's3://amzn-s3-demo-bucket/data/redshiftinfo.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
delimiter '|' escape;

select * from redshiftinfo order by 1;
infoid |       tableinfo
-------+--------------------
1      | public|event|dwuser
2      | public|sales|dwuser
(2 rows)
```

Ohne den Parameter ESCAPE schlägt dieser COPY-Befehl mit dem Fehler `Extra column(s) found` fehl.

**Wichtig**  
Wenn Sie Ihre Daten mittels einer COPY-Operation mit dem Parameter ESCAPE laden, müssen Sie den Parameter ESCAPE auch für Ihren UNLOAD-Befehl angeben, um die reziproke Ausgabedatei zu generieren. Wenn Sie UNLOAD unter Verwendung des Parameters ESCAPE ausführen, müssen Sie ESCAPE verwenden, um eine COPY-Operation für diese Daten auszuführen.

## Beispiele für die COPY-Operation aus JSON
<a name="r_COPY_command_examples-copy-from-json"></a>

In den folgenden Beispielen wird die Tabelle CATEGORY mit den folgenden Daten geladen. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ [Laden von JSON-Daten unter Verwendung der Option „auto“](#copy-from-json-examples-using-auto)
+ [Laden von JSON-Daten unter Verwendung der Option „auto ignorecase“](#copy-from-json-examples-using-auto-ignorecase)
+ [Aus JSON-Daten mithilfe einer Datei laden JSONPaths](#copy-from-json-examples-using-jsonpaths)
+ [Aus JSON-Arrays mithilfe einer JSONPaths Datei laden](#copy-from-json-examples-using-jsonpaths-arrays)

### Laden von JSON-Daten unter Verwendung der Option „auto“
<a name="copy-from-json-examples-using-auto"></a>

Um JSON-Daten unter Verwendung der Option `'auto'` zu laden, müssen die JSON-Daten aus einem Satz von Objekten bestehen. Die Schlüsselnamen müssen mit den Spaltennamen übereinstimmen. In diesem Fall spielt die Reihenfolge jedoch keine Rolle. Im folgenden werden die Inhalte einer Datei namens gezeigt `category_object_auto.json`.

```
{
    "catdesc": "Major League Baseball",
    "catid": 1,
    "catgroup": "Sports",
    "catname": "MLB"
}
{
    "catgroup": "Sports",
    "catid": 2,
    "catname": "NHL",
    "catdesc": "National Hockey League"
}
{
    "catid": 3,
    "catname": "NFL",
    "catgroup": "Sports",
    "catdesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "catid": 4,
    "catgroup": "Sports",
    "catname": "NBA",
    "catdesc": "National Basketball Association"
}
{
    "catid": 5,
    "catgroup": "Shows",
    "catname": "Musicals",
    "catdesc": "All symphony, concerto, and choir concerts"
}
```

Um Daten aus der JSON-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto';
```

### Laden von JSON-Daten unter Verwendung der Option „auto ignorecase“
<a name="copy-from-json-examples-using-auto-ignorecase"></a>

Um JSON-Daten unter Verwendung der Option `'auto ignorecase'` zu laden, müssen die JSON-Daten aus einem Satz von Objekten bestehen. Die Groß- und Kleinschreibung der Schlüsselnamen muss nicht mit den Spaltennamen übereinstimmen und die Reihenfolge spielt keine Rolle. Im folgenden werden die Inhalte einer Datei namens gezeigt `category_object_auto-ignorecase.json`.

```
{
    "CatDesc": "Major League Baseball",
    "CatID": 1,
    "CatGroup": "Sports",
    "CatName": "MLB"
}
{
    "CatGroup": "Sports",
    "CatID": 2,
    "CatName": "NHL",
    "CatDesc": "National Hockey League"
}
{
    "CatID": 3,
    "CatName": "NFL",
    "CatGroup": "Sports",
    "CatDesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "CatID": 4,
    "CatGroup": "Sports",
    "CatName": "NBA",
    "CatDesc": "National Basketball Association"
}
{
    "CatID": 5,
    "CatGroup": "Shows",
    "CatName": "Musicals",
    "CatDesc": "All symphony, concerto, and choir concerts"
}
```

Um Daten aus der JSON-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto ignorecase.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto ignorecase';
```

### Aus JSON-Daten mithilfe einer Datei laden JSONPaths
<a name="copy-from-json-examples-using-jsonpaths"></a>

Wenn die JSON-Datenobjekte nicht direkt den Spaltennamen entsprechen, können Sie eine JSONPaths Datei verwenden, um die JSON-Elemente den Spalten zuzuordnen. Die Reihenfolge in den JSON-Quelldaten spielt keine Rolle, aber die Reihenfolge der JSONPaths Dateiausdrücke muss mit der Reihenfolge der Spalten übereinstimmen. Angenommen, Sie verwenden die folgende Datendatei mit dem Namen `category_object_paths.json`.

```
{
    "one": 1,
    "two": "Sports",
    "three": "MLB",
    "four": "Major League Baseball"
}
{
    "three": "NHL",
    "four": "National Hockey League",
    "one": 2,
    "two": "Sports"
}
{
    "two": "Sports",
    "three": "NFL",
    "one": 3,
    "four": "National Football League"
}
{
    "one": 4,
    "two": "Sports",
    "three": "NBA",
    "four": "National Basketball Association"
}
{
    "one": 6,
    "two": "Shows",
    "three": "Musicals",
    "four": "All symphony, concerto, and choir concerts"
}
```

Die folgende JSONPaths Datei mit dem Namen `category_jsonpath.json` ordnet die Quelldaten den Tabellenspalten zu.

```
{
    "jsonpaths": [
        "$['one']",
        "$['two']",
        "$['three']",
        "$['four']"
    ]
}
```

Um Daten aus der JSON-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_jsonpath.json';
```

### Aus JSON-Arrays mithilfe einer JSONPaths Datei laden
<a name="copy-from-json-examples-using-jsonpaths-arrays"></a>

Um Daten aus JSON zu laden, die aus einer Reihe von Arrays bestehen, müssen Sie eine JSONPaths Datei verwenden, um die Array-Elemente den Spalten zuzuordnen. Angenommen, Sie verwenden die folgende Datendatei mit dem Namen `category_array_data.json`.

```
[1,"Sports","MLB","Major League Baseball"]
[2,"Sports","NHL","National Hockey League"]
[3,"Sports","NFL","National Football League"]
[4,"Sports","NBA","National Basketball Association"]
[5,"Concerts","Classical","All symphony, concerto, and choir concerts"]
```

Die folgende JSONPaths Datei mit dem Namen `category_array_jsonpath.json` ordnet die Quelldaten den Tabellenspalten zu.

```
{
    "jsonpaths": [
        "$[0]",
        "$[1]",
        "$[2]",
        "$[3]"
    ]
}
```

Um Daten aus der JSON-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_array_data.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_array_jsonpath.json';
```

## Beispiele für die Kopie aus Avro
<a name="r_COPY_command_examples-copy-from-avro"></a>

In den folgenden Beispielen wird die Tabelle CATEGORY mit den folgenden Daten geladen. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ [Laden von Avro-Daten unter Verwendung der Option „auto“](#copy-from-avro-examples-using-auto)
+ [Laden von Avro-Daten unter Verwendung der Option „auto ignorecase“](#copy-from-avro-examples-using-auto-ignorecase)
+ [Aus Avro-Daten mithilfe einer JSONPaths Datei laden](#copy-from-avro-examples-using-avropaths)

### Laden von Avro-Daten unter Verwendung der Option „auto“
<a name="copy-from-avro-examples-using-auto"></a>

Um Daten aus Avro-Datendateien unter Verwendung des Arguments `'auto'` zu laden, müssen die Feldnamen im Avro-Schema mit den Spaltennamen übereinstimmen. Bei Verwendung des Arguments `'auto'` spielt die Reihenfolge keine Rolle. Im folgenden wird das Schema für eine Datei namens gezeigt `category_auto.avro`.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "catid", "type": "int"},
        {"name": "catdesc", "type": "string"},
        {"name": "catname", "type": "string"},
        {"name": "catgroup", "type": "string"},
}
```

Die Daten in einer Avro-Datei liegen im binären Format vor. Sie können daher nicht von Menschen gelesen werden. Im folgenden Beispiel wird eine JSON-Darstellung der Daten in der `category_auto.avro`-Datei gezeigt. 

```
{
   "catid": 1,
   "catdesc": "Major League Baseball",
   "catname": "MLB",
   "catgroup": "Sports"
}
{
   "catid": 2,
   "catdesc": "National Hockey League",
   "catname": "NHL",
   "catgroup": "Sports"
}
{
   "catid": 3,
   "catdesc": "National Basketball Association",
   "catname": "NBA",
   "catgroup": "Sports"
}
{
   "catid": 4,
   "catdesc": "All symphony, concerto, and choir concerts",
   "catname": "Classical",
   "catgroup": "Concerts"
}
```

Um Daten aus der Avro-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto';
```

### Laden von Avro-Daten unter Verwendung der Option „auto ignorecase“
<a name="copy-from-avro-examples-using-auto-ignorecase"></a>

Um Daten aus Avro-Datendateien unter Verwendung des Arguments `'auto ignorecase'` zu laden, muss die Groß-/Kleinschreibung der Feldnamen im Avro-Schema nicht mit den Spaltennamen übereinstimmen. Bei Verwendung des Arguments `'auto ignorecase'` spielt die Reihenfolge keine Rolle. Im folgenden wird das Schema für eine Datei namens gezeigt `category_auto-ignorecase.avro`.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "CatID", "type": "int"},
        {"name": "CatDesc", "type": "string"},
        {"name": "CatName", "type": "string"},
        {"name": "CatGroup", "type": "string"},
}
```

Die Daten in einer Avro-Datei liegen im binären Format vor. Sie können daher nicht von Menschen gelesen werden. Im folgenden Beispiel wird eine JSON-Darstellung der Daten in der `category_auto-ignorecase.avro`-Datei gezeigt. 

```
{
   "CatID": 1,
   "CatDesc": "Major League Baseball",
   "CatName": "MLB",
   "CatGroup": "Sports"
}
{
   "CatID": 2,
   "CatDesc": "National Hockey League",
   "CatName": "NHL",
   "CatGroup": "Sports"
}
{
   "CatID": 3,
   "CatDesc": "National Basketball Association",
   "CatName": "NBA",
   "CatGroup": "Sports"
}
{
   "CatID": 4,
   "CatDesc": "All symphony, concerto, and choir concerts",
   "CatName": "Classical",
   "CatGroup": "Concerts"
}
```

Um Daten aus der Avro-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto-ignorecase.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto ignorecase';
```

### Aus Avro-Daten mithilfe einer JSONPaths Datei laden
<a name="copy-from-avro-examples-using-avropaths"></a>

Wenn die Feldnamen im Avro-Schema nicht direkt den Spaltennamen entsprechen, können Sie eine JSONPaths Datei verwenden, um die Schemaelemente den Spalten zuzuordnen. Die Reihenfolge der JSONPaths Dateiausdrücke muss mit der Reihenfolge der Spalten übereinstimmen. 

Angenommen, Sie verwenden eine Datendatei namens `category_paths.avro`, die dieselben Daten wie im vorherigen Beispiel enthält, jedoch mit dem folgenden Schema.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "desc", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "group", "type": "string"},
        {"name": "region", "type": "string"} 
     ]
}
```

Die folgende JSONPaths Datei mit dem Namen `category_path.avropath` ordnet die Quelldaten den Tabellenspalten zu.

```
{
    "jsonpaths": [
        "$['id']",
        "$['group']",
        "$['name']",
        "$['desc']"
    ]
}
```

Um Daten aus der Avro-Datei im vorherigen Beispiel zu laden, führen Sie den folgenden COPY-Befehl aus.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
format avro 's3://amzn-s3-demo-bucket/category_path.avropath ';
```

## Vorbereiten von Dateien auf die COPY-Operation mit der Option ESCAPE
<a name="r_COPY_preparing_data"></a>

Im folgenden Beispiel wird beschrieben, wie Sie Daten vorbereiten können, damit Zeichen für neue Zeilen mit Escape-Zeichen markiert werden, bevor die Daten unter Verwendung des COPY-Befehls mit dem Parameter ESCAPE in eine Amazon-Redshift-Tabelle geladen werden. Wenn die Zeichen für neue Zeilen in den Daten nicht mit Escape-Zeichen markiert werden, gibt Amazon Redshift Ladefehler zurück, sobald Sie den COPY-Befehl ausführen, da die Zeichen für neue Zeilen normalerweise als Datensatztrennzeichen verwendet werden. 

Betrachten Sie beispielsweise eine Datei oder eine Spalte in einer externen Tabelle, die Sie in eine Amazon-Redshift-Tabelle kopieren möchten. Wenn die Datei oder Spalte XML-formatierte Inhalte oder ähnliche Daten enthält, müssen Sie sicherstellen, dass alle Zeichen für neue Zeilen (\$1n), die Teil des Inhalts sind, mit dem Backslash-Zeichen (\$1) als Escape-Zeichen markiert werden. 

Eine Datei oder Tabelle, die eingebettete Zeichen für Zeilenumbrüche enthält, bietet ein vergleichsweise einfaches Muster für den Vergleich. Die eingebetteten Zeichen für neue Zeilen folgen wahrscheinlich meistens einem `>`-Zeichen, wobei sich dazwischen möglicherweise einige Leerstellen (`' '` oder Tabulatorzeichen) befinden, wie Sie im folgenden Beispiel für eine Textdatei namens `nlTest1.txt` sehen können. 

```
$ cat nlTest1.txt
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>|1000
<xml>
</xml>|2000
```

Im folgenden Beispiel können Sie ein Textverarbeitungsprogramm ausführen, um die Quelldatei vorab zu bearbeiten und an den nötigen Stellen Escape-Zeichen einzufügen. (Das Zeichen `|` soll als Trennzeichen verwendet werden, um Spaltendaten beim Kopieren in eine Amazon-Redshift-Tabelle zu trennen). 

```
$ sed -e ':a;N;$!ba;s/>[[:space:]]*\n/>\\\n/g' nlTest1.txt > nlTest2.txt
```

Ähnlich können Sie Perl verwenden, um eine vergleichbare Operation auszuführen: 

```
cat nlTest1.txt | perl -p -e 's/>\s*\n/>\\\n/g' > nlTest2.txt
```

Um die Daten aus der Datei `nlTest2.txt` in Amazon Redshift laden zu können, wurde in eine Tabelle mit zwei Spalten erstellt. Die erste Spalte c1 ist eine Zeichenspalte, die XML-formatierte Inhalte aus der Datei `nlTest2.txt` aufnimmt. Die zweite Spalte c2 enthält Ganzzahlwerte, die aus derselben Datei geladen wurden. 

Nach Ausführung des Befehls `sed` können Sie Daten unter Verwendung des Parameters ESCAPE korrekt aus der Datei `nlTest2.txt` in eine Amazon-Redshift-Tabelle laden. 

**Anmerkung**  
Wenn Sie den COPY-Befehl zusammen mit dem Parameter ESCAPE verwenden, wird eine Reihe von Sonderzeichen mit dem Escape-Zeichen markiert, zu denen auch das Backslash-Zeichen gehört (einschließlich des Zeichens für neue Zeilen). 

```
copy t2 from 's3://amzn-s3-demo-bucket/data/nlTest2.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'  
escape
delimiter as '|';

select * from t2 order by 2;

c1           |  c2
-------------+------
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>
| 1000
<xml>
</xml>       | 2000
(2 rows)
```

Sie können Datendateien, die aus externen Datenbanken exportiert wurden, auf ähnliche Weise vorbereiten. Im Fall einer Oracle-Datenbank können Sie beispielsweise die Funktion REPLACE auf alle betroffenen Spalten in einer Tabelle anwenden, die Sie zu Amazon Redshift kopieren möchten. 

```
SELECT c1, REPLACE(c2, \n',\\n' ) as c2 from my_table_with_xml
```

Zusätzlich stellen zahlreiche Tools für den Export sowie das Extrahieren, das Transformieren und das Laden (Extract, Transform, Load, ETL) von Datenbanken, die routinemäßig große Datenmengen verarbeiten, Optionen für die Angabe von Escape- und Trennzeichen bereit. 

## Laden eines Shapefile in Amazon Redshift
<a name="copy-example-spatial-copy-shapefile"></a>

In den folgenden Beispielen wird gezeigt, wie Sie ein Esri-Shapefile mit COPY laden. Weitere Informationen zum Laden von Shapefiles finden Sie unter [Laden eines Shapefile in Amazon Redshift](spatial-copy-shapefile.md). 

### Laden eines Shapefile
<a name="copy-example-spatial-copy-shapefile-loading-copy"></a>

Die folgenden Schritte zeigen, wie Sie mit dem Befehl COPY OpenStreetMap Daten aus Amazon S3 aufnehmen. In diesem Beispiel wird davon ausgegangen, dass das Norwegen Shapefile-Archiv von [der Download-Site von Geofabrik](https://download.geofabrik.de/europe.html) in einen privaten Amazon S3 S3-Bucket in Ihrer Region hochgeladen wurde. AWS Die Dateien `.shp`, `.shx` und`.dbf` müssen dasselbe Amazon-S3-Präfix und denselben Dateinamen haben.

#### Erfassung von Daten ohne Vereinfachung
<a name="spatial-copy-shapefile-loading-copy-fits"></a>

Mit den folgenden Befehlen werden Tabellen erstellt und Daten erfasst, die ohne Vereinfachung in die maximale Geometriegröße passen. Öffnen Sie `gis_osm_natural_free_1.shp` in Ihrer bevorzugten GIS-Software und überprüfen Sie die Spalten in diesem Layer. Standardmäßig werden entweder IDENTITY- oder GEOMETRY-Spalten zuerst angezeigt. Wenn eine GEOMETRY-Spalte zuerst angezeigt wird, können Sie die Tabelle wie folgt erstellen.

```
CREATE TABLE norway_natural (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Wenn eine IDENTITY-Spalte an erster Stelle steht, können Sie die Tabelle wie folgt erstellen.

```
CREATE TABLE norway_natural_with_id (
   fid INT IDENTITY(1,1),
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Jetzt können Sie die Daten mit COPY erfassen.

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural' completed, 83891 record(s) loaded successfully
```

Oder Sie können die Daten wie folgt erfassen. 

```
COPY norway_natural_with_id FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural_with_id' completed, 83891 record(s) loaded successfully.
```

#### Erfassung von Daten mit Vereinfachung
<a name="spatial-copy-shapefile-loading-copy-no-fit"></a>

Mit den folgenden Befehlen wird eine Tabelle erstellt und es wird versucht, Daten zu erfassen, die ohne Vereinfachung nicht in die maximale Geometriegröße passen. Untersuchen Sie das `gis_osm_water_a_free_1.shp`-Shapefile und erstellen Sie die entsprechende Tabelle wie folgt.

```
CREATE TABLE norway_water (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Wenn der Befehl COPY ausgeführt wird, führt dies zu einem Fehler.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
ERROR:  Load into table 'norway_water' failed.  Check 'stl_load_errors' system table for details.
```

Eine Abfrage von `STL_LOAD_ERRORS` zeigt an, dass die Geometrie zu groß ist. 

```
SELECT line_number, btrim(colname), btrim(err_reason) FROM stl_load_errors WHERE query = pg_last_copy_id();
 line_number |    btrim     |                                 btrim
-------------+--------------+-----------------------------------------------------------------------
     1184705 | wkb_geometry | Geometry size: 1513736 is larger than maximum supported size: 1048447
```

Zur Vereinfachung der Geometrien wird der Parameter `SIMPLIFY AUTO` zum COPY-Befehl hinzugefügt.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989196 record(s) loaded successfully.
```

Um die Zeilen und Geometrien anzuzeigen, die vereinfacht wurden, fragen Sie ab `SVL_SPATIAL_SIMPLIFY`.

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size |   final_tolerance
-------+-------------+-------------------+--------------+------------+------------+----------------------
    20 |     1184704 |                -1 |      1513736 | t          |    1008808 |   1.276386653895e-05
    20 |     1664115 |                -1 |      1233456 | t          |    1023584 | 6.11707814796635e-06
```

Die Verwendung von SIMPLIFY AUTO *max\$1tolerance* mit einer Toleranz, die niedriger ist als die automatisch berechnete, führt wahrscheinlich zu einem Einlesefehler. In diesem Fall sollten Sie MAXERROR verwenden, um Fehler zu ignorieren.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO 1.1E-05
MAXERROR 2
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989195 record(s) loaded successfully.
INFO:  Load into table 'norway_water' completed, 1 record(s) could not be loaded.  Check 'stl_load_errors' system table for details.
```

Fragen Sie `SVL_SPATIAL_SIMPLIFY` erneut ab, um den Datensatz zu identifizieren, den COPY nicht laden konnte.

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size | final_tolerance
-------+-------------+-------------------+--------------+------------+------------+-----------------
    29 |     1184704 |           1.1e-05 |      1513736 | f          |          0 |               0
    29 |     1664115 |           1.1e-05 |      1233456 | t          |     794432 |         1.1e-05
```

In diesem Beispiel konnte der erste Datensatz nicht eingefügt werden, sodass die Spalte `simplified` falsch angezeigt wird. Der zweite Datensatz wurde innerhalb der vorgegebenen Toleranz geladen. Die endgültige Größe ist jedoch größer als bei Verwendung der automatisch berechneten Toleranz ohne Angabe der maximalen Toleranz. 

### Laden aus einem komprimierten Shapefile
<a name="copy-example-spatial-copy-shapefile-compressed"></a>

Die COPY-Funktion von Amazon Redshift unterstützt die Erfassung von Daten aus einem komprimierten Shapefile. Alle Shapefile-Komponenten müssen dasselbe Amazon-S3-Präfix und dasselbe Komprimierungssuffix aufweisen. Nehmen wir an, Sie möchten die Daten aus dem vorherigen Beispiel laden. In diesem Fall müssen sich die Dateien `gis_osm_water_a_free_1.shp.gz`, `gis_osm_water_a_free_1.dbf.gz` und `gis_osm_water_a_free_1.shx.gz` das gleiche Amazon-S3-Verzeichnis teilen. Der COPY-Befehl erfordert die Option GZIP, und in der FROM-Klausel muss die richtige komprimierte Datei angegeben werden, wie im Folgenden gezeigt.

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/compressed/gis_osm_natural_free_1.shp.gz'
FORMAT SHAPEFILE
GZIP
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural' completed, 83891 record(s) loaded successfully.
```

### Laden von Daten in eine Tabelle mit einer anderen Spaltenreihenfolge
<a name="copy-example-spatial-copy-shapefile-column-order"></a>

Wenn Sie eine Tabelle haben, die nicht `GEOMETRY` als erste Spalte hat, können Sie die Spalten-Mapping verwenden, um die Spalten der Zieltabelle zuzuordnen. Erstellen Sie z. B. eine Tabelle mit `osm_id` als erste Spalte.

```
CREATE TABLE norway_natural_order (
   osm_id BIGINT,
   wkb_geometry GEOMETRY,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Laden Sie dann ein Shapefile unter Verwendung des Spalten-Mappings.

```
COPY norway_natural_order(wkb_geometry, osm_id, code, fclass, name) 
FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural_order' completed, 83891 record(s) loaded successfully.
```

### Laden von Daten in eine Tabelle mit einer Geografiespalte
<a name="copy-example-spatial-copy-shapefile-geography"></a>

Wenn Sie eine Tabelle mit einer `GEOGRAPHY`-Spalte haben, erfassen Sie zuerst in eine `GEOMETRY`-Spalte und wandeln dann die Objekte in `GEOGRAPHY`-Objekte um. Zum Beispiel: Nachdem Sie Ihr Shapefile in eine `GEOMETRY`-Spalte kopiert haben, ändern Sie die Tabelle, um eine Spalte mit dem Datentyp `GEOGRAPHY` hinzuzufügen.

```
ALTER TABLE norway_natural ADD COLUMN wkb_geography GEOGRAPHY;
```

Dann konvertieren Sie die Geometrien in Geografien.

```
UPDATE norway_natural SET wkb_geography = wkb_geometry::geography;
```

Optional können Sie auch die `GEOMETRY`-Spalte entfernen.

```
ALTER TABLE norway_natural DROP COLUMN wkb_geometry;
```

## COPY-Befehl mit der Option NOLOAD
<a name="r_COPY_command_examples-load-noload-option"></a>

Verwenden Sie die Option NOLOAD mit dem COPY-Befehl, um Datendateien zu validieren, bevor sie tatsächlich geladen werden. Amazon Redshift analysiert die Eingabedatei und zeigt alle auftretenden Fehler an. Das folgende Beispiel verwendet die Option NOLOAD und es werden tatsächlich keine Zeilen in die Tabelle geladen.

```
COPY public.zipcode1
FROM 's3://amzn-s3-demo-bucket/mydata/zipcode.csv' 
DELIMITER ';' 
IGNOREHEADER 1 REGION 'us-east-1'
NOLOAD
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole';

Warnings:
Load into table 'zipcode1' completed, 0 record(s) loaded successfully.
```

## Befehl COPY mit Multibyte-Trennzeichen und Option ENCODING
<a name="r_COPY_command_examples-load-encoding-multibyte-delimiter-option"></a>

Das folgende Beispiel wird LATIN1 aus einer Amazon S3 S3-Datei geladen, die Multibyte-Daten enthält. Der Befehl COPY gibt das Trennzeichen im Oktalformat `\302\246\303\254` an, um die Felder in einer Eingabedatei zu trennen, codiert als ISO-8859-1. Um dasselbe Trennzeichen in UTF-8 anzugeben, geben Sie `DELIMITER '¦ì'` an.

```
COPY latin1
FROM 's3://amzn-s3-demo-bucket/multibyte/myfile' 
IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftRole'
DELIMITER '\302\246\303\254'
ENCODING ISO88591
```

# CREATE DATABASE
<a name="r_CREATE_DATABASE"></a>

Erstellt eine neue Datenbank.

Sie müssen ein Superuser sein oder über die CREATEDB-Berechtigung verfügen, um eine Datenbank zu erstellen. Sie müssen ein Superuser sein oder sowohl über die Berechtigung CREATEDB als auch die Berechtigung CREATEUSER verfügen, um eine Datenbank zu erstellen, die mit einer Null-ETL-Integration verknüpft ist.

CREATE DATABASE kann nicht innerhalb eines Transaktionsblocks (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

## Syntax
<a name="r_CREATE_DATABASE-synopsis"></a>

```
CREATE DATABASE database_name 
[ { [ 
      FROM INTEGRATION '<integration_id>'[ DATABASE '<source_database>' ]
      [ SET ]
      [ ACCEPTINVCHARS [=] { TRUE | FALSE }]
      [ QUERY_ALL_STATES [=] { TRUE | FALSE }] 
      [ REFRESH_INTERVAL <interval> ] 
      [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
      [ HISTORY_MODE [=] {TRUE | FALSE} ]
    ]
    [ WITH ]
    [ OWNER [=] db_owner ]
    [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
  }
  | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } }
  | { IAM_ROLE  {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } }
  | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid }
]
```

## Parameters
<a name="r_CREATE_DATABASE-parameters"></a>

 *database\$1name*   
Name der neuen Datenbank. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

FROM INTEGRATION '<integration\$1id>' [ DATABASE '<source\$1database>' ]   
Gibt an, ob die Datenbank mit einer ID für eine Null-ETL-Integration erstellt werden soll. Sie können die `integration_id` aus der Systemansicht SVV\$1INTEGRATION abrufen. Bei Null-ETL-Integrationen für Aurora PostgreSQL müssen Sie auch einen Namen für `source_database` angeben, der auch aus SVV\$1INTEGRATION abgerufen werden kann.  
Ein Beispiel finden Sie unter [Erstellen von Datenbanken zum Erhalt von Ergebnissen von Null-ETL-Integrationen](#r_CREATE_DATABASE-integration). Weitere Informationen zum Erstellen von Datenbanken mit Null-ETL-Integrationen finden Sie unter [Erstellen von Zieldatenbanken in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html) im *Managementleitfaden zu Amazon Redshift*.

SET  
Optionales Schlüsselwort.

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
Die ACCEPTINVCHARS-Klausel legt fest, ob Null-ETL-Integrationstabellen mit der Aufnahme fortfahren, wenn ungültige Zeichen für den VARCHAR-Datentyp erkannt werden. Wenn ungültige Zeichen gefunden werden, wird das ungültige Zeichen durch ein standardmäßiges `?`-Zeichen ersetzt.

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
Die QUERY\$1ALL\$1STATES-Klausel legt fest, ob Null-ETL-Integrationstabellen in allen Status (`Synced`, `Failed`, `ResyncRequired` und `ResyncInitiated`) abgefragt werden können. Standardmäßig kann eine Null-ETL-Integrationstabelle nur im Status `Synced` abgefragt werden. 

REFRESH\$1INTERVAL <interval>  
Die REFRESH\$1INTERVAL-Klausel legt das ungefähre Zeitintervall in Sekunden für die Aktualisierung von Daten aus der Zero-ETL-Quelle in der Zieldatenbank fest. Der Wert für Null-ETL-Integrationen mit dem Quelltyp Aurora MySQL, Aurora PostgreSQL oder RDS for MySQL kann auf 0–432 000 Sekunden (5 Tage) festgelegt werden. Bei Null-ETL-Integrationen für Amazon DynamoDB kann der Wert auf 900–432.000 Sekunden (15 Minuten bis 5 Tage) festgelegt werden. Die Standardeinstellung für `interval` ist null (0) Sekunden für Null-ETL-Integrationen, deren Quelltyp Aurora MySQL, Aurora PostgreSQL oder RDS für MySQL ist. Bei Null-ETL-Integrationen für Amazon DynamoDB beträgt die Standardeinstellung für `interval` 900 Sekunden (15 Minuten).

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
Die TRUNCATECOLUMNS-Klausel legt fest, ob Null-ETL-Integrationstabellen mit der Aufnahme fortfahren, wenn die Werte für die VARCHAR-Spalten- oder SUPER-Spaltenattribute den Grenzwert überschreiten. Wenn `TRUE`, werden die Werte gekürzt, sodass sie in die Spalte passen, und die Werte von JSON-Attributen, die den verfügbaren Platz überschreiten, werden gekürzt, damit sie in die SUPER-Spalte passen.

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1  
Eine Klausel, die angibt, ob Amazon Redshift den Verlaufsmodus für alle neuen Tabellen in der angegebenen Datenbank festlegt. Diese Option gilt nur für Datenbanken, die für die Null-ETL-Integration erstellt wurden.  
Die HISTORY\$1MODE-Klausel kann auf `TRUE` oder `FALSE` gesetzt werden. Der Standardwert ist `FALSE`. Informationen zu HISTORY\$1MODE finden Sie unter [Verlaufsmodus](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html) im *Managementleitfaden zu Amazon Redshift*.

WITH  
Optionales Schlüsselwort.

OWNER [=] db\$1owner  
Gibt den Benutzernamen des Datenbankbesitzers an.

CONNECTION LIMIT \$1 *Limit* \$1 UNLIMITED \$1   
Die maximale Zahl von Datenbankverbindungen, die Benutzer gleichzeitig geöffnet haben dürfen. Das Limit wird für Superuser nicht durchgesetzt. Mithilfe des Schlüsselworts UNLIMITED können Sie die maximale Zahl gleichzeitiger Verbindungen festlegen. Möglicherweise gilt auch ein Limit für die Zahl der Verbindungen für die einzelnen Benutzer. Weitere Informationen finden Sie unter [CREATE USER](r_CREATE_USER.md). Der Standardwert ist UNLIMITED. Um die aktuellen Verbindungen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [STV\$1SESSIONS](r_STV_SESSIONS.md) aus.  
Wenn sowohl für Benutzer- als auch für Datenbankverbindungen Limits gelten, muss ein ungenutzter Verbindungsplatz verfügbar sein, der sich innerhalb beider Grenzen befindet, wenn ein Benutzer versucht, eine Verbindung herzustellen.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Eine Klausel, die angibt, ob beim Suchen oder Vergleichen von Zeichenfolgen zwischen Groß- und Kleinschreibung unterschieden wird oder nicht. Die Standardeinstellung ist die Unterscheidung zwischen Groß- und Kleinschreibung.  
COLLATE wird nicht unterstützt, wenn Sie eine Datenbank aus einem Datashare erstellen.  
CASE\$1SENSITIVE und CS sind austauschbar und liefern dieselben Ergebnisse. Ebenso sind CASE\$1INSENSITIVE und CI austauschbar und führen zu denselben Ergebnissen.

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
Eine Klausel, die die verwendete Isolationsstufe bei Abfragen für eine Datenbank angibt. Weitere Informationen zu Isolationsstufen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md).  
+ SNAPSHOT-Isolation – bietet eine Isolationsstufe mit Schutz vor Aktualisierungs- und Löschkonflikten. Dies ist der Standardwert für eine Datenbank, die in einem bereitgestellten Cluster oder in einem Serverless-Namespace erstellt wurde. 
+ SERIALIZABLE-Isolation (serialisierbare Isolation) – bietet volle Serialisierbarkeit für gleichzeitige Transaktionen. 

FROM ARN '<ARN>'  
Der AWS Glue Datenbank-ARN, der zum Erstellen der Datenbank verwendet werden soll.

\$1 WITH DATA CATALOG SCHEMA '<schema>' \$1 WITH NO DATA CATALOG SCHEMA \$1  
Dieser Parameter ist nur anwendbar, wenn Ihr CREATE DATABASE-Befehl auch den FROM ARN-Parameter verwendet.
Gibt an, ob die Datenbank unter Verwendung eines Schemas zur Unterstützung des Zugriffs in  AWS Glue Data Catalog erstellt werden soll.

IAM\$1ROLE \$1Standard \$1 'SESSION' \$1 'arn:aws:iam: :role/ '\$1 *<AWS-Konto-id>* *<role-name>*  
Dieser Parameter ist nur anwendbar, wenn Ihr CREATE DATABASE-Befehl auch den FROM ARN-Parameter verwendet.
Wenn Sie beim Ausführen des CREATE DATABASE-Befehls eine IAM-Rolle angeben, die dem Cluster zugeordnet ist, verwendet Amazon Redshift die Anmeldeinformationen der Rolle, wenn Sie Abfragen in der Datenbank ausführen.  
Die Angabe des Schlüsselworts `default` bedeutet, die IAM-Rolle zu verwenden, die als Standard festgelegt und mit dem Cluster verknüpft ist.  
Verwenden Sie `'SESSION'`, wenn Sie über eine Verbundidentität eine Verbindung zu Ihrem Amazon-Redshift-Cluster herstellen und über das mit diesem Befehl erstellte externe Schema auf die Tabellen zugreifen. Ein Beispiel zur Verwendung einer Verbundidentität finden Sie unter [Verwenden einer Verbundidentität zur Verwaltung des Amazon-Redshift-Zugriffs auf lokale Ressourcen und externe Amazon-Redshift-Spectrum-Tabellen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). Darin wird erläutert, wie Sie eine Verbundidentität konfigurieren.   
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Die IAM-Rolle muss mindestens die Berechtigung besitzen, eine LIST-Operation für den Amazon-S3-Bucket auszuführen, auf den zugegriffen werden soll, und eine GET-Operation für die Amazon-S3-Objekte, die der Bucket enthält. Weitere Informationen zur Verwendung von IAM\$1ROLE beim Erstellen einer Datenbank mithilfe von AWS Glue Data Catalog For Datashares finden Sie unter [Working with Lake Formation-managed](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html) datashares as a consumer.  
Nachfolgend ist die Syntax für die IAM\$1ROLE-Parameterzeichenfolge für einen einzelnen ARN aufgeführt.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster eine andere IAM-Rolle annehmen, die möglicherweise zu einem anderen Konto gehört. Es können bis zu 10 Rollen miteinander verkettet werden. Weitere Informationen finden Sie unter [Verketten von IAM-Rollen in Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Fügen Sie dieser IAM-Rolle eine IAM-Berechtigungsrichtlinie ähnlich der folgenden an:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Informationen zu den Schritten für das Erstellen einer IAM-Rolle zur Verwendung mit der Verbundabfrage finden Sie unter [Erstellen eines Secrets und einer IAM-Rolle für die Verwendung von Verbundabfragen](federated-create-secret-iam-role.md).   
Fügen Sie keine Leerzeichen in die Liste der verketteten Rollen ein.
Nachfolgend finden Sie die Syntax für die Verkettung von drei Rollen.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

## Syntax für die Verwendung von CREATE DATABASE mit einem Datashare
<a name="r_CREATE_DATABASE-datashare-synopsis"></a>

Die folgende Syntax beschreibt den Befehl CREATE DATABASE, der verwendet wird, um Datenbanken aus einem Datashare für die gemeinsame Nutzung von Daten innerhalb desselben Kontos zu erstellen. AWS 

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid
```

Die folgende Syntax beschreibt den Befehl CREATE DATABASE, der verwendet wird, um Datenbanken aus einem Datashare für die gemeinsame Nutzung von Daten zwischen Konten zu erstellen. AWS 

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF ACCOUNT account_id NAMESPACE namespace_guid
```

### Parameter für die Verwendung von CREATE DATABASE mit einem Datashare
<a name="r_CREATE_DATABASE-parameters-datashare"></a>

VOM DATASHARE   
Ein Schlüsselwort, das angibt, wo sich das Datashare befindet.

 *datashare\$1name*   
Der Name des Datashares,in dem die Consumer-Datenbank erstellt wird.

WITH PERMISSIONS  
Gibt an, dass für die aus dem Datashare erstellte Datenbank für den Zugriff auf einzelne Datenbankobjekte Berechtigungen auf Objektebene erforderlich sind. Ohne diese Klausel haben Benutzer oder Rollen, denen die USAGE-Berechtigung für die Datenbank erteilt wurde, automatisch Zugriff auf alle Datenbankobjekte in der Datenbank.

 NAMESPACE *namespace\$1guid*   
Ein Wert, der den Produzenten-Namespace angibt, zu dem das Datashare gehört.

ACCOUNT *account\$1id*  
Ein Wert, der das Produzenten-Konto angibt, zu dem das Datashare gehört.

## Verwendungshinweise für CREATE DATABASE in Verbindung mit Datashares
<a name="r_CREATE_DATABASE-usage"></a>

Wenn Sie als Datenbank-Superuser CREATE DATABASE verwenden, um Datenbanken aus Datenfreigaben innerhalb des AWS Kontos zu erstellen, geben Sie die Option NAMESPACE an. Die Option ACCOUNT ist optional. Wenn Sie CREATE DATABASE verwenden, um Datenbanken aus AWS -kontenübergreifenden Datashares zu erstellen, geben Sie sowohl ACCOUNT als auch NAMESPACE vom Produzenten an.

Sie können nur eine Konsumentendatenbank für ein Datashare in einem Konsumenten-Cluster erstellen. Sie können nicht mehrere Konsumentendatenbanken erstellen, die auf dasselbe Datashare verweisen.

## DATENBANK ERSTELLEN von AWS Glue Data Catalog
<a name="r_CREATE_DATABASE_data-catalog"></a>

Um eine Datenbank mit einem AWS Glue Datenbank-ARN zu erstellen, geben Sie den ARN in Ihrem CREATE DATABASE-Befehl an.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;
```

Optional können Sie auch einen Wert im IAM\$1ROLE-Parameter eingeben. Weitere Informationen zu Parametern und zulässigen Werten finden Sie unter [Parameter](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html#r_CREATE_DATABASE-parameters).

Die folgenden Beispiele veranschaulichen, wie Sie mithilfe einer IAM-Rolle eine Datenbank aus einem ARN erstellen.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
```

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;
```

Sie können eine Datenbank auch mithilfe eines DATA CATALOG SCHEMA erstellen.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;
```

## Erstellen von Datenbanken zum Erhalt von Ergebnissen von Null-ETL-Integrationen
<a name="r_CREATE_DATABASE-integration"></a>

Um eine Datenbank mit einer Null-ETL-Integration zu erstellen, geben Sie die `integration_id` in Ihrem Befehl CREATE DATABASE an.

```
CREATE DATABASE destination_db_name FROM INTEGRATION 'integration_id';
```

Sie können beispielsweise zunächst die Integrations-IDs aus SVV\$1INTEGRATION ab.

```
SELECT integration_id FROM SVV_INTEGRATION;
```

Verwenden Sie dann eine der abgerufenen Integrations-IDs, um die Datenbank zu erstellen, die Null-ETL-Integrationen erhält.

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';
```

Wenn die Quelldatenbank für Null-ETL-Integrationen benötigt wird, geben Sie beispielsweise Folgendes an.

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' DATABASE sourcedb;
```

Sie können auch ein Aktualisierungsintervall für die Datenbank festlegen. So legen Sie beispielsweise das Aktualisierungsintervall für Daten aus einer Null-ETL-Integrationsquelle auf 7.200 Sekunden fest:

```
CREATE DATABASE myacct_mysql FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET REFRESH_INTERVAL 7200;
```

Fragen Sie die Katalogsicht SVV\$1INTEGRATION nach Informationen zu einer Null-ETL-Integration ab, z. B. integration\$1id, target\$1database, source, refresh\$1interval und mehr.

```
SELECT * FROM svv_integration;
```

Im folgenden Beispiel wird eine Datenbank aus einer Integration bei aktiviertem Verlaufsmodus erstellt.

```
CREATE DATABASE sample_integration_db FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET HISTORY_MODE = true;
```

## Limits für CREATE DATABASE
<a name="r_CREATE_DATABASE-create-database-limits"></a>

Amazon Redshift setzt diese Limits für Datenbanken durch:
+ Pro Cluster sind höchstens 60 benutzerdefinierte Datenbanken zulässig.
+ Datenbanknamen dürfen höchstens 127 Bytes enthalten.
+ Ein Datenbankname darf kein reserviertes Wort sein. 

## Datenbanksortierung
<a name="r_CREATE_DATABASE-collation"></a>

Bei der Sortierung handelt es sich um einen Regelsatz, der definiert, wie das Datenbankmodul die Zeichentypdaten in SQL vergleicht und sortiert. Die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung ist die am häufigsten verwendete Methode. Amazon Redshift verwendet eine groß-/kleinschreibungsneutrale Sortierung, um die Migration von anderen Data-Warehouse-Systemen zu erleichtern. Amazon Redshift unterstützt nativ die groß-/kleinschreibungsneutrale Sortierung und verwendet weiterhin zentrale Optimierungsmethoden wie Verteilungsschlüssel, Sortierschlüssel oder bereichsbeschränkte Scans. 

Die COLLATE-Klausel legt die Standardsortierung für alle CHAR- und VARCHAR-Spalten in der Datenbank fest. Wenn CASE\$1INSENSITIVE angegeben ist, verwenden alle CHAR- oder VARCHAR-Spalten eine groß-/kleinschreibungsneutrale Sortierung. Weitere Informationen zur Sortierung finden Sie unter [Sortierreihenfolgen](c_collation_sequences.md).

Daten, die in Spalten ohne Berücksichtigung der Groß-/Kleinschreibung eingefügt oder übernommen werden, behalten ihre ursprüngliche Groß-/Kleinschreibung bei. Bei allen vergleichsbasierten Zeichenfolgenoperationen, einschließlich Sortieren und Gruppieren, wird die Groß- und Kleinschreibung nicht berücksichtigt. Mustervergleichsoperationen wie LIKE-Prädikate, „ähnlich wie“ und Funktionen für reguläre Ausdrücke sind ebenfalls unabhängig von der Groß- und Kleinschreibung.

Die folgenden SQL-Operationen unterstützen die geltende Sortiersemantik:
+ Vergleichsoperatoren: =, <>, <, <=, >, >=.
+ LIKE-Operator
+ ORDER BY-Klauseln
+ GROUP BY-Klauseln
+ Aggregatfunktionen, die einen String-Vergleich verwenden, wie MIN und MAX und LISTAGG
+ Fensterfunktionen, wie PARTITION BY-Klauseln und ORDER BY-Klauseln
+ Skalare Funktionen greatest() und least(), STRPOS(), REGEXP\$1COUNT(), REGEXP\$1REPLACE(), REGEXP\$1INSTR(), REGEXP\$1SUBSTR()
+ Distinct-Klausel
+ UNION, INTERSECT und EXCEPT
+ IN LIST

Bei externen Abfragen, einschließlich Verbundabfragen in Amazon Redshift Spectrum und Aurora PostgreSQL, ist die Sortierung der VARCHAR- oder CHAR-Spalte die gleiche wie die aktuelle Sortierung auf Datenbankebene.

Im folgenden Beispiel wird eine Amazon-Redshift-Spectrum-Tabelle abgefragt:

```
SELECT ci_varchar FROM spectrum.test_collation
WHERE ci_varchar = 'AMAZON';

ci_varchar
----------
amazon
Amazon
AMAZON
AmaZon
(4 rows)
```

Weitere Informationen zur Erstellung von Tabellen mit der Datenbanksortierung finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).

Weitere Informationen über die COLLATE-Funktionen finden Sie unter [Funktion COLLATE](r_COLLATE.md).

### Einschränkungen bei der Datenbanksortierung
<a name="r_CREATE_DATABASE-collation-limitations"></a>

Die folgenden Einschränkungen gelten für die Verwendung der Datenbanksortierung in Amazon Redshift:
+ Bei allen Systemtabellen oder -ansichten, einschließlich PG-Katalogtabellen und Amazon-Redshift-Systemtabellen, wird die Groß- und Kleinschreibung beachtet.
+ Wenn Consumer- und Producer-Datenbank auf Datenbankebene unterschiedliche Sortierungen verwenden, unterstützt Amazon Redshift keine datenbank- und clusterübergreifenden Abfragen.
+ Amazon Redshift unterstützt keine groß-/kleinschreibungsneutrale Sortierung in Abfragen, die ausschließlich für Führungsknoten gelten.

  Das folgende Beispiel zeigt eine nicht unterstützte groß-/kleinschreibungsneutrale Abfrage und den Fehler, den Amazon Redshift sendet:

  ```
  SELECT collate(usename, 'case_insensitive') FROM pg_user;
  ERROR:  Case insensitive collation is not supported in leader node only query.
  ```
+ Amazon Redshift unterstützt keine Interaktion zwischen Spalten mit und ohne Unterscheidung zwischen Groß-/Kleinschreibung, wie z. B. Vergleichs-, Funktions-, Join- oder Set-Operationen.

  Die folgenden Beispiele zeigen Fehler bei der Interaktion von Spalten mit und ohne Unterscheidung zwischen Groß-/Kleinschreibung:

  ```
  CREATE TABLE test
    (ci_col varchar(10) COLLATE case_insensitive,
     cs_col varchar(10) COLLATE case_sensitive,
     cint int,
     cbigint bigint);
  ```

  ```
  SELECT ci_col = cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT concat(ci_col, cs_col) FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT ci_col FROM test UNION SELECT cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select Coalesce(ci_col, cs_col) from test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select case when cint > 0 then ci_col else cs_col end from test;
  ERROR:  Query with different collations is not supported yet.
  ```

Damit diese Abfragen funktionieren, können Sie mit der Funktion COLLATE die Sortierung der einen Spalte an die andere anpassen. Weitere Informationen finden Sie unter [Funktion COLLATE](r_COLLATE.md).

## Beispiele
<a name="r_CREATE_DATABASE-examples"></a>

**Erstellen einer Datenbank**  
Im folgenden Beispiel wird eine Datenbank namens TICKIT erstellt und der Benutzer DWUSER ist der Besitzer:

```
create database tickit
with owner dwuser;
```

Führen Sie eine Abfrage für die Katalogtabelle PG\$1DATABASE\$1INFO aus, um Details zu Datenbanken anzuzeigen. 

```
select datname, datdba, datconnlimit
from pg_database_info
where datdba > 1;

 datname     | datdba | datconnlimit
-------------+--------+-------------
 admin       |    100 | UNLIMITED
 reports     |    100 | 100
 tickit      |    100 | 100
```

Im folgenden Beispiel wird eine Datenbank namens **sampledb** mit der Isolationsstufe SNAPSHOT erstellt.

```
CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

Im folgenden Beispiel wird die Datenbank sales\$1db aus dem Datashare salesshare erstellt.

```
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

### Beispiele für die Datenbanksortierung
<a name="r_CREATE_DATABASE-collation-examples"></a>

**Erstellen einer groß-/kleinschreibungsneutralen Datenbank**  
Im folgenden Beispiel wird die Datenbank `sampledb` und die Tabelle `T1` erstellt und anschließend werden Daten in die Tabelle `T1` eingefügt.

```
create database sampledb collate case_insensitive;
```

Stellen Sie mit Ihrem SQL-Client eine Verbindung mit der neuen Datenbank her, die Sie gerade erstellt haben. Wenn Sie den Amazon Redshift Query Editor v2 verwenden, wählen Sie `sampledb` im **Editor** aus. Wenn Sie RSQL nutzen, verwenden Sie einen ähnlichen Befehl wie den folgenden.

```
\connect sampledb;
```

```
CREATE TABLE T1 (
  col1 Varchar(20) distkey sortkey
);
```

```
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');
```

Die Abfrage findet dann Ergebnisse mit dem Inhalt `John`.

```
SELECT * FROM T1 WHERE col1 = 'John';

 col1
 ------
 john
 JOHN
(2 row)
```

**Groß-/kleinschreibungsneutrale Sortierung**  
Das folgende Beispiel zeigt eine groß-/kleinschreibungsneutrale Sortierung mit Tabelle T1. Die Reihenfolge von *Bob* und *bob* oder *John* und *john* ist nicht deterministisch, da sie in einer Spalte gleich sind, die nicht zwischen Groß- und Kleinschreibung unterscheidet.

```
SELECT * FROM T1 ORDER BY 1;

 col1
 ------
 bob
 Bob
 JOHN
 john
 Mary
(5 rows)
```

In ähnlicher Weise zeigt das folgende Beispiel eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung mit der GROUP BY-Klausel. *Bob* und *bob* sind gleich und gehören zur gleichen Gruppe. Es ist nicht deterministisch, was im Ergebnis auftaucht.

```
SELECT col1, count(*) FROM T1 GROUP BY 1;

 col1 | count
 -----+------
 Mary |  1
 bob  |  2
 JOHN |  2
(3 rows)
```

**Abfragen von groß-/kleinschreibungsneutralen Spalten mit einer Fensterfunktion**  
Im folgenden Beispiel wird eine Fensterfunktion zur Abfrage einer Spalte verwendet, in der die Groß- und Kleinschreibung nicht berücksichtigt wird.

```
SELECT col1, rank() over (ORDER BY col1) FROM T1;

 col1 | rank
 -----+------
 bob  |   1
 Bob  |   1
 john |   3
 JOHN |   3
 Mary |   5
(5 rows)
```

**Abfragen mit dem Schlüsselwort DISTINCT**  
Im folgenden Beispiel wird die Tabelle `T1` mit dem Schlüsselwort DISTINCT abgefragt.

```
SELECT DISTINCT col1 FROM T1;

 col1
 ------
 bob
 Mary
 john
(3 rows)
```

**Abfrage mit der UNION-Klausel**  
Das folgende Beispiel zeigt die Ergebnisse der UNION der Tabellen `T1` und `T2`.

```
CREATE TABLE T2 AS SELECT * FROM T1;
```

```
SELECT col1 FROM T1 UNION SELECT col1 FROM T2;

 col1
 ------
 john
 bob
 Mary
(3 rows)
```

# DATASHARE ERSTELLEN
<a name="r_CREATE_DATASHARE"></a>

Erzeugt ein neues Datashare in der aktuellen Datenbank. Der Besitzer dieses Datashares ist derjenige, der den Befehl CREATE DATASHARE eingegeben hat.

Amazon Redshift verknüpft jedes Datashare mit einer einzelnen Amazon-Redshift-Datenbank. Sie können nur Objekte aus dieser Datenbank dem zugeordneten Datashare hinzufügen. Sie können mehrere Datashares in derselben Amazon-Redshift-Datenbank erstellen.

Weitere Informationen zu Datashares finden Sie unter [Datenfreigabe in Amazon Redshift](datashare-overview.md).

Verwenden Sie zum Anzeigen von Informationen zu Datashares [SHOW DATASHARES](r_SHOW_DATASHARES.md).

## Erforderliche Berechtigungen
<a name="r_CREATE_DATASHARE-privileges"></a>

Im Folgenden sind die erforderlichen Berechtigungen für CREATE DATASHARE aufgeführt:
+ Superuser
+ Benutzer mit der Berechtigung CREATE DATASHARE
+ Datenbankbesitzer

## Syntax
<a name="r_CREATE_DATASHARE-synopsis"></a>

```
CREATE DATASHARE datashare_name
[[SET] PUBLICACCESSIBLE [=] TRUE | FALSE ];
```

## Parameters
<a name="r_CREATE_DATASHARE-parameters"></a>

*datashare\$1name*  
Der Name des Datashares. Der Name des Datashares muss im Cluster-Namespace eindeutig sein.

[[SET] PUBLICACCESSIBLE]  
Eine Klausel, die angibt, ob das Datashare für öffentlich zugängliche Cluster freigegeben werden kann.  
Der Standardwert für den `SET PUBLICACCESSIBLE` beträgt `FALSE`.

## Nutzungshinweise
<a name="r_CREATE_DATASHARE_usage"></a>

Standardmäßig hat der Besitzer des Datashares Rechte nur für die Freigabe, nicht aber für die Objekte innerhalb der Freigabe.

Nur Superuser und der Datenbankbesitzer können CREATE DATASHARE verwenden und ALTER-Berechtigungen an andere Benutzer oder Gruppen delegieren. 

## Beispiele
<a name="r_CREATE_DATASHARE_examples"></a>

Im folgenden Beispiel wird das Datashare `salesshare` erstellt.

```
CREATE DATASHARE salesshare;
```

Im folgenden Beispiel wird das Datashare `demoshare` erstellt, der von AWS Data Exchange verwaltet wird.

```
CREATE DATASHARE demoshare SET PUBLICACCESSIBLE TRUE, MANAGEDBY ADX;
```

# CREATE EXTERNAL FUNCTION
<a name="r_CREATE_EXTERNAL_FUNCTION"></a>

Erstellt eine skalare benutzerdefinierte Funktion (UDF), die auf AWS Lambda Amazon Redshift basiert. Weitere Informationen zu benutzerdefinierten Lambda-Funktionen finden Sie unter [Skalares Lambda UDFs](udf-creating-a-lambda-sql-udf.md).

## Erforderliche Berechtigungen
<a name="r_CREATE_EXTERNAL_FUNCTION-privileges"></a>

Für CREATE EXTERNAL FUNCTION sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung CREATE [OR REPLACE] EXTERNAL FUNCTION

## Syntax
<a name="r_CREATE_EXTERNAL_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] EXTERNAL FUNCTION external_fn_name ( [data_type] [, ...] )
RETURNS data_type
{ VOLATILE | STABLE }
LAMBDA 'lambda_fn_name'
IAM_ROLE { default | ‘arn:aws:iam::<AWS-Konto-id>:role/<role-name>’
RETRY_TIMEOUT milliseconds
MAX_BATCH_ROWS count
MAX_BATCH_SIZE size [ KB | MB ];
```

## Parameters
<a name="r_CREATE_EXTERNAL_FUNCTION-parameters"></a>

OR REPLACE  
Die Klausel gibt an, dass die vorhandene Funktion ersetzt wird, wenn eine Funktion mit demselben Namen und denselben Eingabeargument-Datentypen bzw. derselben *Signatur* vorhanden ist. Sie können eine Funktion nur durch eine neue Funktion ersetzen, wenn diese einen identischen Satz von Datentypen definiert. Sie müssen Superuser sein, um eine Funktion zu ersetzen.  
Wenn Sie eine Funktion definieren, die den gleichen Namen wie eine vorhandene Funktion, aber eine andere Signatur besitzt, erstellen Sie eine neue Funktion. Der Funktionsname wird also überladen. Weitere Informationen finden Sie unter [Überladen von Funktionsnamen](udf-naming-udfs.md#udf-naming-overloading-function-names).

*external\$1fn\$1name*  
Der Name der externen Funktion. Wenn Sie einen Schemanamen angeben (z. B. myschema.myfunction), wird die Funktion unter Verwendung des angegebenen Schemas erstellt. Andernfalls wird die Funktion im aktuellen Schema erstellt. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).   
Es wird empfohlen, dass Sie alle UDFs mit dem Präfix benennen `f_`. Amazon Redshift reserviert das Präfix `f_` für UDF-Namen. Durch die Verwendung des `f_`-Präfixes stellen Sie sicher, dass Ihr UDF-Name nicht mit den SQL-Funktionsnamen für Amazon Redshift kollidiert, weder jetzt noch in Zukunft. Weitere Informationen finden Sie unter [Verhindern von UDF-Namenskonflikten](udf-naming-udfs.md).

*data\$1type*  
Der Datentyp der Eingabeargumente. Weitere Informationen erhalten Sie unter [Skalares Python UDFs](udf-creating-a-scalar-udf.md) und [Skalares Lambda UDFs](udf-creating-a-lambda-sql-udf.md).

RETURNS *data\$1type*  
Der Datentyp des Werts, der von der Funktion zurückgegeben wird. Der RETURNS-Datentyp kann ein beliebiger Standard-Amazon-Redshift-Datentyp sein. Weitere Informationen erhalten Sie unter [Skalares Python UDFs](udf-creating-a-scalar-udf.md) und [Skalares Lambda UDFs](udf-creating-a-lambda-sql-udf.md).

VOLATILE \$1 STABLE  
Informiert den Abfragenoptimierer über die Volatilität der Funktion.   
Um die beste Optimierung zu erzielen, kennzeichnen Sie Ihre Funktion mit der strengsten Volatilitätskategorie, die für sie gültig ist. Beginnend mit der Volatilitätskategorie mit der geringsten Strenge sind dies die Volatilitätskategorien:  
+ VOLATILE
+ STABLE
VOLATILE  
Bei gleichen Argumenten kann die Funktion unterschiedliche Ergebnisse für aufeinanderfolgende Aufrufe zurückgeben, auch für die Zeilen in einer einzelnen Anweisung. Der Abfrageoptimierer kann keine Annahmen über das Verhalten einer volatilen Funktion treffen. Eine Abfrage, die eine volatile Funktion verwendet, muss die Funktion für jede Eingabe neu auswerten.  
STABLE  
Bei gleichen Argumenten gibt die Funktion garantiert die gleichen Ergebnisse für alle aufeinderfolgenden Aufrufe zurück, die innerhalb einer einzelnen Anweisung verarbeitet werden. Die Funktion kann unterschiedliche Ergebnisse zurückgeben, wenn sie in unterschiedlichen Anweisungen aufgerufen wird. Diese Kategorie ermöglicht es dem Optimierer, die Häufigkeit zu reduzieren, mit der die Funktion innerhalb einer einzigen Anweisung aufgerufen wird.  
Beachten Sie, dass, wenn die ausgewählte Strenge für die Funktion nicht gültig ist, das Risiko besteht, dass der Optimierer aufgrund dieser Strenge einige Aufrufe überspringt. Dies kann zu einer falschen Ergebnismenge führen.  
Die IMMUTABLE-Klausel wird derzeit für UDFs Lambda nicht unterstützt.

LAMBDA *'lambda\$1fn\$1name'*   
 Der Name der Funktion, die Amazon Redshift aufruft.  
Schritte zum Erstellen einer AWS Lambda Funktion finden Sie unter [Erstellen einer Lambda-Funktion mit der Konsole](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) im *AWS Lambda Entwicklerhandbuch*.  
Informationen zu den für die Lambda-Funktion erforderlichen Berechtigungen finden Sie unter [AWS Lambda -Berechtigungen](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html) im *AWS Lambda -Entwicklerhandbuch*.

IAM\$1ROLE \$1default \$1 'arn:aws:iam: ::role/ '*<AWS-Konto-id>**<role-name>*   
Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE EXTERNAL FUNCTION-Befehl ausgeführt wird.  
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Der Befehl CREATE EXTERNAL FUNCTION ist berechtigt, über diese IAM-Rolle Lambda-Funktionen aufzurufen. Wenn Ihr Cluster über eine bestehende IAM-Rolle mit Berechtigungen zum Aufrufen von Lambda-Funktionen verfügt, können Sie den ARN Ihrer Rolle ersetzen. Weitere Informationen finden Sie unter [Konfiguration des Autorisierungsparameters für Lambda UDFs](udf-creating-a-lambda-sql-udf.md#udf-lambda-authorization).  
Im Folgenden wird die Syntax für den Parameter IAM\$1ROLE gezeigt.  

```
IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
```

RETRY\$1TIMEOUT *Millisekunden*   
Die Gesamtzeit in Millisekunden, die Amazon Redshift für die Verzögerungen bei Wiederholungs-Backoffs verwendet.   
Anstatt es bei fehlgeschlagenen Abfragen sofort erneut zu versuchen, führt Amazon Redshift Backoffs durch und wartet eine bestimmte Zeit zwischen den Wiederholungsversuchen. Dann wiederholt Amazon Redshift die Anfrage, um die fehlgeschlagene Abfrage erneut auszuführen, bis die Summe aller Verzögerungen gleich oder größer als der von Ihnen angegebene RETRY\$1TIMEOUT-Wert ist. Der Standardwert ist 20 000 Millisekunden.  
Wenn eine Lambda-Funktion aufgerufen wird, wiederholt Amazon Redshift Abfragen, bei denen Fehler wie `TooManyRequestsException`, `EC2ThrottledException` und `ServiceException` auftreten.   
Sie können den Parameter RETRY\$1TIMEOUT auf 0 Millisekunden setzen, um Wiederholungsversuche für eine Lambda-UDF zu verhindern.

MAX\$1BATCH\$1ROWS *Anzahl*  
 Die maximale Zeilenanzahl, die Amazon Redshift in einer einzelnen Batch-Anforderung für einen einzelnen Lambda-Aufruf sendet.   
 Der Mindestwert für diesen Parameter ist 1. Der maximale Wert lautet INT\$1MAX oder 2 147 483 647.   
 Dieser Parameter ist optional. Der Standardwert lautet INT\$1MAX oder 2 147 483 647. 

MAX\$1BATCH\$1SIZE *Größe* [ KB \$1 MB ]   
 Die maximale Größe der Datennutzlast, die Amazon Redshift in einer einzelnen Batch-Anforderung für einen einzelnen Lambda-Aufruf sendet.   
 Der Mindestwert für diesen Parameter ist 1 KB. Der maximale Wert ist 5 MB.   
 Der Standardwert für diesen Parameter ist 5 MB.   
 KB und MB sind optional. Wenn Sie die Maßeinheit nicht festlegen, verwendet Amazon Redshift standardmäßig KB. 

## Nutzungshinweise
<a name="r_CREATE_FUNCTION-usage-notes"></a>

Beachten Sie bei der Erstellung von Lambda UDFs Folgendes: 
+ Die Reihenfolge der Lambda-Funktionsaufrufe für die Eingabeargumente ist nicht festgelegt oder garantiert. Dies kann je nach Cluster-Konfiguration von Instance zu Instance variieren, für die Abfragen ausgeführt werden.
+ Es wird nicht garantiert, dass die Funktionen tatsächlich nur einmal auf jedes Eingabeargument angewendet werden. Die Interaktion zwischen Amazon Redshift und AWS Lambda kann zu wiederholten Aufrufen mit denselben Eingaben führen.

## Beispiele
<a name="r_CREATE_FUNCTION-examples"></a>

Im Folgenden finden Sie Beispiele für die Verwendung skalarer benutzerdefinierter Lambda-Funktionen (). UDFs

### Skalares Lambda-UDF-Beispiel mit einer Node.js-Lambda-Funktion
<a name="r_CREATE_FUNCTION-lambda-example-node"></a>

Im folgenden Beispiel wird eine externe Funktion namens `exfunc_sum` erstellt, die zwei Ganzzahlen als Eingabeargumente benötigt. Diese Funktion gibt die Summe als Ganzzahl aus. Der Name der aufzurufenden Lambda-Funktion lautet `lambda_sum`. Die für diese Lambda-Funktion verwendete Sprache ist Node.js 12.x. Stellen Sie sicher, dass Sie die IAM-Rolle angeben. Das Beispiel verwendet `'arn:aws:iam::123456789012:user/johndoe'` als IAM-Rolle.

```
CREATE EXTERNAL FUNCTION exfunc_sum(INT,INT)
RETURNS INT
VOLATILE
LAMBDA 'lambda_sum'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

Die Lambda-Funktion verarbeitet die Nutzlast der Anfrage und iteriert über jede Zeile. Alle Werte in einer einzelnen Zeile werden addiert, um die Summe für diese Zeile zu berechnen, die im Antwort-Array gespeichert wird. Die Anzahl der Zeilen im Ergebnis-Array entspricht der Anzahl der in der Nutzlast der Anfrage empfangenen Zeilen. 

Die JSON-Antwort-Nutzlast muss die Ergebnisdaten im Feld „results“ enthalten, damit sie von der externen Funktion erkannt werden kann. Das Feld „arguments“ in der Anforderung, die an die Lambda Funktion gesendet wird, enthält die Datennutzlast. Bei einer Batch-Anforderung können mehrere Zeilen in den Nutzdaten vorhanden sein. Die folgende Lambda-Funktion iteriert über alle Zeilen in der Nutzlast der Anfragedaten. Sie durchläuft zudem alle Werte innerhalb einer einzelnen Zeile.

```
exports.handler = async (event) => {
    // The 'arguments' field in the request sent to the Lambda function contains the data payload.
    var t1 = event['arguments'];

    // 'len(t1)' represents the number of rows in the request payload.
    // The number of results in the response payload should be the same as the number of rows received.
    const resp = new Array(t1.length);

    // Iterating over all the rows in the request payload.
    for (const [i, x] of t1.entries())
    {
        var sum = 0;
        // Iterating over all the values in a single row.
        for (const y of x) {
            sum = sum + y;
        }
        resp[i] = sum;
    }
    // The 'results' field should contain the results of the lambda call.
    const response = {
        results: resp
    };
    return JSON.stringify(response);
};
```

Im folgenden Beispiel wird die externe Funktion mit Literalwerten aufgerufen.

```
select exfunc_sum(1,2);
exfunc_sum
------------
 3
(1 row)
```

Im folgenden Beispiel wird eine Tabelle namens t\$1sum mit zwei Spalten, c1 und c2, vom Datentyp Ganzzahl erstellt und zwei Datenzeilen werden eingefügt. Dann wird die externe Funktion aufgerufen, indem die Spaltennamen dieser Tabelle übergeben werden. Die beiden Tabellenzeilen werden in einer Batch-Anforderung in der Anforderungsnutzlast als einzelner Lambda-Aufruf gesendet.

```
CREATE TABLE t_sum(c1 int, c2 int);
INSERT INTO t_sum VALUES (4,5), (6,7);
SELECT exfunc_sum(c1,c2) FROM t_sum;
 exfunc_sum
---------------
 9
 13
(2 rows)
```

### Skalares Lambda-UDF-Beispiel unter Verwendung des RETRY\$1TIMEOUT-Attributs
<a name="r_CREATE_FUNCTION-lambda-example-retry"></a>

Im folgenden Abschnitt finden Sie ein Beispiel für die Verwendung des RETRY\$1TIMEOUT-Attributs in Lambda. UDFs 

AWS Lambda Funktionen haben Parallelitätsgrenzen, die Sie für jede Funktion festlegen können. Weitere Informationen zu Parallelitätslimits finden Sie unter [Managing Concurrency for a Lambda function](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) im *AWS Lambda Developer Guide* und im Beitrag [Managing AWS Lambda Function Concurrency](https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency) im Compute-Blog. AWS 

Wenn die Anzahl der Anfragen, die von einer Lambda-UDF bedient werden, die Nebenläufigkeitslimits überschreitet, wird bei neuen Anfragen der Fehler `TooManyRequestsException` ausgegeben. Die Lambda-UDF versucht es bei diesem Fehler so lange erneut, bis die Summe aller Verzögerungen zwischen den an die Lambda-Funktion gesendeten Anforderungen dem von Ihnen festgelegten Wert RETRY\$1TIMEOUT entspricht oder diesen überschreitet. Der Standardwert für RETRY\$1TIMEOUT ist 20 000 Millisekunden.

Im folgenden Beispiel wird die Lambda-Funktion mit dem Namen erstellt `exfunc_sleep_3`. Diese Funktion verarbeitet die Nutzdaten der Anfrage, iteriert über jede Zeile und konvertiert die Eingabe in Großbuchstaben. Dann wartet sie 3 Sekunden und gibt das Ergebnis zurück. Die für diese Lambda-Funktion verwendete Sprache ist Python 3.8. 

Die Anzahl der Zeilen im Ergebnis-Array entspricht der Anzahl der in der Nutzlast der Anfrage empfangenen Zeilen. Die JSON-Antwort-Nutzlast muss die Ergebnisdaten im Feld `results` enthalten, damit sie von der externen Funktion erkannt werden kann. Das Feld `arguments` in der Anforderung, die an die Lambda Funktion gesendet wird, enthält die Datennutzlast. Bei einer Batch-Anforderung können mehrere Zeilen in den Nutzdaten enthalten sein.

Das Nebenläufigkeitslimit für diese Funktion ist speziell auf 1 für die reservierte Nebenläufigkeit festgelegt, um die Verwendung des Attributs RETRY\$1TIMEOUT zu demonstrieren. Wenn das Attribut auf 1 gesetzt ist, kann die Lambda-Funktion jeweils nur eine Anfrage bedienen.

```
import json
import time
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            resp[i] = y.upper()

    time.sleep(3)
    ret = dict()
    ret['results'] = resp
    ret_json = json.dumps(ret)
    return ret_json
```

Im Folgenden werden zwei weitere Beispiele für das RETRY\$1TIMEOUT-Attribut beschrieben. Sie rufen jeweils eine einzelne Lambda-UDF auf. Beim Aufrufen der Lambda-UDF wird in jedem Beispiel dieselbe SQL-Abfrage ausgeführt, um die Lambda-UDF von zwei nebenläufigen Datenbanksitzungen aus aufzurufen. Wenn die erste Abfrage, die die Lambda-UDF aufruft, von der UDF bedient wird, wird für die zweite Abfrage der Fehler `TooManyRequestsException` angezeigt. Dieses Ergebnis tritt auf, weil Sie die reservierte Nebenläufigkeit in der UDF speziell auf 1 gesetzt haben. Informationen zum Festlegen der reservierten Nebenläufigkeit für Lambda-Funktionen finden Sie unter [Konfigurieren reservierter Gleichzeitigkeit](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reservedconfiguration-concurrency-reserved).

Im folgenden ersten Beispiel wird das RETRY\$1TIMEOUT-Attribut für die Lambda-UDF auf 0 Millisekunden gesetzt. Wenn die Lambda-Anforderung eine Ausnahme von der Lambda-Funktion erhält, führt Amazon Redshift keine Wiederholungsversuche durch. Dieses Ergebnis tritt auf, weil das Attribut RETRY\$1TIMEOUT auf 0 gesetzt ist.

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 0;
```

Wenn RETRY\$1TIMEOUT auf 0 gesetzt ist, können Sie die folgenden zwei Abfragen in verschiedenen Datenbanksitzungen ausführen, um unterschiedliche Ergebnisse zu erhalten.

Die erste SQL-Abfrage, die die Lambda-UDF verwendet, wird erfolgreich ausgeführt.

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

Für die zweite Abfrage, die in einer separaten Datenbanksitzung zur gleichen Zeit ausgeführt wird, wird der Fehler `TooManyRequestsException` angezeigt.

```
select exfunc_upper('Varchar');
ERROR:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
DETAIL:
-----------------------------------------------
error:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
code:      32103
context:query:     0
location:  exfunc_client.cpp:102
process:   padbmaster [pid=26384]
-----------------------------------------------
```

Im folgenden zweiten Beispiel wird das RETRY\$1TIMEOUT-Attribut für die Lambda-UDF auf 3 000 Millisekunden gesetzt. Selbst wenn die zweite Abfrage gleichzeitig ausgeführt wird, wiederholt die Lambda-UDF den Vorgang, bis die Gesamtverzögerung 3 000 Millisekunden beträgt. Daher werden beide Abfragen erfolgreich ausgeführt.

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 3000;
```

Wenn RETRY\$1TIMEOUT auf 3 000 Millisekunden eingestellt ist, können Sie die folgenden beiden Abfragen in verschiedenen Datenbanksitzungen ausführen, um dieselben Ergebnisse zu erhalten.

Die erste SQL-Abfrage, die die Lambda-UDF verwendet, wird erfolgreich ausgeführt.

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

Die zweite Abfrage wird gleichzeitig ausgeführt, und die Lambda-UDF versucht es erneut, bis die Gesamtverzögerung 3 000 Millisekunden beträgt.

```
select exfunc_upper('Varchar');
 exfunc_upper
--------------
 VARCHAR
(1 row)
```

### Skalares Lambda-UDF-Beispiel mit einer Python-Lambda-Funktion
<a name="r_CREATE_FUNCTION-lambda-example-python"></a>

Im folgenden Beispiel wird eine externe Funktion namens `exfunc_multiplication` erstellt, die Zahlen multipliziert und eine Ganzzahl zurückgibt. In diesem Beispiel sind die Erfolgs- und `error_msg`-Felder in der Lambda-Antwort enthalten. Das Erfolgsfeld wird auf false gesetzt, wenn ein Ganzzahlüberlauf im Multiplikationsergebnis vorliegt, und die Meldung `error_msg` wird auf `Integer multiplication overflow` gesetzt. Die `exfunc_multiplication`-Funktion nimmt drei Ganzzahlen als Eingabeargumente und gibt die Summe als Ganzzahl aus. 

Der Name der Lambda-Funktion, die aufgerufen wird, lautet `lambda_multiplication`. Die für diese Lambda-Funktion verwendete Sprache ist Python 3.8. Stellen Sie sicher, dass Sie die IAM-Rolle angeben.

```
CREATE EXTERNAL FUNCTION exfunc_multiplication(int, int, int)
RETURNS INT
VOLATILE
LAMBDA 'lambda_multiplication'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

Die Lambda-Funktion verarbeitet die Nutzlast der Anfrage und iteriert über jede Zeile. Die Werte in einer einzelnen Zeile werden multipliziert, um das Ergebnis für diese Zeile zu berechnen, das dann in der Antwortliste gespeichert wird. In diesem Beispiel wird ein boolescher Erfolgswert verwendet, der standardmäßig auf true gesetzt ist. Wenn das Multiplikationsergebnis für eine Zeile einen Ganzzahlüberlauf aufweist, wird der Erfolgswert auf false gesetzt. Dann bricht die Iterationsschleife ab. 

Wenn der Erfolgswert beim Erstellen der Antwort-Nutzdaten falsch ist, fügt die folgende Lambda-Funktion das Feld `error_msg` in die Nutzdaten ein. Es setzt auch die Fehlermeldung auf `Integer multiplication overflow`. Wenn der Erfolgswert true ist, werden die Ergebnisdaten in das Ergebnisfeld eingefügt. Die Anzahl der Zeilen im Ergebnis-Array, sofern vorhanden, entspricht der Anzahl der in der Nutzlast der Anfrage empfangenen Zeilen. 

Das Feld „arguments“ in der Anforderung, die an die Lambda Funktion gesendet wird, enthält die Datennutzlast. Bei einer Batch-Anforderung können mehrere Zeilen in den Nutzdaten vorhanden sein. Die folgende Lambda-Funktion iteriert über alle Zeilen in der Nutzlast der Anfragedaten und iteriert einzeln über alle Werte innerhalb einer einzelnen Zeile. 

```
import json
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # By default success is set to 'True'.
    success = True
    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        mul = 1
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            mul = mul*y

        # Check integer overflow.
        if (mul >= 9223372036854775807 or mul <= -9223372036854775808):
            success = False
            break
        else:
            resp[i] = mul
    ret = dict()
    ret['success'] = success
    if not success:
        ret['error_msg'] = "Integer multiplication overflow"
    else:
        ret['results'] = resp
    ret_json = json.dumps(ret)

    return ret_json
```

Im folgenden Beispiel wird die externe Funktion mit Literalwerten aufgerufen.

```
SELECT exfunc_multiplication(8, 9, 2);
  exfunc_multiplication
---------------------------
          144
(1 row)
```

Im folgenden Beispiel wird eine Tabelle mit dem Namen t\$1multi mit drei Spalten, c1, c2 und c3, vom Datentyp Ganzzahl erstellt. Dann wird die externe Funktion aufgerufen, indem die Spaltennamen dieser Tabelle übergeben werden. Die Daten werden so eingefügt, dass sie einen Ganzzahlüberlauf verursachen, um zu zeigen, wie der Fehler verteilt ist.

```
CREATE TABLE t_multi (c1 int, c2 int, c3 int);
INSERT INTO t_multi VALUES (2147483647, 2147483647, 4);
SELECT exfunc_multiplication(c1, c2, c3) FROM t_multi;
DETAIL:
  -----------------------------------------------
  error:  Integer multiplication overflow
  code:      32004context:
  context:
  query:     38
  location:  exfunc_data.cpp:276
  process:   query2_16_38 [pid=30494]
  -----------------------------------------------
```

# ERSTELLEN EINES EXTERNEN MODELLS
<a name="r_create_external_model"></a>

**Topics**
+ [Voraussetzungen für CREATE EXTERNAL MODEL](#r_create_external_model_prereqs)
+ [Erforderliche Berechtigungen](#r_simple_create_model-privileges)
+ [Kontrolle der Kosten](#r_create_model_cost)
+ [Syntax für CREATE EXTERNAL MODEL](#r_create_external_model_syntax)
+ [Parameter und Einstellungen für CREATE EXTERNAL MODEL](#r_create_external_model_parameters_settings)
+ [Inferenzfunktionsparameter für CREATE EXTERNAL MODEL](#r_create_external_model_if_parameters)

## Voraussetzungen für CREATE EXTERNAL MODEL
<a name="r_create_external_model_prereqs"></a>

Bevor Sie die Anweisung CREATE EXTERNAL MODEL verwenden, müssen Sie die Voraussetzungen in [Cluster-Einrichtung für die Verwendung von Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup) erfüllen. Im Folgenden finden Sie eine Übersicht über die Voraussetzungen.
+ Erstellen Sie einen Amazon Redshift Redshift-Cluster mit der AWS Management Console oder der AWS Befehlszeilenschnittstelle (AWS CLI).
+ Fügen Sie beim Erstellen des Clusters die AWS Identity and Access Management (IAM) -Richtlinie an.
+ Weisen Sie der IAM-Rolle die richtige Vertrauensrichtlinie hinzu, damit Amazon Redshift und Amazon Bedrock mit anderen Services interagieren können.
+ Aktivieren Sie den Zugriff auf das spezifische LLMs , das Sie verwenden möchten, von der Amazon Bedrock-Konsole aus.
+ (Optional) Wenn Sie auf Drosselungsausnahmen von Amazon Bedrock stoßen, z. B. `Too many requests, please wait before trying again`, auch bei kleinen Datenmengen, überprüfen Sie die Kontingente unter **Service Quotas** in Ihrem Amazon-Bedrock-Konto. Vergewissern Sie sich, dass das angewendete Kontingent auf Kontoebene mindestens dem AWS Standardkontingentwert für die **InvokeModel**Anfragen für das von Ihnen verwendete Modell entspricht.

Einzelheiten zur IAM-Rolle, zur Vertrauensrichtlinie und zu anderen Voraussetzungen finden Sie unter [Cluster-Einrichtung für die Verwendung von Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup).

## Erforderliche Berechtigungen
<a name="r_simple_create_model-privileges"></a>

Im Folgenden finden Sie die erforderlichen Berechtigungen für CREATE EXTERNAL MODEL:
+ Superuser
+ Benutzer mit der Berechtigung CREATE MODEL
+ Rollen mit der Berechtigung GRANT CREATE MODEL

## Kontrolle der Kosten
<a name="r_create_model_cost"></a>

 Amazon Redshift ML verwendet vorhandene Cluster-Ressourcen, um Vorhersagemodelle zu erstellen, so dass Sie keine zusätzlichen Kosten bezahlen müssen. Die AWS Gebühren für die Nutzung von Amazon Bedrock richten sich jedoch nach dem von Ihnen ausgewählten Modell. Weitere Informationen finden Sie unter [Kosten für die Verwendung von Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html). 

## Syntax für CREATE EXTERNAL MODEL
<a name="r_create_external_model_syntax"></a>

Im Folgenden finden Sie die vollständige Syntax der Anweisung CREATE EXTERNAL MODEL.

```
CREATE EXTERNAL MODEL model_name 
FUNCTION function_name
IAM_ROLE {default/'arn:aws:iam::<account-id>:role/<role-name>'}
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID model_id
   [, PROMPT 'prompt prefix']
   [, SUFFIX 'prompt suffix']
   [, REQUEST_TYPE {RAW|UNIFIED}]
   [, RESPONSE_TYPE {VARCHAR|SUPER}]
);
```

Der Befehl `CREATE EXTERNAL MODEL` erstellt eine Inferenzfunktion, die Sie zum Generieren von Inhalten verwenden. 

Im Folgenden finden Sie die Syntax einer Inferenzfunktion, die `CREATE EXTERNAL MODEL` unter Verwendung eines `REQUEST_TYPE` von `RAW` erstellt: 

```
SELECT inference_function_name(request_super) 
[FROM table];
```

Im Folgenden finden Sie die Syntax einer Inferenzfunktion, die `CREATE EXTERNAL MODEL` unter Verwendung eines `REQUEST_TYPE` von `UNIFIED` erstellt: 

```
SELECT inference_function_name(input_text, [, inference_config [, additional_model_request_fields]])
[FROM table];
```

Weitere Informationen zur Verwendung der Inferenzfunktion finden Sie unter [Verwenden eines externen Modells für die Integration von Amazon Redshift ML mit Amazon Bedrock](machine-learning-br.md#machine-learning-br-use).

## Parameter und Einstellungen für CREATE EXTERNAL MODEL
<a name="r_create_external_model_parameters_settings"></a>

In diesem Abschnitt werden die Parameter und Einstellungen für den Befehl `CREATE EXTERNAL MODEL` beschrieben.

**Topics**
+ [Parameter für CREATE EXTERNAL MODEL](#r_create_external_model_parameters)
+ [Einstellungen für CREATE EXTERNAL MODEL](#r_create_external_model_settings)

### Parameter für CREATE EXTERNAL MODEL
<a name="r_create_external_model_parameters"></a>

model\$1name  
Der Name für das externe Modell. Der Modellname in einem Schema muss eindeutig sein.

FUNCTION *function\$1name (data\$1type [,...] )*  
Der Name für die Inferenzfunktion, die `CREATE EXTERNAL MODEL` erstellt. Sie verwenden die Inferenzfunktion, um Anfragen an Amazon Bedrock zu senden und ML-generierten Text abzurufen.

IAM\$1ROLE * \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1*  
Die IAM-Rolle, die Amazon Redshift für den Zugriff auf Amazon Bedrock verwendet. Weitere Information zur IAM-Rolle finden Sie unter [Erstellen oder Aktualisieren einer IAM-Rolle für die Integration von Amazon Redshift ML mit Amazon Bedrock](machine-learning-br.md#machine-learning-br-iam).

MODEL\$1TYPE BEDROCK  
Gibt den Modelltyp an. Der einzige gültige Wert ist `BEDROCK`.

SETTINGS ( MODEL\$1ID model\$1id [,...] )  
Definiert die Einstellungen für das externe Modell. Weitere Informationen finden Sie im folgenden Abschnitt.

### Einstellungen für CREATE EXTERNAL MODEL
<a name="r_create_external_model_settings"></a>

MODEL\$1ID model\$1id  
Der Bezeichner für das externe Modell, zum Beispiel `anthropic.claude-v2`. Informationen zum Amazon Bedrock-Modell finden Sie IDs unter [Amazon Bedrock-Modell](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html). IDs

PROMPT 'prompt prefix'  
Gibt eine statische Eingabeaufforderung an, die Amazon Redshift am Anfang jeder Inferenzanforderung hinzufügt. Wird nur mit einem `REQUEST_TYPE` von `UNIFIED` unterstützt.

SUFFIX 'prompt suffix'  
Gibt eine statische Eingabeaufforderung an, die Amazon Redshift am Ende jeder Inferenzanforderung hinzufügt. Wird nur mit einem `REQUEST_TYPE` von `UNIFIED` unterstützt.

REQUEST\$1TYPE \$1 RAW \$1 UNIFIED \$1  
Gibt das Format der an Amazon Bedrock gesendeten Anfrage an. Gültige Werte sind z. B. die Folgenden:  
+ **RAW**: Die Inferenzfunktion erfasst die Eingabe als einzelnen Super-Wert und gibt stets einen Super-Wert zurück. Das Format des Super-Werts ist für das ausgewählte Amazon-Bedrock-Modell spezifisch. Ein Super-Modell ist ein Vorhersagemodell, das mehrere Algorithmen kombiniert, um eine einzige, verbesserte Vorhersage zu erstellen.
+ **UNIFIED**: Die Inferenzfunktion verwendet die einheitliche API. Alle Modelle verfügen über eine einheitliche und konsistente Schnittstelle mit Amazon Bedrock. Dies funktioniert für alle Modelle, die Nachrichten unterstützen. Dieser Wert ist der Standard.

  Weitere Informationen finden Sie in der [Converse-API-Dokumentation](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) in der *Dokumentation zur Amazon-Bedrock-API*.

RESPONSE\$1TYPE \$1 VARCHAR \$1 SUPER \$1  
Gibt das Format der Antwort an. Wenn der `REQUEST_TYPE` `RAW` ist, ist der `RESPONSE_TYPE` erforderlich und der einzige gültige Wert ist `SUPER`. Für alle anderen `REQUEST TYPE`-Werte ist `VARCHAR` der Standardwert und `RESPONSE_TYPE` ist optional. Gültige Werte sind z. B. die Folgenden:  
+ **VARCHAR**: Amazon Redshift gibt nur die vom Modell generierte Textantwort zurück.
+ **SUPER**: Amazon Redshift gibt das gesamte vom Modell generierte Antwort-JSON als Super-Wert zurück. Dies umfasst die Textantwort sowie Informationen wie den Grund für den Stopp und die Nutzung des Tokens für Modelleingabe und -ausgabe. Ein Super-Modell ist ein Vorhersagemodell, das mehrere Algorithmen kombiniert, um eine einzige, verbesserte Vorhersage zu erstellen. 

## Inferenzfunktionsparameter für CREATE EXTERNAL MODEL
<a name="r_create_external_model_if_parameters"></a>

In diesem Abschnitt werden gültige Parameter für die Inferenzfunktion beschrieben, die der Befehl `CREATE EXTERNAL MODEL` erstellt. 

### CREATE EXTERNAL MODEL-Inferenzfunktionsparameter für `REQUEST_TYPE` von `RAW`
<a name="r_create_external_model_if_parameters_raw"></a>

Eine mit einem `REQUEST_TYPE` von `RAW` erstellte Inferenzfunktion hat ein einzelnes Super-Eingabeargument und gibt stets einen Super-Datentyp zurück. Die Syntax des Super-Eingabearguments folgt der Syntax der Anfrage des spezifischen Modells, das aus Amazon Bedrock ausgewählt wurde.

### Inferenzfunktionsparameter für CREATE EXTERNAL MODEL für `REQUEST_TYPE` von `UNIFIED`
<a name="r_create_external_model_if_parameters_unified"></a>

input\$1text  
Der Text, den Amazon Redshift an Amazon Bedrock sendet.

inference\$1config  
Ein Super-Wert, der optionale Parameter enthält, die Amazon Redshift an Amazon Bedrock sendet. Dies kann u. a. Folgendes umfassen:  
+ maxTokens
+ stopSequences
+ temperature
+ topP
Diese Parameter sind alle optional und unterscheiden alle zwischen Groß- und Kleinschreibung. Informationen zu diesen Parametern finden Sie [ InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html)in der *Amazon Bedrock API-Referenz.*

# CREATE EXTERNAL SCHEMA
<a name="r_CREATE_EXTERNAL_SCHEMA"></a>

Erstellt ein neues externes Schema in der aktuellen Datenbank. Sie können dieses externe Schema verwenden, um sich mit Amazon-RDS-for-PostgreSQL- oder mit Amazon-Aurora-for-PostgreSQL-kompatible-Edition-Datenbanken zu verbinden. Sie können auch ein externes Schema erstellen, das auf eine Datenbank in einem externen Datenkatalog wie AWS Glue Athena oder auf eine Datenbank in einem Apache Hive-Metastore wie Amazon EMR verweist.

Der Besitzer dieses Schemas gibt den Befehl CREATE EXTERNAL SCHEMA aus. Mit dem Befehl [ALTER SCHEMA](r_ALTER_SCHEMA.md) können Sie den Besitzer eines externen Schemas ändern. Mit dem Befehl [GRANT](r_GRANT.md) gewähren Sie anderen Benutzern oder Benutzergruppen Zugriff auf das Schema. 

Sie können die Befehle GRANT oder REVOKE nicht für Berechtigungen in einer externen Tabelle verwenden. Gewähren oder widerrufen Sie stattdessen die Berechtigungen für das externe Schema. 

**Anmerkung**  
Wenn Sie derzeit externe Redshift-Spectrum-Tabellen im Amazon-Athena-Datenkatalog haben, können Sie Ihren Athena-Datenkatalog zu einem -Datenkatalog migrieren AWS Glue Data Catalog. Um den AWS Glue Datenkatalog mit Redshift Spectrum zu verwenden, müssen Sie möglicherweise Ihre AWS Identity and Access Management (IAM-) Richtlinien ändern. Weitere Informationen finden Sie unter [Upgrade auf den AWS Glue Datenkatalog](https://docs.aws.amazon.com/athena/latest/ug/glue-athena.html#glue-upgrade) im *Athena-Benutzerhandbuch*.

Um Details zu externen Schemata anzuzeigen, führen Sie eine Abfrage für die Systemansicht [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md) aus. 

## Syntax
<a name="r_CREATE_EXTERNAL_SCHEMA-synopsis"></a>

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe eines externen Datenkatalogs zu referenzieren. Weitere Informationen finden Sie unter [Amazon Redshift Spectrum](c-using-spectrum.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM [ [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT | KAFKA ]
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ]
[ URI ['hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URL'] ] 
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<AWS-Konto-id>:cluster/msk/<cluster uuid>' ]
[ CATALOG_ROLE [ 'SESSION' | 'catalog-role-arn-string' ] ]
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]
[ CATALOG_ID 'Amazon Web Services account ID containing Glue or Lake Formation database' ]
```

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe einer Verbundabfrage an RDS POSTGRES oder Aurora PostgreSQL zu referenzieren. Sie können auch ein externes Schema erstellen, das auf Streaming-Quellen wie Kinesis Data Streams verweist. Weitere Informationen finden Sie unter [Abfragen von Daten mit Verbundabfragen in Amazon Redshift](federated-overview.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe einer Verbundabfrage an RDS MySQL oder Aurora MySQL zu referenzieren. Weitere Informationen finden Sie unter [Abfragen von Daten mit Verbundabfragen in Amazon Redshift](federated-overview.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name'
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten in einem Kinesis-Stream zu referenzieren. Weitere Informationen finden Sie unter [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KINESIS
IAM_ROLE [ default | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' ]
```

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um auf den Cluster von Amazon Managed Streaming für Apache Kafka oder Confluent Cloud und die zugehörigen Themen zu verweisen, aus denen Daten erfasst werden sollen. Um eine Verbindung herzustellen, geben Sie den Broker-URI an. Weitere Informationen finden Sie unter [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KAFKA
[ IAM_ROLE [ default | 'arn:aws:iam::<AWS-Konto-id>:role/<role-name>' ] ]
URI 'Kafka bootstrap URI'
AUTHENTICATION [ none | iam | mtls ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ];
```

Die folgende Syntax beschreibt den Befehl CREATE EXTERNAL SCHEMA, der verwendet wird, um Daten mithilfe einer datenbankübergreifenden Abfrage zu referenzieren.

```
CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'
```

## Parameters
<a name="r_CREATE_EXTERNAL_SCHEMA-parameters"></a>

IF NOT EXISTS  
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass das Schema vorhanden ist, statt mit einem Fehler beendet zu werden, wenn das angegebene Schema bereits vorhanden ist. Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn CREATE EXTERNAL SCHEMA versucht, ein Schema zu erstellen, das bereits vorhanden ist. 

local\$1schema\$1name  
Der Name des neuen externen Schemas. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

FROM [ DATA CATALOG ] \$1 HIVE METASTORE \$1 POSTGRES \$1 MYSQL \$1 KINESIS \$1 MSK \$1 REDSHIFT   
Ein Schlüsselwort, das angibt, wo sich die externe Datenbank befindet.   
DATA CATALOG gibt an, dass die externe Datenbank im Athena-Datenkatalog oder dem definiert ist AWS Glue Data Catalog.   
Wenn die externe Datenbank in einem externen Datenkatalog in einer anderen AWS -Region definiert ist, ist der Parameter REGION erforderlich. DATA CATALOG ist der Standardwert.  
HIVE METASTORE gibt an, dass die externe Datenbank in einem Apache Hive-Metastore definiert ist. Wenn HIVE METASTORE angegeben ist, ist der URI erforderlich.   
POSTGRES gibt an, dass die externe Datenbank in RDS PostgreSQL oder Aurora PostgreSQL definiert ist.  
MYSQL zeigt an, dass die externe Datenbank in RDS MySQL oder Aurora MySQL definiert ist.  
KINESIS gibt an, dass die Datenquelle ein Stream aus dem Kinesis Data Streams ist.  
MSK gibt an, dass die Datenquelle ein von Amazon MSK bereitgestellter oder Serverless-Cluster ist.  
KAFKA gibt an, dass die Datenquelle ein Kafka-Cluster ist. Sie können dieses Schlüsselwort sowohl für Amazon MSK als auch für Confluent Cloud verwenden.

VON REDSHIFT  
Ein Schlüsselwort, das angibt, dass sich die Datenbank in Amazon Redshift befindet.

DATABASE '*redshift\$1database\$1name*' SCHEMA '*redshift\$1schema\$1name*'  
Der Name der Amazon-Redshift-Datenbank.   
Der *redshift\$1schema\$1name* gibt das Schema in Amazon Redshift an. Standardmäßig lautet der *redshift\$1schema\$1name* auf `public`.

DATABASE '*federated\$1database\$1name*'  
Ein Schlüsselwort, das den Namen der externen Datenbank in einer unterstützten PostgreSQL- oder MySQL-Datenbank-Engine angibt. 

[SCHEMA '*schema\$1name*']  
Der *schema\$1name* gibt das Schema in einer unterstützten PostgreSQL-Datenbank-Engine an. Der Standard-*schema\$1name* ist `public`.  
Sie können kein SCHEMA angeben, wenn Sie eine Verbundabfrage an eine unterstützte MySQL-Datenbank-Engine einrichten. 

REGION „*aws-region*“  
Wenn die externe Datenbank in einem Athena-Datenkatalog oder in der AWS Region definiert ist AWS Glue Data Catalog, in der sich die Datenbank befindet. Dieser Parameter ist erforderlich, wenn die Datenbank in einem externen Datenkatalog definiert ist. 

URI [ 'hive\$1metastore\$1uri' [ PORT port\$1number ] \$1 'hostname' [ PORT port\$1number ] \$1 'Kafka bootstrap URI' ]  
Der Hostname-URI und die Portnummer einer unterstützten PostgreSQL- oder MySQL-Datenbank-Engine. Der *Hostname* ist der Haarknoten des Replikatsatzes. Der Endpunkt muss vom Amazon-Redshift-Cluster aus erreichbar (routingfähig) sein. Der Standardwert für port\$1number von PostgreSQL lautet 5432. Die Standarwert für port\$1number von MySQL lautet 3306.  
Die unterstützte PostgreSQL- oder MySQL-Datenbank-Engine muss sich in der gleichen VPC befinden wie Ihr Amazon-Redshift-Cluster und eine Sicherheitsgruppe besitzen, die Amazon Redshift und RDS url-rsPostgreSQL oder Aurora PostgreSQL verknüpft. Darüber hinaus können Sie ein erweitertes VPC-Routing verwenden, um einen VPC-übergreifenden Anwendungsfall zu konfigurieren. Weitere Informationen finden Sie unter [Redshift-verwaltete VPC-Endpunkte](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html).
**Angeben eines Hive-Metastore-URI**  
Wenn sich die Datenbank in einem Hive-Metastore befindet, geben Sie den URI und optional die Portnummer des Metastore an. Die Standard-Portnummer ist 9083.   
Ein URI enthält keine Protokollspezifikation („http://“). Beispiel für einen gültigen URI: `uri '172.10.10.10'`.   
**Angeben eines Broker-URI zur Streaming-Aufnahme**  
Die Einbindung des Bootstrap-Broker-URI ermöglicht die Herstellung einer Verbindung zu einem Amazon-MSK- oder Confluent-Cloud-Cluster und den Erhalt gestreamter Daten. Weitere Informationen und ein Beispiel finden Sie unter [Erste Schritte mit der Streaming-Erfassung aus Amazon Managed Streaming für Apache Kafka](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html).

IAM\$1ROLE [Standard \$1 'SESSION' \$1 'arn:aws:iam: :role/ '] *<AWS-Konto-id>* *<role-name>*  
Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE EXTERNAL SCHEMA-Befehl ausgeführt wird.  
Verwenden Sie `'SESSION'`, wenn Sie über eine Verbundidentität eine Verbindung zu Ihrem Amazon-Redshift-Cluster herstellen und über das mit diesem Befehl erstellte externe Schema auf die Tabellen zugreifen. Weitere Informationen finden Sie unter [Verwenden einer Verbundidentität zur Verwaltung des Amazon-Redshift-Zugriffs auf lokale Ressourcen und externe Amazon-Redshift-Spectrum-Tabellen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). Darin wird erläutert, wie Sie eine Verbundidentität konfigurieren. Beachten Sie, dass diese Konfiguration (`'SESSION'` anstelle des ARN zu verwenden) nur verwendet werden kann, wenn das Schema mit `DATA CATALOG` erstellt wurde.   
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Die IAM-Rolle muss mindestens die Berechtigung besitzen, eine LIST-Operation für den Amazon-S3-Bucket auszuführen, auf den zugegriffen werden soll, und eine GET-Operation für die Amazon-S3-Objekte, die der Bucket enthält.  
Nachfolgend ist die Syntax für die IAM\$1ROLE-Parameterzeichenfolge für einen einzelnen ARN aufgeführt.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster eine andere IAM-Rolle annehmen, die möglicherweise zu einem anderen Konto gehört. Es können bis zu 10 Rollen miteinander verkettet werden. Ein Beispiel für die Verkettung von Rollen finden Sie unter [Verketten von IAM-Rollen in Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Fügen Sie dieser IAM-Rolle eine IAM-Berechtigungsrichtlinie ähnlich der folgenden an:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Informationen zu den Schritten für das Erstellen einer IAM-Rolle zur Verwendung mit der Verbundabfrage finden Sie unter [Erstellen eines Secrets und einer IAM-Rolle für die Verwendung von Verbundabfragen](federated-create-secret-iam-role.md).   
Fügen Sie keine Leerzeichen in die Liste der verketteten Rollen ein.
Nachfolgend finden Sie die Syntax für die Verkettung von drei Rollen.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

*ssm-secret-arn*SECRET\$1ARN ''  
Der Amazon-Ressourcenname (ARN) eines unterstützten PostgreSQL- oder MySQL-Datenbank-Engine-Geheimnisses, das mit erstellt wurde. AWS Secrets Manager Informationen zum Erstellen und Abrufen eines ARN für ein Secret finden Sie unter [Secrets mit AWS Secrets Manager verwalten](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) im *AWS Secrets Manager -Benutzerhandbuch* und [Abrufen des Amazon-Ressourcennamens (ARN) des Secrets in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html). 

CATALOG\$1ROLE ['SITZUNG' \$1] *catalog-role-arn-string*  
Verwenden Sie `'SESSION'`, um mithilfe einer Verbundidentität eine Verbindung mit Ihrem Amazon-Redshift-Cluster herzustellen, um den Datenkatalog zu authentifizieren und zu autorisieren. Weitere Informationen zur Durchführung der Schritte für eine Verbundidentität finden Sie unter [Verwenden einer Verbundidentität zur Verwaltung des Amazon-Redshift-Zugriffs auf lokale Ressourcen und externe Amazon-Redshift-Spectrum-Tabellen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). Beachten Sie, dass die `'SESSION'`-Rolle nur verwendet werden kann, wenn das Schema in DATA CATALOG erstellt wurde.  
Verwenden Sie den Amazon-Ressourcenname (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung für den Datenkatalog verwendet wird.   
Wenn CATALOG\$1ROLE nicht angegeben wird, verwendet Amazon Redshift die angegebene IAM\$1ROLE. Die Katalogrolle muss über die Berechtigung verfügen, auf den Datenkatalog in AWS Glue oder Athena zuzugreifen. Weitere Informationen finden Sie unter [IAM-Richtlinien für Amazon Redshift Spectrum](c-spectrum-iam-policies.md).   
Nachfolgend ist die Syntax für die CATALOG\$1ROLE-Parameterzeichenfolge für einen einzelnen ARN aufgeführt.  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'
```
Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster eine andere IAM-Rolle annehmen, die möglicherweise zu einem anderen Konto gehört. Es können bis zu 10 Rollen miteinander verkettet werden. Weitere Informationen finden Sie unter [Verketten von IAM-Rollen in Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
Die Liste der verketteten Rollen darf keine Leerstellen enthalten.
Nachfolgend finden Sie die Syntax für die Verkettung von drei Rollen.  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'
```


CREATE EXTERNAL DATABASE IF NOT EXISTS  
Eine Klausel, die eine externe Datenbank mit dem Namen erstellt, der im DATABASE-Argument angegeben ist, wenn die angegebene externe Datenbank nicht vorhanden ist. Wenn die angegebene externe Datenbank vorhanden ist, führt der Befehl keine Änderungen aus. In diesem Fall gibt der Befehl die Meldung zurück, dass die externe Datenbank vorhanden ist, statt mit einem Fehler beendet zu werden.  
CREATE EXTERNAL DATABASE IF NOT EXISTS kann nicht mit HIVE METASTORE verwendet werden.  
Um CREATE EXTERNAL DATABASE IF NOT EXISTS mit einem für AWS Lake Formation aktivierten Datenkatalog zu verwenden, benötigen Sie die Berechtigung `CREATE_DATABASE` für den Datenkatalog. 

CATALOG\$1ID ‚*Amazon-Web-Services-Konto-ID mit Glue- oder Lake-Formation-Datenbank*'  
Die Konto-ID, in der die Datenkatalogdatenbank gespeichert ist.  
`CATALOG_ID` kann nur angegeben werden, wenn Sie planen, für die Authentifizierung und Autorisierung beim Datenkatalog mithilfe einer Verbundidentität eine Verbindung mit Ihrem Amazon-Redshift-Cluster oder Amazon Redshift Serverless herzustellen, indem Sie eine der folgenden Einstellungen festlegen:   
+ `CATALOG_ROLE` auf `'SESSION'`
+ `IAM_ROLE` auf `'SESSION'` und `'CATALOG_ROLE'` auf die Standardeinstellung festgelegt 
Weitere Informationen zur Durchführung der Schritte für Verbundidentität finden Sie unter [Verwenden einer Verbundidentität zur Verwaltung des Amazon-Redshift-Zugriffs auf lokale Ressourcen und externe Amazon-Redshift-Spectrum-Tabellen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html) 

AUTHENTICATION  
Der für die Streaming-Erfassung definierte Authentifizierungstyp. Die Streaming-Erfassung mit Authentifizierungstypen kann mit Amazon Managed Streaming for Apache Kafka verwendet werden. Es stehen folgende `AUTHENTICATION`-Typen zur Verfügung:  
+ **none** – Gibt an, dass keine Authentifizierung erforderlich ist. Dies entspricht dem nicht authentifizierten Zugriff in MSK oder Klartext mit TLS in Apache Kafka.
+ **iam**: Gibt an, dass eine IAM-Authentifizierung erfolgt. Stellen Sie bei Auswahl dieser Option sicher, dass die IAM-Rolle über Berechtigungen für die IAM-Authentifizierung verfügt. Weitere Informationen über die Definition des externen Schemas finden Sie unter [Erste Schritte mit der Streaming-Aufnahme aus Apache-Kafka-Quellen](materialized-view-streaming-ingestion-getting-started-MSK.md).
+ **mtls** – Gibt an, dass Mutual Transport Layer Security die sichere Kommunikation durch Authentifizierung zwischen einem Client und einem Server ermöglicht. In diesem Fall ist der Client Redshift und der Server ist Amazon MSK. Weitere Informationen zum Konfigurieren der Streaming-Erfassung mit mTLS finden Sie unter [Authentifizierung mit mTLS für Redshift-Streaming-Aufnahme aus Apache Kafka-Quellen](materialized-view-streaming-ingestion-mtls.md).


AUTHENTICATION\$1ARN  
Der ARN des AWS Certificate Manager Zertifikats, das von Amazon Redshift für die MTLS-Authentifizierung mit Amazon MSK verwendet wird. Der ARN ist in der ACM-Konsole verfügbar, wenn Sie das ausgegebene Zertifikat auswählen.

CLUSTER\$1ARN  
Für die Streaming-Erfassung ist der CLUSTER\$1ARN die Cluster-ID für den Cluster in Amazon Managed Streaming für Apache Kafka, von dem Sie streamen. Wenn Sie CLUSTER\$1ARN verwenden, ist eine IAM-Rollenrichtlinie erforderlich, die die Berechtigung `kafka:GetBootstrapBrokers` umfasst. Diese Option wird für die Abwärtskompatibilität bereitgestellt. Derzeit empfehlen wir die Verwendung der URI-Option bootstrap-broker, um eine Verbindung zu Clustern in Amazon Managed Streaming für Apache Kafka herzustellen. Weitere Informationen finden Sie unter [Streaming-Erfassung](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html).

## Nutzungshinweise
<a name="r_CREATE_EXTERNAL_SCHEMA_usage"></a>

Informationen über Beschränkungen bei der Verwendung des Athena-Datenkatalogs finden Sie unter [Athena-Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#amazon-athena-limits) in der Allgemeine AWS-Referenz.

Informationen zu den Beschränkungen bei der AWS Glue Data Catalog Verwendung von finden Sie unter [AWS Glue Grenzwerte](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_glue) in der. Allgemeine AWS-Referenz

Diese Begrenzungen gelten nicht für einen Hive-Metastore.

Pro Datenbank sind höchstens 9 900 Schemata zulässig. Weitere Informationen finden Sie unter [Kontingente und Einschränkungen](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) im *Amazon-Redshift-Verwaltungshandbuch*.

Verwenden Sie den [DROP SCHEMA](r_DROP_SCHEMA.md)-Befehl, um die Registrierung des Schemas aufzuheben. 

Um sich die Details zu externen Schemata anzeigen zu lassen, fragen Sie die folgenden Systemansichten ab: 
+ [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md) 
+ [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) 
+ [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) 

## Beispiele
<a name="r_CREATE_EXTERNAL_SCHEMA_examples"></a>

Im folgenden Beispiel wird ein externes Schema unter Verwendung einer Datenbank in einem Athena-Datenkatalog namens `sampledb` in der Region USA West (Oregon) erstellt. Verwenden Sie dieses Beispiel mit einem Athena- oder AWS Glue -Datenkatalog.

```
create external schema spectrum_schema
from data catalog
database 'sampledb'
region 'us-west-2'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

Im folgenden Beispiel werden ein externes Schema und eine neue externe Datenbank namens erstellt `spectrum_db`.

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole'
create external database if not exists;
```

Im folgenden Beispiel wird ein externes Schema mittels einer Hive-Metastore-Datenbank namens erstellt `hive_db`.

```
create external schema hive_schema
from hive metastore
database 'hive_db'
uri '172.10.10.10' port 99
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

Im folgenden Beispiel miteinander verketteter Rollen wird die Rolle `myS3Role` für den Zugriff auf Amazon S3 und `myAthenaRole` für den Datenkatalogzugriff verwendet. Weitere Informationen finden Sie unter [Verketten von IAM-Rollen in Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role'
catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole'
create external database if not exists;
```

Im folgenden Beispiel wird ein externes Schema erstellt, das auf eine Aurora-PostgreSQL-Datenbank verweist. 

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM POSTGRES
DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema'
URI 'endpoint to aurora hostname' PORT 5432  
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

Im folgenden Beispiel wird ein externes Schema erstellt, das auf die im Konsumenten-Cluster importierte sales\$1db verweist.

```
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
```

Im folgenden Beispiel wird ein externes Schema erstellt, das auf eine Aurora-MySQL-Datenbank verweist. 

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM MYSQL
DATABASE 'my_aurora_db'
URI 'endpoint to aurora hostname'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

# CREATE EXTERNAL TABLE
<a name="r_CREATE_EXTERNAL_TABLE"></a>

Erstellt eine neue externe Tabelle im angegebenen Schema. Alle externen Tabellen müssen in einem externen Schema erstellt werden. Externe Schemata und externe Tabellen unterstützen keine Suchpfade. Weitere Informationen finden Sie unter [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).

Zusätzlich zu externen Tabellen, die mit dem Befehl CREATE EXTERNAL TABLE erstellt wurden, kann Amazon Redshift auf externe Tabellen verweisen, die in einem AWS Lake Formation OR-Katalog AWS Glue oder einem Apache Hive-Metastore definiert sind. Verwenden Sie den Befehl [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md), um eine externe Datenbank zu registrieren, die im externen Katalog definiert ist, und um die externen Tabellen für die Verwendung in Amazon Redshift zur Verfügung zu stellen. Wenn die externe Tabelle in einem AWS Lake Formation Or-Katalog AWS Glue - oder Hive-Metastore vorhanden ist, müssen Sie die Tabelle nicht mit CREATE EXTERNAL TABLE erstellen. Um externe Tabellen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) aus. 

Durch das Ausführen des Befehls CREATE EXTERNAL TABLE AS können Sie eine externe Tabelle basierend auf der Spaltendefinition aus einer Abfrage erstellen und die Ergebnisse dieser Abfrage in Amazon S3 schreiben. Die Ergebnisse liegen im Apache Parquet- oder im Textformat mit Trennzeichen vor. Wenn die externe Tabelle über mindestens einen Partitionsschlüssel verfügt, partitioniert Amazon Redshift neue Dateien entsprechend diesen Partitionsschlüsseln und registriert neue Partitionen automatisch im externen Katalog. Weitere Hinweise zu CREATE EXTERNAL TABLE AS finden Sie unter [Nutzungshinweise](r_CREATE_EXTERNAL_TABLE_usage.md). 

Sie können eine externe Tabelle mit der gleichen SELECT-Syntax abfragen, die Sie auch für andere Amazon-Redshift-Tabellen verwenden. Sie können auch die INSERT-Syntax verwenden, um neue Dateien in den Speicherort der externen Tabelle auf Amazon S3 zu schreiben. Weitere Informationen finden Sie unter [INSERT (externe Tabelle)](r_INSERT_external_table.md).

Zum Erstellen einer Ansicht mit einer externen Tabelle fügen Sie die Klausel WITH NO SCHEMA BINDING in die [CREATE VIEW](r_CREATE_VIEW.md)-Aussage ein.

CREATE EXTERNAL TABLE kann nicht innerhalb einer Transaktion (BEGIN … END) ausgeführt werden. Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

## Erforderliche Berechtigungen
<a name="r_CREATE_EXTERNAL_TABLE-privileges"></a>

Zum Erstellen externer Tabellen müssen Sie der Eigentümer des externen Schemas oder ein Superuser sein. Mit dem Befehl ALTER SCHEMA können Sie den Besitzer eines externen Schemas ändern. Der Zugriff auf externe Tabellen wird durch den Zugriff auf die externen Schemata gesteuert. Sie können für eine externe Tabelle keine Berechtigungen gewähren ([GRANT](r_GRANT.md)) oder widerrufen ([REVOKE](r_REVOKE.md)). Sie gewähren oder widerrufen stattdessen das Recht USAGE für das externe Schema.

Die [Nutzungshinweise](r_CREATE_EXTERNAL_TABLE_usage.md) enthalten zusätzliche Informationen zu spezifischen Berechtigungen für externe Tabellen.

## Syntax
<a name="r_CREATE_EXTERNAL_TABLE-synopsis"></a>

```
CREATE EXTERNAL TABLE
external_schema.table_name
(column_name data_type [, …] )
[ PARTITIONED BY (col_name data_type [, … ] )]
[ { ROW FORMAT DELIMITED row_format |
  ROW FORMAT SERDE 'serde_name'
  [ WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ] } ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
```

Im Folgenden finden Sie die Syntax für CREATE EXTERNAL TABLE AS.

```
CREATE EXTERNAL TABLE
external_schema.table_name
[ PARTITIONED BY (col_name [, … ] ) ]
[ ROW FORMAT DELIMITED row_format ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
 AS
 { select_statement }
```

## Parameters
<a name="r_CREATE_EXTERNAL_TABLE-parameters"></a>

 *external\$1schema.table\$1name*   
Der Name der Tabelle, die erstellt werden soll, qualifiziert durch einen externen Schemanamen. Externe Tabellen müssen in einem externen Schema erstellt werden. Weitere Informationen finden Sie unter [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).  
Die maximale Länge des Tabellennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Amazon Redshift erzwingt ein Limit von 9.900 Tabellen pro Cluster, einschließlich benutzerdefinierter temporärer Tabellen und temporärer Tabellen, die von Amazon Redshift während der Abfrageverarbeitung oder Systemwartung erstellt werden. Optional können Sie die Tabelle mit dem Datenbanknamen qualifizieren. Im folgenden Beispiel ist der Datenbankname `spectrum_db`, der Name des externen Schemas `spectrum_schema` und der Tabellenname `test`.  

```
create external table spectrum_db.spectrum_schema.test (c1 int)
stored as parquet
location 's3://amzn-s3-demo-bucket/myfolder/';
```
Wenn die angegebene Datenbank oder das angegebene Schema nicht vorhanden sind, wird die Tabelle nicht erstellt, und die Anweisung gibt einen Fehler zurück. Sie können in den Systemdatenbanken `template0`, `template1`, `padb_harvest` oder `sys:internal` keine Tabellen oder Ansichten erstellen.  
Der Tabellenname muss für das angegebene Schema eindeutig sein.   
Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

( *column\$1name* *data\$1type* )  
Der Name und der Datentyp jeder Spalte, die erstellt wird.  
Die maximale Länge des Spaltennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Sie können keine Spaltennamen `"$path"` oder `"$size"` festlegen. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).  
Standardmäßig erstellt Amazon Redshift externe Tabellen mit den Pseudospalten `$path` und `$size`. Sie können die Erstellung von Pseudospalten für eine Sitzung deaktivieren, indem Sie den `spectrum_enable_pseudo_columns`-Konfigurationsparameter auf `false` setzen. Weitere Informationen finden Sie unter [Pseudospalten](r_CREATE_EXTERNAL_TABLE_usage.md#r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns).  
Falls Pseudospalten aktiviert sind, können Sie höchstens 1.598 Spalten in einer einzelnen Tabelle definieren. Wenn Pseudospalten nicht aktiviert sind, können Sie höchstens 1.600 Spalten in einer einzelnen Tabelle definieren.   
Wenn Sie eine „breite Tabelle“ erstellen, achten Sie darauf, dass Ihre Spaltenliste nicht die Zeilenbreitengrenzen überschreitet, um während der Verarbeitung von Lasten und Abfragen sofort Ergebnisse bereitzustellen. Weitere Informationen finden Sie unter [Nutzungshinweise](r_CREATE_TABLE_NEW.md#r_CREATE_TABLE_usage).  
Für den Befehl CREATE EXTERNAL TABLE AS ist keine Spaltenliste erforderlich, da Spalten von der Abfrage abgeleitet werden.

 *data\$1type*   
Die folgenden [Datentypen](c_Supported_data_types.md) werden unterstützt:  
+ KLEINE ZAHL () INT2
+ GANZZAHL (INT, INT4)
+ GROSSE GANZZAHL () INT8
+ DECIMAL (NUMERIC)
+ ECHT () FLOAT4
+ DOPPELTE PRÄZISION (FLOAT8)
+ BOOLEAN (BOOL)
+ CHAR (CHARACTER)
+ VARCHAR (CHARACTER VARYING)
+ VARBYTE (CHARACTER VARYING) – kann mit Parquet- und ORC-Datendateien und nur mit nicht partitionierten Spalten benutzt werden.
+ DATE – kann nur mit Text-, Parquet- oder ORC-Datendateien oder als Partitionsspalte verwendet werden.
+ TIMESTAMP (ZEITSTEMPEL)
  
Für DATE können Sie die im Folgenden beschriebenen Formate verwenden. Für Monatswerte, die in Ziffern dargestellt werden, werden die folgenden Formate unterstützt:  
+ `mm-dd-yyyy`, beispielsweise `05-01-2017`. Dies ist die Standardeinstellung.
+ `yyyy-mm-dd`, wenn das Jahr mit mehr als zwei Ziffern dargestellt werden soll. Beispiel, `2017-05-01`.
Für Monatswerte, die mit einer Abkürzung aus drei Buchstaben dargestellt werden, werden die folgenden Formate unterstützt:  
+ `mmm-dd-yyyy`, beispielsweise `may-01-2017`. Dies ist die Standardeinstellung.
+ `dd-mmm-yyyy`, wenn das Jahr mit mehr als zwei Ziffern dargestellt werden soll. Beispiel, `01-may-2017`.
+ `yyyy-mmm-dd`, wenn das Jahr mit mehr als zwei Ziffern dargestellt werden soll. Beispiel, `2017-may-01`.
Für Jahreswerte, die konstant unter 100 liegen, wird das Jahr wie folgt berechnet:  
+ Wenn das Jahr weniger als 70 beträgt, wird das Jahr als das Jahr plus 2000 berechnet. Im Format `mm-dd-yyyy` wird das Datum 05-01-17 beispielsweise zu `05-01-2017` konvertiert.
+ Wenn das Jahr weniger als 100 beträgt, aber mehr als 69, wird das Jahr als das Jahr plus 1900 berechnet. Im Format `mm-dd-yyyy` wird das Datum 05-01-89 beispielsweise zu `05-01-1989` konvertiert.
+ Für Jahreswerte, die mit zwei Ziffern dargestellt werden, müssen führende Nullen hinzugefügt werden, um das Jahr mit vier Ziffern darzustellen.
Die Zeitstempelwerte in Textdateien müssen das Format `yyyy-mm-dd HH:mm:ss.SSSSSS` haben, wie der folgende Zeitstempelwert zeigt: `2017-05-01 11:30:59.000000`.  
Die Länge einer VARCHAR-Spalte wird in Bytes definiert, nicht in Zeichen. Eine VARCHAR(12)-Spalte kann z. B. 12 Einzelbyte-Zeichen oder 6 Zeichen mit einer Länge von je 2 Bytes enthalten. Wenn Sie eine externe Tabelle abfragen, werden die Ergebnisse gekürzt, damit sie der definierten Spaltengröße entsprechen, ohne dass ein Fehler zurückgegeben wird. Weitere Informationen finden Sie unter [Speicherung und Bereiche](r_Character_types.md#r_Character_types-storage-and-ranges).   
Um eine optimale Leistung zu erzielen, empfehlen wir, die kleinste Spaltengröße anzugeben, die ihren Daten entspricht. Verwenden Sie die Funktion [OCTET\$1LENGTH](r_OCTET_LENGTH.md), um die maximale Größe in Bytes für Werte in einer Spalte zu suchen. Das folgende Beispiel gibt die maximale Größe von Werten in der Spalte „E-Mail“ zurück.  

```
select max(octet_length(email)) from users;

max
---
 62
```

PARTITIONED BY (*col\$1name* *data\$1type* [, … ] )  
Eine Klausel, die eine partitionierte Tabelle mit einer oder mehreren Partitionsspalten festlegt. Für jede angegebene Kombination wird ein eigenes Datenverzeichnis verwendet. Dies kann die Abfrageleistung in einigen Fällen verbessern. In den Tabellendaten selbst sind keine partitionierten Spalten vorhanden. Wenn Sie einen Wert für *col\$1name* verwenden, der mit einer Tabellenspalte identisch ist, erhalten Sie einen Fehler.   
Nachdem Sie eine partitionierte Tabelle erstellt haben, ändern Sie die Tabelle mit der Anweisung [ALTER TABLE](r_ALTER_TABLE.md) ... ADD PARTITION, um neue Partitionen im externen Katalog zu registrieren. Wenn Sie eine Partition hinzufügen, definieren Sie den Speicherort des Unterordners auf Amazon S3, der die Partitionsdaten enthält.  
Wenn die Tabelle `spectrum.lineitem_part` beispielsweise mit `PARTITIONED BY (l_shipdate date)` definiert ist, führen Sie den folgenden ALTER TABLE-Befehl aus, um eine Partition hinzuzufügen.  

```
ALTER TABLE spectrum.lineitem_part ADD PARTITION (l_shipdate='1992-01-29')
LOCATION 's3://spectrum-public/lineitem_partition/l_shipdate=1992-01-29';
```
Wenn Sie CREATE EXTERNAL TABLE AS verwenden, müssen Sie ALTER TABLE...ADD PARTITION nicht ausführen. Amazon Redshift registriert neue Partitionen automatisch im externen Katalog. Amazon Redshift schreibt auch automatisch die entsprechenden Daten in Partitionen in Amazon S3, basierend auf dem Partitionsschlüssel oder den Schlüsseln, die in der Tabelle definiert sind.  
Um Partitionen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md) aus.  
Für den Befehl CREATE EXTERNAL TABLE AS müssen Sie den Datentyp der Partitionsspalte nicht angeben, da diese Spalte von der Abfrage abgeleitet wird. 

ROW FORMAT DELIMITED *rowformat*  
Eine Klausel, die das Format der zugrundeliegenden Daten angibt. Die möglichen Werte für *rowformat* sind wie folgt:  
+ LINES TERMINATED BY '*Trennzeichen*' 
+ FIELDS TERMINATED BY '*Trennzeichen*' 
Geben Sie ein ASCII-Zeichen für '*delimiter*' an. Sie können nicht druckbare ASCII-Zeichen mithilfe von Oktal-Code im Format `'\`*`ddd`*`'` festlegen, wobei *`d`* eine Oktalziffer (0–7) bis „\$1177“ ist. Im folgenden Beispiel wird das BEL (Bell)-Zeichen anhand Oktalziffern angegeben.   

```
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
```
Wenn ROW FORMAT ausgelassen wird, lautet das Standardformat DELIMITED FIELDS TERMINATED BY '\$1A' (Anfang des Headings) und LINES TERMINATED BY '\$1n' (Zeilenumbruch). 

ROW FORMAT SERDE '*serde\$1name*' [WITH SERDEPROPERTIES ( '*property\$1name*' = '*property\$1value*' [, ...] ) ]  
Eine Klausel, die das SERDE-Format der zugrundeliegenden Daten angibt.     
'*serde\$1name*'  
Der Name der SerDe. Sie können die folgenden Formate angeben:  
+ org.apache.hadoop.hive.serde2. RegexSerDe 
+ com.amazonaws.glue.serde. GrokSerDe 
+ org.apache.hadoop.hive.serde2.open CSVSerde 

  Dieser Parameter unterstützt die folgende Eigenschaft für Open: SerDe CSVSerde 

  ```
  'wholeFile' = 'true' 
  ```

  Setzen Sie die Eigenschaft `wholeFile` auf `true`, um Neue-Zeile-Zeichen (\$1n) innerhalb von Zeichenfolgen in Anführungszeichen für OpenCSV-Anforderungen richtig zu parsen. 
+ org.openx.data.jsonserde. JsonSerDe
  + Das JSON SERDE-Format unterstützt auch ION-Dateien. 
  + JSON muss wohl geformt sein. 
  + Zeitstempel in Ion und JSON müssen ISO8601 das Format verwenden.
  + Dieser Parameter unterstützt die folgende SerDe Eigenschaft für JsonSerDe: 

    ```
    'strip.outer.array'='true' 
    ```

    Verarbeitet Ion/JSON Dateien, die ein sehr großes Array in äußeren Klammern ([...]) enthalten, als ob das Array mehrere JSON-Datensätze enthält. 
+ com.amazon.ionhiveserde. IonHiveSerDe

  Das Amazon ION-Format bietet neben Datentypen Text- und Binärformate. Bei einer externen Tabelle, die auf Daten im ION-Format verweist, weisen Sie jede Spalte in der externen Tabelle dem entsprechenden Element in den ION-Formatdaten zu. Weitere Informationen finden Sie unter [Amazon Ion](https://amzn.github.io/ion-docs/). Sie müssen gegebenenfalls auch die Ein- und Ausgabeformate angeben.  
WITH SERDEPROPERTIES ( '*property\$1name*' = '*property\$1value*' [, ...] ) ]  
Optional können Sie Namen und Werte der Eigenschaften getrennt durch Kommas angeben.
Wenn ROW FORMAT ausgelassen wird, lautet das Standardformat DELIMITED FIELDS TERMINATED BY '\$1A' (Anfang des Headings) und LINES TERMINATED BY '\$1n' (Zeilenumbruch). 

STORED AS *Dateiformat*  
Das Dateiformat für Datendateien.   
Gültige Formate sind folgende:  
+ PARQUET
+ RCFILE ( ColumnarSerDe nur zur Verwendung von Daten, nicht LazyBinaryColumnarSerDe)
+ SEQUENCEFILE
+ TEXTFILE (für Textdateien, einschließlich JSON-Dateien).
+ ORC 
+ AVRO 
+ INPUTFORMAT '*input\$1format\$1classname*' OUTPUTFORMAT '*output\$1format\$1classname*' 
Der Befehl CREATE EXTERNAL TABLE AS unterstützt nur zwei Dateiformate: TEXTFILE und PARQUET.  
Geben Sie für INPUTFORMAT und OUTPUTFORMAT einen Klassennamen wie im folgenden Beispiel ein.   

```
'org.apache.hadoop.mapred.TextInputFormat'
```

LOCATION \$1 's3://*bucket/folder*/' \$1 's3://*bucket/manifest\$1file*'\$1  <a name="create-external-table-location"></a>
Der Pfad zum -Bucket oder Amazon-S3-Ordner enthält die Datendateien oder eine Manifestdatei, die eine Liste der Amazon-S3-Objektpfade enthält. Die Buckets müssen sich in derselben AWS Region wie der Amazon Redshift Redshift-Cluster befinden. Eine Liste der unterstützten AWS -Regionen finden Sie unter [Einschränkungen für Amazon Redshift Spectrum](c-spectrum-considerations.md).  
Wenn im Pfad ein Bucket oder Ordner wie `'s3://amzn-s3-demo-bucket/custdata/'` angegeben wird, scannt Redshift Spectrum die Dateien im angegebenen Bucket oder Ordner und in allen Unterordnern. Redshift Spectrum ignoriert verborgene Dateien sowie Dateien, die mit einem Punkt oder Unterstrich beginnen.   
Wenn der Pfad eine Manifestdatei angibt, muss das `'s3://bucket/manifest_file'`-Argument explizit auf eine einzelne Datei verweisen, zum Beispiel `'s3://amzn-s3-demo-bucket/manifest.txt'`. Es darf kein Schlüsselpräfix referenzieren.   
Das Manifest ist eine Textdatei im JSON-Format, die die URL jeder Datei, die aus Amazon S3 geladen werden soll, sowie die Größe der jeweiligen Datei in Bytes auflistet. Die URL enthält den Bucket-Namen und den vollständigen Objektpfad für die Datei. Die im Manifest angegebenen Dateien können sich in verschiedenen Buckets befinden, aber alle Buckets müssen sich in derselben AWS Region wie der Amazon Redshift Redshift-Cluster befinden. Wenn eine Datei zweimal aufgelistet wird, wird die Datei zweimal geladen. Im folgenden Beispiel wird der JSON-Code für ein Manifest gezeigt, das drei Dateien lädt.   

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
Sie können die Aufnahme einer bestimmten Datei obligatorisch machen. Fügen Sie dazu eine `mandatory`-Option auf Dateiebene in das Manifest ein. Wenn Sie eine externe Tabelle mit einer obligatorischen Datei abfragen, die fehlt, schlägt die SELECT-Anweisung fehl. Stellen Sie sicher, dass alle in der Definition der externen Tabelle enthaltenen Dateien vorhanden sind. Wenn sie nicht alle vorhanden sind, wird ein Fehler angezeigt, in dem die erste obligatorische Datei angezeigt wird, die nicht gefunden wird. Das folgende Beispiel zeigt den JSON für ein Manifest, wobei die `mandatory`-Option auf `true` eingestellt ist.  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "mandatory":true, "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "mandatory":false, "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
Um auf Dateien zu verweisen, die mit UNLOAD erstellt wurden, können Sie das mit [UNLOAD](r_UNLOAD.md) mit dem MANIFEST-Parameter erstellte Manifest verwenden. Die Manifestdatei ist mit einer Manifestdatei für [COPY aus Amazon S3](copy-parameters-data-source-s3.md) kompatibel, es werden jedoch andere Schlüssel verwendet. Nicht verwendete Schlüssel werden ignoriert. 

TABLE PROPERTIES ( '*property\$1name*'='*property\$1value*' [, ...] )   
Eine Klausel, die die Tabellendefinition für Tabelleneigenschaften festlegt.   
Bei Tabelleneigenschaften muss die Groß-/Kleinschreibung beachtet werden.  
 'compression\$1type'='*value*'   
 Eine Eigenschaft, die den Komprimierungstyp festlegt, der verwendet wird, wenn der Dateiname keine Erweiterung enthält. Wenn Sie diese Eigenschaft festlegen und eine Dateierweiterung vorhanden ist, wird die Erweiterung ignoriert und der von der Eigenschaft festgelegte Wert verwendet. Gültige Werte für den Komprimierungstyp sind folgende:  
+ bzip2
+ gzip
+ Keine
+ snappy  
'data\$1cleansing\$1enabled'='true / false’  
Diese Eigenschaft legt fest, ob die Datenverarbeitung für die Tabelle aktiviert ist. Wenn 'data\$1cleansing\$1enabled' auf „true“ festgelegt ist, ist die Datenverarbeitung für die Tabelle aktiviert. Wenn 'data\$1cleansing\$1enabled' auf „false“ gesetzt ist, ist die Datenverarbeitung für die Tabelle deaktiviert. Im Folgenden finden Sie eine Liste der Datenverarbeitungseigenschaften auf Tabellenebene, die von dieser Eigenschaft gesteuert werden:  
+ column\$1count\$1mismatch\$1handling
+ invalid\$1char\$1handling
+ numeric\$1overflow\$1handling
+ replacement\$1char
+ surplus\$1char\$1handling
Beispiele finden Sie unter [Beispiele für die Datenverarbeitung](r_CREATE_EXTERNAL_TABLE_examples.md#r_CREATE_EXTERNAL_TABLE_examples-data-handling).  
'invalid\$1char\$1handling'='*value*'   
Gibt die Aktion an, die ausgeführt werden soll, wenn Abfrageergebnisse ungültige UTF-8-Zeichenwerte enthalten. Sie können die folgenden Aktionen festlegen:    
DISABLED (DEAKTIVIERT)  
Führt keine ungültige Zeichenbehandlung durch.  
FEHLER  
Bricht Abfragen ab, die Daten zurückgeben, die ungültige UTF-8-Werte enthalten.  
SET\$1TO\$1NULL   
Ersetzt ungültige UTF-8-Werte durch null.  
DROP\$1ROW  
Ersetzt jeden Wert in der Zeile durch null.  
REPLACE  
Ersetzt das ungültige Zeichen durch das Ersetzungszeichen, das Sie mit `replacement_char` angeben.  
'replacement\$1char'='*character*’  
Gibt das Ersetzungszeichen an, das beim Festlegen von `invalid_char_handling` auf `REPLACE` verwendet werden soll.  
'numeric\$1overflow\$1handling'='value’  
Gibt die Aktion an, die ausgeführt werden soll, wenn ORC-Daten eine Ganzzahl (z. B. BIGINT oder int64) enthalten, die größer als die Spaltendefinition ist (z. B. SMALLINT oder int16). Sie können die folgenden Aktionen festlegen:    
DISABLED (DEAKTIVIERT)  
Die ungültige Zeichenbehandlung ist deaktiviert.  
FEHLER  
Brechen Sie die Abfrage ab, wenn die Daten ungültige Zeichen enthalten.  
SET\$1TO\$1NULL  
Setzen Sie ungültige Zeichen auf null.  
DROP\$1ROW  
Setzen Sie jeden Wert in der Zeile auf null.  
'surplus\$1bytes\$1handling'='*Wert*'  
Gibt an, wie geladene Daten behandelt werden, die die Länge des Datentyps überschreiten, der für Spalten mit VARBYTE-Daten definiert ist. Standardmäßig legt Redshift Spectrum den Wert für Daten auf null fest, die die Breite der Spalte überschreiten.  
Sie können die folgenden Aktionen angeben, die ausgeführt werden sollen, wenn die Abfrage Daten zurückgibt, die die Länge des Datentyps überschreiten:    
SET\$1TO\$1NULL  
Ersetzt Daten, die die Spaltenbreite überschreiten, durch null.  
DISABLED (DEAKTIVIERT)  
Führt keine Behandlung für überschüssige Bytes durch.  
FEHLER  
Bricht Abfragen ab, die Daten zurückgeben, die die Spaltenbreite überschreiten.  
DROP\$1ROW  
Entfernt alle Zeilen, deren Daten die Spaltenbreite überschreiten.  
TRUNCATE  
Entfernt die Zeichen, die die maximale Anzahl der Zeichen überschreiten, die für die Spalte definiert sind.  
'surplus\$1char\$1handling'='*value*'  
Gibt an, wie geladene Daten behandelt werden, die die Länge des Datentyps überschreiten, der für Spalten definiert ist, die VARCHAR-, CHAR- oder Zeichenfolgen-Daten enthalten. Standardmäßig legt Redshift Spectrum den Wert für Daten auf null fest, die die Breite der Spalte überschreiten.  
Sie können die folgenden Aktionen angeben, die ausgeführt werden sollen, wenn die Abfrage Daten zurückgibt, die die Spaltenbreite überschreiten:    
SET\$1TO\$1NULL  
Ersetzt Daten, die die Spaltenbreite überschreiten, durch null.  
DISABLED (DEAKTIVIERT)  
Führt keine überzählige Zeichenbehandlung durch.  
FEHLER  
Bricht Abfragen ab, die Daten zurückgeben, die die Spaltenbreite überschreiten.  
DROP\$1ROW  
Ersetzt jeden Wert in der Zeile durch null.  
TRUNCATE  
Entfernt die Zeichen, die die maximale Anzahl der Zeichen überschreiten, die für die Spalte definiert sind.  
'column\$1count\$1mismatch\$1handling'='value’  
Identifiziert, ob die Datei weniger oder mehr Werte für eine Zeile enthält als die in der externen Tabellendefinition angegebene Anzahl von Spalten. Diese Eigenschaft ist nur für ein unkomprimiertes Textdateiformat verfügbar. Sie können die folgenden Aktionen festlegen:    
DISABLED (DEAKTIVIERT)  
Die Eigenschaft zum Umgang mit nicht übereinstimmenden Spalten ist deaktiviert.  
FEHLER  
Die Abfrage schlägt fehl, wenn eine Nichtübereinstimmung bei der Spaltenanzahl festgestellt wird.  
SET\$1TO\$1NULL  
Fehlende Werte werden mit NULL aufgefüllt und die zusätzlichen Werte in jeder Zeile ignoriert.  
DROP\$1ROW  
Alle Zeilen, die einen Fehler bei der Spaltenanzahl enthalten, werden vom Scan ausgeschlossen.  
'numRows'='*row\$1count*'   
Eine Eigenschaft, die den Wert numRows für die Tabellendefinition festlegt. Um die Statistiken einer externen Tabelle explizit zu aktualisieren, legen Sie mit der Eigenschaft numRows die Größe der Tabelle fest. Amazon Redshift analysiert keine externen Tabellen, um die Tabellenstatistiken zu generieren, die der Abfrageoptimierer verwendet, um einen Abfrageplan zu erstellen. Wenn für eine externe Tabelle keine Tabellenstatistiken festgelegt sind, generiert Amazon Redshift einen Abfrageausführungsplan basierend auf der Annahme, dass externe Tabellen die größeren Tabellen und lokale Tabellen die kleineren Tabellen sind.  
'skip.header.line.count'='*line\$1count*'  
Eine Eigenschaft, die die Anzahl der Reihen festgelegt, die am Anfang jeder Quelldatei übersprungen wird.  
'serialization.null.format'=' '  
Eine Eigenschaft, die Spectrum festlegt, muss einen `NULL`-Wert zurückgeben, wenn eine exakte Übereinstimmung mit dem in einem Feld angegebenen Text besteht.  
'orc.schema.resolution'='mapping\$1type'  
Eine Eigenschaft, die den Spalten-Mapping-Typ für Tabellen einrichtet, die das ORC-Datenformat verwenden. Für andere Datenformate wird diese Eigenschaft ignoriert.  
Gültige Werte für den Spalten-Mapping-Typ sind folgende:   
+ Name 
+ position 
Wenn die Eigenschaft *orc.schema.resolution* weggelassen wird, werden die Spalten standardmäßig nach Name zugewiesen. Wenn *orc.schema.resolution* auf einen anderen Wert als *'name'* oder *'position'* gesetzt wird, werden die Spalten nach Position zugewiesen. Weitere Informationen zum Spalten-Mapping finden Sie unter [Mapping externer Tabellenspalten zu ORC-Spalten](c-spectrum-external-tables.md#c-spectrum-column-mapping-orc).  
Der COPY-Befehl weist ORC-Datendateien nur nach Position zu. Die Tabelleneigenschaft *orc.schema.resolution* hat keine Auswirkungen auf das Verhalten des COPY-Befehls.   
'write.parallel'='on / off’  
Eine Eigenschaft, die festlegt, ob CREATE EXTERNAL TABLE AS Daten parallel schreiben soll. Standardmäßig schreibt CREATE EXTERNAL TABLE AS die Daten parallel in mehrere Dateien, je nach der Anzahl der Slices in dem Cluster. Die Standardoption ist eingeschaltet. Wenn 'write.parallel' auf „off“ gesetzt ist, schreibt CREATE EXTERNAL TABLE AS eine oder mehrere Datendateien seriell in Amazon S3. Diese Tabelleneigenschaft gilt auch für alle nachfolgenden INSERT-Anweisungen in derselben externen Tabelle.  
‘write.maxfilesize.mb’=‘size’  
Eine Eigenschaft, mit der die maximale Größe (in MB) jeder Datei festgelegt wird, die von CREATE EXTERNAL TABLE AS in Amazon S3 geschrieben wurde. Die Größe muss eine gültige Ganzzahl zwischen 5 und 6.200 sein. Die standardmäßige maximale Dateigröße beträgt 6.200 MB. Diese Tabelleneigenschaft gilt auch für alle nachfolgenden INSERT-Anweisungen in derselben externen Tabelle.  
‘write.kms.key.id’=‘*value*’  
Sie können einen AWS Key Management Service Schlüssel angeben, um serverseitige Verschlüsselung (SSE) für Amazon S3 S3-Objekte zu aktivieren, wobei der *Wert einer der folgenden Werte* ist:   
+ `auto`um den im Amazon S3 S3-Bucket gespeicherten AWS KMS Standardschlüssel zu verwenden.
+ *kms-key*, den Sie zur Verschlüsselung von Daten angeben.  
*select-statement*  
Eine Anweisung, die mindestens eine Zeile in die externe Tabelle einfügt, indem eine beliebige Abfrage definiert wird. Alle von der Abfrage erzeugten Zeilen werden auf der Grundlage der Tabellendefinition entweder in Text- oder in Parquet-Format in Amazon S3 geschrieben.

## Beispiele
<a name="r_CREATE_EXTERNAL_TABLE_examples_link"></a>

Eine Sammlung von Beispielen ist unter [Beispiele](r_CREATE_EXTERNAL_TABLE_examples.md) verfügbar.

# Nutzungshinweise
<a name="r_CREATE_EXTERNAL_TABLE_usage"></a>

Dieses Thema enthält Nutzungshinweise für [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). Sie können die Details für Amazon-Redshift-Spectrum-Tabellen nicht mit den gleichen Ressourcen anzeigen, die Sie für Amazon-Redshift-Standardtabellen verwenden, wie [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md), [STV\$1TBL\$1PERM](r_STV_TBL_PERM.md), PG\$1CLASS oder information\$1schema. Wenn Ihr Business Intelligence- oder Analyse-Tool externe Redshift Spectrum-Tabellen nicht erkennt, konfigurieren Sie Ihre Anwendung für die Ausführung von Abfragen für [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) und [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md).

## CREATE EXTERNAL TABLE AS
<a name="r_CETAS"></a>

In einigen Fällen können Sie den Befehl CREATE EXTERNAL TABLE AS für einen AWS Glue Datenkatalog, einen AWS Lake Formation externen Katalog oder einen Apache Hive-Metastore ausführen. In solchen Fällen verwenden Sie eine AWS Identity and Access Management (IAM-) Rolle, um das externe Schema zu erstellen. Diese IAM-Rolle muss sowohl Lese- als auch Schreibberechtigungen für Amazon S3 haben. 

Wenn Sie einen Lake-Formation-Katalog verwenden, muss die IAM-Rolle über die Berechtigung verfügen, eine Tabelle im Katalog zu erstellen. In diesem Fall muss sie auch über die Data Lake-Speicherort-Berechtigung für den Amazon-S3-Zielpfad verfügen. Diese IAM-Rolle wird zum Besitzer der neuen AWS Lake Formation -Tabelle.

Um sicherzustellen, dass Dateinamen eindeutig sind, verwendet Amazon Redshift das folgende Format für den Namen jeder Datei, die standardmäßig in Amazon S3 hochgeladen wurde.

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

 Ein Beispiel ist `20200303_004509_810669_1007_0001_part_00.parquet`.

Berücksichtigen Sie beim Ausführen des Befehls CREATE EXTERNAL TABLE AS Folgendes:
+ Der Amazon-S3-Speicherort muss leer sein.
+ Amazon Redshift unterstützt nur PARQUET- und TEXTFILE-Formate, wenn die STORED AS-Klausel verwendet wird.
+ Sie müssen keine Spaltendefinitionsliste definieren. Spaltennamen und Spaltendatentypen der neuen externen Tabelle werden direkt aus der SELECT-Abfrage abgeleitet.
+ Sie müssen den Datentyp der Partitionsspalte in der PARTITIONED BY-Klausel nicht definieren. Wenn Sie einen Partitionsschlüssel angeben, muss der Name dieser Spalte im SELECT-Abfrageergebnis vorhanden sein. Wenn mehrere Partitionsspalten vorhanden sind, spielt ihre Reihenfolge in der SELECT-Abfrage keine Rolle. Amazon Redshift verwendet die in der PARTITIONED BY-Klausel definierte Reihenfolge, um die externe Tabelle zu erstellen.
+ Amazon Redshift partitioniert Ausgabedateien automatisch basierend auf den Partitionsschlüsselwerten in Partitionsordnern. Amazon Redshift entfernt standardmäßig Partitionsspalten aus den Ausgabedateien.
+ Die LINES TERMINATED BY 'delimiter'-Klausel wird nicht unterstützt.
+ Die Klausel ROW FORMAT SERDE 'serde\$1name' wird nicht unterstützt.
+ Die Verwendung von Manifestdateien wird nicht unterstützt. Daher können Sie die LOCATION-Klausel in Amazon S3 nicht für eine Manifestdatei definieren.
+ Amazon Redshift aktualisiert die Tabelleneigenschaft 'numRows' am Ende des Befehls automatisch.
+ Die Tabelleneigenschaft 'compression\$1type' akzeptiert nur 'none' oder 'snappy' als PARQUET-Dateiformat.
+ Amazon Redshift lässt die LIMIT-Klausel in der äußeren SELECT-Abfrage nicht zu. Stattdessen können Sie eine verschachtelte LIMIT-Klausel verwenden.
+ Sie können STL\$1UNLOAD\$1LOG verwenden, um die Dateien zu verfolgen, die von jedem CREATE EXTERNAL TABLE AS-Vorgang in Amazon S3 geschrieben werden.

## Berechtigungen, externe Tabellen zu erstellen und abzufragen
<a name="r_CREATE_EXTERNAL_TABLE_usage-permissions"></a>

Um externe Tabellen zu erstellen, stellen Sie sicher, dass Sie der Besitzer des externen Schemas oder ein Superuser sind. Um das Eigentum an einem externen Schema zu übertragen, verwenden Sie [ALTER SCHEMA](r_ALTER_SCHEMA.md). Das folgende Beispiel ändert den Eigentümer des Schemas `spectrum_schema` in `newowner`.

```
alter schema spectrum_schema owner to newowner;
```

Um eine Redshift Spectrum-Abfrage auszuführen, benötigen Sie die folgenden Berechtigungen:
+ Nutzungsberechtigung für das Schema 
+ Berechtigung, temporäre Tabellen in der aktuellen Datenbank zu erstellen 

Das folgende Beispiel erteilt der Benutzergruppe `spectrum_schema` Nutzungsberechtigungen für das Schema `spectrumusers`.

```
grant usage on schema spectrum_schema to group spectrumusers;
```

Das folgende Beispiel erteilt der Benutzergruppe `spectrumdb` temporäre Berechtigungen für die Datenbank `spectrumusers`. 

```
grant temp on database spectrumdb to group spectrumusers;
```

## Pseudospalten
<a name="r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns"></a>

Standardmäßig erstellt Amazon Redshift externe Tabellen mit den Pseudospalten *\$1path* und *\$1size*. Wählen Sie diese Spalten, um den Pfad zu den Datendateien auf dem Amazon S3 und die Größe der Datendateien für jede Zeile anzuzeigen, die von einer Abfrage zurückgegeben wird. Die Spaltennamen *\$1path* und *\$1size* müssen mit doppelten Anführungszeichen abgetrennt sein. Eine *SELECT \$1*-Klausel gibt die Pseudospalten nicht zurück. Sie müssen die Spaltennamen *\$1path* und *\$1size* explizit in Ihre Abfrage einfügen, wie im folgenden Beispiel gezeigt.

```
select "$path", "$size"
from spectrum.sales_part
where saledate = '2008-12-01';
```

Sie können die Erstellung von Pseudospalten für eine Sitzung deaktivieren, indem Sie den *spectrum\$1enable\$1pseudo\$1columns*-Konfigurationsparameter auf *false* setzen. 

**Wichtig**  
Bei Auswahl von *\$1size* oder *\$1path* fallen Gebühren an, weil Redshift Spectrum die Datendateien in Amazon S3 scannt, um die Größe des Ergebnissatzes zu bestimmen. Weitere Informationen finden Sie unter [Amazon-Redshift-Preise](https://aws.amazon.com/redshift/pricing/).

## Festlegen von Optionen zur Datenverarbeitung
<a name="r_CREATE_EXTERNAL_TABLE_usage-data-handling"></a>

Sie können Tabellenparameter festlegen, um die Eingabebehandlung für Daten anzugeben, die in externen Tabellen abgefragt werden, einschließlich: 
+ Überschüssige Zeichen in Spalten, die VARCHAR-, CHAR- und Zeichenfolgen-Daten enthalten. Weitere Informationen finden Sie unter der externen Tabelleneigenschaft `surplus_char_handling`.
+ Ungültige Zeichen in Spalten, die VARCHAR-, CHAR- und Zeichenfolgen-Daten enthalten. Weitere Informationen finden Sie unter der externen Tabelleneigenschaft `invalid_char_handling`.
+ Ersatzzeichen, das verwendet wird, wenn Sie REPLACE für die externe Tabelleneigenschaft `invalid_char_handling` angeben.
+ Wirft die Überlaufbehandlung in Spalten mit Ganzzahl- und Dezimaldaten um. Weitere Informationen finden Sie unter der externen Tabelleneigenschaft `numeric_overflow_handling`.
+ Surplus\$1bytes\$1handling, um die Eingabebehandlung für überschüssige Bytes in Spalten anzugeben, die VARBYTE-Daten enthalten. Weitere Informationen finden Sie unter der externen Tabelleneigenschaft `surplus_bytes_handling`.

# Beispiele
<a name="r_CREATE_EXTERNAL_TABLE_examples"></a>

Im folgenden Beispiel wird eine Tabelle namens SALES im externen Amazon-Redshift-Schema namens erstellt `spectrum`. Die Daten befinden sich in Textdateien, die Tabulatoren als Trennzeichen verwenden. Die Klausel TABLE PROPERTIES legt die Eigenschaft numRows auf 170.000 Zeilen fest.

Abhängig von der Identität, die Sie zum Ausführen von CREATE EXTERNAL TABLE verwenden, müssen Sie möglicherweise IAM-Berechtigungen konfigurieren. Als bewährte Methode empfehlen wir, einer IAM-Rolle Berechtigungsrichtlinien anzufügen und sie dann nach Bedarf Benutzern und Gruppen zuzuweisen. Weitere Informationen finden Sie unter [Identity and Access Management in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html).

```
create external table spectrum.sales(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
saledate date,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
row format delimited
fields terminated by '\t'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales/'
table properties ('numRows'='170000');
```

Im folgenden Beispiel wird eine Tabelle erstellt, die verwendet, JsonSerDe um auf Daten im JSON-Format zu verweisen.

```
create external table spectrum.cloudtrail_json (
event_version int,
event_id bigint,
event_time timestamp,
event_type varchar(10),
awsregion varchar(20),
event_name varchar(max),
event_source varchar(max),
requesttime timestamp,
useragent varchar(max),
recipientaccountid bigint)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties (
'dots.in.keys' = 'true',
'mapping.requesttime' = 'requesttimestamp'
) location 's3://amzn-s3-demo-bucket/json/cloudtrail';
```

Im folgenden CREATE EXTERNAL TABLE AS-Beispiel wird eine nicht partitionierte externe Tabelle erstellt.- Dann wird das Ergebnis der SELECT-Abfrage als Apache Parquet an die Amazon-S3-Zielposition geschrieben.

```
CREATE EXTERNAL TABLE spectrum.lineitem
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/lineitem/'
AS SELECT * FROM local_lineitem;
```

Im folgenden Beispiel wird eine partitionierte externe Tabelle erstellt und die Partitionsspalten werden in der SELECT-Abfrage eingeschlossen. 

```
CREATE EXTERNAL TABLE spectrum.partitioned_lineitem
PARTITIONED BY (l_shipdate, l_shipmode)
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/partitioned_lineitem/'
AS SELECT l_orderkey, l_shipmode, l_shipdate, l_partkey FROM local_table;
```

Eine Liste der vorhandenen Datenbanken im externen Datenkatalog erhalten Sie durch Abfragen der [SVV\$1EXTERNAL\$1DATABASES](r_SVV_EXTERNAL_DATABASES.md)-Systemansicht. 

```
select eskind,databasename,esoptions from svv_external_databases order by databasename;
```

```
eskind | databasename | esoptions
-------+--------------+----------------------------------------------------------------------------------
     1 | default      | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | sampledb     | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | spectrumdb   | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
```

Um Details zu externen Tabellen anzuzeigen, führen Sie eine Abfrage für die Systemansichten [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) und [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) aus.

Im folgenden Beispiel wird eine Abfrage für die Ansicht SVV\$1EXTERNAL\$1TABLES ausgeführt.

```
select schemaname, tablename, location from svv_external_tables;
```

```
schemaname | tablename            | location
-----------+----------------------+--------------------------------------------------------
spectrum   | sales                | s3://redshift-downloads/tickit/spectrum/sales
spectrum   | sales_part           | s3://redshift-downloads/tickit/spectrum/sales_partition
```

Im folgenden Beispiel wird eine Abfrage für die Ansicht SVV\$1EXTERNAL\$1COLUMNS ausgeführt. 

```
select * from svv_external_columns where schemaname like 'spectrum%' and tablename ='sales';
```

```
schemaname | tablename | columnname | external_type | columnnum | part_key
-----------+-----------+------------+---------------+-----------+---------
spectrum   | sales     | salesid    | int           |         1 |        0
spectrum   | sales     | listid     | int           |         2 |        0
spectrum   | sales     | sellerid   | int           |         3 |        0
spectrum   | sales     | buyerid    | int           |         4 |        0
spectrum   | sales     | eventid    | int           |         5 |        0
spectrum   | sales     | saledate   | date          |         6 |        0
spectrum   | sales     | qtysold    | smallint      |         7 |        0
spectrum   | sales     | pricepaid  | decimal(8,2)  |         8 |        0
spectrum   | sales     | commission | decimal(8,2)  |         9 |        0
spectrum   | sales     | saletime   | timestamp     |        10 |        0
```

Verwenden Sie die folgende Abfrage zum Anzeigen von Tabellenpartitionen.

```
select schemaname, tablename, values, location
from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+-------------------------------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

Das folgende Beispiel gibt die Gesamtgröße der entsprechenden Datendateien für eine externe Tabelle zurück.

```
select distinct "$path", "$size"
   from spectrum.sales_part;

 $path                                                                    | $size
--------------------------------------------------------------------------+-------
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/ |  1616
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
```

## Beispiele für Partitionierungen
<a name="r_CREATE_EXTERNAL_TABLE_examples-partitioning"></a>

Führen Sie zur Erstellung einer nach Datum partitionierten Tabelle den folgenden Befehl aus.

```
create external table spectrum.sales_part(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
dateid smallint,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
partitioned by (saledate date)
row format delimited
fields terminated by '|'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales_partition/'
table properties ('numRows'='170000');
```

Führen Sie zum Hinzufügen der Partitionen die folgenden ALTER TABLE-Befehle aus.

```
alter table spectrum.sales_part
add if not exists partition (saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-04-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-05-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-06-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-07-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-08-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-09-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-10-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-11-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-12-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12/';
```

Führen Sie die folgende Abfrage aus, um Daten aus der partitionierten Tabelle auszuwählen.

```
select top 10 spectrum.sales_part.eventid, sum(spectrum.sales_part.pricepaid)
from spectrum.sales_part, event
where spectrum.sales_part.eventid = event.eventid
  and spectrum.sales_part.pricepaid > 30
  and saledate = '2008-12-01'
group by spectrum.sales_part.eventid
order by 2 desc;
```

```
eventid | sum
--------+---------
    914 | 36173.00
   5478 | 27303.00
   5061 | 26383.00
   4406 | 26252.00
   5324 | 24015.00
   1829 | 23911.00
   3601 | 23616.00
   3665 | 23214.00
   6069 | 22869.00
   5638 | 22551.00
```

Um externe Tabellenpartitionen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md) aus.

```
select schemaname, tablename, values, location from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+--------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

## Beispiele für Zeilenformate
<a name="r_CREATE_EXTERNAL_TABLE_examples-row-format"></a>

Nachfolgend sehen Sie ein Beispiel der Angabe von ROW FORMAT SERDE-Parametern für Datendateien, die im AVRO-Format gespeichert sind.

```
create external table spectrum.sales(salesid int, listid int, sellerid int, buyerid int, eventid int, dateid int, qtysold int, pricepaid decimal(8,2), comment VARCHAR(255))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='{\"namespace\": \"dory.sample\",\"name\": \"dory_avro\",\"type\": \"record\", \"fields\": [{\"name\":\"salesid\", \"type\":\"int\"},
{\"name\":\"listid\", \"type\":\"int\"},
{\"name\":\"sellerid\", \"type\":\"int\"},
{\"name\":\"buyerid\", \"type\":\"int\"},
{\"name\":\"eventid\",\"type\":\"int\"},
{\"name\":\"dateid\",\"type\":\"int\"},
{\"name\":\"qtysold\",\"type\":\"int\"},
{\"name\":\"pricepaid\", \"type\": {\"type\": \"bytes\", \"logicalType\": \"decimal\", \"precision\": 8, \"scale\": 2}}, {\"name\":\"comment\",\"type\":\"string\"}]}')
STORED AS AVRO
location 's3://amzn-s3-demo-bucket/avro/sales' ;
```

Das Folgende zeigt ein Beispiel für die Angabe der ROW FORMAT SERDE-Parameter mithilfe RegEx von.

```
create external table spectrum.types(
cbigint bigint,
cbigint_null bigint,
cint int,
cint_null int)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ('input.regex'='([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)')
stored as textfile
location 's3://amzn-s3-demo-bucket/regex/types';
```

Nachfolgend sehen Sie ein Beispiel der Angabe von ROW FORMAT SERDE-Parametern mit Grok.

```
create external table spectrum.grok_log(
timestamp varchar(255),
pid varchar(255),
loglevel varchar(255),
progname varchar(255),
message varchar(255))
row format serde 'com.amazonaws.glue.serde.GrokSerDe'
with serdeproperties ('input.format'='[DFEWI], \\[%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid:int}\\] *(?<loglevel>:DEBUG|FATAL|ERROR|WARN|INFO) -- +%{DATA:progname}: %{GREEDYDATA:message}')
stored as textfile
location 's3://DOC-EXAMPLE-BUCKET/grok/logs';
```

Die folgende Abbildung zeigt ein Beispiel für ein Amazon-S3-Server-Zugriffsprotokoll in einem S3 Bucket. Sie können Redshift Spectrum verwenden, um Amazon-S3-Zugriffsprotokolle abzufragen.

```
CREATE EXTERNAL TABLE spectrum.mybucket_s3_logs(
bucketowner varchar(255),
bucket varchar(255),
requestdatetime varchar(2000),
remoteip varchar(255),
requester varchar(255),
requested varchar(255),
operation varchar(255),
key varchar(255),
requesturi_operation varchar(255),
requesturi_key varchar(255),
requesturi_httpprotoversion varchar(255),
httpstatus varchar(255),
errorcode varchar(255),
bytessent bigint,
objectsize bigint,
totaltime varchar(255),
turnaroundtime varchar(255),
referrer varchar(255),
useragent varchar(255),
versionid varchar(255)
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \"([^ ]*)\\s*([^ ]*)\\s*([^ ]*)\" (- |[^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*).*$')
LOCATION 's3://amzn-s3-demo-bucket/s3logs’;
```

Nachfolgend sehen Sie ein Beispiel der Angabe von ROW FORMAT SERDE-Parametern für Daten im ION-Format.

```
CREATE EXTERNAL TABLE tbl_name (columns)
ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe'
STORED AS
INPUTFORMAT 'com.amazon.ionhiveserde.formats.IonInputFormat'
OUTPUTFORMAT 'com.amazon.ionhiveserde.formats.IonOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix'
```

## Beispiele für die Datenverarbeitung
<a name="r_CREATE_EXTERNAL_TABLE_examples-data-handling"></a>

Die folgenden Beispiele haben Zugriff auf die Datei: [spi\$1global\$1rankings.csv](https://s3.amazonaws.com/redshift-downloads/docs-downloads/spi_global_rankings.csv). Sie können die Datei `spi_global_rankings.csv` in einem Amazon-S3-Bucket hochladen, um diese Beispiele auszuprobieren.

Das folgende Beispiel erstellt ein externes Schema `schema_spectrum_uddh` unter Verwendung der externen Datenbank `spectrum_db_uddh`. Geben Sie für `aws-account-id` Ihre AWS Konto-ID und für Ihren Redshift Spectrum-Rollennamen `role-name` ein.

```
create external schema schema_spectrum_uddh
from data catalog
database 'spectrum_db_uddh'
iam_role 'arn:aws:iam::aws-account-id:role/role-name'
create external database if not exists;
```

Das folgende Beispiel erstellt die externe Tabelle `soccer_league` im externen Schema `schema_spectrum_uddh`.

```
CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league
(
  league_rank smallint,
  prev_rank   smallint,
  club_name   varchar(15),
  league_name varchar(20),
  league_off  decimal(6,2),
  league_def  decimal(6,2),
  league_spi  decimal(6,2),
  league_nspi integer
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n\l'
stored as textfile
LOCATION 's3://spectrum-uddh/league/'
table properties ('skip.header.line.count'='1');
```

Überprüfen Sie die Gesamtzahl der Zeilen in der `soccer_league`-Tabelle.

```
select count(*) from schema_spectrum_uddh.soccer_league;
```

Die Anzahl der Zeilen wird angezeigt.

```
count
645
```

Die folgende Abfrage zeigt die 10 besten Clubs an. Da für den Club `Barcelona` ein ungültiges Zeichen in der Zeichenfolge angegeben ist, wird für den Namen NULL angezeigt.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

```
league_rank	club_name	league_name			league_nspi
1		Manchester City	Barclays Premier Lea		34595
2		Bayern Munich	German Bundesliga		34151
3		Liverpool	Barclays Premier Lea		33223
4		Chelsea		Barclays Premier Lea		32808
5		Ajax		Dutch Eredivisie		32790
6		Atletico 	Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi		31469
8		NULL	        Spanish Primera Divi            31321
9		RB Leipzig	German Bundesliga		31014
10		Paris Saint-Ger	French Ligue 1			30929
```

Im folgenden Beispiel wird die `soccer_league`-Tabelle geändert, um die externen Tabelleneigenschaften `invalid_char_handling`, `replacement_char` und `data_cleansing_enabled` anzugeben und ein Fragezeichen (?) als Ersatz für unerwartete Zeichen einzufügen.

```
alter  table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='REPLACE','replacement_char'='?','data_cleansing_enabled'='true');
```

Das folgende Beispiel fragt die Tabelle `soccer_league` nach Teams mit einem Rang von 1 bis 10 ab.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

Da die Tabelleneigenschaften geändert wurden, werden die 10 Clubs an der Spitze angezeigt, wobei das Fragezeichen (?) in der achten Zeile als Ersatz für den Club `Barcelona` steht.

```
league_rank	club_name	league_name		league_nspi
1		Manchester City	Barclays Premier Lea	34595
2		Bayern Munich	German Bundesliga	34151
3		Liverpool	Barclays Premier Lea	33223
4		Chelsea		Barclays Premier Lea	32808
5		Ajax		Dutch Eredivisie	32790
6		Atletico Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi	31469
8		Barcel?na	Spanish Primera Divi	31321
9		RB Leipzig	German Bundesliga	31014
10		Paris Saint-Ger	French Ligue 1		30929
```

Das folgende Beispiel ändert die `soccer_league`-Tabelle, um die externen Tabelleneigenschaften `invalid_char_handling` anzugeben und Zeilen mit unerwarteten Zeichen zu löschen.

```
alter table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='DROP_ROW','data_cleansing_enabled'='true');
```

Das folgende Beispiel fragt die Tabelle `soccer_league` nach Teams mit einem Rang von 1 bis 10 ab.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

Die Ergebnisse zeigen die besten Clubs an, ohne die achte Zeile für den Club `Barcelona`.

```
league_rank   club_name         league_name            league_nspi
1             Manchester City   Barclays Premier Lea   34595
2             Bayern Munich     German Bundesliga      34151
3             Liverpool         Barclays Premier Lea   33223
4             Chelsea           Barclays Premier Lea   32808
5             Ajax              Dutch Eredivisie       32790
6             Atletico Madrid   Spanish Primera Divi   31517
7             Real Madrid       Spanish Primera Divi   31469
9             RB Leipzig        German Bundesliga      31014
10            Paris Saint-Ger   French Ligue 1         30929
```

# CREATE EXTERNAL VIEW
<a name="r_CREATE_EXTERNAL_VIEW"></a>

Das Vorschau-Feature für den Datenkatalog ist nur in den folgenden Regionen verfügbar.
+ USA Ost (Ohio): (us-east-2)
+ USA Ost (Nord-Virginia): (us-east-1)
+ USA West (Nordkalifornien) (us-west-1)
+ Asien-Pazifik (Tokyo) (ap-northeast-1)
+ Europa (Irland) (eu-west-1)
+ Europa (Stockholm) (eu-north-1)

Erstellt eine Ansicht im Datenkatalog. Eine Datenkatalog-Ansicht ist ein einzelnes Ansichtsschema, das mit SQL-Engines wie Amazon Athena und Amazon EMR funktioniert. Sie können die Ansicht von der Engine Ihrer Wahl aus abfragen. Weitere Informationen zu Data-Catalog-Ansichten finden Sie unter [Erstellen von Data-Catalog-Ansichten](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntax
<a name="r_CREATE_EXTERNAL_VIEW-synopsis"></a>

```
CREATE EXTERNAL VIEW schema_name.view_name [ IF NOT EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
AS query_definition;
```

## Parameters
<a name="r_CREATE_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Das Schema, das an Ihre AWS Glue Datenbank angehängt ist, gefolgt vom Namen der Ansicht.

GESCHÜTZT  
Gibt an, dass der Befehl CREATE EXTERNAL VIEW nur abgeschlossen werden soll, wenn die Abfrage in der query\$1definition erfolgreich abgeschlossen werden kann.

IF NOT EXISTS  
Erstellt die Ansicht, falls sie noch nicht vorhanden ist.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Die Notation des Schemas, das beim Erstellen der Ansicht verwendet werden soll. Sie können angeben AWS Glue Data Catalog, ob Sie eine von Ihnen erstellte Glue-Datenbank oder ein von Ihnen erstelltes externes Schema verwenden möchten. Weitere Informationen finden Sie unter [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) und [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

 *query\$1definition*   
Die Definition der SQL-Abfrage, die Amazon Redshift ausführt, um die Ansicht zu ändern.

## Beispiele
<a name="r_CREATE_EXTERNAL_VIEW-examples"></a>

Im folgenden Beispiel wird eine Datenkatalog-Ansicht mit dem Namen sample\$1schema.glue\$1data\$1catalog\$1view erstellt.

```
CREATE EXTERNAL PROTECTED VIEW sample_schema.glue_data_catalog_view IF NOT EXISTS
AS SELECT * FROM sample_database.remote_table "remote-table-name";
```

# CREATE FUNCTION
<a name="r_CREATE_FUNCTION"></a>

Erstellt eine neue skalare benutzerdefinierte Funktion (User-Defined Function; UDF) mit einer SQL SELECT-Klausel oder einem Python-Programm.

Weitere Informationen und Beispiele finden Sie unter [Benutzerdefinierte Funktionen in Amazon Redshift](user-defined-functions.md).

## Erforderliche Berechtigungen
<a name="r_CREATE_FUNCTION-privileges"></a>

Sie benötigen eine der folgenden Berechtigungen, um CREATE OR REPLACE FUNCTION ausführen zu können:
+ Für CREATE FUNCTION:
  + Superuser kann sowohl vertrauenswürdige als auch nicht vertrauenswürdige Sprachen verwenden, um Funktionen zu erstellen.
  + Benutzer mit der Berechtigung CREATE [OR REPLACE] FUNCTION können Funktionen mit vertrauenswürdigen Sprachen erstellen.
+ Für REPLACE FUNCTION:
  + Superuser
  + Benutzer mit der Berechtigung CREATE [ OR REPLACE ] FUNCTION
  + Funktionsbesitzer

## Syntax
<a name="r_CREATE_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] FUNCTION f_function_name
( { [py_arg_name  py_arg_data_type |
sql_arg_data_type } [ , ... ] ] )
RETURNS data_type
{ VOLATILE | STABLE | IMMUTABLE }
AS $$
  { python_program | SELECT_clause }
$$ LANGUAGE { plpythonu | sql }
```

## Parameters
<a name="r_CREATE_FUNCTION-parameters"></a>

OR REPLACE  
Gibt an, dass die vorhandene Funktion ersetzt wird, wenn eine Funktion mit demselben Namen und denselben Eingabeargument-Datentypen bzw. derselben *Signatur* vorhanden ist. Sie können eine Funktion nur durch eine neue Funktion ersetzen, wenn diese einen identischen Satz von Datentypen definiert. Sie müssen Superuser sein, um eine Funktion zu ersetzen.  
Wenn Sie eine Funktion definieren, die den gleichen Namen wie eine vorhandene Funktion, aber eine andere Signatur besitzt, erstellen Sie eine neue Funktion. Der Funktionsname wird also überladen. Weitere Informationen finden Sie unter [Überladen von Funktionsnamen](udf-naming-udfs.md#udf-naming-overloading-function-names).

 *f\$1function\$1name*   
Der Name der Funktion. Wenn Sie einen Schemanamen angeben (wie `myschema.myfunction`), wird die Funktion mithilfe des angegebenen Schemas erstellt. Andernfalls wird die Funktion im aktuellen Schema erstellt. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).  
Es wird empfohlen, dass Sie alle UDFs mit dem Präfix benennen `f_`. Amazon Redshift reserviert das Präfix `f_` ausschließlich für UDF-Namen. Wenn Sie Ihren UDF-Namen `f_` voranstellen, stellen Sie daher sicher, dass Ihre UDF-Namen nicht im Widerspruch zu den Namen vorhandener oder zukünftiger, in Amazon Redshift integrierter SQL-Funktionen stehen. Weitere Informationen finden Sie unter [Verhindern von UDF-Namenskonflikten](udf-naming-udfs.md).  
Sie können mehr als eine Funktion mit demselben Funktionsnamen definieren, wenn sich die Datentypen für die Eingabeargumente unterscheiden. Der Funktionsname wird also überladen. Weitere Informationen finden Sie unter [Überladen von Funktionsnamen](udf-naming-udfs.md#udf-naming-overloading-function-names).

 *py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Für eine Python-UDF: eine Liste eingegebener Argumentnamen und Datentypen. Für eine SQL-UDF: eine Liste der Datentypen ohne Argumentnamen. Verweisen Sie in einer Python-UDF anhand der Argumentnamen auf Argumente. Verweisen Sie in einer SQL-UDF mit \$11, \$12 usw. auf Argumente, basierend auf der Reihenfolge der Argumente in der Argumentliste.   
Die Ein- und Rückgabedaten für eine SQL-UDF können jeden standardmäßigen Amazon Redshift-Datentyp verwenden. Für eine Python-UDF kommen als Eingabe- und Rückgabedatentypen SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE oder TIMESTAMP infrage. Darüber hinaus unterstützen benutzerdefinierte Python-Funktionen (UDFs) den Datentyp ANYELEMENT. Dieser wird basierend auf dem Datentyp des entsprechenden Arguments, das zur Laufzeit bereitgestellt wird, automatisch in einen Standarddatentyp umgewandelt. Wenn mehrere Argumente ANYELEMENT verwenden, werden sie alle zur Laufzeit zum gleichen Datentyp aufgelöst, basierend auf dem ersten ANYELEMENT-Argument in der Liste. Weitere Informationen erhalten Sie unter [Python-UDF-Datentypen](udf-data-types.md) und [Datentypen](c_Supported_data_types.md).  
Sie können maximal 32 Argumente angeben.

 RETURNS *data\$1type*   
Der Datentyp des Werts, der von der Funktion zurückgegeben wird. Der RETURNS-Datentyp kann ein beliebiger Standard-Amazon-Redshift-Datentyp sein. Darüber hinaus UDFs kann Python den Datentyp ANYELEMENT verwenden, der auf der Grundlage des zur Laufzeit bereitgestellten Arguments automatisch in einen Standarddatentyp konvertiert wird. Wenn Sie ANYELEMENT für den Rückgabedatentyp angeben, muss mindestens ein Argument ANYELEMENT verwenden. Der tatsächliche Rückgabedatentyp entspricht dem Datentyp, der für das ANYELEMENT-Argument angegeben wird, wenn die Funktion aufgerufen wird. Weitere Informationen finden Sie unter [Python-UDF-Datentypen](udf-data-types.md).

 VOLATILE \$1 STABLE \$1 IMMUTABLE   
Informiert den Abfragenoptimierer über die Volatilität der Funktion.   
Sie erhalten die beste Optimierung, wenn Sie Ihre Funktion mit der strengsten Volatilitätskategorie bezeichnen, die für sie zulässig ist. Wenn die Kategorie jedoch zu eng gefasst ist, besteht das Risiko, dass der Optimierer fälschlicherweise einige Aufrufe überspringt. Dies führt zu einem falschen Ergebnissatz. Beginnend mit der Volatilitätskategorie mit der geringsten Strenge sind dies die Volatilitätskategorien:  
+ VOLATILE
+ STABLE
+ IMMUTABLE
VOLATILE  
Bei gleichen Argumenten kann die Funktion unterschiedliche Ergebnisse für aufeinanderfolgende Aufrufe zurückgeben, auch für die Zeilen in einer einzelnen Anweisung. Der Abfragenoptimierer kann keine Annahmen über das Verhalten einer volatilen Funktion machen. Daher muss eine Abfrage, die eine volatile Funktion verwendet, die Funktion für jede Eingabezeile erneut evaluieren.  
STABLE  
Bei gleichen Argumenten gibt die Funktion garantiert die gleichen Ergebnisse für alle Zeilen zurück, die innerhalb einer einzelnen Anweisung verarbeitet werden. Die Funktion kann unterschiedliche Ergebnisse zurückgeben, wenn sie in unterschiedlichen Anweisungen aufgerufen wird. Diese Kategorie ermöglicht dem Optimierer, mehrere Aufrufe der Funktion innerhalb einer einzelnen Anweisung zu einem einzigen Aufruf für die Anweisung zu optimieren.   
IMMUTABLE  
Bei gleichen Argumenten gibt die Funktion stets das gleiche Ergebnis zurück. Wenn eine Abfrage eine `IMMUTABLE`-Funktion mit konstanten Argumenten aufruft, evaluiert der Optimierer die Funktion im Voraus.

AS \$1\$1-*Anweisung* \$1\$1  
 Ein Konstrukt, das die Ausführung der Anweisung einschließt. Die Literalschlüsselwörter `AS $$` und `$$` sind erforderlich.   
Amazon Redshift erfordert, dass Sie die Anweisung in Ihrer Funktion unter Verwendung eines Formats umschließen, das Dollaranführung genannt wird. Alles innerhalb der Umschließung wird exakt wie angegeben übergeben. Sie müssen für Sonderzeichen keine Escape-Zeichen verwenden, da der Inhalt der Zeichenfolge wie exakt wie angegeben geschrieben wird.   
 Bei der *Dollaranführung* verwenden Sie ein Dollarzeichenpaar (\$1\$1), um den Anfang und das Ende der auszuführenden Anweisung zu kennzeichnen, wie im folgenden Beispiel gezeigt.   

```
$$ my statement $$
```
 Optional können Sie zwischen den beiden Dollarzeichen eine Zeichenfolge angeben, um die Identifizierung der Anweisung zu unterstützen. Die von Ihnen im umschließenden Dollarzeichenpaar am Anfang und am Ende verwendete Zeichenfolge muss identisch sein. Diese Zeichenfolge unterscheidet zwischen Groß- und Kleinschreibung und unterliegt den gleichen Einschränkungen wie Bezeichner, die nicht in einer Anführung stehen, darf jedoch keine Dollarzeichen enthalten. Im folgenden Beispiel wird die Zeichenfolge verwendet `test`.   

```
$test$ my statement $test$
```
Weitere Informationen zur Dollaranführung finden Sie unter "Zeichenfolgenkonstanten in Dollaranführung" im Abschnitt [Lexikalische Struktur](https://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html) der PostgreSQL-Dokumentation. 

*python\$1program*   
Ein gültiges ausführbares Python-Programm, das einen Wert zurückgibt. Die Anweisung, die Sie mit der Funktion übergeben, muss den Einrückungsanforderungen entsprechen, die in den [Vorgaben für Python-Code](https://www.python.org/dev/peps/pep-0008/#indentation) auf der Python-Website angegeben sind. Weitere Informationen finden Sie unter [Python-Sprachunterstützung für UDFs](udf-python-language-support.md).

*SQL\$1clause*   
Eine SQL SELECT-Klausel.  
Die SELECT-Klausel darf keinen der folgenden Klausel-Typen enthalten:  
+ FROM
+ INTO
+ WHERE
+ GROUP BY
+ ORDER BY
+ LIMIT

LANGUAGE \$1 plpythonu \$1 sql \$1   
Legen Sie für Python fest `plpythonu`. Legen Sie für SQL fest `sql`. Sie müssen eine Berechtigung für die Nutzung in der Sprache für SQL oder plpythonu besitzen. Weitere Informationen finden Sie unter [UDF-Sicherheit und -Berechtigungen](udf-security-and-privileges.md).

## Nutzungshinweise
<a name="r_CREATE_FUNCTION-usage-notes"></a>

### Verschachtelte Funktionen
<a name="r_CREATE_FUNCTION-usage-notes-nested-functions"></a>

Sie können eine weitere SQL-UDF innerhalb einer SQL-UDF aufrufen. Die verschachtelte Funktion muss existieren, wenn Sie den Befehl CREATE FUNCTION ausführen. Amazon Redshift verfolgt keine Abhängigkeiten für UDFs. Wenn Sie also die verschachtelte Funktion löschen, gibt Amazon Redshift keinen Fehler zurück. Die UDF schlägt jedoch fehl, wenn die verschachtelte Funktion nicht vorhanden ist. Die folgende Funktion ruft beispielsweise die `f_sql_greater `-Funktion in der SELECT-Klausel auf.

```
create function f_sql_commission (float, float )
  returns float
stable
as $$
  select f_sql_greater ($1, $2)
$$ language sql;
```

### UDF-Sicherheit und Rechte
<a name="r_CREATE_FUNCTION-usage-notes-security-and-privileges"></a>

Zum Erstellen einer UDF müssen Sie eine Berechtigung für die Nutzung in der Sprache für SQL oder plpythonu (Python) besitzen. USAGE ON LANGUAGE SQL wird standardmäßig PUBLIC gewährt. USAGE ON LANGUAGE PLPYTHONU müssen Sie jedoch spezifischen Benutzern oder Gruppen explizit gewähren. 

Um die Nutzung für SQL zu widerrufen, widerrufen Sie zuerst die Nutzung von PUBLIC. Gewähren Sie dann nur den spezifischen Benutzern oder Gruppen, die SQL erstellen dürfen, die Nutzung von SQL. UDFs Im folgenden Beispiel wird die Nutzung in SQL von PUBLIC widerrufen. Anschließend wird die Nutzung der Benutzergruppe erlaubt `udf_devs`.

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```

Um eine UDF auszuführen, benötigen Sie für die jeweilige Funktion eine Ausführungsberechtigung. Standardmäßig wird PUBLIC die Ausführungsberechtigung für new UDFs erteilt. Um die Nutzung einzuschränken, widerrufen Sie die Ausführungsberechtigung für die Funktion von PUBLIC. Gewähren Sie die Berechtigung anschließend den spezifischen Einzelpersonen oder Gruppen. 

Im folgenden Beispiel wird die Ausführungsberechtigung der Funktion `f_py_greater` von PUBLIC widerrufen. Anschließend wird die Nutzung der Benutzergruppe `udf_devs` erlaubt.

```
revoke execute on function f_py_greater(a float, b float) from PUBLIC;
grant execute on function f_py_greater(a float, b float) to group udf_devs;
```

Superuser haben standardmäßig alle Berechtigungen. 

Weitere Informationen erhalten Sie unter [GRANT](r_GRANT.md) und [REVOKE](r_REVOKE.md).

## Beispiele
<a name="r_CREATE_FUNCTION-examples"></a>

### Beispiel für eine skalare Python-UDF
<a name="r_CREATE_FUNCTION-python-example"></a>

Im folgenden Beispiel wird eine Python-UDF erstellt, mit der zwei Ganzzahlen verglichen werden und die den größeren Wert zurückgibt.

```
create function f_py_greater (a float, b float)
  returns float
stable
as $$
  if a > b:
    return a
  return b
$$ language plpythonu;
```

Im folgenden Beispiel werden eine Abfrage für die Tabelle SALES ausgeführt und die neue `f_py_greater`-Funktion aufgerufen, um entweder COMMISSION oder 20 Prozent von PRICEPAID zurückzugeben, je nachdem, welcher Wert größer ist.

```
select f_py_greater (commission, pricepaid*0.20) from sales;
```

### Beispiel für eine skalare SQL-UDF
<a name="r_CREATE_FUNCTION-sql-example"></a>

Im folgenden Beispiel wird eine Funktion erstellt, die zwei Zahlen vergleicht und die größere zurückgibt. 

```
create function f_sql_greater (float, float)
  returns float
stable
as $$
  select case when $1 > $2 then $1
    else $2
  end
$$ language sql;
```

In der folgenden Abfrage wird die neue Funktion `f_sql_greater` aufgerufen, um eine Abfrage über der Tabelle SALES auszuführen und entweder COMMISSION oder 20 Prozent von PRICEPAID zurückzugeben, je nachdem, welcher Wert größer ist.

```
select f_sql_greater (commission, pricepaid*0.20) from sales;
```

# CREATE GROUP
<a name="r_CREATE_GROUP"></a>

Definiert eine neue Benutzergruppe. Nur Superuser können Gruppen erstellen.

## Syntax
<a name="r_CREATE_GROUP-synopsis"></a>

```
CREATE GROUP group_name
[ [ WITH ] [ USER username ] [, ...] ]
```

## Parameters
<a name="r_CREATE_GROUP-parameters"></a>

 *group\$1name*   
Der Name einer neuen Benutzergruppe. Gruppennamen, die mit zwei Unterstrichen beginnen, sind für die interne Verwendung durch Amazon Redshift reserviert. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

WITH  
Optionale Syntax für die Angabe zusätzlicher Parameter für CREATE GROUP.

USER  
Fügt der Gruppe einen oder mehrere Benutzer hinzu.

 *username (Benutzername*   
Der Name des Benutzers, der der Gruppe hinzugefügt werden soll.

## Beispiele
<a name="r_CREATE_GROUP-examples"></a>

Im folgenden Beispiel wird eine Benutzergruppe namens ADMIN\$1GROUP mit zwei Benutzern und erstellt. ADMIN1 ADMIN2

```
create group admin_group with user admin1, admin2;
```

# CREATE IDENTITY PROVIDER
<a name="r_CREATE_IDENTITY_PROVIDER"></a>

Definiert einen neuen Identitätsanbieter. Nur Superuser können Identitätsanbieter erstellen.

## Syntax
<a name="r_CREATE_IDENTITY_PROVIDER-synopsis"></a>

```
CREATE IDENTITY PROVIDER identity_provider_name TYPE type_name
NAMESPACE namespace_name
[PARAMETERS parameter_string]
[APPLICATION_ARN arn]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
  ];
```

## Parameters
<a name="r_CREATE_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Name des neuen Identitätsanbieters. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

*type\$1name*  
Der Identitätsanbieter, zu dem eine Verbindung hergestellt werden soll. Azure und AWSIDC sind derzeit die einzigen unterstützten Identitätsanbieter.

*namespace\$1name*  
Der Namespace Dies ist ein eindeutiger Kurzbezeichner für das Identitätsanbieter-Verzeichnis.

 *parameter\$1string*   
Eine Zeichenfolge mit einem ordnungsgemäß formatierten JSON-Objekt, das die für den Identitätsanbieter erforderlichen Parameter und Werte enthält.

 *arn*   
Der Amazon-Ressourcenname (ARN) für eine von IAM Identity Center verwaltete Anwendung. Dieser Parameter ist nur anwendbar, wenn der Identitätsanbietertyp ist. AWSIDC

 *iam\$1role*   
Die IAM-Rolle, die Berechtigungen zum Herstellen der Verbindung zum IAM Identity Center bereitstellt. Dieser Parameter ist nur anwendbar, wenn der Identitätsanbietertyp ist. AWSIDC

 *auto\$1create\$1roles*   
Aktiviert oder deaktiviert das Feature für das automatische Erstellen von Rollen. Wenn der Wert TRUE ist, aktiviert Amazon Redshift das Feature zum automatischen Erstellen von Rollen. Wenn der Wert FALSE ist, deaktiviert Amazon Redshift das Feature zum automatischen Erstellen von Rollen. Wenn der Wert für diesen Parameter nicht angegeben ist, bestimmt Amazon Redshift den Wert mithilfe der folgenden Logik:   
+  Wenn `AUTO_CREATE_ROLES` bereitgestellt ist, der Wert jedoch nicht angegeben ist, wird der Wert auf TRUE festgelegt. 
+  Wenn er `AUTO_CREATE_ROLES` nicht angegeben wird und der Identitätsanbieter schon AWSIDC, wird der Wert auf FALSE gesetzt. 
+  Wenn `AUTO_CREATE_ROLES` nicht bereitgestellt ist und der Identitätsanbieter Azure ist, wird der Wert auf TRUE festgelegt. 
Um Gruppen einzuschließen, geben Sie `INCLUDE` an. Die Standardeinstellung ist „leer“. Das bedeutet, dass alle Gruppen eingeschlossen werden, wenn `AUTO_CREATE_ROLES` aktiviert ist.  
Um Gruppen auszuschließen, geben Sie `EXCLUDE` an. Die Standardeinstellung ist „leer“. Das bedeutet, dass keine Gruppen ausgeschlossen werden, wenn `AUTO_CREATE_ROLES` aktiviert ist.

 *filter\$1pattern*   
Ein gültiger UTF-8-Zeichenfolgenausdruck mit einem Muster zum Abgleichen von Gruppennamen. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_CREATE_IDENTITY_PROVIDER.html)
Wenn *filter-pattern* keine Metazeichen enthält, repräsentiert das Muster die Zeichenfolge selbst. In diesem Fall liefert LIKE dasselbe Ergebnis wie der Gleichheitsoperator.   
*filter\$1pattern* unterstützt die folgenden Zeichen:  
+  Groß- und Kleinbuchstaben (A–Z und a–z) 
+  Ziffern (0–9) 
+  Die folgenden Sonderzeichen: 

  ```
  _ % ^ * + ? { } , $
  ```

## Beispiele
<a name="r_CREATE_IDENTITY_PROVIDER-examples"></a>

Im folgenden Beispiel wird ein Identitätsanbieter namens *oauth\$1standard* mit dem Typ *azure* erstellt, um eine Kommunikation mit Microsoft Azure Active Directory (AD) herzustellen.

```
CREATE IDENTITY PROVIDER oauth_standard TYPE azure
NAMESPACE 'aad'
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

Sie können eine von IAM Identity Center verwaltete Anwendung mit einem vorhandenen bereitgestellten Cluster oder einer Arbeitsgruppe in Amazon Redshift Serverless verbinden. Auf diese Weise können Sie den Zugriff auf eine Redshift-Datenbank über IAM Identity Center verwalten. Führen Sie dazu einen SQL-Befehl wie im folgenden Beispiel aus. Sie müssen Datenbankadministrator sein.

```
CREATE IDENTITY PROVIDER "redshift-idc-app" TYPE AWSIDC
NAMESPACE 'awsidc'
APPLICATION_ARN 'arn:aws:sso::123456789012:application/ssoins-12345f67fe123d4/apl-a0b0a12dc123b1a4'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole';
```

Der Anwendungs-ARN identifiziert in diesem Fall die verwaltete Anwendung, zu der eine Verbindung hergestellt werden soll. Sie finden ihn, indem Sie `SELECT * FROM SVV_IDENTITY_PROVIDERS;` ausführen.

Weitere Informationen zur Verwendung von CREATE IDENTITY PROVIDER, einschließlich zusätzlicher Beispiele, finden Sie unter [Nativer Identitätsanbieter (IDP)-Verbund für Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html). Weitere Informationen zum Einrichten einer Verbindung mit IAM Identity Center aus Redshift finden Sie unter [Redshift mit IAM Identity Center verbinden, um Benutzern eine Single-Sign-On-Erfahrung zu bieten](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

# CREATE LIBRARY
<a name="r_CREATE_LIBRARY"></a>

Installiert eine Python-Bibliothek, die der Benutzer einschließen kann, wenn mit dem Befehl [CREATE FUNCTION](r_CREATE_FUNCTION.md) eine benutzerdefinierte Funktion (User-Defined Function, UDF) erstellt wird. Die Gesamtgröße von Bibliotheken, die von Benutzern installiert werden, darf 100 MB nicht überschreiten. 

CREATE LIBRARY kann nicht innerhalb eines Transaktionsblocks ausgeführt werden (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

Amazon Redshift unterstützt Python Version 2.7. Weitere Informationen erhalten Sie unter [www.python.org](https://www.python.org/).

Weitere Informationen finden Sie unter [Beispiel: Importieren von benutzerdefinierten Python-Bibliotheksmodulen](udf-importing-custom-python-library-modules.md). 

## Erforderliche Berechtigungen
<a name="r_CREATE_LIBRARY-privileges"></a>

Für CREATE LIBRARY sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung CREATE LIBRARY oder mit der Berechtigung für die angegebene Sprache

## Syntax
<a name="r_CREATE_LIBRARY-synopsis"></a>

```
CREATE [ OR REPLACE ] LIBRARY library_name LANGUAGE plpythonu
FROM
{ 'https://file_url'
| 's3://bucketname/file_name'
authorization
  [ REGION [AS] 'aws_region']
  IAM_ROLE { default | ‘arn:aws:iam::<AWS-Konto-id>:role/<role-name>’ }
}
```

## Parameters
<a name="r_CREATE_LIBRARY-parameters"></a>

OR REPLACE  
Gibt an, dass die vorhandene Bibliothek ersetzt wird, wenn bereits eine Bibliothek mit dem gleichen Namen vorhanden ist. REPLACE führt sofort einen Commit aus. Wenn gleichzeitig eine UDF ausgeführt wird, die von der Bibliothek abhängig ist, schlägt die UDF möglicherweise fehl oder gibt unerwartete Ergebnisse zurück, auch wenn die UDF innerhalb einer Transaktion ausgeführt wird. Sie müssen der Besitzer oder ein Superuser sein, um eine Bibliothek zu ersetzen.

 *library\$1name*   
Das Name der Bibliothek, die installiert werden soll. Die erstellten Bibliotheken dürfen jedoch nicht genauso heißen wie die integrierten Python-Standardbibliotheksmodule oder die vorinstallierten Amazon-Redshift-Python-Module. Wenn eine vorhandene, benutzerinstallierte Bibliothek dasselbe Python-Paket wie die Bibliothek verwendet, die installiert werden soll, müssen Sie die vorhandene Bibliothek entfernen, bevor Sie die neue Bibliothek installieren. Weitere Informationen finden Sie unter [Python-Sprachunterstützung für UDFs](udf-python-language-support.md).

LANGUAGE plpythonu  
Die Sprache, die verwendet werden soll. Python (plpythonu) ist die einzige unterstützte Sprache. Amazon Redshift unterstützt Python Version 2.7. Weitere Informationen erhalten Sie unter [www.python.org](https://www.python.org/).

FROM  
Der Speicherort der Bibliotheksdatei. Sie können einen Amazon-S3-Bucket und -Objektnamen angeben oder eine URL, um die Datei von einer öffentlichen Website herunterzuladen. Die Bibliothek muss als `.zip`-Datei gepackt sein. Weitere Informationen finden Sie unter [Erstellen und Installieren von Python-Modulen](https://docs.python.org/2/library/distutils.html?highlight=distutils#module-distutils) in der Python-Dokumentation.

 https://*file\$1url*   
Die URL für den Download der Datei von einer öffentlichen Website. Die URL kann bis zu drei Umleitungen enthalten. Im Folgenden wird ein Beispiel für eine Datei-URL gezeigt.  

```
'https://www.example.com/pylib.zip'
```

 s3://*bucket\$1name/file\$1name*   
Der Pfad zu einem einzelnen Amazon-S3-Objekt, das die Bibliotheksdatei enthält. Im Folgenden wird ein Beispiel für einen Amazon-S3-Objektpfad gezeigt.  

```
's3://amzn-s3-demo-bucket/my-pylib.zip'
```
Wenn Sie einen Amazon-S3-Bucket angeben, müssen Sie auch die Anmeldeinformationen für einen AWS -Benutzer angeben, der zum Herunterladen der Datei berechtigt ist.   
 Wenn sich der Amazon S3 S3-Bucket nicht in derselben AWS Region wie Ihr Amazon Redshift Redshift-Cluster befindet, müssen Sie die Option REGION verwenden, um die AWS Region anzugeben, in der sich die Daten befinden. Der Wert für *aws\$1region muss mit einer AWS Region* übereinstimmen, die in der Tabelle in der [REGION](copy-parameters-data-source-s3.md#copy-region) Parameterbeschreibung für den COPY-Befehl aufgeführt ist.

*Autorisierung*   
Eine Klausel, die die Methode angibt, die der Cluster für die Authentifizierung und Autorisierung verwendet, um auf den Amazon-S3-Bucket zuzugreifen, der die Bibliotheksdatei enthält. Ihr Cluster muss die Berechtigung für den Zugriff auf Amazon S3 mithilfe der Aktionen LIST und GET besitzen.  
Die Syntax für die Autorisierung ist identisch mit der Syntax für die Autorisierung des Befehls COPY. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md).  

```
IAM_ROLE { default | ‘arn:aws:iam::<AWS-Konto-id>:role/<role-name>’
```
 Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE LIBRARY-Befehl ausgeführt wird.  
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Wenn Sie IAM\$1ROLE angeben, können Sie ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN oder CREDENTIALS nicht verwenden.  
Wenn der Amazon-S3-Bucket serverseitige Verschlüsselung verwendet, können Sie optional den Verschlüsselungsschlüssel in der Zeichenfolge credentials-args angeben. Wenn Sie temporäre Sicherheitsanmeldeinformationen verwenden, geben Sie das temporäre Token in die *credentials-args*-Zeichenfolge ein.  
Weitere Informationen finden Sie unter [Temporäre Sicherheitsanmeldeinformationen](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials).

 REGION [AS] *aws\$1region*   
Die AWS Region, in der sich der Amazon S3 S3-Bucket befindet. REGION ist erforderlich, wenn sich der Amazon S3 S3-Bucket nicht in derselben AWS Region wie der Amazon Redshift Redshift-Cluster befindet. Der Wert für *aws\$1region muss mit einer AWS Region* übereinstimmen, die in der Tabelle in der [REGION](copy-parameters-data-source-s3.md#copy-region) Parameterbeschreibung für den COPY-Befehl aufgeführt ist.  
Standardmäßig geht CREATE LIBRARY davon aus, dass sich der Amazon S3 S3-Bucket in derselben AWS Region wie der Amazon Redshift Redshift-Cluster befindet.

## Beispiele
<a name="r_CREATE_LIBRARY-examples"></a>

In den folgenden beiden Beispielen wird das Python-Modul [urlparse](https://docs.python.org/2/library/urlparse.html#module-urlparse) installiert, das in einer Datei namens `urlparse3-1.0.3.zip` gepackt ist. 

Der folgende Befehl installiert eine UDF-Bibliothek namens `f_urlparse` aus einem Paket, das zu einem Amazon-S3-Bucket hochgeladen wurde, der sich in der Region „US East“ befindet.

```
create library f_urlparse
language plpythonu
from 's3://amzn-s3-demo-bucket/urlparse3-1.0.3.zip'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region as 'us-east-1';
```

Im folgenden Beispiel wird eine Bibliothek namens `f_urlparse` aus einer Bibliotheksdatei auf einer Website installiert.



```
create library f_urlparse
language plpythonu
from 'https://example.com/packages/urlparse3-1.0.3.zip';
```

# ERSTELLEN EINER MASKIERUNGSRICHTLINIE
<a name="r_CREATE_MASKING_POLICY"></a>

Erstellt eine neue Richtlinie für die dynamische Datenmaskierung, um Daten eines bestimmten Formats zu verschleiern. Weitere Informationen zur dynamischen Datenmaskierung finden Sie unter [Dynamische Datenmaskierung](t_ddm.md).

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Maskierungsrichtlinie erstellen.

## Syntax
<a name="r_CREATE_MASKING_POLICY-synopsis"></a>

```
CREATE MASKING POLICY 
   { policy_name | database_name.policy_name } [IF NOT EXISTS]
   WITH (input_columns)
   USING (masking_expression);
```

## Parameters
<a name="r_CREATE_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der Maskierungsrichtlinie. Die Maskierungsrichtlinie darf nicht denselben Namen wie eine andere Maskierungsrichtlinie haben, die bereits in der Datenbank vorhanden sind.

database\$1name  
Der Name der Datenbank, in der die Richtlinie erstellt wird. Die Richtlinie kann in der verbundenen Datenbank oder im Amazon Redshift Federated Permissions Catalog erstellt werden.

*input\$1columns*   
Ein Tupel von Spaltennamen im Format (Spalte1 Typ, Spalte2 Typ ...).  
Spaltennamen werden als Eingabe für den Maskierungsausdruck verwendet. Die Spaltennamen müssen nicht den Namen der zu maskierenden Spalten entsprechen, die Eingabe- und Ausgabedatentypen müssen jedoch übereinstimmen.

*masking\$1expression*  
Der SQL-Ausdruck, der zur Transformation der Zielspalten verwendet wird. Er kann mithilfe von Datenmanipulationsfunktionen wie z. B. Funktionen zur Zeichenkettenmanipulation oder in Verbindung mit benutzerdefinierten Funktionen geschrieben werden, die in SQL, Python oder mit AWS Lambda geschrieben wurden. Sie können ein Tupel von Spaltenausdrücken für Maskierungsrichtlinien mit mehreren Ausgaben hinzufügen. Wenn Sie eine Konstante als Maskierungsausdruck verwenden, müssen Sie sie explizit in einen dem Eingabetyp entsprechenden Typ umwandeln.  
 Sie benötigen USAGE-Berechtigung für alle benutzerdefinierten Funktionen, die Sie im Maskierungsausdruck verwenden. 

Informationen zur Verwendung von CREATE MASKING POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# CREATE MATERIALIZED VIEW
<a name="materialized-view-create-sql-command"></a>

Erstellt eine materialisierte Ansicht, die auf einer oder mehreren Amazon-Redshift-Tabellen basiert. Sie können materialisierte Ansichten auch auf externe Tabellen basieren, die mit Spectrum oder einer Verbundabfrage erstellt wurden. Weitere Informationen zu Spectrum finden Sie unter [Amazon Redshift Spectrum](c-using-spectrum.md). Weitere Informationen zur Verbundabfrage finden Sie unter [Abfragen von Daten mit Verbundabfragen in Amazon Redshift](federated-overview.md).

## Syntax
<a name="mv_CREATE_MATERIALIZED_VIEW-synopsis"></a>

```
CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]
[ AUTO REFRESH { YES | NO } ]
AS query
```

## Parameters
<a name="mv_CREATE_MATERIALIZED_VIEW-parameters"></a>

BACKUP  
Eine Klausel, die angibt, ob die materialisierte Ansicht in automatisierten und manuellen Cluster-Snapshots enthalten sein sollte.   
Geben Sie für materialisierte Ansichten, die keine kritischen Daten enthalten, BACKUP NO an, um beim Erstellen und Wiederherstellen von Snapshots Verarbeitungszeit zu sparen und den Speicherplatz in Amazon Simple Storage Service zu reduzieren. Die Einstellung BACKUP NO wirkt sich nicht auf die automatische Replikation von Daten zu anderen Knoten innerhalb des Clusters aus. Daher werden materialisierte Ansichten mit BACKUP NO bei einem Knotenausfall wiederhergestellt. Der Standardwert ist BACKUP YES.

 *table\$1attribute*   
Eine Klausel, die angibt, wie die Daten in der materialisierten Ansicht verteilt werden, einschließlich der folgenden:  
+  Der Verteilungsstil für die materialisierte Ansicht im Format `DISTSTYLE { EVEN | ALL | KEY }`. Wenn Sie diese Klausel weglassen, ist der Verteilungsstil `EVEN`. Weitere Informationen finden Sie unter [Verteilungsstile](c_choosing_dist_sort.md).
+ Der Verteilungsschlüssel für die materialisierte Ansicht im Format `DISTKEY ( distkey_identifier )`. Weitere Informationen finden Sie unter [Bezeichnen von Verteilungsstilen](t_designating_distribution_styles.md).
+ Der Sortierschlüssel für die materialisierte Ansicht im Format `SORTKEY ( column_name [, ...] )`. Weitere Informationen finden Sie unter [Sortierschlüssel](t_Sorting_data.md).

AS *query*  
Eine gültige `SELECT`-Anweisung, die die materialisierte Ansicht und ihren Inhalt definiert. Die Ergebnismenge aus der Abfrage definiert die Spalten und Zeilen der materialisierten Ansicht. Hinweise zu Einschränkungen beim Erstellen materialisierter Ansichten finden Sie unter [Einschränkungen](#mv_CREATE_MATERIALIZED_VIEW-limitations).  
Darüber hinaus bestimmen einige SQL-Sprachkonstrukte, die in der Abfrage verwendet werden, ob die materialisierte Ansicht inkrementell oder vollständig aktualisiert werden kann. Hinweise zur Refresh-Methode finden Sie unter [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md). Hinweise zu den Einschränkungen für die inkrementelle Aktualisierung finden Sie unter [Einschränkungen für die inkrementelle Aktualisierung](materialized-view-refresh-sql-command.md#mv_REFRESH_MARTERIALIZED_VIEW_limitations).  
Wenn die Abfrage einen SQL-Befehl enthält, der keine inkrementelle Aktualisierung unterstützt, zeigt Amazon Redshift eine Meldung an, die angibt, dass die materialisierte Ansicht eine vollständige Aktualisierung verwendet. Je nach SQL-Clientanwendung kann die Meldung angezeigt werden oder nicht. Überprüfen Sie die `state`-Spalte von [STV\$1MV\$1INFO](r_STV_MV_INFO.md), um den Aktualisierungstyp anzuzeigen, der von einer materialisierten Ansicht verwendet wird.

AUTO REFRESH  
Eine Klausel, die definiert, ob die materialisierte Ansicht automatisch mit den neuesten Änderungen aus ihren Basistabellen aktualisiert werden soll. Der Standardwert ist `NO`. Weitere Informationen finden Sie unter [Aktualisieren einer materialisierten Ansicht](materialized-view-refresh.md).

## Nutzungshinweise
<a name="mv_CREATE_MARTERIALIZED_VIEW_usage"></a>

Um eine materialisierte Ansicht zu erstellen, müssen Sie über die folgenden Berechtigungen verfügen:
+ CREATE-Berechtigungen für ein Schema.
+ SELECT-Berechtigung auf Tabellen- oder Spaltenebene für die Basistabellen zum Erstellen einer materialisierten Ansicht. Wenn Sie über Berechtigungen auf Spaltenebene für bestimmte Spalten verfügen, können Sie nur für diese Spalten eine materialisierte Ansicht erstellen.

 Sie können eine materialisierte Ansicht aus einem Remote-Data-Sharing-Cluster erstellen, indem Sie den Namen der externen Datenbank unter angeben. `mv_name` 

## Inkrementelle Aktualisierung für materialisierte Ansichten in einem Datashare
<a name="mv_CREATE_MARTERIALIZED_VIEW_datashare"></a>

 Amazon Redshift unterstützt die automatische und inkrementelle Aktualisierung für materialisierte Ansichten in einem Consumer-Datashare, wenn die Basistabellen geteilt werden. Die inkrementelle Aktualisierung ist ein Vorgang, bei dem Amazon Redshift Änderungen in der Basistabelle oder in Tabellen identifiziert, die nach der vorherigen Aktualisierung ausgeführt wurden, und nur die entsprechenden Datensätze in der materialisierten Ansicht aktualisiert. Dieser Vorgang wird schneller als eine vollständige Aktualisierung ausgeführt und verbessert die Workload-Leistung. Sie müssen Ihre Definition für materialized-view nicht ändern, um die Vorteile der inkrementellen Aktualisierung nutzen zu können. 

Bei der Nutzung der inkrementellen Aktualisierung mit einer materialisierten Ansicht müssen einige Einschränkungen beachtet werden: 
+ Die materialisierte Ansicht darf nur auf eine Datenbank verweisen, lokal oder remote. 
+ Die inkrementelle Aktualisierung ist nur für neue materialisierte Ansichten verfügbar. Daher müssen Sie vorhandene materialisierte Ansichten löschen und neu erstellen, damit eine inkrementelle Aktualisierung erfolgt.

Weitere Informationen zum Erstellen materialisierter Ansichten in einem Datashare finden Sie unter [Arbeiten mit Ansichten bei der Amazon-Redshift-Datenfreigabe](https://docs.aws.amazon.com/redshift/latest/dg/datashare-views). Hier finden Sie auch mehrere Beispiele für Abfragen.

## DDL-Aktualisierungen an materialisierten Ansichten oder Basistabellen
<a name="materialized-view-ddl"></a>

Wenn Sie materialisierte Ansichten in Amazon Redshift verwenden, folgen Sie diesen Verwendungshinweisen für DDL-Aktualisierungen (Data Definition Language) von materialisierten Ansichten oder Basistabellen.
+ Sie können Spalten zu einer Basistabelle hinzufügen, ohne dass sich dies auf materialisierte Ansichten auswirkt, die auf die Basistabelle verweisen.
+ Andere Operationen können die materialisierte Ansicht in einem Status belassen, der überhaupt nicht aktualisiert werden kann. Beispiele sind Operationen wie das Umbenennen oder Löschen einer Spalte, das Ändern des Spaltentyps und das Ändern des Schemanamens. Solche materialisierten Ansichten können abgefragt, aber nicht aktualisiert werden. In diesem Fall müssen Sie einen Drop für die materialisierte Ansicht durchführen und diese neu anlegen. 
+ Im Allgemeinen können Sie die Definition einer materialisierten Ansicht (deren SQL-Anweisung) nicht ändern.
+ Sie können eine materialisierte Ansicht nicht umbenennen. 

## Einschränkungen
<a name="mv_CREATE_MATERIALIZED_VIEW-limitations"></a>

Sie können keine materialisierte Ansicht definieren, die Folgendes referenziert oder einschließt:
+ Standardansichten oder Systemtabellen und Ansichten.
+ Temporäre Tabellen.
+ Benutzerdefinierte Funktionen.
+ Die ORDER BY-, LIMIT- oder OFFSET-Klausel.
+ Spätbindende Verweise auf Basistabellen. Mit anderen Worten, alle Basistabellen oder zugehörigen Spalten, die in der definierenden SQL-Abfrage der materialisierten Ansicht referenziert werden, müssen existieren und gültig sein. 
+ Auf den Führungsknoten beschränkte Funktionen: CURRENT\$1SCHEMA, CURRENT\$1SCHEMAS, HAS\$1DATABASE\$1PRIVILEGE, HAS\$1SCHEMA\$1PRIVILEGE, HAS\$1TABLE\$1PRIVILEGE.
+ Sie können die Option AUTO REFRESH YES nicht verwenden, wenn die Definition der materialisierten Ansicht veränderbare Funktionen oder externe Schemata enthält. Sie können sie auch nicht verwenden, wenn Sie eine materialisierte Ansicht in einer anderen materialisierten Ansicht definieren.
+ Sie müssen [ANALYZE](r_ANALYZE.md) für materialisierte Ansichten nicht manuell ausführen. Dies geschieht derzeit nur über AUTO ANALYZE. Weitere Informationen finden Sie unter [Analysieren von Tabellen](t_Analyzing_tables.md).
+ RLS- oder DDM-geschützte Tabellen. 
+ Die Erstellung materialisierter Ansichten aus Remote-Datasharing-Clustern unterstützt keine Verweise auf andere materialisierte Ansichten, Spectrum-Tabellen, Tabellen, die in einem anderen Redshift-Cluster definiert sind, und. UDFs Diese werden für die Erstellung materialisierter Ansichten aus dem lokalen Cluster (Producer) unterstützt. 

## Beispiele
<a name="mv_CREATE_MARTERIALIZED_VIEW_examples"></a>

Im folgenden Beispiel wird eine materialisierte Ansicht aus drei Basistabellen erstellt, die verbunden und aggregiert sind. Jede Zeile stellt eine Kategorie mit der Anzahl der verkauften Tickets dar. Wenn Sie die materialisierte Ansicht tickets\$1mv abfragen, greifen Sie direkt auf die vorberechneten Daten in der materialisierten Ansicht tickets\$1mv zu.

```
CREATE MATERIALIZED VIEW tickets_mv AS
    select   catgroup,
    sum(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;
```

Im folgenden Beispiel wird eine materialisierte Ansicht ähnlich dem vorherigen Beispiel erstellt und die Aggregationsfunktion MAX() verwendet. 

```
CREATE MATERIALIZED VIEW tickets_mv_max AS
    select   catgroup,
    max(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;

SELECT name, state FROM STV_MV_INFO;
```

Im folgenden Beispiel wird eine UNION ALL-Klausel verwendet, um die `public_sales`-Tabelle aus Amazon-Redshift und die `spectrum.sales`-Tabelle aus Redshift Spectrum zu verbinden, um die Materialansicht `mv_sales_vw` zu erstellen. Weitere Informationen zum Befehl CREATE EXTERNALE TABLE für Amazon Redshift Spectrum finden Sie unter [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). Die externe Redshift-Spectrum-Tabelle verweist auf die Daten in Amazon S3.

```
CREATE MATERIALIZED VIEW mv_sales_vw as
select salesid, qtysold, pricepaid, commission, saletime from public.sales
union all
select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales
```

Im folgenden Beispiel wird die materialisierte Ansicht `mv_fq` erstellt, die auf einer externen Tabelle für eine Verbundabfrage basiert. Weitere Informationen zur Verbundabfrage finden Sie unter [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).

```
CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example;

select firstname, lastname from mv_fq;
 firstname | lastname
-----------+----------
 John      | Day
 Jane      | Doe
(2 rows)
```

Das folgende Beispiel zeigt die Definition einer materialisierten Ansicht.

```
SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true);

pg_get_viewdef
---------------------------------------------------
create materialized view mv_sales_vw as select a from t;
```

 Das folgende Beispiel zeigt, wie AUTO REFRESH in der Definition der materialisierten Ansicht festgelegt wird, und gibt außerdem einen DISTSTYLE an. Erstellen Sie zunächst eine einfache Basistabelle. 

```
CREATE TABLE baseball_table (ball int, bat int);
```

Erstellen Sie dann eine materialisierte Ansicht.

```
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
```

Jetzt können Sie die materialisierte Ansicht mv\$1baseball abfragen. Informationen zum Überprüfen, ob AUTO REFRESH für eine materialisierte Ansicht aktiviert ist, finden Sie unter [STV\$1MV\$1INFO](r_STV_MV_INFO.md).

Im folgenden Beispiel wird eine materialisierte Ansicht erstellt, die auf eine Quelltabelle in einer anderen Datenbank verweist. Es wird davon ausgegangen, dass sich die Datenbank, die die Quelltabelle, database\$1A, enthält, in demselben Cluster oder derselben Arbeitsgruppe befindet wie Ihre materialisierte Ansicht, die Sie in database\$1B erstellen. (Sie können das Beispiel durch Ihre eigenen Datenbanken ersetzen.) Erstellen Sie zunächst in database\$1A eine Tabelle mit dem Namen *cities* mit einer Spalte *cityname*. Ändern Sie den Datentyp der Spalte in VARCHAR. Nachdem Sie die Quelltabelle erstellt haben, führen Sie den folgenden Befehl in database\$1B aus, um eine materialisierte Ansicht zu erstellen, deren Quelle Ihre Tabelle *cities* ist. Stellen Sie sicher, dass Sie die Datenbank und das Schema der Quelltabelle in der FROM-Klausel angeben:

```
CREATE MATERIALIZED VIEW cities_mv AS
SELECT  cityname
FROM    database_A.public.cities;
```

Fragen Sie die materialisierte Ansicht ab, die Sie erstellt haben. Die Abfrage ruft Datensätze ab, deren ursprüngliche Quelle die Tabelle *cities* in database\$1A ist:

```
select * from cities_mv;
```

Wenn Sie die SELECT-Anweisung ausführen, gibt *cities\$1mv* die Datensätze zurück. Datensätze aus der Quelltabelle werden nur dann aktualisiert, wenn eine REFRESH-Anweisung ausgeführt wird. Beachten Sie außerdem, dass Sie Datensätze nicht direkt in der materialisierten Ansicht aktualisieren können. Hinweise zum Aktualisieren der Daten in einer materialisierten Ansicht finden Sie unter [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md).

Weitere Details zur Übersicht über materialisierte Ansichten und SQL-Befehle, die zum Aktualisieren und Löschen materialisierter Ansichten verwendet werden, finden Sie in den folgenden Themen:
+ [Materialisierte Ansichten in Amazon Redshift](materialized-view-overview.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)

# CREATE MODEL
<a name="r_CREATE_MODEL"></a>

**Topics**
+ [Voraussetzungen](#r_create_model_prereqs)
+ [Erforderliche Berechtigungen](#r_simple_create_model-privileges)
+ [Kontrolle der Kosten](#r_create_model_cost)
+ [CREATE MODEL – vollständig](#r_full_create_model)
+ [Parameters](#r_create_model_parameters)
+ [Nutzungshinweise](r_create_model_usage_notes.md)
+ [Anwendungsfälle](r_create_model_use_cases.md)

## Voraussetzungen
<a name="r_create_model_prereqs"></a>

Bevor Sie die CREATE MODEL-Anweisung verwenden, erfüllen Sie die Voraussetzungen in [Cluster-Einrichtung für die Verwendung von Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup). Im Folgenden finden Sie eine Übersicht über die Voraussetzungen.
+ Erstellen Sie einen Amazon Redshift Redshift-Cluster mit der AWS Management Console oder der AWS Befehlszeilenschnittstelle (AWS CLI).
+ Fügen Sie beim Erstellen des Clusters die AWS Identity and Access Management (IAM) -Richtlinie an.
+ Damit Amazon Redshift und SageMaker KI die Rolle für die Interaktion mit anderen Services übernehmen können, fügen Sie der IAM-Rolle die entsprechende Vertrauensrichtlinie hinzu.

Einzelheiten zur IAM-Rolle, zur Vertrauensrichtlinie und zu anderen Voraussetzungen finden Sie unter [Cluster-Einrichtung für die Verwendung von Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup).

Im Folgenden finden Sie verschiedene Anwendungsfälle für die CREATE MODEL-Anweisung.
+ [Einfaches CREATE MODEL](r_create_model_use_cases.md#r_simple_create_model)
+ [CREATE MODEL mit Benutzerführung](r_create_model_use_cases.md#r_user_guidance_create_model)
+ [ERSTELLEN Sie XGBoost Modelle mit AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model)
+ [Bring Your Own Model (BYOM) - lokale Inferenz](r_create_model_use_cases.md#r_byom_create_model)
+ [Bring Your Own Model (BYOM) - Remote-Inferenz](r_create_model_use_cases.md#r_byom_create_model_remote)
+ [CREATE MODEL mit K-MEANS](r_create_model_use_cases.md#r_k-means_create_model)
+ [CREATE MODEL – vollständig](#r_full_create_model)

## Erforderliche Berechtigungen
<a name="r_simple_create_model-privileges"></a>

Für CREATE MODEL sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung CREATE MODEL
+ Rollen mit der Berechtigung GRANT CREATE MODEL

## Kontrolle der Kosten
<a name="r_create_model_cost"></a>

 Amazon Redshift ML verwendet vorhandene Cluster-Ressourcen, um Vorhersagemodelle zu erstellen, so dass Sie keine zusätzlichen Kosten bezahlen müssen. Möglicherweise fallen jedoch zusätzliche Kosten an, wenn Sie die Größe Ihres Clusters ändern oder Ihre Modelle trainieren möchten. Amazon Redshift ML verwendet Amazon SageMaker AI, um Modelle zu trainieren, was mit zusätzlichen Kosten verbunden ist. Es gibt Möglichkeiten, zusätzliche Kosten zu kontrollieren, z. B. die Begrenzung der maximalen Dauer des Trainings oder die Begrenzung der Anzahl der Trainingsbeispiele, die zum Trainieren Ihres Modells verwendet werden. Weitere Informationen finden Sie unter [Kosten für die Verwendung von Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html). 

## CREATE MODEL – vollständig
<a name="r_full_create_model"></a>

Im Folgenden werden die grundlegenden Optionen der vollständigen CREATE MODEL-Syntax zusammengefasst.

### Vollständige CREATE MODEL-Syntax
<a name="r_auto_off-create-model-synposis"></a>

Im Folgenden finden Sie die vollständige Syntax der CREATE MODEL-Anweisung.

**Wichtig**  
Wenn Sie ein Modell mit der CREATE MODEL-Anweisung erstellen, folgen Sie der Reihenfolge der Schlüsselwörter in der folgenden Syntax.

```
CREATE MODEL model_name
FROM { table_name | ( select_statement )  | 'job_name' }
[ TARGET column_name ]
FUNCTION function_name [ ( data_type [, ...] ) ] 
[ RETURNS data_type ] 
  -- supported only for BYOM
[ SAGEMAKER 'endpoint_name'[:'model_name']] 
  -- supported only for BYOM remote inference
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[ AUTO ON / OFF ]
  -- default is AUTO ON
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER | KMEANS | FORECAST } ]
  -- not required for non AUTO OFF case, default is the list of all supported types
  -- required for AUTO OFF
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
  -- not supported when AUTO OFF
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1_Macro' | 'AUC' |
             'reg:squarederror' | 'reg:squaredlogerror'| 'reg:logistic'|
             'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge',
             'multi:softmax' | 'RMSE' | 'WAPE' | 'MAPE' | 'MASE' | 'AverageWeightedQuantileLoss' ) ]
  -- for AUTO ON: first 5 are valid
  -- for AUTO OFF: 6-13 are valid
  -- for FORECAST: 14-18 are valid
[ PREPROCESSORS 'string' ]
  -- required for AUTO OFF, when it has to be 'none'
  -- optional for AUTO ON
[ HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( Key 'value' (,...) ) } ]
  -- support XGBoost hyperparameters, except OBJECTIVE
  -- required and only allowed for AUTO OFF
  -- default NUM_ROUND is 100
  -- NUM_CLASS is required if objective is multi:softmax (only possible for AUTO OFF)
 [ SETTINGS (
   S3_BUCKET 'amzn-s3-demo-bucket',  |
    -- required
  TAGS 'string', |
    -- optional
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional, defualt is on.
  MAX_CELLS integer, |
    -- optional, default is 1,000,000
  MAX_RUNTIME integer (, ...) |
    -- optional, default is 5400 (1.5 hours)
  HORIZON integer, |
    -- required if creating a forecast model
  FREQUENCY integer, |
    -- required if creating a forecast model
  PERCENTILES string, |
    -- optional if creating a forecast model
  MAX_BATCH_ROWS integer -- optional for BYOM remote inference
    ) ]
```

## Parameters
<a name="r_create_model_parameters"></a>

model\$1name  
Der Name des Modells Der Modellname in einem Schema muss eindeutig sein.

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1 *'job\$1name'*\$1  
Der Tabellenname oder die Abfrage, die die Trainingsdaten spezifiziert. Dabei kann es sich entweder um eine bestehende Tabelle im System oder eine Amazon-Redshift-kompatible SELECT-Abfrage handeln, die in Klammern () eingeschlossen ist. Das Abfrageergebnis muss mindestens zwei Spalten enthalten. 

TARGET *column\$1name*  
Der Name der Spalte, die zum Vorhersageziel wird. Die Spalte muss in der FROM-Klausel vorhanden sein. 

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
Der Name der zu erstellenden Funktion und die Datentypen der Eingabeargumente. Sie können anstelle eines Funktionsnamens den Schemanamen eines Schemas in Ihrer Datenbank angeben.

RETURNS *data\$1type*  
Der Datentyp, der von der Funktion des Modells zurückgegeben werden soll. Der zurückgegebene `SUPER`-Datentyp gilt nur für BYOM mit Remote-Inferenz.

SAGEMAKER *'endpoint\$1name'*[:*'model\$1name'*]  
Der Name des Amazon SageMaker AI-Endpunkts. Wenn der Endpunktname auf einen Multimodell-Endpunkt verweist, fügen Sie den Namen des zu verwendenden Modells hinzu. Der Endpunkt muss auf demselben Server gehostet werden AWS-Region wie der Amazon Redshift Redshift-Cluster.

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE MODEL-Befehl ausgeführt wird. Alternativ können Sie einen ARN einer IAM-Rolle angeben, um diese Rolle zu verwenden.

[ AUTO ON / OFF ]  
 Deaktiviert die automatische Erkennung des Präprozessors, des Algorithmus und der Auswahl der Hyperparameter bei CREATE MODEL. Wenn Sie bei der Erstellung eines Prognosemodells ein angeben, wird ein verwendet AutoPredictor, wobei Amazon Forecast die optimalen Kombinationen von Algorithmen auf jede Zeitreihe in Ihrem Datensatz anwendet. 

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1 KMEANS \$1 FORECAST \$1*   
(Optional) Gibt den Modelltyp an. Sie können angeben, ob Sie ein Modell eines bestimmten Modelltyps trainieren möchten, z. B. Multilayer Perceptron (MLP) XGBoost, KMEANS oder Linear Learner. Dies sind alles Algorithmen, die Amazon AI Autopilot unterstützt. SageMaker Wenn Sie den Parameter nicht angeben, werden beim Training alle unterstützten Modelltypen nach dem besten Modell durchsucht. Sie können in Redshift ML auch ein Prognosemodell erstellen, um präzise Zeitreihenprognosen zu erhalten.

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(Optional) Gibt den Problemtyp an. Wenn Sie den Problemtyp kennen, können Sie Amazon Redshift so einschränken, dass es nur nach dem besten Modell dieses bestimmten Modelltyps sucht. Wenn Sie diesen Parameter nicht angeben, wird während des Trainings auf der Grundlage Ihrer Daten ein Problemtyp ermittelt.

ZIEL ('MSE' \$1 'Genauigkeit' \$1 'F1' \$1 'F1Macro' \$1 'AUC' \$1 'reg:squarederror' \$1 'reg:squaredlogerror' \$1 'reg:logistic' \$1 'reg:pseudohubererror' \$1 'reg:tweedie' \$1 'binary:logistic' \$1 'binary:hinge' \$1 'multi:softmax' \$1 'RMM SE' \$1 'WAPE' \$1 'MAPE' \$1 'MASE' \$1 'AverageWeightedQuantileLoss')  
(Optional) Gibt den Namen der objektiven Metrik an, die zur Messung der Vorhersagequalität eines Machine-Learning-Systems verwendet wird. Diese Metrik wird während des Trainings optimiert, um die beste Schätzung der Modellparameterwerte aus den Daten zu erhalten. Wenn Sie nicht explizit eine Metrik angeben, wird standardmäßig automatisch MSE: für Regression, F1: für die binäre Klassifikation und Accuracy: für die Multiklassen-Klassifikation verwendet. Weitere Informationen zu Zielen finden Sie unter [Auto MLJob Objective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) in der *Amazon SageMaker AI API-Referenz* und unter [Learning-Aufgabenparametern](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters) in der XGBOOST-Dokumentation. Die Werte RMSE, WAPE, MAPE, MASE und AverageWeightedQuantileLoss gelten nur für Prognosemodelle. Weitere Informationen finden Sie unter [CreateAutoPredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateAutoPredictor.html#forecast-CreateAutoPredictor-request-OptimizationMetric)-API-Operation.

 *PREPROCESSORS 'string' *   
(Optional) Gibt bestimmte Kombinationen von Präprozessoren für bestimmte Spalten an. Das Format ist eine Liste von columnSets und entsprechenden Transformern, die auf jede Gruppe von Spalten angewendet werden sollen. Amazon Redshift wendet alle Transformatoren in einer bestimmten Transformer-Liste auf alle Spalten in den entsprechenden ColumnSet Spalten an. Um beispielsweise OneHotEncoder mit Imputer eine Anwendung auf die Spalten t1 und t2 anzuwenden, verwenden Sie den folgenden Beispielbefehl.  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
  {"ColumnSet": [
      "t1",
      "t2"
    ],
    "Transformers": [
      "OneHotEncoder",
      "Imputer"
    ]
  },
  {"ColumnSet": [
      "t3"
    ],
    "Transformers": [
      "OneHotEncoder"
    ]
  },
  {"ColumnSet": [
      "temp"
    ],
    "Transformers": [
      "Imputer",
      "NumericPassthrough"
    ]
  }
]'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket'
)
```

HYPERPARAMETERS \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
Gibt an, ob die XGBoost Standardparameter verwendet oder durch benutzerdefinierte Werte überschrieben werden. Die Werte müssen in einfache Anführungszeichen eingeschlossen werden. Im Folgenden finden Sie Beispiele für Parameter XGBoost und deren Standardwerte.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_CREATE_MODEL.html)

SETTINGS ( S3\$1BUCKET *'amzn-s3-demo-bucket'*, \$1 TAGS 'string', \$1 KMS\$1KEY\$1ID *'kms\$1string' *, \$1 S3\$1GARBAGE\$1COLLECT on / off, \$1 MAX\$1CELLS integer , \$1 MAX\$1RUNTIME (,...) , \$1 HORIZON integer, \$1 FREQUENCY forecast\$1frequency, \$1 PERCENTILES array of strings )  
Die S3\$1BUCKET-Klausel gibt den Amazon-S3-Speicherort an, der zum Speichern von Zwischenergebnissen verwendet wird.  
(Optional) Der TAGS-Parameter ist eine durch Kommas getrennte Liste von Schlüssel-Wert-Paaren, die Sie verwenden können, um in Amazon SageMaker AI und Amazon Forecast erstellte Ressourcen zu taggen. Mit Tags können Sie Ihre Ressourcen organisieren und Kosten zuordnen. Die Werte im Paar sind optional, sodass Sie Tags mithilfe des Formats `key=value` erstellen können oder indem Sie einfach einen Schlüssel erstellen. Weitere Informationen zu Tags in Amazon Redshift finden Sie unter [Markieren – Übersicht](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-tagging.html).  
(Optional) KMS\$1KEY\$1ID gibt an, ob Amazon Redshift serverseitige Verschlüsselung mit einem AWS KMS Schlüssel verwendet, um Daten im Ruhezustand zu schützen. Bei der Übertragung von Daten werden diese mit Secure Sockets Layer (SSL) geschützt.   
(Optional) S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1 gibt an, ob Amazon Redshift eine Garbage Collection für die resultierenden Datensätze, die zum Trainieren von Modellen verwendet werden, und die Modelle durchführt. Wenn diese Option auf OFF gesetzt ist, werden die resultierenden Datensätze zum Trainieren von Modellen verwendet und die Modelle bleiben in Amazon S3 und können für andere Zwecke verwendet werden. Wenn die Option auf ON gesetzt ist, löscht Amazon Redshift die Artefakte in Amazon S3, nachdem das Training abgeschlossen ist. Die Standardeinstellung ist ON.  
(Optional) MAX\$1CELLS gibt die Anzahl der Zellen in den Trainingsdaten an. Dieser Wert ist das Produkt aus der Anzahl der Datensätze (in der Trainingsabfrage oder Tabelle) mal der Anzahl der Spalten. Der Standardwert ist 1.000.000.  
(Optional) MAX\$1RUNTIME gibt die Höchstdauer für das Training an. Je nach Größe des Datensatzes sind die Trainingsjobs oft schneller abgeschlossen. Damit legen Sie fest, wie lange das Training maximal dauern soll. Der Standardwert ist 5.400 (90 Minuten).  
HORIZON gibt die maximale Anzahl von Vorhersagen an, die das Prognosemodell zurückgeben kann. Sobald das Modell trainiert ist, können Sie diese Ganzzahl nicht mehr ändern. Dieser Parameter ist erforderlich, wenn ein Prognosemodell trainiert wird.  
FREQUENCY gibt an, wie detailliert die Prognosen im Hinblick auf Zeiteinheiten sein sollen. Verfügbare Optionen sind `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`. Dieser Parameter ist erforderlich, wenn ein Prognosemodell trainiert wird.  
(Optional) PERCENTILES ist eine durch Komma getrennte Zeichenfolge, die die Prognosetypen angibt, mit denen ein Prädiktor trainiert wird. Bei den Prognosetypen kann es sich um Quantile von 0,01 bis 0,99 handeln, und zwar in Schritten von 0,01 oder höher. Sie können den Mittelwert der Prognose auch mit Mittelwert angeben. Sie können maximal fünf Prognosetypen angeben.

 MAX\$1BATCH\$1ROWS *integer*   
(Optional) Die maximale Anzahl von Zeilen, die Amazon Redshift in einer einzigen Batch-Anfrage für einen einzelnen SageMaker KI-Aufruf sendet. Sie wird nur für BYOM mit Remote-Inferenz unterstützt. Der Mindestwert für diesen Parameter ist 1. Der maximale Wert lautet `INT_MAX` oder 2 147 483 647. Dieser Parameter ist nur erforderlich, wenn sowohl Eingabe- als auch Rückgabedatentypen *SUPER* sind. Der Standardwert lautet `INT_MAX` oder 2 147 483 647. 

# Nutzungshinweise
<a name="r_create_model_usage_notes"></a>

Wenn Sie CREATE MODEL verwenden, beachten Sie Folgendes:
+ Die Anweisung CREATE MODELL arbeitet in einem asynchronen Modus und kehrt beim Export von Trainingsdaten nach Amazon S3 zurück. Die verbleibenden Trainingsschritte in Amazon SageMaker AI finden im Hintergrund statt. Während des Trainings ist die entsprechende Inferenzfunktion sichtbar, kann aber nicht ausgeführt werden. Sie können [STV\$1ML\$1MODEL\$1INFO](r_STV_ML_MODEL_INFO.md) abfragen, um den Trainingsstand anzusehen. 
+ Das Training kann bis zu 90 Minuten im Hintergrund laufen, standardmäßig im Auto-Modell, und kann verlängert werden. Um das Training abzubrechen, führen Sie einfach den Befehl [DROP MODEL](r_DROP_MODEL.md) aus.
+ Der Amazon-Redshift-Cluster, den Sie zum Erstellen des Modells verwenden, und der Amazon S3 Bucket, der zur Bereitstellung der Trainingsdaten und Modellartefakte verwendet wird, müssen sich in derselben AWS -Region befinden.
+ Während des Modelltrainings speichern Amazon Redshift und SageMaker KI Zwischenartefakte in dem von Ihnen bereitgestellten Amazon S3 S3-Bucket. Standardmäßig führt Amazon Redshift die Garbage Collection am Ende des CREATE MODEL-Vorgangs durch. Amazon Redshift entfernt diese Objekte aus Amazon S3. Um diese Artefakte in Amazon S3 beizubehalten, legen Sie die Option S3\$1GARBAGE COLLECT OFF fest.
+ Sie müssen mindestens 500 Zeilen in den Trainingsdaten verwenden, die mit der FROM-Klausel bereitgestellt werden.
+ Bei Verwendung der CREATE MODEL-Anweisung können Sie in der Klausel FROM \$1 table\$1name \$1 ( select\$1query ) \$1 nur bis zu 256 Merkmalsspalten für die Eingabe angeben.
+ Für AUTO ON können Sie folgende Spaltentypen als Trainingssatz verwenden: SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE, BOOLEAN, CHAR, VARCHAR, DATE, TIME, TIMETZ, TIMESTAMP und TIMESTAMPTZ. Für AUTO OFF können Sie folgende Spaltentypen als Trainingssatz verwenden: SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE und BOOLEAN.
+ Sie können nicht DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, GEOMETRY, GEOGRAPHY, HLLSKETCH, SUPER oder VARBYTE als Zielspaltentyp verwenden.
+ Um die Modellgenauigkeit zu verbessern, gehen Sie wie folgt vor:
  + Fügen Sie so viele relevante Spalten wie möglich in den Befehl CREATE MODEL ein, wenn Sie die Trainingsdaten in der FROM-Klausel angeben.
  + Verwenden Sie einen größeren Wert für MAX\$1RUNTIME und MAX\$1CELLS. Größere Werte für diesen Parameter erhöhen die Kosten für das Training eines Modells.
+ Die Ausführung der CREATE MODEL-Anweisung wird zurückgegeben, sobald die Trainingsdaten berechnet und in den Amazon S3 Bucket exportiert werden. Danach können Sie den Status des Trainings mit dem Befehl SHOW MODEL überprüfen. Wenn ein Modell, das im Hintergrund trainiert wird, fehlschlägt, können Sie den Fehler mit SHOW MODEL überprüfen. Sie können ein fehlerhaftes Modell nicht wiederholen. Verwenden Sie DROP MODELL, um ein fehlerhaftes Modell zu entfernen und ein neues Modell neu zu erstellen Weitere Hinweise zu SHOW MODEL finden Sie unter [SHOW MODEL](r_SHOW_MODEL.md).
+ Lokales BYOM unterstützt die gleichen Modelle, die Amazon Redshift ML für Nicht-BYOM-Fälle unterstützt. Amazon Redshift unterstützt einfache XGBoost (mit XGBoost Version 1.0 oder höher), KMEANS-Modelle ohne Präprozessoren und XGBOOST/MLP/Linear Learner-Modelle, die von Trained by Amazon AI Autopilot trainiert wurden. SageMaker Letzteres wird mit von Autopilot spezifizierten Präprozessoren unterstützt, die auch von Amazon SageMaker AI Neo unterstützt werden.
+ Wenn in Ihrem Amazon Redshift Redshift-Cluster erweitertes Routing für Ihre Virtual Private Cloud (VPC) aktiviert ist, stellen Sie sicher, dass Sie einen Amazon S3 S3-VPC-Endpunkt und einen SageMaker AI-VPC-Endpunkt für die VPC erstellen, in der sich Ihr Cluster befindet. Auf diese Weise kann der Datenverkehr zwischen diesen Diensten während der Ausführung von CREATE MODEL durch Ihre VPC laufen. Weitere Informationen finden Sie unter [SageMaker AI Clarify Job Amazon VPC Subnets and Security](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-vpc.html#clarify-vpc-job) Groups.

# Anwendungsfälle
<a name="r_create_model_use_cases"></a>

Die folgenden Anwendungsfälle demonstrieren die Verwendung von CREATE MODEL je nach Ihren Anforderungen.

## Einfaches CREATE MODEL
<a name="r_simple_create_model"></a>

Im Folgenden werden die grundlegenden Optionen der CREATE MODEL-Syntax zusammengefasst.

### Einfache CREATE MODEL-Syntax
<a name="r_simple-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_query ) }
TARGET column_name
FUNCTION prediction_function_name
IAM_ROLE { default }
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  [ MAX_CELLS integer ]
)
```

### Einfache CREATE MODEL-Parameter
<a name="r_simple-create-model-parameters"></a>

 *model\$1name*   
Der Name des Modells Der Modellname in einem Schema muss eindeutig sein.

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1  
Der Tabellenname oder die Abfrage, die die Trainingsdaten spezifiziert. Dabei kann es sich entweder um eine bestehende Tabelle im System oder eine Amazon-Redshift-kompatible SELECT-Abfrage handeln, die in Klammern () eingeschlossen ist. Das Abfrageergebnis muss mindestens zwei Spalten enthalten. 

TARGET *column\$1name*  
Der Name der Spalte, die zum Vorhersageziel wird. Die Spalte muss in der FROM-Klausel vorhanden sein. 

FUNCTION *prediction\$1function\$1name*   
Ein Wert, der den Namen der Machine-Learning-Funktion von Amazon Redshift angibt, die von CREATE MODELL generiert und zur Erstellung von Prognosen mit diesem Modell verwendet wird. Die Funktion wird im selben Schema wie das Modellobjekt erstellt und kann überladen werden.  
Amazon Redshift Machine Learning unterstützt Modelle wie Xtreme Gradient Boosted Tree (XGBoost) -Modelle für Regression und Klassifizierung.

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1  
 Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE MODEL-Befehl ausgeführt wird. Alternativ können Sie den ARN einer IAM-Rolle angeben, um diese Rolle zu verwenden.

 *S3\$1BUCKET *'amzn-s3-demo-bucket'**   
Der Name des Amazon S3 S3-Buckets, den Sie zuvor erstellt haben, um Trainingsdaten und Artefakte zwischen Amazon Redshift und SageMaker KI auszutauschen. Amazon Redshift erstellt einen Unterordner in diesem Bucket, bevor die Trainingsdaten entladen werden. Wenn das Training abgeschlossen ist, löscht Amazon Redshift den erstellten Unterordner und dessen Inhalt. 

MAX\$1CELLS Ganzzahl   
Die maximale Anzahl von Zellen, die aus der FROM-Klausel exportiert werden sollen. Der Standardwert ist 1 000 000.   
Die Anzahl der Zellen ist das Produkt aus der Anzahl der Zeilen in den Trainingsdaten (erzeugt durch die FROM-Klausel-Tabelle oder -Abfrage) mal der Anzahl der Spalten. Wenn die Anzahl der Zellen in den Trainingsdaten die durch den Parameter max\$1cells angegebene Anzahl übersteigt, führt CREATE MODEL ein Downsampling der Trainingsdaten aus der FROM-Klausel durch, um die Größe des Trainingssatzes unter MAX\$1CELLS zu reduzieren. Größere Trainingsdatensätze können zu einer höheren Genauigkeit führen, aber auch bedeuten, dass das Modell länger zum Trainieren braucht und mehr kostet.  
Informationen zu den Kosten für die Nutzung von Amazon Redshift finden Sie unter [Kosten für die Verwendung von Amazon Redshift ML](cost.md).  
Weitere Informationen zu den Kosten für unterschiedliche Zellanzahlen und kostenlosen Testversionen finden Sie unter [Amazon-Redshift-Preise](https://aws.amazon.com/redshift/pricing).

## CREATE MODEL mit Benutzerführung
<a name="r_user_guidance_create_model"></a>

Nachfolgend finden Sie eine Beschreibung der Optionen für CREATE MODEL, die zusätzlich zu den unter beschriebenen gelten [Einfaches CREATE MODEL](#r_simple_create_model).

Standardmäßig sucht CREATE MODEL nach der besten Kombination aus Vorverarbeitung und Modell für Ihren jeweiligen Datensatz. Vielleicht benötigen Sie zusätzliche Kontrolle über das Modell oder möchten zusätzliches Fachwissen (z. B. Problemtyp oder Zielsetzung) einführen. Wenn in einem Kundenabwanderungsszenario das Ergebnis „Kunde ist nicht aktiv“ selten ist, wird das F1-Ziel häufig dem Ziel „Genauigkeit“ vorgezogen. Modelle mit einer hohen Genauigkeit sagen wahrscheinlich immer „Kunde ist aktiv“ voraus. Dies ergibt zwar eine hohe Genauigkeit, jedoch ist der geschäftliche Wert gering. Informationen zum F1-Ziel finden Sie unter [Auto MLJob Objective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) in der *Amazon SageMaker AI API-Referenz*.

Dann folgt CREATE MODEL Ihren Vorschlägen zu den angegebenen Aspekten, wie zum Beispiel dem Ziel. Gleichzeitig ermittelt CREATE MODEL automatisch die besten Präprozessoren und die besten Hyperparameter. 

### CREATE MODEL mit Benutzerführung – Syntax
<a name="r_user_guidance-create-model-synposis"></a>

CREATE MODEL bietet mehr Flexibilität bei den Aspekten, die Sie angeben können, und den Aspekten, die Amazon Redshift automatisch erkennt.

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### CREATE MODEL mit Benutzerführung – Parameter
<a name="r_user_guidance-create-model-parameters"></a>

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1*   
(Optional) Gibt den Modelltyp an. Sie können angeben, ob Sie ein Modell eines bestimmten Modelltyps trainieren möchten, z. B. XGBoost Multilayer Perceptron (MLP) oder Linear Learner. Dies sind alles Algorithmen, die Amazon SageMaker AI Autopilot unterstützt. Wenn Sie den Parameter nicht angeben, werden beim Training alle unterstützten Modelltypen nach dem besten Modell durchsucht.

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(Optional) Gibt den Problemtyp an. Wenn Sie den Problemtyp kennen, können Sie Amazon Redshift so einschränken, dass es nur nach dem besten Modell dieses bestimmten Modelltyps sucht. Wenn Sie diesen Parameter nicht angeben, wird während des Trainings auf der Grundlage Ihrer Daten ein Problemtyp ermittelt.

OBJECTIVE ( 'MSE' \$1 'Accuracy' \$1 'F1' \$1 'F1Macro' \$1 'AUC')  
(Optional) Gibt den Namen der objektiven Metrik an, die zur Messung der Vorhersagequalität eines Machine-Learning-Systems verwendet wird. Diese Metrik wird während des Trainings optimiert, um die beste Schätzung der Modellparameterwerte aus den Daten zu erhalten. Wenn Sie nicht explizit eine Metrik angeben, wird standardmäßig automatisch MSE: für Regression, F1: für die binäre Klassifikation und Accuracy: für die Multiklassen-Klassifikation verwendet. Weitere Informationen zu Zielen finden Sie unter [Auto MLJob Objective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) in der *Amazon SageMaker AI API-Referenz*.

MAX\$1CELLS Ganzzahl   
(Optional) Gibt die Anzahl der Zellen in den Trainingsdaten an. Dieser Wert ist das Produkt aus der Anzahl der Datensätze (in der Trainingsabfrage oder Tabelle) mal der Anzahl der Spalten. Der Standardwert ist 1 000 000.

MAX\$1RUNTIME Ganzzahl   
(Optional) Gibt die Höchstdauer für das Training an. Je nach Größe des Datensatzes sind die Trainingsjobs oft schneller abgeschlossen. Damit legen Sie fest, wie lange das Training maximal dauern soll. Der Standardwert ist 5.400 (90 Minuten).

S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1  
(Optional) Gibt an, ob Amazon Redshift eine Garbage Collection für die resultierenden Datensätze, die zum Trainieren von Modellen verwendet werden, und die Modelle durchführt. Wenn diese Option auf OFF gesetzt ist, werden die resultierenden Datensätze zum Trainieren von Modellen verwendet und die Modelle bleiben in Amazon S3 und können für andere Zwecke verwendet werden. Wenn die Option auf ON gesetzt ist, löscht Amazon Redshift die Artefakte in Amazon S3, nachdem das Training abgeschlossen ist. Die Standardeinstellung ist ON.

KMS\$1KEY\$1ID 'kms\$1key\$1id'  
(Optional) Gibt an, ob Amazon Redshift serverseitige Verschlüsselung mit einem AWS KMS -Schlüssel verwendet, um Data-at-Rest zu schützen. Bei der Übertragung von Daten werden mit Secure Sockets Layer (SSL) geschützt. 

 *PREPROCESSORS 'string' *   
(Optional) Gibt bestimmte Kombinationen von Präprozessoren für bestimmte Spalten an. Das Format ist eine Liste von columnSets und entsprechenden Transformern, die auf jede Gruppe von Spalten angewendet werden sollen. Amazon Redshift wendet alle Transformatoren in einer bestimmten Transformer-Liste auf alle Spalten in den entsprechenden ColumnSet Spalten an. Um beispielsweise OneHotEncoder mit Imputer eine Anwendung auf die Spalten t1 und t2 anzuwenden, verwenden Sie den folgenden Beispielbefehl.  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
{"ColumnSet": [
    "t1",
    "t2"
  ],
  "Transformers": [
    "OneHotEncoder",
    "Imputer"
  ]
},
{"ColumnSet": [
    "t3"
  ],
  "Transformers": [
    "OneHotEncoder"
  ]
},
{"ColumnSet": [
    "temp"
  ],
  "Transformers": [
    "Imputer",
    "NumericPassthrough"
  ]
}
]'
SETTINGS (
S3_BUCKET 'amzn-s3-demo-bucket'
)
```

Amazon Redshift unterstützt die folgenden Transformer:
+ OneHotEncoder — Wird normalerweise verwendet, um einen diskreten Wert in einen binären Vektor mit einem Wert ungleich Null zu kodieren. Dieser Transformer ist für viele Machine-Learning-Modelle geeignet. 
+ OrdinalEncoder — Kodiert diskrete Werte in eine einzelne Ganzzahl. Dieser Transformer ist für bestimmte Machine-Learning-Modelle geeignet, wie MLP und Linear Learner. 
+ NumericPassthrough — Übergibt die Eingabe unverändert an das Modell.
+ Imputer – Füllt mit fehlenden Werten und Not-a-Number(NaN)-Werten auf.
+ ImputerWithIndicator — Füllt fehlende Werte und NaN-Werte aus. Dieser Transformer erzeugt auch einen Indikator, ob Werte gefehlt haben und aufgefüllt wurden.
+ Normalizer – Normalisiert Werte, was die Leistung vieler ML-Algorithmen verbessern kann.
+ DateTimeVectorizer — Erzeugt eine Vektoreinbettung, die eine Spalte vom Datentyp Datetime darstellt, die in Modellen für maschinelles Lernen verwendet werden kann.
+ PCA – Projiziert die Daten in einen niedrigdimensionalen Raum, um die Anzahl der Merkmale zu reduzieren und gleichzeitig so viele Informationen wie möglich zu erhalten.
+ StandardScaler — Standardisiert Merkmale, indem der Mittelwert entfernt und auf die Varianz pro Einheit skaliert wird. 
+ MinMax — Transformiert Merkmale, indem jedes Merkmal auf einen bestimmten Bereich skaliert wird.

Amazon Redshift ML speichert die trainierten Transformer und wendet sie automatisch als Teil der Vorhersageabfrage an. Sie müssen diese nicht angeben, wenn Sie Prognosen aus Ihrem Modell erstellen. 

## ERSTELLEN Sie XGBoost Modelle mit AUTO OFF
<a name="r_auto_off_create_model"></a>

AUTO OFF CREATE MODEL hat generell andere Ziele als das normale CREATE MODEL.

Als fortgeschrittener Benutzer, der bereits den gewünschten Modelltyp und die Hyperparameter kennt, die beim Training dieser Modelle verwendet werden sollen, können Sie CREATE MODEL mit AUTO OFF verwenden, um die automatische Erkennung von Präprozessoren und Hyperparametern durch CREATE MODEL zu deaktivieren. Dazu geben Sie den Modelltyp explizit an. XGBoost ist derzeit der einzige Modelltyp, der unterstützt wird, wenn AUTO auf OFF gesetzt ist. Sie können Hyperparameter angeben. Amazon Redshift verwendet Standardwerte für alle von Ihnen angegebenen Hyperparameter. 

### XGBoost Modelle mit AUTO OFF-Syntax ERSTELLEN
<a name="r_auto_off-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | (select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' |
            'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' |
            'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' }
HYPERPARAMETERS DEFAULT EXCEPT (
    NUM_ROUND '10',
    ETA '0.2',
    NUM_CLASS '10',
    (, ...)
)
PREPROCESSORS 'none'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### ERSTELLEN Sie XGBoost Modelle mit AUTO OFF-Parametern
<a name="r_auto_off-create-model-parameters"></a>

 *AUTO OFF*   
Deaktiviert die automatische Erkennung des Präprozessors, des Algorithmus und der Auswahl der Hyperparameter bei CREATE MODEL.

MODEL\$1TYPE XGBOOST  
Legt fest, dass XGBOOST zum Trainieren des Modells verwendet werden soll. 

OBJECTIVE str  
Gibt ein vom Algorithmus erkanntes Ziel an. Amazon Redshift unterstützt reg:squarederror, reg:squaredlogerror, reg:logistic, reg:pseudohubererror, reg:tweedie, binary:logistic, binary:hinge, multi:softmax. Weitere Informationen zu diesen Zielen finden Sie in der XGBoost Dokumentation unter [Parameter für Lernaufgaben](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters).

HYPERPARAMETERS \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
Gibt an, ob die XGBoost Standardparameter verwendet oder durch benutzerdefinierte Werte überschrieben werden. Die Werte müssen in einfache Anführungszeichen eingeschlossen werden. Im Folgenden finden Sie Beispiele für Parameter XGBoost und deren Standardwerte.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_create_model_use_cases.html)

Das folgende Beispiel bereitet Daten für vor XGBoost.

```
DROP TABLE IF EXISTS abalone_xgb;

CREATE TABLE abalone_xgb (
length_val float,
diameter float,
height float,
whole_weight float,
shucked_weight float,
viscera_weight float,
shell_weight float,
rings int,
record_number int);

COPY abalone_xgb
FROM 's3://redshift-downloads/redshift-ml/abalone_xg/'
REGION 'us-east-1'
IAM_ROLE default
IGNOREHEADER 1 CSV;
```

Im folgenden Beispiel wird ein XGBoost Modell mit angegebenen erweiterten Optionen wie MODEL\$1TYPE, OBJECTIVE und PREPROCESSORS erstellt.

```
DROP MODEL abalone_xgboost_multi_predict_age;

CREATE MODEL abalone_xgboost_multi_predict_age
FROM ( SELECT length_val,
              diameter,
              height,
              whole_weight,
              shucked_weight,
              viscera_weight,
              shell_weight,
              rings
   FROM abalone_xgb WHERE record_number < 2500 )
TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age
IAM_ROLE default
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE 'multi:softmax'
PREPROCESSORS 'none'
HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30')
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

Im folgenden Beispiel wird eine Inferenzabfrage verwendet, um das Alter der Fische mit einer Datensatznummer größer als 2 500 vorherzusagen. Sie verwendet die Funktion ml\$1fn\$1abalone\$1xgboost\$1multi\$1predict\$1age, die mit dem obigen Befehl erstellt wurde. 

```
select ml_fn_abalone_xgboost_multi_predict_age(length_val,
                                                   diameter,
                                                   height,
                                                   whole_weight,
                                                   shucked_weight,
                                                   viscera_weight,
                                                   shell_weight)+1.5 as age
from abalone_xgb where record_number > 2500;
```

## Bring Your Own Model (BYOM) - lokale Inferenz
<a name="r_byom_create_model"></a>

Amazon Redshift ML unterstützt die Verwendung von „Bring Your Own Model“ (BYOM) bei der lokalen oder Remote-Inferenz.

Im Folgenden werden die grundlegenden Optionen der CREATE MODEL-Syntax für BYOM zusammengefasst. Sie können ein außerhalb von Amazon Redshift mit Amazon SageMaker AI trainiertes Modell für datenbankinterne Inferenzen lokal in Amazon Redshift verwenden.

### CREATE MODEL-Syntax für lokale Inferenz
<a name="r_local-create-model"></a>

Im Folgenden wird die CREATE MODEL-Syntax für lokale Inferenz beschrieben.

```
CREATE MODEL model_name
FROM ('job_name' | 's3_path' )
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
IAM_ROLE { default }
[ SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', | --required
  KMS_KEY_ID 'kms_string') --optional
];
```

Amazon Redshift unterstützt derzeit nur vortrainierte XGBoost, MLP- und Linear Learner-Modelle für BYOM. Über diesen Pfad können Sie den SageMaker KI-Autopiloten und Modelle importieren, die direkt in Amazon SageMaker AI trainiert wurden, um lokale Inferenzen zu erzielen. 

#### CREATE MODEL-Parameter für lokale Inferenz
<a name="r_local-create-model-parameters"></a>

 *model\$1name*   
Der Name des Modells Der Modellname in einem Schema muss eindeutig sein.

FROM (*'job\$1name'* \$1 *'s3\$1path'* )  
Der *job\$1name* verwendet einen Amazon SageMaker AI-Jobnamen als Eingabe. Der Jobname kann entweder ein Amazon SageMaker AI-Schulungsauftragsname oder ein Amazon SageMaker AI Autopilot-Jobname sein. Der Auftrag muss in demselben AWS -Konto erstellt werden, das Besitzer des Amazon-Redshift-Clusters ist. Um den Jobnamen zu finden, starten Sie Amazon SageMaker AI. Wählen Sie im Drop-down-Menü **Training** **Training jobs** (Trainingsaufträge) aus.  
Der *'s3\$1pfad'* gibt den S3-Speicherort der .tar.gz-Modellartefaktdatei an, die beim Erstellen des Modells verwendet werden soll.

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
Der Name der zu erstellenden Funktion und die Datentypen der Eingabeargumente. Sie können einen Schemamen angeben.

RETURNS *data\$1type*  
Der Datentyp des Werts, der von der Funktion zurückgegeben wird.

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE MODEL-Befehl ausgeführt wird.  
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. 

SETTINGS ( S3\$1BUCKET *'amzn-s3-demo-bucket'*, \$1 KMS\$1KEY\$1ID *'kms\$1string'*)  
Die S3\$1BUCKET-Klausel gibt den Amazon-S3-Speicherort an, der zum Speichern von Zwischenergebnissen verwendet wird.  
(Optional) Die KMS\$1KEY\$1ID-Klausel gibt an, ob Amazon Redshift serverseitige Verschlüsselung mit einem AWS KMS Schlüssel verwendet, um Daten im Ruhezustand zu schützen. Bei der Übertragung von Daten werden mit Secure Sockets Layer (SSL) geschützt.  
Weitere Informationen finden Sie unter [CREATE MODEL mit Benutzerführung](#r_user_guidance_create_model).

#### CREATE MODEL für lokale Inferenz – Beispiel
<a name="r_local-create-model-example"></a>

Im folgenden Beispiel wird ein Modell erstellt, das zuvor außerhalb von Amazon Redshift in Amazon SageMaker AI trainiert wurde. Da der Modelltyp von Amazon Redshift ML für die lokale Inferenz unterstützt wird, erstellt das folgende CREATE MODEL eine Funktion, die lokal in Amazon Redshift verwendet werden kann. Sie können einen Namen für den SageMaker KI-Schulungsjob angeben.

```
CREATE MODEL customer_churn
FROM 'training-job-customer-churn-v4'
FUNCTION customer_churn_predict (varchar, int, float, float)
RETURNS int
IAM_ROLE default
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

Nachdem das Modell erstellt wurde, können Sie die Funktion *customer\$1churn\$1predict* mit den angegebenen Argumenttypen verwenden, um Prognosen zu erstellen.

## Bring Your Own Model (BYOM) - Remote-Inferenz
<a name="r_byom_create_model_remote"></a>

Amazon Redshift ML unterstützt die Verwendung von „Bring Your Own Model“ (BYOM) für die Remote-Inferenz.

Im Folgenden werden die grundlegenden Optionen der CREATE MODEL-Syntax für BYOM zusammengefasst.

### CREATE MODEL-Syntax für Remote-Inferenz
<a name="r_remote-create-model"></a>

Im Folgenden wird die CREATE MODEL-Syntax für Remote-Inferenz beschrieben.

```
CREATE MODEL model_name 
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
SAGEMAKER 'endpoint_name'[:'model_name']
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[SETTINGS (MAX_BATCH_ROWS integer)];
```

#### CREATE MODEL-Parameter für Remote-Inferenz
<a name="r_remote-create-model-parameters"></a>

 *model\$1name*   
Der Name des Modells Der Modellname in einem Schema muss eindeutig sein.

FUNCTION *fn\$1name* ( [*data\$1type*] [, ...] )  
Der Name der Funktion und die Datentypen der Eingabeargumente. Alle unterstützten Datentypen finden Sie unter [Datentypen](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html). `Geography`, `geometry` und `hllsketch` werden nicht unterstützt.   
Sie können einen Funktionsnamen auch innerhalb eines Schemas angeben, indem Sie eine zweiteilige Notation verwenden, z. B. `myschema.myfunction`.

RETURNS *data\$1type*  
Der Datentyp des Werts, der von der Funktion zurückgegeben wird. Alle unterstützten Datentypen finden Sie unter [Datentypen](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html). `Geography`, `geometry` und `hllsketch` werden nicht unterstützt. 

SAGEMAKER *'endpoint\$1name'*[:*'model\$1name'*]   
Der Name des Amazon SageMaker AI-Endpunkts. Wenn der Endpunktname auf einen Multimodell-Endpunkt verweist, fügen Sie den Namen des zu verwendenden Modells hinzu. Der Endpunkt muss in derselben AWS Region und AWS-Konto wie der Amazon Redshift Redshift-Cluster gehostet werden. Um Ihren Endpunkt zu finden, starten Sie Amazon SageMaker AI. Wählen Sie im Drop-down-Menü **Inference** (Inferenz) **Endpoints** (Endpunkte) aus.

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE MODEL-Befehl ausgeführt wird. Alternativ können Sie den ARN einer IAM-Rolle angeben, um diese Rolle zu verwenden.

MAX\$1BATCH\$1ROWS *integer*  
Die maximale Anzahl von Zeilen, die Amazon Redshift in einer einzigen Batch-Anfrage für einen einzelnen SageMaker KI-Aufruf sendet. Sie wird nur für BYOM mit Remote-Inferenz unterstützt. Die tatsächliche Anzahl der Zeilen in einem Batch ist auch von der Eingabegröße abhängig, ist jedoch kleiner als dieser Wert oder gleich diesem Wert. Der Mindestwert für diesen Parameter ist 1. Der maximale Wert lautet `INT_MAX` oder 2 147 483 647. Dieser Parameter ist nur erforderlich, wenn sowohl Eingabe- als auch Rückgabedatentypen `SUPER` sind. Der Standardwert lautet `INT_MAX` oder 2 147 483 647. 

Wenn das Modell auf einem SageMaker KI-Endpunkt bereitgestellt wird, erstellt SageMaker KI die Informationen des Modells in Amazon Redshift. Anschließend führt es eine Inferenz über die externe Funktion durch. Sie können den Befehl SHOW MODEL verwenden, um die Modellinformationen auf Ihrem Amazon-Redshift-Cluster anzuzeigen.

#### CREATE MODEL für Remote-Inferenz – Hinweise zur Verwendung
<a name="r_remote-create-model-usage-notes"></a>

Bevor Sie CREATE MODEL für Remote-Inferenz verwenden, sollten Sie Folgendes beachten:
+ Der Endpunkt muss von demselben AWS Konto gehostet werden, dem der Amazon Redshift Redshift-Cluster gehört.
+ Stellen Sie sicher, dass der Amazon SageMaker AI-Endpunkt entweder über genügend Ressourcen verfügt, um Inferenzrufe von Amazon Redshift aufzunehmen, oder dass der Amazon SageMaker AI-Endpunkt automatisch skaliert werden kann.
+ Wenn Sie den `SUPER` Datentyp nicht als Eingabe verwenden, akzeptiert das Modell nur Eingaben im Format kommagetrennter Werte (CSV), was einem Inhaltstyp von in AI entspricht. `text/CSV` SageMaker 
+ Wenn Sie den Datentyp `SUPER` nicht als Eingabe verwenden, ist die Ausgabe von Modellen ein einzelner Wert des Typs, den Sie beim Erstellen der Funktion angegeben haben. Die Ausgabe erfolgt im Format kommagetrennter Werte (CSV) über den Inhaltstyp in AI. `text/CSV` SageMaker `VARCHAR`Datentypen dürfen nicht in Anführungszeichen stehen und dürfen keine neuen Zeilen enthalten, und jede Ausgabe muss in einer neuen Zeile erfolgen.
+ Modelle akzeptieren Nullen als leere Zeichenfolgen.
+ Wenn der Eingabedatentyp `SUPER` ist, wird nur ein Eingabeargument unterstützt. 
+ Wenn der Eingabedatentyp `SUPER` ist, muss auch der Rückgabedatentyp `SUPER` sein. 
+ MAX\$1BATCH\$1ROWS ist erforderlich, wenn sowohl der Eingabe- als auch der Rückgabedatentyp SUPER ist. 
+ Wenn der Eingabedatentyp `SUPER` ist, ist der Inhaltstyp des Endpunktaufrufs `application/json`, wenn MAX\$1BATCH\$1ROWS `1` ist. In allen anderen Fällen ist er `application/jsonlines`. 
+ Wenn der Rückgabedatentyp `SUPER` ist, ist der Akzeptanztyp des Endpunktaufrufs `application/json`, wenn MAX\$1BATCH\$1ROWS `1` ist. In allen anderen Fällen ist er `application/jsonlines`. 

##### CREATE MODEL für Remote-Inferenz – Beispiel
<a name="r_remote-create-model-example"></a>

Im folgenden Beispiel wird ein Modell erstellt, das einen SageMaker KI-Endpunkt verwendet, um Vorhersagen zu treffen. Vergewissern Sie sich, dass der Endpunkt ausgeführt wird, um Prognosen zu erstellen, und geben Sie seinen Namen in dem Befehl CREATE MODEL an.

```
CREATE MODEL remote_customer_churn
FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float)
RETURNS int
SAGEMAKER 'customer-churn-endpoint'
IAM_ROLE default;
```

 Im folgenden Beispiel wird ein BYOM mit Remote-Inferenz mit einem Large Language Model (LLM) erstellt. LLMs auf Amazon SageMaker AI Jumpstart gehostet, akzeptieren und geben den `application/json` Inhaltstyp zurück und sie unterstützen ein einzelnes JSON pro Aufruf. Die Eingabe- und Rückgabedatentypen müssen den Typ `SUPER` haben und MAX\$1BATCH\$1ROWS muss auf 1 festgelegt sein. 

```
CREATE MODEL sample_super_data_model
FUNCTION sample_super_data_model_predict(super)
RETURNS super
SAGEMAKER 'sample_super_data_model_endpoint'
IAM_ROLE default
SETTINGS (MAX_BATCH_ROWS 1);
```

## CREATE MODEL mit K-MEANS
<a name="r_k-means_create_model"></a>

Amazon Redshift unterstützt den K-Means-Algorithmus, der Daten gruppiert, die nicht markiert sind. Dieser Algorithmus löst Clusterprobleme, bei denen Sie Gruppierungen in den Daten erkennen möchten. Nicht klassifizierte Daten werden aufgrund ihrer Ähnlichkeiten und Unterschiede gruppiert und partitioniert. 

### CREATE MODEL mit K-MEANS – Syntax
<a name="r_k-means-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
FUNCTION function_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS 'string'
HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional
  MAX_CELLS integer, |
    -- optional
  MAX_RUNTIME integer
    -- optional);
```

### CREATE MODEL mit K-MEANS – Parameter
<a name="r_k-means-create-model-parameters"></a>

 *AUTO OFF*   
Deaktiviert die automatische Erkennung des Präprozessors, des Algorithmus und der Auswahl der Hyperparameter bei CREATE MODEL.

MODEL\$1TYPE KMEANS  
Legt fest, dass KMEANS zum Trainieren des Modells verwendet werden soll. 

PREPROCESSORS 'string'  
Gibt bestimmte Kombinationen von Präprozessoren für bestimmte Spalten an. Das Format ist eine Liste von columnSets und entsprechenden Transformern, die auf jede Gruppe von Spalten angewendet werden sollen. Amazon Redshift unterstützt 3 K-Means-Präprozessoren, nämlich StandardScaler, und MinMax. NumericPassthrough Wenn Sie keine Vorverarbeitung für K-Means anwenden möchten, wählen Sie NumericPassthrough explizit als Transformator. Weitere Informationen zu unterstützten Transformern finden Sie unter [CREATE MODEL mit Benutzerführung – Parameter](#r_user_guidance-create-model-parameters).  
Der K-Means-Algorithmus verwendet einen euklidischen Abstand zum Berechnen der Ähnlichkeit. Die Vorverarbeitung der Daten stellt sicher, dass die Features des Modells im gleichen Maßstab bleiben und zuverlässige Ergebnisse liefern.

HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )  
Gibt an, ob die K-Means-Parameter verwendet werden. Sie müssen den `K`-Parameter angeben, wenn Sie den K-Means-Algorithmus verwenden. Weitere Informationen finden Sie unter [K-Means Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html) im *Amazon SageMaker AI* Developer Guide

Im folgenden Beispiel werden Daten für K-Means vorbereitet.

```
CREATE MODEL customers_clusters
FROM customers
FUNCTION customers_cluster
IAM_ROLE default
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS '[
{
  "ColumnSet": [ "*" ],
  "Transformers": [ "NumericPassthrough" ]
}
]'
HYPERPARAMETERS DEFAULT EXCEPT ( K '5' )
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');

select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster
--------------------
12345            1
12346            2
12347            4
12348
```

## CREATE MODEL mit Forecast
<a name="r_forecast_model"></a>

Prognosemodelle in Redshift ML verwenden Amazon Forecast, um präzise Zeitreihenprognosen zu erstellen. Auf diese Weise können Sie historische Daten über einen bestimmten Zeitraum verwenden, um Vorhersagen über zukünftige Ereignisse zu treffen. Zu den häufigsten Anwendungsfällen von Amazon Forecast gehören die Verwendung von Einzelhandelsproduktdaten, um zu entscheiden, wie der Lagerbestand bewertet werden soll, die Vewendung von Herstellungsmengendaten, um vorherzusagen, wie viel von einem Artikel bestellt werden soll, und die Verwendung von Web-Traffic-Daten, um zu prognostizieren, wie viel Traffic ein Webserver empfangen könnte. 

 [Kontingentlimits von Amazon Forecast](https://docs.aws.amazon.com/forecast/latest/dg/limits.html) werden in Amazon-Redshift-Prognosemodellen durchgesetzt. Die maximale Anzahl von Prognosen ist beispielsweise 100, wobei diese jedoch anpassbar ist. Wenn Sie ein Prognosemodell löschen, werden die zugehörigen Ressourcen in Amazon Forecast nicht automatisch entfernt. Wenn Sie einen Redshift-Cluster löschen, werden auch alle zugehörigen Modelle entfernt. 

Beachten Sie, dass Prognosemodelle derzeit nur in den folgenden Regionen verfügbar sind:
+ USA Ost (Ohio): (us-east-2)
+ USA Ost (Nord-Virginia): (us-east-1)
+ USA West (Oregon): (us-west-2)
+ Asien-Pazifik (Mumbai): (ap-south-1)
+ Asien-Pazifik (Seoul): (ap-northeast-2)
+ Asien-Pazifik (Singapur): (ap-southeast-1)
+ Asien-Pazifik (Sydney): (ap-southeast-2)
+ Asien-Pazifik (Tokyo) (ap-northeast-1)
+ Europa (Frankfurt) (eu-central-1)
+ Europa (Irland) (eu-west-1)

### CREATE MODEL mit Forecast-Syntax
<a name="r_forecast_model-synopsis"></a>

```
CREATE [ OR REPLACE ] MODEL forecast_model_name 
FROM { table_name | ( select_query ) } 
TARGET column_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} 
AUTO ON
MODEL_TYPE FORECAST
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  HORIZON integer,
  FREQUENCY forecast_frequency
  [PERCENTILES '0.1', '0.5', '0.9']
  )
```

### CREATE MODEL mit Forecast-Parametern
<a name="r_forecast_model-parameters"></a>

 *forecast\$1model\$1name*   
Der Name des Modells Der Modellname muss eindeutig sein.

FROM \$1 table\$1name \$1 ( select\$1query ) \$1  
Der Tabellenname oder die Abfrage, die die Trainingsdaten spezifiziert. Dabei kann es sich entweder um eine bestehende Tabelle im System oder um eine mit Amazon Redshift kompatible SELECT-Abfrage handeln, die in Klammern eingeschlossen ist. Das Tabellen- oder Abfrageergebnis muss mindestens drei Spalten haben: (1) eine Varchar-Spalte, die den Namen der Zeitreihe angibt. Jeder Datensatz kann mehrere Zeitreihen, (2) eine datetime-Spalte und (3) die vorherzusagende Zielspalte enthalten. Diese Zielspalte muss entweder eine Ganzzahl oder ein Gleitkommawert sein. Wenn Sie einen Datensatz mit mehr als drei Spalten angeben, geht Amazon Redshift davon aus, dass alle zusätzlichen Spalten Teil einer verwandten Zeitreihe sind. Beachten Sie, dass verwandte Zeitreihen vom Typ „int“ (Ganzzahl) oder „float“ (Gleitkommawert) sein müssen. Weitere Informationen zu verwandten Zeitreihen finden Sie unter [Verwenden von Datasets verwandter Zeitreihen](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html).

TARGET column\$1name  
Der Name der Spalte, die zum Vorhersageziel wird. Die Spalte muss in der FROM-Klausel vorhanden sein.

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1  
Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der CREATE MODEL-Befehl ausgeführt wird. Alternativ können Sie einen ARN einer IAM-Rolle angeben, um diese Rolle zu verwenden. 

AUTO ON  
Aktiviert die automatische Erkennung des Algorithmus und die Auswahl der Hyperparameter bei CREATE MODEL. Wenn Sie bei der Erstellung eines Prognosemodells ein angeben, wird eine Forecast verwendet AutoPredictor, bei der Amazon Forecast die optimalen Kombinationen von Algorithmen auf jede Zeitreihe in Ihrem Datensatz anwendet.

MODEL\$1TYPE FORECAST  
Legt fest, dass FORECAST zum Trainieren des Modells verwendet werden soll.

S3\$1BUCKET 'amzn-s3-demo-bucket'  
Der Name des Buckets von Amazon Simple Storage Service, den Sie zuvor erstellt haben und der verwendet wird, um Trainingsdaten und Artefakte zwischen Amazon Redshift und Amazon Forecast auszutauschen. Amazon Redshift erstellt einen Unterordner in diesem Bucket, bevor die Trainingsdaten entladen werden. Wenn das Training abgeschlossen ist, löscht Amazon Redshift den erstellten Unterordner und dessen Inhalt.

HORIZON-Ganzzahl  
Die maximale Anzahl von Vorhersagen, die das Prognosemodell zurückgeben kann. Sobald das Modell trainiert ist, können Sie diese Ganzzahl nicht mehr ändern.

FREQUENCY forecast\$1frequency  
Gibt an, wie detailliert die Prognosen sein sollen. Verfügbare Optionen sind `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`. Erforderlich, wenn Sie ein Prognosemodell trainieren.

PERCENTILES-Zeichenfolge  
Eine durch Komma getrennte Zeichenfolge, die die Prognosetypen angibt, mit denen ein Prädiktor trainiert wird. Bei den Prognosetypen kann es sich um Quantile von 0,01 bis 0,99 handeln, und zwar in Schritten von 0,01 oder höher. Sie können den Mittelwert der Prognose auch mit Mittelwert angeben. Sie können maximal fünf Prognosetypen angeben.

Das folgende Beispiel zeigt, wie ein einfaches Prognosemodell erstellt wird.

```
CREATE MODEL forecast_example
FROM forecast_electricity_
TARGET target 
IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>'
AUTO ON 
MODEL_TYPE FORECAST
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket',
          HORIZON 24,
          FREQUENCY 'H',
          PERCENTILES '0.25,0.50,0.75,mean',
          S3_GARBAGE_COLLECT OFF);
```

Nachdem Sie das Prognosemodell erstellt haben, können Sie eine neue Tabelle mit den Prognosedaten erstellen.

```
CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)
```

Anschließend können Sie die neue Tabelle abfragen, um Vorhersagen zu erhalten.

```
SELECT * FROM forecast_model_results
```

# CREATE PROCEDURE
<a name="r_CREATE_PROCEDURE"></a>

Erstellt eine neue gespeicherte Prozedur oder ersetzt eine vorhandene Prozedur für die aktuelle Datenbank.

Weitere Informationen und Beispiele finden Sie unter [Erstellen von gespeicherten Prozeduren in Amazon Redshift](stored-procedure-overview.md).

## Erforderliche Berechtigungen
<a name="r_CREATE_PROCEDURE-privileges"></a>

Sie benötigen eine der folgenden Berechtigungen, um CREATE OR REPLACE PROCEDURE ausführen zu können:
+ Für CREATE PROCEDURE:
  + Superuser
  + Benutzer mit den Berechtigungen CREATE und USAGE für das Schema, in dem die gespeicherte Prozedur erstellt wird
+ Für REPLACE PROCEDURE:
  + Superuser
  + Besitzer des Verfahrens

## Syntax
<a name="r_CREATE_PROCEDURE-synopsis"></a>

```
CREATE [ OR REPLACE ] PROCEDURE sp_procedure_name  
  ( [ [ argname ] [ argmode ] argtype [, ...] ] )
[ NONATOMIC ]
AS $$
  procedure_body
$$ LANGUAGE plpgsql
[ { SECURITY INVOKER | SECURITY DEFINER } ]
[ SET configuration_parameter { TO value | = value } ]
```

## Parameters
<a name="r_CREATE_PROCEDURE-parameters"></a>

 OR REPLACE   
Eine Klausel, die angibt, dass die vorhandene Prozedur ersetzt wird, wenn eine Prozedur mit demselben Namen und denselben Eingabeargument-Datentypen bzw. derselben Signatur vorhanden ist. Sie können eine Prozedur nur durch eine neue Prozedur ersetzen, wenn diese einen identischen Satz von Datentypen definiert.   
Wenn Sie eine Prozedur mit dem gleichen Namen wie eine vorhandene Prozedur, aber mit einer anderen Signatur definieren, erstellen Sie eine neue Prozedur. Mit anderen Worten: Der Prozedurname ist überladen. Weitere Informationen finden Sie unter [Überladen von Prozedurnamen](stored-procedure-naming.md#stored-procedure-overloading-name). 

 *sp\$1procedure\$1name*   
Der Name der Prozedur. Wenn Sie einen Schemanamen angeben (beispielsweise **myschema.myprocedure**), wird die Funktion im angegebenen Schema erstellt. Andernfalls wird die Prozedur im aktuellen Schema erstellt. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).   
Es wird empfohlen, dass Sie alle gespeicherten Prozeduren mit dem Präfix benennen `sp_`. Amazon Redshift reserviert das Präfix `sp_` für gespeicherte Prozeduren. Durch die Verwendung des Präfix `sp_` können Sie sicherstellen, dass keine Konflikte zwischen den Namen Ihrer gespeicherten Prozeduren und den Namen von bereits vorhandenen oder künftigen in Amazon Redshift integrierten gespeicherten Prozeduren oder Funktionen auftreten. Weitere Informationen finden Sie unter [Benennen von gespeicherten Prozeduren](stored-procedure-naming.md).  
Sie können mehr als eine Prozedur mit demselben Namen definieren, wenn sich die Datentypen für die Eingabeargumente bzw. Signaturen unterscheiden. Mit anderen Worten: In diesem Fall ist der Prozedurname überladen. Weitere Informationen finden Sie unter [Überladen von Prozedurnamen](stored-procedure-naming.md#stored-procedure-overloading-name)

*[argname] [ argmode] argtype*   
Eine Liste von Argumentnamen, Argumentmodi und Datentypen. Nur der Datentyp ist erforderlich. Name und Modus sind optional und ihre Position kann vertauscht werden.  
Der Argumentmodus kann IN, OUT oder INOUT sein. Der Standardwert ist IN.  
Sie können OUT- und INOUT-Argumente verwenden, um bei einem Prozeduraufruf einen oder mehrere Werte zurückzugeben. Wenn OUT- oder INOUT-Argumente vorhanden sind, gibt der Prozeduraufruf eine Ergebnisreihe mit *n* Spalten zurück, wobei *n* die Gesamtzahl der OUT- oder INOUT-Argumente ist.  
INOUT-Argumente sind gleichzeitig Ein- und Ausgabeargumente. *Eingabeargumente* umfassen sowohl IN- als auch INOUT-Argumente und *Ausgabeargumente* umfassen sowohl OUT- als auch INOUT-Argumente.  
OUT-Argumente werden im Rahmen der CALL-Anweisung nicht angegeben. Sie können INOUT-Argumente in der CALL-Anweisung für gespeicherte Prozeduren angeben. INOUT-Argumente können nützlich sein, wenn Werte übergeben oder von einem verschachtelten Aufruf zurückgegeben werden und auch wenn ein zurückgegeben wird `refcursor`. Weitere Informationen zu `refcursor`-Typen finden Sie unter [Cursor](c_PLpgSQL-statements.md#r_PLpgSQL-cursors).  
Die Argumentdatentypen können jeder beliebige Amazon-Redshift-Standarddatentyp sein. Eine weitere Möglichkeit für Argumentdatentypen ist außerdem `refcursor`.  
Sie können maximal 32 Eingabeargumente und 32 Ausgabeargumente angeben. 

AS \$1\$1 *procedure\$1body* \$1\$1   
Ein Konstrukt, das die auszuführende Anweisung umschließt. Die Literalschlüsselwörter AS \$1\$1 und \$1\$1 sind erforderlich.  
Amazon Redshift erfordert, dass Sie die Anweisung in Ihrer Prozedur unter Verwendung eines Formats umschließen, das Dollaranführung genannt wird. Alles innerhalb der Umschließung wird exakt wie angegeben übergeben. Sie müssen für Sonderzeichen keine Escape-Zeichen verwenden, da der Inhalt der Zeichenfolge wie exakt wie angegeben geschrieben wird.  
Bei der *Dollaranführung* verwenden Sie ein Dollarzeichenpaar (\$1\$1), um den Anfang und das Ende der auszuführenden Anweisung zu kennzeichnen, wie im folgenden Beispiel gezeigt.  

```
$$ my statement $$
```
Optional können Sie zwischen den beiden Dollarzeichen eine Zeichenfolge angeben, um die Identifizierung der Anweisung zu unterstützen. Die von Ihnen im umschließenden Dollarzeichenpaar am Anfang und am Ende verwendete Zeichenfolge muss identisch sein. Diese Zeichenfolge unterscheidet zwischen Groß- und Kleinschreibung und unterliegt den gleichen Einschränkungen wie Bezeichner, die nicht in einer Anführung stehen, darf jedoch keine Dollarzeichen enthalten. Im folgenden Beispiel wird die Zeichenfolge "test" verwendet.  

```
$test$ my statement $test$
```
Dieses Syntax ist auch für die verschachtelte Dollaranführung nützlich. Weitere Informationen zur Dollaranführung finden Sie unter "Zeichenfolgenkonstanten in Dollaranführung" im Abschnitt [Lexikalische Struktur](https://www.postgresql.org/docs/9.0/sql-syntax-lexical.html) der PostgreSQL-Dokumentation.

 *procedure\$1body*   
Eine Reihe gültiger PL/pgSQL Aussagen. PL/pgSQL Anweisungen ergänzen SQL-Befehle um prozedurale Konstrukte, einschließlich Schleifenausdrücken und bedingten Ausdrücken, um den logischen Fluss zu steuern. Die meisten SQL-Befehle können in der Prozedur verwendet werden, einschließlich DML-Befehlen wie COPY, UNLOAD und INSERT und DDL-Befehlen wie CREATE TABLE. Weitere Informationen finden Sie unter [PL/pgSQL-Sprachreferenz](c_pl_pgSQL_reference.md). 

LANGUAGE *plpgsql*  
Ein Sprachenwert. Geben Sie an `plpgsql`. Sie müssen eine Berechtigung für die Nutzung der Sprache haben, um verwenden zu können `plpgsql`. Weitere Informationen finden Sie unter [GRANT](r_GRANT.md). 

NONATOMIC  
Erstellt die gespeicherte Prozedur in einem nicht atomaren Transaktionsmodus. Im Modus NONATOMIC werden die Anweisungen innerhalb der Prozedur automatisch festgeschrieben. Zudem wird ein Fehler innerhalb der NONATOMIC-Prozedur nicht erneut ausgelöst, wenn er durch einen Ausnahmeblock behandelt wird. Weitere Informationen erhalten Sie unter [Verwalten von Transaktionen](stored-procedure-transaction-management.md) und [RAISE](c_PLpgSQL-statements.md#r_PLpgSQL-messages-errors).  
Wenn Sie eine gespeicherte Prozedur als `NONATOMIC` definieren, beachten Sie Folgendes:  
+ Wenn Sie Aufrufe von gespeicherten Prozeduren verschachteln, müssen alle Prozeduren in demselben Transaktionsmodus erstellt werden.
+ Die Optionen `SECURITY DEFINER` und `SET configuration_parameter` werden nicht unterstützt, wenn eine Prozedur im NONATOMIC-Modus erstellt wird.
+ Jeder (explizit oder implizit) geöffnete Cursor wird automatisch geschlossen, wenn ein impliziter Commit verarbeitet wird. Daher müssen Sie eine explizite Transaktion öffnen, bevor Sie eine Cursor-Schleife starten, um sicherzustellen, dass SQL innerhalb der Iteration der Schleife nicht implizit festgeschrieben wird.

SECURITY INVOKER \$1 SECURITY DEFINER  
Die Option `SECURITY DEFINER` wird nicht unterstützt, wenn `NONATOMIC` angegeben ist.  
Der Sicherheitsmodus für die Prozedur bestimmt die Zugriffsrechte der Prozedur zur Laufzeit. Die Prozedur muss über die Berechtigung zum Zugreifen auf die zugrunde liegenden Datenbankobjekte verfügen.   
Im SECURITY INVOKER-Modus verwendet die Prozedur die Rechte des Benutzers, der die Prozedur aufruft. Der Benutzer muss über explizite Berechtigungen für die zugrunde liegenden Datenbankobjekte verfügen. Standardmäßig ist SECURITY INVOKER festgelegt.  
Im Modus SECURITY DEFINER verwendet die Prozedur die Berechtigungen des Eigentümers der Prozedur. Der Eigentümer der Prozedur ist definiert als der Benutzer, der die Prozedur zur Laufzeit besitzt. Dies muss nicht zwingend der Benutzer sein, der die Prozedur ursprünglich definiert hat. Der Benutzer, der die Prozedur aufruft, muss über Ausführungsrechte für die Prozedur verfügen. Er benötigt aber keine Rechte für die zugrunde liegenden Objekte. 

SET configuration\$1parameter \$1 TO value \$1 = value \$1  
Diese Optionen werden nicht unterstützt, wenn `NONATOMIC` angegeben ist.  
Die SET-Klausel bewirkt, dass der angegebene `configuration_parameter` beim Starten der Prozedur auf den angegebenen Wert gesetzt wird. Beim Beenden der Prozedur setzte die Klausel den `configuration_parameter` dann wieder auf seinen vorherigen Wert zurück. 

## Nutzungshinweise
<a name="r_CREATE_PROCEDURE-usage"></a>

Wenn eine gespeicherte Prozedur mit der Option SECURITY DEFINER erstellt wurde, gibt Amazon Redshift beim Aufrufen der CURRENT\$1USER-Funktion innerhalb der gespeicherten Prozedur den Benutzernamen des Besitzers der gespeicherten Prozedur zurück.

## Beispiele
<a name="r_CREATE_PROCEDURE-examples"></a>

**Anmerkung**  
Wenn beim Ausführen dieser Beispiele ein Fehler ähnlich dem folgenden auftritt:  

```
ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$
```
Siehe [Übersicht über gespeicherte Prozeduren in Amazon Redshift](stored-procedure-create.md). 

Das folgende Beispiel erstellt eine Prozedur mit zwei Eingabeparametern.

```
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar(20))
AS $$
DECLARE
  min_val int;
BEGIN
  DROP TABLE IF EXISTS tmp_tbl;
  CREATE TEMP TABLE tmp_tbl(id int);
  INSERT INTO tmp_tbl values (f1),(10001),(10002);
  SELECT min_val MIN(id) FROM tmp_tbl;
  RAISE INFO 'min_val = %, f2 = %', min_val, f2;
END;
$$ LANGUAGE plpgsql;
```

**Anmerkung**  
 Wenn Sie gespeicherte Prozeduren schreiben, empfehlen wir eine bewährte Methode zum Sichern sensibler Werte:   
 Nehmen Sie keine Hardkodierung für sensible Informationen in der gespeicherten Prozedurlogik vor. Weisen Sie beispielsweise kein Benutzerkennwort in einer CREATE USER-Anweisung im Text einer gespeicherten Prozedur zu. Dies stellt ein Sicherheitsrisiko dar, da hartkodierte Werte als Schema-Metadaten in Katalogtabellen aufgezeichnet werden können. Übergeben Sie stattdessen mithilfe von Parametern sensible Werte wie Passwörter als Argumente an die gespeicherte Prozedur.   
Weitere Informationen über gespeicherte Prozeduren finden Sie unter [CREATE PROCEDURE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_PROCEDURE.html) und [Erstellen von gespeicherten Prozeduren in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html). Weitere Informationen über die Katalogtabellen finden Sie unter [Systemkatalogtabellen](https://docs.aws.amazon.com/redshift/latest/dg/c_intro_catalog_views.html).

Das folgende Beispiel erstellt eine Prozedur mit einem IN-Parameter, einem OUT-Parameter und einem INOUT-Parameter.

```
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256))
AS $$
DECLARE
  loop_var int;
BEGIN
  IF f1 is null OR f2 is null THEN
    RAISE EXCEPTION 'input cannot be null';
  END IF;
  DROP TABLE if exists my_etl;
  CREATE TEMP TABLE my_etl(a int, b varchar);
    FOR loop_var IN 1..f1 LOOP
        insert into my_etl values (loop_var, f2);
        f2 := f2 || '+' || f2;
    END LOOP;
  SELECT INTO out_var count(*) from my_etl;
END;
$$ LANGUAGE plpgsql;
```

Im folgenden Beispiel wird eine Prozedur erstellt, die den Parameter `SECURITY DEFINER` verwendet. Diese Prozedur wird mit den Rechten des Benutzers ausgeführt, der der Besitzer der Prozedur ist.

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_definer()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
```

Im folgenden Beispiel wird eine Prozedur erstellt, die den Parameter `SECURITY INVOKER` verwendet. Diese Prozedur wird mit den Rechten des Benutzers ausgeführt, der die Prozedur ausführt.

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_invoker()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY INVOKER;
```

# CREATE RLS POLICY
<a name="r_CREATE_RLS_POLICY"></a>

Erstellt eine neue RLS-Richtlinie auf Zeilenebene, um granularen Zugriff auf Datenbankobjekte bereitzustellen.

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Richtlinie erstellen.

## Syntax
<a name="r_CREATE_RLS_POLICY-synopsis"></a>

```
CREATE RLS POLICY { policy_name | database_name.policy_name }
[ WITH (column_name data_type [, ...]) [ [AS] relation_alias ] ]
USING ( using_predicate_exp )
```

## Parameters
<a name="r_CREATE_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der -Richtlinie.

database\$1name  
Der Datenbankname, in dem die Richtlinie erstellt wird. Die Richtlinie kann für die verbundene Datenbank oder für eine Datenbank erstellt werden, die Verbundberechtigungen von Amazon Redshift unterstützt.

MIT (*column\$1name data\$1type [, ...]*)   
Bestimmt den *column\$1name* und den *data\$1type*, die sich auf die Spalten der Tabellen beziehen, denen die Richtlinie zugeordnet ist.   
Sie können die WITH-Klausel nur weglassen, wenn die RLS-Richtlinie (Row-Level Security) auf keine Tabellenspalten verweist, denen die Richtlinie zugeordnet ist.

ALS *relation\$1alias*  
Gibt einen optionalen Alias ​​für die Tabelle an, an die die RLS-Richtlinie (Row-Level Security) angefügt wird.

MITHILFE VON (* using\$1predicate\$1exp *)  
Gibt einen Filter an, der auf die WHERE-Klausel der Abfrage angewendet wird. Amazon Redshift wendet ein Richtlinienprädikat vor den Benutzerprädikaten auf Abfrageebene an. Beispielsweise schränkt **current\$1user = ‘joe’ and price > 10** ein, dass Joe nur Datensätze mit einem Preis von mehr als 10 USD sehen kann.

Informationen zur Verwendung von CREATE RLS POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Nutzungshinweise
<a name="r_CREATE_RLS_POLICY-usage"></a>

Beachten Sie beim Arbeiten mit der CREATE RLS POLICY-Anweisung Folgendes:
+ Amazon Redshift unterstützt Filter, die Teil einer WHERE-Klausel einer Abfrage sein können.
+ Alle Richtlinien, die an eine Tabelle angefügt werden, müssen mit demselben Tabellenalias erstellt worden sein.
+ Verwenden Sie die Anweisungen GRANT und REVOKE, um SELECT-Berechtigungen für RLS-Richtlinien zu gewähren und zu widerrufen, die auf Nachschlagetabellen verweisen. Eine Nachschlagetabelle ist ein Tabellenobjekt, das innerhalb einer Richtliniendefinition verwendet wird. Weitere Informationen erhalten Sie unter [GRANT](r_GRANT.md) und [REVOKE](r_REVOKE.md). 
+ Die Sicherheit auf Zeilenebene von Amazon Redshift unterstützt die folgenden Objekttypen innerhalb einer Richtliniendefinition nicht: Katalogtabellen, datenbankübergreifende Relationen, externe Tabellen, reguläre Ansichten, spät bindende Ansichten, Tabellen mit aktivierten RLS-Richtlinien (Row-Level Security) und temporäre Tabellen.

## Beispiele
<a name="r_CREATE_RLS_POLICY-examples"></a>

Im folgenden Beispiel wird eine RLS-Richtlinie mit dem Namen policy\$1concerts erstellt. Diese Richtlinie gilt für eine VARCHAR (10)-Spalte namens catgroup und legt den USING-Filter so fest, dass nur Zeilen zurückgegeben werden, in denen der Wert von catgroup `'Concerts'` ist.

```
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'Concerts');
```

Ein end-to-end Beispiel für die Verwendung von RLS-Richtlinien finden Sie unter. [Beispiel für Sicherheit auf Zeilenebene end-to-end](t_rls-example.md)

# CREATE ROLE
<a name="r_CREATE_ROLE"></a>

Erstellt eine neue benutzerdefinierte Rolle, bei der es sich um eine Sammlung von Berechtigungen handelt. Eine Liste der systemdefinierten Amazon-Redshift-Rollen finden Sie unter [Systemdefinierte Amazon-Redshift-Rollen](r_roles-default.md). Fragen Sie [SVV\$1ROLES](r_SVV_ROLES.md) ab, um die aktuell erstellten Rollen in Ihrem Cluster oder Ihrer Arbeitsgruppe anzuzeigen.

Es gibt ein Kontingent für die Anzahl der Rollen, die erstellt werden können. Weitere Informationen finden Sie unter [Kontingente und Limits in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) im *Verwaltungshandbuch zu Amazon Redshift*.

## Erforderliche Berechtigungen
<a name="r_CREATE_ROLE-privileges"></a>

Im Folgenden sind die erforderlichen Berechtigungen für CREATE ROLE aufgeführt.
+ Superuser
+ Benutzer mit der Berechtigung CREATE ROLE

## Syntax
<a name="r_CREATE_ROLE-synopsis"></a>

```
CREATE ROLE role_name
[ EXTERNALID external_id ]
```

## Parameters
<a name="r_CREATE_ROLE-parameters"></a>

*rollen\$1name*  
Der Name der Rolle. Der Rollenname muss eindeutig sein und darf nicht mit Benutzernamen identisch sein. Ein Rollenname darf kein reserviertes Wort sein.  
Ein Superuser oder regulärer Benutzer mit der Berechtigung CREATE ROLE kann Rollen erstellen. Ein Benutzer, der kein Superuser ist, aber dem USAGE für die Rolle WITH GRANT OPTION und die Berechtigung ALTER gewährt wurde, kann diese Rolle jedem zuweisen.

EXTERNALID *external\$1id*  
Der Bezeichner für die Rolle, die einem Identitätsanbieter zugeordnet ist. Weitere Informationen finden Sie unter [Nativer Identitätsanbieter(IdP)-Verbund für Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Beispiele
<a name="r_CREATE_ROLE-examples"></a>

Im folgenden Beispiel wird eine `sample_role1`-Rolle erstellt.

```
CREATE ROLE sample_role1;
```

Im folgenden Beispiel wird eine Rolle `sample_role1` mit einer externen ID erstellt, die einem Identitätsanbieter zugeordnet ist.

```
CREATE ROLE sample_role1 EXTERNALID "ABC123";
```

# CREATE SCHEMA
<a name="r_CREATE_SCHEMA"></a>

Definiert ein neues Schema für die aktuelle Datenbank.

## Erforderliche Berechtigungen
<a name="r_CREATE_SCHEMA-privileges"></a>

Für CREATE SCHEMA sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung CREATE SCHEMA

## Syntax
<a name="r_CREATE_SCHEMA-synopsis"></a>

```
CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ]
           [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ]

CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]
```

## Parameters
<a name="r_CREATE_SCHEMA-parameters"></a>

 IF NOT EXISTS   
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass das Schema vorhanden ist, statt mit einem Fehler beendet zu werden, wenn das angegebene Schema bereits vorhanden ist.  
Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn CREATE SCHEMA versucht, ein Schema zu erstellen, das bereits vorhanden ist.

 *schema\$1name*   
Der Name des neuen Schemas. Der Schemaname darf nicht sein `PUBLIC`. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).  
Die Liste der Schemata im Konfigurationsparameter [search\$1path](r_search_path.md) legt die Rangfolge von identisch benannten Objekten fest, wenn sie ohne Schemanamen referenziert werden.

AUTHORIZATION   
Eine Klausel, die einem bestimmten Benutzer den Besitz gewährt.

 *username (Benutzername*   
Der Name des Schemabesitzers.

 *schema\$1element*   
Definition für ein oder mehrere Objekte, die innerhalb des Schemas erstellt werden sollen.

QUOTA  
Die maximale Menge an Speicherplatz, die das angegebene Schema verwenden kann. Dieser Platz ist die gemeinsame Speichernutzung. Er enthält alle permanenten Tabellen, materialisierten Ansichten unter dem angegebenen Schema und doppelte Kopien aller Tabellen mit ALL-Verteilung auf jedem Rechenknoten. Das Schemakontingent berücksichtigt keine temporären Tabellen, die als Teil eines temporären Namespaces oder Schemas erstellt wurden.   
Um die konfigurierten Schemakontingente anzuzeigen, siehe [SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md).  
Um die Datensätze anzuzeigen, bei denen die Schemakontingente überschritten wurden, siehe [STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md).  
Amazon Redshift konvertiert den ausgewählten Wert in Megabyte. Gigabyte ist die Standardmaßeinheit, wenn Sie keinen Wert angeben.  
Sie müssen ein Datenbank-Superuser sein, um ein Schema-Kontingent festzulegen und zu ändern. Ein Benutzer, der kein Superuser ist, aber die CREATE SCHEMA-Berechtigung besitzt, kann ein Schema mit einem definierten Kontingent erstellen. Wenn Sie ein Schema erstellen, ohne ein Kontingent zu definieren, verfügt das Schema über ein unbegrenztes Kontingent. Wenn Sie das Kontingent unter den aktuellen Wert setzen, der vom Schema verwendet wird, erlaubt Amazon Redshift keine weitere Aufnahme, bis Sie Speicherplatz freigeben. Eine DELETE-Anweisung löscht Daten aus einer Tabelle, und Speicherplatz wird nur freigegeben, wenn VACUUM ausgeführt wird.   
Amazon Redshift prüft jede Transaktion auf Kontingentverletzungen, bevor die Transaktion übertragen wird. Amazon Redshift vergleicht die Größe (den von allen Tabellen in einem Schema verwendeten Speicherplatz) jedes geänderten Schemas mit dem festgelegten Kontingent. Da die Kontingentverletzungsprüfung am Ende einer Transaktion erfolgt, kann die Größenbeschränkung das Kontingent vorübergehend innerhalb einer Transaktion überschreiten, bevor sie festgeschrieben wird. Wenn eine Transaktion das Kontingent überschreitet, bricht Amazon Redshift die Transaktion ab, verhindert nachfolgende Erfassungen und macht alle Änderungen rückgängig, bis wieder freier Speicherplatz vorhanden ist. Aufgrund von VACUUM im Hintergrund und internen Bereinigungen ist es möglich, dass ein Schema zu dem Zeitpunkt, zu dem Sie es nach einer abgebrochenen Transaktion prüfen, nicht voll ist.   
Ausnahmsweise ignoriert Amazon Redshift die Kontingentverletzung und führt in bestimmten Fällen Transaktionen durch. Amazon Redshift geht so für Transaktionen vor, die nur aus einer oder mehreren der folgenden Anweisungen bestehen, wenn es keine INSERT- oder COPY-Erfassungsanweisung in derselben Transaktion gibt:  
+ DELETE
+ TRUNCATE
+ VACUUM
+ DROP TABLE
+ ALTER TABLE APPEND, nur beim Verschieben von Daten aus dem vollständigen Schema in ein anderes nicht vollständiges Schema

 *UNLIMITED*   
Amazon Redshift legt keine Begrenzung für das Wachstum der Gesamtgröße des Schemas fest.

## Einschränkungen
<a name="r_CREATE_SCHEMA-limit"></a>

Amazon Redshift erzwingt die folgenden Limits für Schemata.
+ Pro Datenbank sind höchstens 9900 Schemata zulässig.

## Beispiele
<a name="r_CREATE_SCHEMA-examples"></a>

Im folgenden Beispiel wird ein Schema mit dem Namen US\$1SALES erstellt, und der Benutzer DWUSER ist der Besitzer:

```
create schema us_sales authorization dwuser;
```

Im folgenden Beispiel wird ein Schema mit dem Namen US\$1SALES erstellt, der Benutzer DWUSER als Besitzer eingerichtet und das Kontingent auf 50 GB festgelegt.

```
create schema us_sales authorization dwuser QUOTA 50 GB;
```

Um das neue Schema anzuzeigen, führen Sie eine Abfrage für die Katalogtabelle PG\$1NAMESPACE aus, wie nachfolgend gezeigt:

```
select nspname as schema, usename as owner
from pg_namespace, pg_user
where pg_namespace.nspowner = pg_user.usesysid
and pg_user.usename ='dwuser';

   schema |  owner
----------+----------
 us_sales | dwuser
(1 row)
```

Im folgenden Beispiel wird entweder das Schema US\$1SALES erstellt, oder es erfolgt keine Aktion und es wird eine Nachricht zurückgegeben, wenn das Schema bereits vorhanden ist:

```
create schema if not exists us_sales;
```

# CREATE TABLE
<a name="r_CREATE_TABLE_NEW"></a>

Erstellt eine neue Tabelle in der aktuellen Datenbank. Sie definieren eine Liste von Spalten, die jeweils Daten eines bestimmten Typs enthalten. Der Besitzer der Tabelle gibt den Befehl CREATE TABLE aus.

## Erforderliche Berechtigungen
<a name="r_CREATE_TABLE-privileges"></a>

Für CREATE TABLE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung CREATE TABLE

## Syntax
<a name="r_CREATE_TABLE_NEW-synopsis"></a>

```
CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE
[ IF NOT EXISTS ] table_name
( { column_name data_type [column_attributes] [ column_constraints ]
  | table_constraints
  | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] }
  [, ... ]  )
[ BACKUP { YES | NO } ]
[table_attributes]

where column_attributes are:
  [ DEFAULT default_expr ]
  [ IDENTITY ( seed, step ) ]
  [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ]
  [ ENCODE encoding ]
  [ DISTKEY ]
  [ SORTKEY ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]

and column_constraints are:
  [ { NOT NULL | NULL } ]
  [ { UNIQUE  |  PRIMARY KEY } ]
  [ REFERENCES reftable [ ( refcolumn ) ] ]

and table_constraints  are:
  [ UNIQUE ( column_name [, ... ] ) ]
  [ PRIMARY KEY ( column_name [, ... ] )  ]
  [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]


and table_attributes are:
  [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ]
  [ DISTKEY ( column_name ) ]
  [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) |  [ SORTKEY AUTO ] ]
  [ ENCODE AUTO ]
```

## Parameters
<a name="r_CREATE_TABLE_NEW-parameters"></a>

LOCAL   
Optional. Obwohl dieses Schlüsselwort in der Anweisung akzeptiert wird, hat es in Amazon Redshift keine Auswirkungen.

TEMPORARY \$1 TEMP   
Ein Schlüsselwort, das eine temporäre Tabelle erstellt, die nur innerhalb der aktuellen Sitzung angezeigt wird. Die Tabelle wird am Ende der Sitzung, in der sie erstellt wird, automatisch entfernt. Die temporäre Tabelle kann denselben Namen wie eine permanente Tabelle haben. Die temporäre Tabelle wird in einem eigenen, sitzungsspezifischen Schema erstellt. (Sie können für dieses Schema keinen Namen angeben.) Dieses temporäre Schema wird das erste Schema im Suchpfad. Daher hat die temporäre Tabelle Vorrang vor der permanenten Tabelle, es sei denn, Sie qualifizieren den Tabellennamen mit dem Schemanamen, um auf die permanente Tabelle zuzugreifen. Weitere Informationen zu Schemata und Rangfolgen finden Sie unter [search\$1path](r_search_path.md).  
Standardmäßig besitzen Datenbankbenutzer aufgrund ihrer automatischen Mitgliedschaft in der Gruppe PUBLIC die Berechtigung, temporäre Tabellen zu erstellen. Um dieses Recht für einen Benutzer abzulehnen, widerrufen Sie das TEMP-Recht in der Gruppe PUBLIC und gewähren dann das TEMP-Recht explizit nur spezifischen Benutzern oder Benutzergruppen.

IF NOT EXISTS  
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass die Tabelle vorhanden ist, statt mit einem Fehler beendet zu werden, wenn die angegebene Tabelle bereits vorhanden ist. Beachten Sie, dass die vorhandene Tabelle möglicherweise überhaupt nicht der Tabelle entspricht, die erstellt worden wäre. Es wird nur der Tabellenname verglichen.  
Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn CREATE TABLE versucht, eine Tabelle zu erstellen, die bereits vorhanden ist.

 *table\$1name*   
Der Name der Tabelle, die erstellt werden soll.  
Wenn Sie einen Tabellennamen angeben, der mit „\$1“ beginnt, wird die Tabelle als temporäre Tabelle erstellt. Im Folgenden wird ein Beispiel gezeigt:  

```
create table #newtable (id int);
```
Sie verwenden „\$1“ auch für Verweise auf die Tabelle. Beispiel:   

```
select * from #newtable;
```
Die maximale Länge des Tabellennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Amazon Redshift erzwingt ein Kontingent für die Anzahl der Tabellen pro Cluster nach Knotentyp, einschließlich benutzerdefinierter temporärer Tabellen und temporärer Tabellen, die von Amazon Redshift während der Abfrageverarbeitung oder Systemwartung erstellt werden. Optional kann der Tabellenname mit dem Datenbank- und Schemanamen qualifiziert werden. Im folgenden Beispiel ist der Datenbankname `tickit`, der Schemaname `public` und der Tabellenname `test`.   

```
create table tickit.public.test (c1 int);
```
Wenn die Datenbank oder das Schema nicht vorhanden sind, wird die Tabelle nicht erstellt, und die Anweisung gibt einen Fehler zurück. Sie können in den Systemdatenbanken `template0`, `template1`, `padb_harvest` oder `sys:internal` keine Tabellen oder Ansichten erstellen.  
Wenn ein Schemaname vorhanden ist, wird die neue Tabelle in diesem Schema erstellt (vorausgesetzt, der Ersteller kann auf das Schema zugreifen). Der Tabellenname muss für dieses Schema eindeutig sein. Wenn kein Schema angegeben ist, wird die Tabelle anhand des aktuellen Datenbankschemas erstellt. Wenn Sie eine temporäre Tabelle erstellen, können Sie keinen Schemanamen angeben, da sich temporäre Tabellen in einem speziellen Schema befinden.  
Mehrere temporäre Tabellen mit demselben Namen können in derselben Datenbank zur gleichen Zeit vorhanden sein, wenn sie in getrennten Sitzungen erstellt wurden, da die Tabellen unterschiedlichen Schemata zugewiesen werden. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

 *column\$1name*   
Der Name einer Spalte, die in der neuen Tabelle erstellt werden soll. Die maximale Länge des Spaltennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Sie können UTF-8-Multibyte-Zeichen bis zu einer Länge von vier Bytes verwenden. Die maximale Anzahl der Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 1.600. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).  
Wenn Sie eine „breite Tabelle“ erstellen, achten Sie darauf, dass Ihre Spaltenliste nicht die Zeilenbreitengrenzen überschreitet, um während der Verarbeitung von Lasten und Abfragen sofort Ergebnisse bereitzustellen. Weitere Informationen finden Sie unter [Nutzungshinweise](#r_CREATE_TABLE_usage).

 *data\$1type*   
Der Datentyp der Spalte, die erstellt wird. Im Fall der Spalten CHAR und VARCHAR können Sie das Schlüsselwort MAX verwenden, statt eine maximale Länge zu deklarieren. MAX legt die maximale Länge auf 4.096 Bytes für CHAR oder 65.535 Bytes für VARCHAR fest. Die maximale Größe eines GEOMETRY-Objekts beträgt 1.048.447 Byte..  
Informationen zu den Datentypen, die Amazon Redshift unterstützt, finden Sie unter [Datentypen](c_Supported_data_types.md).

DEFAULT *default\$1expr*   <a name="create-table-default"></a>
Eine Klausel, die der Spalte einen Standarddatenwert zuweist. Der Datentyp von *default\$1expr* muss dem Datentyp der Spalte entsprechen. Der Wert DEFAULT muss ein variablenloser Ausdruck sein. Unterabfragen, Querreferenzen auf andere Spalten in der aktuellen Tabelle und benutzerdefinierte Funktionen sind nicht zulässig.  
Der Ausdruck *default\$1expr* wird in jeder INSERT-Operation verwendet, die keinen Wert für die Spalte angibt. Wenn kein Standardwert angegeben ist, ist der Standardwert für die Spalte null.  
Wenn eine COPY-Operation mit einer definierten Spaltenliste eine Spalte mit einem DEFAULT-Wert auslässt, fügt der Befehl COPY den Wert von *default\$1expr* ein.

IDENTITY(*seed*, *step*)   <a name="identity-clause"></a>
Eine Klausel, die angibt, dass es sich bei der Spalte um eine IDENTITY-Spalte handelt. Eine IDENTITY-Spalte enthält eindeutige, automatisch generierte Werte. Der Datentyp für eine IDENTITY-Spalte muss entweder INT oder BIGINT sein.   
Wenn Sie Zeilen mithilfe einer `INSERT`- oder `INSERT INTO [tablename] VALUES()`-Anweisung hinzufügen, beginnen diese Werte mit dem Wert, der als *Startwert* angegeben ist, und werden um die Zahl gesteigert, die als *Schritt* bezeichnet wird.   
Wenn Sie die Tabelle mithilfe einer `INSERT INTO [tablename] SELECT * FROM`- oder `COPY`-Anweisung laden, werden die Daten parallel geladen und auf die Knoten-Slices verteilt. Um sicherzustellen, dass die IDENTITY-Werte eindeutig sind, überspringt Amazon Redshift beim Erstellen von IDENTITY-Werten eine Reihe von Werten. Identity-Werte sind eindeutig, ihre Reihenfolge stimmt jedoch möglicherweise nicht mit der in den Quelldateien überein. 

GENERATED BY DEFAULT AS IDENTITY(*Startwert*, *Schritt*)   <a name="identity-generated-bydefault-clause"></a>
Eine Anweisung, die angibt, dass es sich bei der Spalte um eine Standard-IDENTITY-Spalte handelt, und dass Sie der Spalte automatisch einen eindeutigen Wert zuweisen können. Der Datentyp für eine IDENTITY-Spalte muss entweder INT oder BIGINT sein. Wenn Sie Zeilen ohne Werte hinzufügen, beginnen diese Werte mit dem Wert, der als *Startwert* angegeben ist, und werden um die Zahl erhöht, die als *Schritt* bezeichnet wird. Informationen zur Generierung von Werten finden Sie unter [IDENTITY](#identity-clause) .  
Außerdem können Sie während INSERT, UPDATE oder COPY einen Wert ohne EXPLICIT\$1IDS angeben. Amazon Redshift verwendet diesen Wert zum Einfügen in die Identitätsspalte, anstatt den vom System generierten Wert zu verwenden. Der Wert kann ein Duplikat, ein Wert unter dem Startwert oder ein Wert zwischen Schrittwerten sein. Amazon Redshift prüft nicht die Eindeutigkeit der Werte in der Spalte. Das Angeben eines Wertes hat keinen Einfluss auf den nächsten vom System generierten Wert.  
Wenn Sie Eindeutigkeit in der Spalte benötigen, fügen Sie keinen Duplikatwert hinzu. Fügen Sie stattdessen einen eindeutigen Wert hinzu, der unter dem Startwert oder zwischen Schrittwerten liegt.
Bedenken Sie Folgendes zu Standard-Identity-Spalten:   
+ Standard-IDENTITY-Spalten sind NOT NULL. NULL kann nicht eingefügt werden.
+ Verwenden Sie zum Einfügen eines generierten Wertes in eine Standard-Identity-Spalte das Schlüsselwort `DEFAULT`. 

  ```
  INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  ```
+ Das Überschreiben von Werten einer Standard-Identity-Spalte hat keine Auswirkungen auf den nächsten generierten Wert. 
+ Sie können nicht eine Standard-Identity-Spalte mit der Anweisung ALTER TABLE ADD COLUMN anhängen. 
+ Sie können eine Standard-Identity-Spalte mit der Anweisung ALTER TABLE APPEND anhängen. 

ENCODE *encoding*   
Die Kompressionskodierung für eine Spalte. ENCODE AUTO ist die Standardeinstellung für Tabellen. Amazon Redshift verwaltet automatisch die Komprimierungskodierung für alle Spalten in der Tabelle. Wenn Sie die Komprimierungskodierung für eine Spalte in der Tabelle angeben, wird die Tabelle nicht mehr auf ENCODE AUTO festgelegt. Amazon Redshift verwaltet nicht mehr automatisch die Komprimierungskodierung für alle Spalten in der Tabelle. Sie können die Option ENCODE AUTO für die Tabelle angeben, damit Amazon Redshift die Komprimierungskodierung für alle Spalten in der Tabelle automatisch verwalten kann.  
  
Amazon Redshift weist den Spalten, für die Sie keine Komprimierungskodierung angeben, automatisch eine anfängliche Komprimierungskodierung zu:  
+ Allen Spalten in temporären Tabellen wird standardmäßig die RAW-Kompression zugewiesen.
+ Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als Datentyp BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY oder GEOGRAPHY definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird Komprimierung zugewiesen. AZ64
+ Spalten, die als CHAR, VARCHAR oder VARBYTE definiert sind, wird LZO-Komprimierung zugewiesen.
Wenn Sie nicht möchten, dass eine Spalte komprimiert wird, geben Sie die RAW-Kodierung explizit an.
 Die folgenden [compression encodings](c_Compression_encodings.md#compression-encoding-list) werden unterstützt:  
+ AZ64
+ BYTEDICT
+ DELTA
+ DELTA32K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (keine Kompression)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD

DISTKEY  
Ein Schlüsselwort, das angibt, dass die Spalte der Verteilungsschlüssel für die Tabelle ist. In eine Tabelle kann nur eine Spalte der Verteilungsschlüssel sein. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen oder als Teil der Tabellendefinition verwenden, indem Sie die DISTKEY-Syntax (*column\$1name*) verwenden. Beide Methoden haben die gleiche Wirkung. Weitere Informationen finden Sie unter „DISTSTYLE-Parameter“ später in diesem Thema.  
Als Datentyp einer Verteilungsschlüsselspalte kommen BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ, CHAR oder VARCHAR infrage.

SORTKEY  
Ein Schlüsselwort, das angibt, dass die Spalte der Sortierschlüssel für die Tabelle ist. Wenn Daten in die Tabelle geladen werden, werden die Daten anhand einer oder mehrerer Spalten sortiert, die als Sortierschlüssel bezeichnet sind. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen verwenden, um eine einzelne Spalte als Sortierschlüssel zu bezeichnen, oder eine oder mehrere Spalten als Sortierschlüsselspalten für die Tabelle angeben, indem Sie die SORTKEY (*column\$1name* [, ...]) -Syntax verwenden. Mit dieser Syntax werden nur zusammengesetzte Sortierschlüssel erstellt.  
Sie können maximal 400 SORTKEY-Spalten pro Tabelle definieren.  
Als Datentyp einer Sortierschlüsselspalte kommen BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ, CHAR oder VARCHAR infrage.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Eine Klausel, die angibt, ob beim Suchen oder Vergleichen von Zeichenfolgen in der Spalte zwischen Groß- und Kleinschreibung unterschieden wird oder nicht. Der Standardwert entspricht der aktuellen Konfiguration für die Beachtung der Groß-/Kleinschreibung in der Datenbank.  
COLLATE wird nur für auf Zeichenfolgen basierende Datentypen unterstützt, darunter CHAR, VARCHAR und Zeichenkettenwerte in SUPER-Spalten. Einzelheiten zur Abfrage von SUPER-Daten ohne Berücksichtigung der Groß- und Kleinschreibung finden Sie unter. [Bei Abfragen wird nicht zwischen Groß- und Kleinschreibung unterschieden](query-super.md#case-insensitive-super-queries)  
Verwenden Sie den folgenden Befehl, um die Sortierinformationen der Datenbank zu ermitteln:  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE und CS sind austauschbar und liefern dieselben Ergebnisse. Ebenso sind CASE\$1INSENSITIVE und CI austauschbar und führen zu denselben Ergebnissen.

NOT NULL \$1 NULL   
NOT NULL gibt an, dass die Spalte keine Null-Werte enthalten darf. Der Standardwert NULL gibt an, dass die Spalte Null-Werte akzeptiert. IDENTITY-Spalten werden standardmäßig als NOT NULL deklariert.

UNIQUE  
Ein Schlüsselwort, das angibt, dass die Spalte nur eindeutige Werte enthalten darf. Das Verhalten der Tabelleneinschränkung in Bezug auf Eindeutigkeit ist das gleiche wie im Fall von Spalteneinschränkungen, kann jedoch zusätzlich mehrere Spalten umfassen. Um eine Tabelleneinschränkung in Bezug auf Eindeutigkeit zu definieren, verwenden Sie die UNIQUE-Syntax (*column\$1name* [, ... ]).  
Eindeutigkeitseinschränkungen dienen Informationszwecken und werden nicht vom System erzwungen.

PRIMARY KEY  
Ein Schlüsselwort, das angibt, dass die Spalte der Primärschlüssel für die Tabelle ist. Mittels einer Spaltendefinition kann nur eine Spalte als Primärschlüssel definiert werden. Um eine Tabelleneinschränkung mit einem mehrspaltigen Primärschlüssel zu definieren, verwenden Sie die PRIMARY KEY-Syntax (*column\$1name* [, ... ]).  
Die Identifizierung einer Spalte als Primärschlüssel stellt Metadaten über das Design des Schemas bereit. Ein Primärschlüssel impliziert, dass sich andere Tabellen auf diesen Spaltensatz als eindeutige Bezeichner von Zeilen verlassen können. Für eine Tabelle kann jeweils nur ein Primärschlüssel angegeben werden, ob als Spalten- oder als Tabelleneinschränkung. Die Primärschlüsseleinschränkung sollte einen Spaltensatz nennen, der sich von anderen Spaltensätzen unterscheidet, der von anderen eindeutigen Einschränkungen genannt wird, die für dieselbe Tabelle definiert sind.  
PRIMARY KEY-Spalten sind ebenfalls als NOT NULL definiert.  
Primärschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet.

References *reftable* [ ( *refcolumn* ) ]  
Eine Klausel, die eine Fremdschlüsseleinschränkung angibt, die impliziert, dass die Spalte nur Werte enthalten darf, die Werten in der referenzierten Spalte einer Zeile der referenzierten Tabelle entsprechen. Bei den referenzierten Spalten muss es sich um die Spalten einer Eindeutigkeits- oder Primärschlüsseleinschränkung in der referenzierten Tabelle handeln.   
 Fremdschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet. 

LIKE *parent\$1table* [ \$1 INCLUDING \$1 EXCLUDING \$1 DEFAULTS ]   <a name="create-table-like"></a>
Eine Klausel, die eine vorhandene Tabelle angibt, aus der die neue Tabelle automatisch Spaltennamen, Datentypen und NOT NULL-Einschränkungen kopiert. Die neue Tabelle und die übergeordnete Tabelle werden entkoppelt, und Änderungen, die in der übergeordneten Tabelle ausgeführt werden, werden nicht auf die neue Tabelle angewendet. Standardausdrücke für die kopierten Spaltendefinitionen werden nur kopiert, wenn INCLUDING DEFAULTS angegeben ist. Das Standardverhalten besteht darin, Standardausdrücke auszuschließen, sodass alle Spalten der neuen Tabelle keine Standardwerte besitzen.   
Tabellen, die mit der LIKE-Option erstellt werden, erben keine Primär- und Fremdschlüsseleinschränkungen. Die Eigenschaften Verteilungstyp, Sortierschlüssel, BACKUP und NULL werden von LIKE-Tabellen geerbt. Sie können sie in der Anweisung CREATE TABLE ... LIKE jedoch nicht explizit festlegen.

BACKUP \$1 YES \$1 NO \$1   <a name="create-table-backup"></a>
Eine Klausel, die angibt, ob die Tabelle in automatisierten und manuellen Cluster-Snapshots enthalten sein sollte.   
Geben Sie für Tabellen wie Staging-Tabellen, die keine kritischen Daten enthalten, BACKUP NO an, um beim Erstellen und Wiederherstellen von Snapshots Verarbeitungszeit zu sparen und den Speicherplatz auf Amazon Simple Storage Service zu reduzieren. Die Einstellung BACKUP NO wirkt sich nicht auf die automatische Replikation von Daten zu anderen Knoten innerhalb des Clusters aus. Daher werden Tabellen mit BACKUP NO bei einem Knotenausfall wiederhergestellt. Der Standardwert ist BACKUP YES.  
Tabellen ohne Backup werden für RA3 bereitgestellte Cluster und serverlose Amazon Redshift Workgroups nicht unterstützt. Eine Tabelle, die in einem RA3 Cluster oder einer serverlosen Arbeitsgruppe als „kein Backup“ gekennzeichnet ist, wird als permanente Tabelle behandelt, die bei der Erstellung eines Snapshots immer gesichert und bei der Wiederherstellung aus einem Snapshot immer wiederhergestellt wird. Um Snapshot-Kosten für Tabellen ohne Backup zu vermeiden, sollten Sie diese vor der Erstellung eines Snapshots kürzen.

DISTSTYLE \$1 AUTO \$1 EVEN \$1 KEY \$1 ALL \$1  
Schlüsselwort, das den Datenverteilungsstil für die gesamte Tabelle definiert. Amazon Redshift verteilt die Zeilen einer Tabelle an die Datenverarbeitungsknoten gemäß dem für die Tabelle angegebenen Verteilungstyp. Der Standardwert ist "AUTO".  
Der von Ihnen für Tabellen ausgewählte Verteilungsstil wirkt sich auf die allgemeine Leistung Ihrer Datenbank aus. Weitere Informationen finden Sie unter [Datenverteilung zur Abfrageoptimierung](t_Distributing_data.md). Die möglichen Distributionsstile sind:  
+ AUTO: Amazon Redshift weist auf der Grundlage der Tabellendaten den optimalen Verteilungsstil aus. Wenn beispielsweise der Verteilungsstil AUTO angegeben ist, weist Amazon Redshift kleinen Tabellen zunächst den Verteilungsstil ALL zu. Wenn die Tabelle größer wird, ändert Amazon Redshift den Verteilungsstil möglicherweise in KEY und wählt den Primärschlüssel (oder eine Spalte des zusammengesetzten Primärschlüssels) als DISTKEY. Wenn die Tabelle größer wird und keine der Spalten als DISTKEY geeignet ist, ändert Amazon Redshift den Verteilungsstil in EVEN. Die Änderung des Verteilungsstils erfolgt im Hintergrund mit minimalen Auswirkungen auf die Benutzerabfragen. 

  Um den Verteilungsstil einer Tabelle anzuzeigen, führen Sie eine Abfrage für die Systemkatalogtabelle PG\$1CLASS aus. Weitere Informationen finden Sie unter [Anzeigen von Verteilungsstilen](viewing-distribution-styles.md). 
+ EVEN: Die Daten in der Tabelle werden gleichmäßig in einer Round-Robin-Verteilung auf die Knoten in einem Cluster verteilt. Zeilen IDs werden verwendet, um die Verteilung zu bestimmen, und ungefähr die gleiche Anzahl von Zeilen wird auf jeden Knoten verteilt. 
+ KEY: Die Daten werden anhand der Werte in der DISTKEY-Spalte verteilt. Wenn Sie verknüpfte Spalten von verknüpften Tabellen als Verteilungsschlüssel festlegen, werden die verknüpften Zeilen aus beiden Tabellen auf den Datenverarbeitungsknoten zusammen platziert. Wenn Daten zusammen platziert werden, kann der Optimierer Verknüpfungen effizienter ausführen. Wenn Sie DISTSTYLE KEY angeben, müssen Sie eine DISTKEY-Spalte benennen, entweder für die Tabelle oder als Teil der Spaltendefinition. Weitere Informationen finden Sie unter „DISTKEY-Parameter“ früher in diesem Thema.
+  ALL: Eine Kopie der gesamten Tabelle wird zu jedem Knoten verteilt. Dieser Verteilungsstil stellt sicher, dass alle Zeilen, die für eine Verknüpfung erforderlich sind, auf jedem Knoten vorhanden sind. Die Speicheranforderungen werden jedoch multipliziert und die Lade- und Wartungszeiten für die Tabelle werden verlängert. Der Verteilungsstil ALL kann die Ausführungszeit verbessern, wenn er in Verbindung mit bestimmten Dimensionstabellen verwendet wird, für die der Verteilungsstil KEY nicht geeignet ist. Die Leistungsverbesserungen müssen jedoch gegen die Wartungskosten abgewogen werden. 

DISTKEY ( *column\$1name* )  
Eine Einschränkung, die die Spalte angibt, die als Verteilungsschlüssel für die Tabelle verwendet werden soll. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen oder als Teil der Tabellendefinition verwenden, indem Sie die DISTKEY-Syntax (*column\$1name*) verwenden. Beide Methoden haben die gleiche Wirkung. Weitere Informationen finden Sie unter „DISTSTYLE-Parameter“ früher in diesem Thema.

[COMPOUND \$1 INTERLEAVED ] SORTKEY (* column\$1name* [,...]) \$1 [ SORTKEY AUTO ]  
Gibt einen oder mehrere Sortierschlüssel für die Tabelle an. Wenn Daten in die Tabelle geladen werden, werden die Daten anhand der Spalten sortiert, die als Sortierschlüssel bezeichnet sind. Sie können das DISTKEY-Schlüsselwort nach einem Spaltennamen verwenden, um eine einzelne Spalte als Sortierschlüssel zu bezeichnen, oder eine oder mehrere Spalten als Sortierschlüsselspalten für die Tabelle angeben, indem Sie die `SORTKEY (column_name [ , ... ] )`-Syntax verwenden.   
Sie können optional den COMPOUND- oder INTERLEAVED-Sortierstil angeben. Wenn Sie SORTKEY mit Spalten angeben, ist der Standardwert COMPOUND. Weitere Informationen finden Sie unter [Sortierschlüssel](t_Sorting_data.md).  
Wenn Sie keine Sortierschlüsseloptionen angeben, ist die Standardeinstellung AUTO.  
Sie können pro Tabelle maximal 400 COMPOUND SORTKEY-Spalten oder 8 INTERLEAVED SORTKEY-Spalten definieren.     
AUTO  
Legt fest, dass Amazon Redshift einen optimalen Sortierschlüssel basierend auf den Tabellendaten zuweist. Wenn zum Beispiel der Sortierschlüssel AUTO angegeben ist, weist Amazon Redshift einer Tabelle zunächst keinen Sortierschlüssel zu. Wenn Amazon Redshift feststellt, dass ein Sortierschlüssel die Leistung von Abfragen verbessert, kann Amazon Redshift den Sortierschlüssel Ihrer Tabelle ändern. Die eigentliche Sortierung der Tabelle erfolgt durch die automatische Tabellensortierung. Weitere Informationen finden Sie unter [Automatische Tabellensortierung](t_Reclaiming_storage_space202.md#automatic-table-sort).   
Amazon Redshift ändert keine Tabellen, die bereits Sortier- oder Verteilungsschlüssel haben. Wenn eine Tabelle über einen Verteilungsschlüssel verfügt, der nie in einem JOIN verwendet wurde, kann der Schlüssel geändert werden, wenn Amazon Redshift feststellt, dass ein besserer Schlüssel vorhanden ist.   
Um den Sortierschlüssel einer Tabelle anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1TABLE\$1INFO ab. Weitere Informationen finden Sie unter [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Um die Empfehlungen von Amazon Redshift Advisor für Tabellen anzuzeigen, fragen Sie die Systemkatalogansicht SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS ab. Weitere Informationen finden Sie unter [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Um die von Amazon Redshift durchgeführten Aktionen anzuzeigen, fragen Sie die Systemkatalogansicht SVL\$1AUTO\$1WORKER\$1ACTION ab. Weitere Informationen finden Sie unter [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md).   
COMPOUND  
Gibt an, dass die Daten mittels eines zusammengesetzten Schlüssels sortiert werden, der aus allen aufgelisteten Spalten in der Reihenfolge ihrer Auflistung besteht. Ein zusammengesetzter Sortierschlüssel ist am nützlichsten, wenn eine Abfrage Zeilen in der Reihenfolge der Sortierspalten scannt. Die Leistungsvorteile einer Sortierung mit einem zusammengesetzten Schlüssel nehmen ab, wenn Abfragen von sekundären Sortierspalten abhängig sind. Sie können maximal 400 COMPOUND SORTKEY-Spalten pro Tabelle definieren.   
INTERLEAVED  
Gibt an, dass die Daten mittels eines überlappenden Sortierschlüssels sortiert werden. Für einen überlappenden Sortierschlüssel können maximal acht Spalten angegeben werden.   
Eine überlappende Sortierung gewichtet jede Spalte bzw. jeden Subsatz von Spalten im Sortierschlüssel gleich, so dass Abfragen nicht von der Reihenfolge der Spalten im Sortierschlüssel abhängig sind. Wenn eine Abfrage eine oder mehrere sekundäre Sortierspalten verwendet, wird die Abfrageleistung durch die überlappende Sortierung deutlich verbessert. Die überlappende Sortierung führt zu geringfügigen Overhead-Kosten für das Laden von Daten und das Bereinigen von Operationen.   
Verwenden Sie keinen Interleaved-Sortierschlüssel in Spalten mit monoton ansteigenden Attributen, wie Identitätsspalten, Daten oder Zeitstempel.

ENCODE AUTO   
Ermöglicht Amazon Redshift, den Kodierungstyp für alle Spalten in der Tabelle automatisch anzupassen, um die Abfrageleistung zu optimieren. ENCODE AUTO behält die anfänglichen Kodierungstypen bei, die Sie beim Erstellen der Tabelle angeben. Wenn Amazon Redshift dann feststellt, dass ein neuer Kodierungstyp die Abfrageleistung verbessern kann, kann Amazon Redshift den Kodierungstyp der Tabellenspalten ändern. ENCODE AUTO ist die Standardeinstellung, wenn Sie keinen Kodierungstyp für eine Spalte in der Tabelle angeben.

UNIQUE ( *column\$1name* [,...] )  
Eine Einschränkung, die angibt, dass eine Gruppe aus einer oder mehreren Spalten einer Tabelle nur eindeutige Werte enthalten darf. Das Verhalten der Tabelleneinschränkung in Bezug auf Eindeutigkeit ist das gleiche wie im Fall von Spalteneinschränkungen, kann jedoch zusätzlich mehrere Spalten umfassen. Im Kontext von Eindeutigkeitseinschränkungen werden Null-Werte nicht als gleichwertig betrachtet. Jede Eindeutigkeitseinschränkung für eine Tabelle muss einen Spaltensatz nennen, der sich von dem Spaltensatz unterscheidet, der von einer anderen Eindeutigkeits- oder Primärschlüsseleinschränkung genannt wird, die für die Tabelle definiert ist.   
 Eindeutigkeitseinschränkungen dienen Informationszwecken und werden nicht vom System erzwungen. 

PRIMARY KEY ( *column\$1name* [,...] )  
Eine Einschränkung, die angibt, dass eine Spalte oder eine Reihe von Spalten einer Tabelle nur eindeutige (nicht duplizierte) Nicht-Null-Werte enthalten darf. Die Identifizierung eines Spaltensatzes als Primärschlüssel stellt darüber hinaus Metadaten zum Design des Schemas bereit. Ein Primärschlüssel impliziert, dass sich andere Tabellen auf diesen Spaltensatz als eindeutige Bezeichner von Zeilen verlassen können. Für eine Tabelle kann jeweils nur ein Primärschlüssel angegeben werden, ob als Einzelspalten- oder als Tabelleneinschränkung. Die Primärschlüsseleinschränkung sollte einen Spaltensatz nennen, der sich von anderen Spaltensätzen unterscheidet, der von anderen eindeutigen Einschränkungen genannt wird, die für dieselbe Tabelle definiert sind.   
 Primärschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet. 

FOREIGN KEY ( *column\$1name* [, ... ] ) REFERENCES *reftable* [ ( *refcolumn* ) ]   
Eine Einschränkung, die eine Fremdschlüsseleinschränkung angibt, die erfordert, dass eine Gruppe aus einer oder mehreren Spalten der neuen Tabelle nur Werte enthalten darf, die Werten in der referenzierten Spalte oder den Spalten einer Zeile der referenzierten Tabelle entsprechen. Wenn *refcolumn* ausgelassen wird, wird der Primärschlüssel von *reftable* verwendet. Bei den referenzierten Spalten muss es sich um die Spalten einer Eindeutigkeits- oder Primärschlüsseleinschränkung in der referenzierten Tabelle handeln.  
Fremdschlüsseleinschränkungen dienen lediglich Informationszwecken. Sie werden nicht vom System erzwungen, werden jedoch vom Planer verwendet.

## Nutzungshinweise
<a name="r_CREATE_TABLE_usage"></a>

Einschränkungen hinsichtlich Eindeutigkeit, Primärschlüssel und Fremdschlüssel dienen lediglich Informationszwecken. *Sie werden von Amazon Redshift nicht erzwungen*, wenn Sie eine Tabelle ausfüllen. Wenn Sie beispielsweise Daten in eine Tabelle mit Abhängigkeiten einfügen, kann der Einfügevorgang erfolgreich sein, auch wenn er gegen die Einschränkung verstößt. Dennoch werden Primärschlüssel und Fremdschlüssel als Planungshilfen verwendet und sollten deklariert werden, wenn Ihr ETL-Prozess oder ein anderer Prozess in Ihrer Anwendung ihre Integrität erzwingt. Hinweise zum Entfernen einer Tabelle mit Abhängigkeiten finden Sie unter [DROP TABLE](r_DROP_TABLE.md).

### Limits und Kontingente
<a name="r_CREATE_TABLE_usage-limits"></a>

Berücksichtigen Sie beim Erstellen einer Tabelle die folgenden Grenzwerte.
+ Es gibt eine Begrenzung für die maximale Anzahl von Tabellen in einem Cluster nach Knotentyp. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) im *Amazon-Redshift-Verwaltungshandbuch*. 
+ Die maximale Anzahl von Zeichen für einen Tabellennamen ist 127. 
+ Die maximale Anzahl der Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 1.600. 
+ Die maximale Anzahl der SORTKEY-Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 400. 

### Übersicht über Einstellungen auf Spalten- und Tabellenebene
<a name="r_CREATE_TABLE_usage-summary_of_settings"></a>

 Auf Spalten- oder Tabellenebene können verschiedene Attribute und Einstellungen festgelegt werden. In einigen Fällen hat die Festlegung eines Attributs oder einer Einschränkung auf der Spalten- oder Tabellenebene die gleiche Wirkung. In anderen Fällen führt dies zu unterschiedlichen Ergebnissen. 

 Die folgende Liste bietet eine Übersicht über Einstellungen auf Spalten- und Tabellenebene: 

DISTKEY  
Es gibt keinen Unterschied hinsichtlich der Wirkung, ob auf Spalten- oder ob auf Tabellenebene festgelegt.   
Wenn DISTKEY festgelegt auf der Spalten- oder Tabellenebene festgelegt wird, muss DISTSTYLE auf KEY oder darf überhaupt nicht festgelegt werden. DISTSTYLE kann nur auf Tabellenebene festgelegt werden. 

SORTKEY  
Bei Festlegung auf Spaltenebene muss SORTKEY aus einer einzelnen Spalte bestehen. Bei Festlegung von SORTKEY auf Tabellenebene können eine oder mehrere Spalten einen zusammengesetzten oder überlappenden Sortierschlüssel bilden. 

COLLATE CASE\$1SENSITIVE \$1 COLLATE CASE\$1INSENSITIVE  
Amazon Redshift bietet keine Unterstützung für die Änderung der Konfiguration für die Unterscheidung von Groß- und Kleinschreibung für eine Spalte. Wenn Sie eine neue Spalte an die Tabelle anfügen, verwendet Amazon Redshift den Standardwert für die Unterscheidung von Groß- und Kleinschreibung. Amazon Redshift unterstützt beim Anhängen einer neuen Spalte nicht das Schlüsselwort COLLATE.  
Weitere Informationen zur Erstellung von Datenbanken mit der Datenbanksortierung finden Sie unter [CREATE DATABASE](r_CREATE_DATABASE.md).  
Weitere Informationen über die COLLATE-Funktionen finden Sie unter [Funktion COLLATE](r_COLLATE.md).

UNIQUE  
Bei Festlegung auf Spaltenebene können ein oder mehrere Schlüssel als UNIQUE festgelegt werden. Die UNIQUE-Einschränkung gilt für jede Spalte einzeln. Bei Festlegung von UNIQUE auf Tabellenebene können eine oder mehrere Spalten eine zusammengesetzte UNIQUE-Einschränkung bilden. 

PRIMARY KEY  
Bei Festlegung auf Spaltenebene muss PRIMARY KEY aus einer einzelnen Spalte bestehen. Bei Festlegung von PRIMARY KEY auf Tabellenebene können eine oder mehrere Spalten einen zusammengesetzten Primärschlüssel bilden. 

FOREIGN KEY  
Es gibt keinen Unterschied hinsichtlich der Wirkung, unabhängig davon, ob FOREIGN KEY auf Spalten- oder auf Tabellenebene festgelegt wird. Auf Spaltenebene ist die Syntax einfach `REFERENCES` *reftable* [ ( *refcolumn* )]. 

### Verteilung eingehender Daten
<a name="r_CREATE_TABLE_usage-distribution-of-incoming-data"></a>

Wenn das Hash-Verteilungsschema der eingehenden Daten dem der Zieltabelle entspricht, ist keine physische Verteilung der Daten notwendig, wenn die Daten geladen werden. Wenn beispielsweise ein Verteilungsschlüssel für die neue Tabelle festgelegt wird und die Daten aus einer anderen Tabelle eingefügt werden, die anhand der gleichen Schlüsselspalte verteilt wird, werden die Daten unter Verwendung derselben Knoten und Slices entsprechend geladen. Wenn jedoch sowohl die Quell- als auch die Zieltabelle auf eine EVEN-Verteilung festgelegt sind, werden die Daten neu zur Zieltabelle verteilt.

### Breite Tabellen
<a name="r_CREATE_TABLE_usage-wide-tables"></a>

Möglicherweise können Sie eine sehr breite Tabelle erstellen, können jedoch für die Tabelle keine Abfragen wie INSERT oder SELECT verarbeiten. Die maximale Breite einer Tabelle mit Spalten fester Breite, z. B. CHAR, beträgt 64 KB - 1 (oder 65535 Bytes). Wenn eine Tabelle VARCHAR-Spalten enthält, kann die Tabelle eine größere deklarierte Breite haben, ohne einen Fehler zurückzugeben, da VARCHAR-Spalten nicht die gesamte deklarierte Breite zum berechneten Limit für die Abfrageverarbeitung beitragen. Das effektive Limit für die Abfrageverarbeitung für VARCHAR-Spalten ist von einer Reihe von Faktoren abhängig.

Wenn eine Tabelle zu breit für das Einfügen oder Auswählen ist, wird folgender Fehler gemeldet.

```
ERROR:  8001
DETAIL:  The combined length of columns processed in the SQL statement
exceeded the query-processing limit of 65535 characters (pid:7627)
```

## Beispiele
<a name="r_CREATE_TABLE_usage-examples"></a>

Unter dem Thema [Beispiele](r_CREATE_TABLE_examples.md) finden Sie Beispiele für die Verwendung des Befehls CREATE TABLE.

# Beispiele
<a name="r_CREATE_TABLE_examples"></a>

Im folgenden Beispiel werden verschiedene Spalten- und Tabellenattribute in CREATE TABLE-Anweisungen von Amazon Redshift gezeigt. Weitere Informationen zu CREATE TABLE, einschließlich Parameterdefinitionen, finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md).

In vielen der Beispiele werden Tabellen und Daten aus dem *TICKIT*-Beispieldatensatz verwendet. Weitere Informationen finden Sie unter [Beispieldatenbank](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

 In einem Befehl CREATE TABLE können Sie dem Tabellennamen den Datenbanknamen und den Schemanamen voranstellen. Beispiel: `dev_database.public.sales` Der Datenbankname muss die Datenbank bezeichnen, mit der Sie verbunden sind. Jeder Versuch, Datenbankobjekte in einer anderen Datenbank zu erstellen, schlägt mit einem Fehler aufgrund einer ungültigen Operation fehl.

## Erstellen einer Tabelle mit einem Verteilungsschlüssel, einem zusammengesetzten Sortierschlüssel und Kompression
<a name="r_CREATE_TABLE_examples-create-a-table-with-distribution-key"></a>

Im folgenden Beispiel wird eine SALES-Tabelle in der Datenbank TICKIT erstellt, in der für verschiedene Tabellen Kompression definiert wird. LISTID ist als Verteilungsschlüssel deklariert und LISTID und SELLERID sind als zusammengesetzter mehrspaltiger Sortierschlüssel deklariert. Darüber hinaus sind Primärschlüssel- und Fremdschlüsseleinschränkungen für die Tabelle definiert. Bevor Sie die Tabelle in dem Beispiel erstellen, müssen Sie möglicherweise jeder Spalte, auf die durch einen Fremdschlüssel verwiesen wird, eine Einschränkung UNIQUE hinzufügen, falls keine Einschränkungen existieren.

```
create table sales(
salesid integer not null,
listid integer not null,
sellerid integer not null,
buyerid integer not null,
eventid integer not null encode mostly16,
dateid smallint not null,
qtysold smallint not null encode mostly8,
pricepaid decimal(8,2) encode delta32k,
commission decimal(8,2) encode delta32k,
saletime timestamp,
primary key(salesid),
foreign key(listid) references listing(listid),
foreign key(sellerid) references users(userid),
foreign key(buyerid) references users(userid),
foreign key(dateid) references date(dateid))
distkey(listid)
compound sortkey(listid,sellerid);
```

Es folgen die Ergebnisse:

```
schemaname | tablename | column     | type                        | encoding | distkey | sortkey | notnull
-----------+-----------+------------+-----------------------------+----------+---------+---------+--------
public     | sales     | salesid    | integer                     | lzo      | false   |       0 | true
public     | sales     | listid     | integer                     | none     | true    |       1 | true
public     | sales     | sellerid   | integer                     | none     | false   |       2 | true
public     | sales     | buyerid    | integer                     | lzo      | false   |       0 | true
public     | sales     | eventid    | integer                     | mostly16 | false   |       0 | true
public     | sales     | dateid     | smallint                    | lzo      | false   |       0 | true
public     | sales     | qtysold    | smallint                    | mostly8  | false   |       0 | true
public     | sales     | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | commission | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

Das folgende Beispiel erstellt die Tabelle t1 mit einer groß-/kleinschreibungsneutralen Spalte col1.

```
create table T1 (
  col1 Varchar(20) collate case_insensitive
 );
            
insert into T1 values ('bob'), ('john'), ('Tom'), ('JOHN'), ('Bob');
```

Fragen Sie die Tabelle ab:

```
select * from T1 where col1 = 'John';
   
col1
------
 john
 JOHN
(2 rows)
```

## Erstellen einer Tabelle mit einem überlappenden Sortierschlüssel
<a name="CREATE_TABLE_NEW-create-a-table-using-interleaved-sortkey"></a>

Im folgenden Beispiel wird die Tabelle CUSTOMER mit einem überlappenden Sortierschlüssel erstellt.

```
create table customer_interleaved (
  c_custkey     	integer        not null,
  c_name        	varchar(25)    not null,
  c_address     	varchar(25)    not null,
  c_city        	varchar(10)    not null,
  c_nation      	varchar(15)    not null,
  c_region      	varchar(12)    not null,
  c_phone       	varchar(15)    not null,
  c_mktsegment      varchar(10)    not null)
diststyle all
interleaved sortkey (c_custkey, c_city, c_mktsegment);
```

## Erstellen einer Tabelle mit IF NOT EXISTS
<a name="CREATE_TABLE_NEW-create-a-table-using-if-not-exists"></a>

 Im folgenden Beispiel wird entweder die Tabelle CITIES erstellt oder es erfolgt keine Aktion und es wird eine Meldung zurückgegeben, wenn die Tabelle bereits vorhanden ist:

```
create table if not exists cities(
cityid integer not null,
city varchar(100) not null,
state char(2) not null);
```

## Erstellen einer Tabelle mit der Verteilung ALL
<a name="CREATE_TABLE_NEW-create-a-table-with-all-distribution"></a>

 Im folgenden Beispiel wird die Tabelle VENUE mit der Verteilung ALL erstellt. 

```
create table venue(
venueid smallint not null,
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid))
diststyle all;
```

## Erstellen einer Tabelle mit der Verteilung EVEN
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-even-distribution"></a>

Im folgenden Befehl wird eine Tabelle namens MYEVENT mit drei Spalten erstellt. 

```
create table myevent(
eventid int,
eventname varchar(200),
eventcity varchar(30))
diststyle even;
```

Die Tabelle wird gleichmäßig verteilt und ist nicht sortiert. Für die Tabelle wurden keine DISTKEY- oder SORTKEY-Spalten deklariert. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'myevent';
            
  column   |          type          | encoding | distkey | sortkey
-----------+------------------------+----------+---------+---------
 eventid   | integer                | lzo      | f       |       0
 eventname | character varying(200) | lzo      | f       |       0
 eventcity | character varying(30)  | lzo      | f       |       0
(3 rows)
```

## Erstellen einer temporären Tabelle, die wie eine andere Tabelle ist (LIKE)
<a name="r_CREATE_TABLE_NEW-create-a-temporary-table-that-is-like-another-table"></a>

Im folgenden Befehl wird eine temporäre Tabelle namens TEMPEVENT erstellt, deren Spalten aus der Tabelle EVENT geerbt werden. 

```
create temp table tempevent(like event); 
```

Diese Tabelle erbt darüber hinaus die Attribute DISTKEY und SORTKEY der übergeordneten Tabelle: 

```
select "column", type, encoding, distkey, sortkey
 from pg_table_def where tablename = 'tempevent';

  column   |            type             | encoding | distkey | sortkey
-----------+-----------------------------+----------+---------+---------
 eventid   | integer                     | none     | t       |       1
 venueid   | smallint                    | none     | f       |       0
 catid     | smallint                    | none     | f       |       0
 dateid    | smallint                    | none     | f       |       0
 eventname | character varying(200)      | lzo      | f       |       0
 starttime | timestamp without time zone | bytedict | f       |       0
(6 rows)
```

## Erstellen einer Tabelle mit einer IDENTITY-Spalte
<a name="r_CREATE_TABLE_NEW-create-a-table-with-an-identity-column"></a>

Im folgenden Beispiel wird eine Tabelle namens VENUE\$1IDENT erstellt, die eine IDENTITY-Spalte namens VENUEID besitzt. Diese Spalte beginnt mit 0 und wird für jeden Datensatz um 1 erhöht. VENUEID ist auch als Primärschlüssel der Tabelle deklariert. 

```
create table venue_ident(venueid bigint identity(0, 1),
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid));
```

## Erstellen einer Tabelle mit einer Standard-IDENTITY-Spalte
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-identity-column"></a>

Im folgenden Beispiel wird eine Tabelle mit dem Namen erstellt `t1`. Diese Tabelle hat eine IDENTITY-Spalte mit dem, Namen `hist_id` und eine Standard-IDENTITY-Spalte mit dem Namen `base_id`. 

```
CREATE TABLE t1(
  hist_id BIGINT IDENTITY NOT NULL, /* Cannot be overridden */
  base_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, /* Can be overridden */
  business_key varchar(10) ,
  some_field varchar(10)
);
```

Die Einfügung einer Zeile in die Tabelle zeigt, dass `hist_id`- und `base_id`-Werte generiert werden. 

```
INSERT INTO T1 (business_key, some_field) values ('A','MM');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
```

Die Einfügung einer zweiten Zeile zeigt, dass der Standardwert für `base_id` generiert wird.

```
INSERT INTO T1 (base_id, business_key, some_field) values (DEFAULT, 'B','MNOP');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
```

Die Einfügung einer dritten Zeile zeigt, dass der Wert für `base_id` nicht eindeutig sein muss.

```
INSERT INTO T1 (base_id, business_key, some_field) values (2,'B','MNNN');
```

```
SELECT * FROM t1;
            
 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
       3 |       2 | B            | MNNN
```

## Erstellen einer Tabelle mit DEFAULT-Spaltenwerten
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-column-values"></a>

Im folgenden Beispiel wird die Tabelle CATEGORYDEF erstellt, die für jede Spalte Standardwerte deklariert: 

```
create table categorydef(
catid smallint not null default 0,
catgroup varchar(10) default 'Special',
catname varchar(10) default 'Other',
catdesc varchar(50) default 'Special events',
primary key(catid));
            
insert into categorydef values(default,default,default,default);
```

```
select * from categorydef;
            
 catid | catgroup | catname |    catdesc
-------+----------+---------+----------------
     0 | Special  | Other   | Special events
(1 row)
```

## Die Optionen DISTSTYLE, DISTKEY und SORTKEY
<a name="r_CREATE_TABLE_NEW-diststyle-distkey-and-sortkey-options"></a>

Im folgenden Beispiel wird gezeigt, wie die Optionen DISTSTYLE, DISTKEY und SORTKEY funktionieren. In diesem Beispiel COL1 ist dies der Verteilungsschlüssel. Daher muss der Verteilungsstil entweder auf KEY festgelegt oder nicht festgelegt werden. Standardmäßig besitzt die Tabelle keinen Sortierschlüssel und ist daher nicht sortiert: 

```
create table t1(col1 int distkey, col2 int) diststyle key;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't1';

column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | az64     | t       | 0
col2   | integer | az64     | f       | 0
```

Im folgenden Beispiel wird dieselbe Spalte als Verteilungs- und Sortierschlüssel definiert. Auch hier muss der Verteilungsstil entweder auf KEY festgelegt werden oder wird nicht festgelegt. 

```
create table t2(col1 int distkey sortkey, col2 int);
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't2';
            
column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | none     | t       | 1
col2   | integer | az64     | f       | 0
```

Im folgenden Beispiel ist keine Spalte als Verteilungsschlüssel festgelegt, COL2 sondern als Sortierschlüssel festgelegt, und der Verteilungsstil ist auf ALL festgelegt: 

```
create table t3(col1 int, col2 int sortkey) diststyle all;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't3';
            
Column |  Type   | Encoding | DistKey | SortKey
-------+---------+----------+---------+--------
col1   | integer | az64     | f       | 0
col2   | integer | none     | f       | 1
```

Im folgenden Beispiel ist der Verteilungsstil auf EVEN festgelegt, und es ist kein Sortierschlüssel explizit festgelegt. Daher wird die Tabelle gleichmäßig verteilt, jedoch nicht sortiert. 

```
create table t4(col1 int, col2 int) diststyle even;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't4';
            
             column |  type   |encoding | distkey | sortkey
--------+---------+---------+---------+--------
col1    | integer | az64    | f       | 0
col2    | integer | az64    | f       | 0
```

## Erstellen einer Tabelle mit der Option ENCODE AUTO
<a name="r_CREATE_TABLE_NEW-create-a-table-with-encode-option"></a>

Im folgenden Beispiel wird die Tabelle `t1` mit automatischer Komprimierungskodierung erstellt. ENCODE AUTO ist der Standard für Tabellen, wenn Sie für keine Spalte einen Kodierungstyp angeben.

```
create table t1(c0 int, c1 varchar);
```

Im folgenden Beispiel wird die Tabelle `t2` mit automatischer Komprimierungskodierung erstellt, indem ENCODE AUTO angegeben wird.

```
create table t2(c0 int, c1 varchar) encode auto;
```

Im folgenden Beispiel wird die Tabelle `t3` mit automatischer Komprimierungskodierung erstellt, indem ENCODE AUTO angegeben wird. Spalte `c0` wird mit dem anfänglichen Kodierungstyp DELTA definiert. Amazon Redshift kann die Kodierung ändern, wenn eine andere Kodierung eine bessere Abfrageleistung bietet.

```
create table t3(c0 int encode delta, c1 varchar) encode auto;
```

Im folgenden Beispiel wird die Tabelle `t4` mit automatischer Komprimierungskodierung erstellt, indem ENCODE AUTO angegeben wird. Die Spalte `c0` wird mit einer Anfangskodierung von DELTA definiert, und die Spalte `c1` wird mit einer Anfangskodierung von LZO definiert. Amazon Redshift kann diese Kodierungen ändern, wenn andere Kodierungen eine bessere Abfrageleistung liefern.

```
create table t4(c0 int encode delta, c1 varchar encode lzo) encode auto;
```

# CREATE TABLE AS
<a name="r_CREATE_TABLE_AS"></a>

**Topics**
+ [Syntax](#r_CREATE_TABLE_AS-synopsis)
+ [Parameters](#r_CREATE_TABLE_AS-parameters)
+ [Nutzungshinweise für CTAS](r_CTAS_usage_notes.md)
+ [CTAS-Beispiele](r_CTAS_examples.md)

Erstellt eine neue Tabelle auf der Basis einer Abfrage. Der Besitzer dieser Tabelle ist der Benutzer, der den Befehl ausgibt.

Die neue Tabelle wird mit Daten geladen, die durch die Abfrage im Befehl definiert werden. Die Tabellenspalten haben Namen und Datentypen, die mit den Ausgabespalten der Abfrage verknüpft sind. Der Befehl CREATE TABLE AS (CTAS) erstellt eine neue Tabelle und evaluiert die Abfrage, um die neue Tabelle zu laden.

## Syntax
<a name="r_CREATE_TABLE_AS-synopsis"></a>

```
CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ]
TABLE table_name
[ ( column_name [, ... ] ) ]
[ BACKUP { YES | NO } ]
[ table_attributes ]
AS query

where table_attributes are:
[ DISTSTYLE { AUTO | EVEN | ALL | KEY } ]
[ DISTKEY( distkey_identifier ) ]
[ [ COMPOUND | INTERLEAVED ] SORTKEY( column_name [, ...] ) ]
```

## Parameters
<a name="r_CREATE_TABLE_AS-parameters"></a>

LOCAL   
Obwohl dieses optionale Schlüsselwort in der Anweisung akzeptiert wird, hat es in Amazon Redshift keine Auswirkungen.

TEMPORARY \$1 TEMP   
Erstellt eine temporäre Tabelle. Eine temporäre Tabelle wird am Ende der Sitzung, in der sie erstellt wurde, automatisch entfernt.

 *table\$1name*   
Der Name der Tabelle, die erstellt werden soll.  
Wenn Sie einen Tabellennamen angeben, der mit „\$1“ beginnt, wird die Tabelle als temporäre Tabelle erstellt. Beispiel:  

```
create table #newtable (id) as select * from oldtable;
```
Die maximale Länge des Tabellennamens beträgt 127 Bytes; längere Namen werden bei 127 Bytes abgeschnitten. Amazon Redshift erzwingt ein Kontingent für die Anzahl der Tabellen pro Cluster nach Knotentyp. Der Tabellenname kann mit dem Datenbank- und Schemanamen qualifiziert werden, wie die folgende Tabelle zeigt.  

```
create table tickit.public.test (c1) as select * from oldtable;
```
In diesem Beispiel ist `tickit` der Datenbankname und `public` ist der Schemaname. Wenn die Datenbank oder das Schema nicht vorhanden sind, gibt die Anweisung einen Fehler zurück.  
Wenn ein Schemaname vorhanden ist, wird die neue Tabelle in diesem Schema erstellt (vorausgesetzt, der Ersteller kann auf das Schema zugreifen). Der Tabellenname muss für dieses Schema eindeutig sein. Wenn kein Schema angegeben ist, wird die Tabelle anhand des aktuellen Datenbankschemas erstellt. Wenn Sie eine temporäre Tabelle erstellen, können Sie keinen Schemanamen angeben, da sich temporäre Tabellen in einem speziellen Schema befinden.  
Mehrere temporäre Tabellen mit demselben Namen können in derselben Datenbank zur gleichen Zeit vorhanden sein, wenn sie in getrennten Sitzungen erstellt wurden. Diese Tabellen werden unterschiedlichen Schemata zugewiesen.

 *column\$1name*   
Der Name einer Spalte in der neuen Tabelle. Wenn keine Spaltennamen angegeben werden, werden die Spaltennamen den Ausgabespaltennamen der Abfrage entnommen. Für Ausdrücke werden Standardspaltennamen verwendet. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

BACKUP \$1 YES \$1 NO \$1   
Eine Klausel, die angibt, ob die Tabelle in automatisierten und manuellen Cluster-Snapshots enthalten sein sollte.   
Geben Sie für Tabellen wie Staging-Tabellen, die keine kritischen Daten enthalten, BACKUP NO an, um beim Erstellen und Wiederherstellen von Snapshots Verarbeitungszeit zu sparen und den Speicherplatz auf Amazon Simple Storage Service zu reduzieren. Die Einstellung BACKUP NO wirkt sich nicht auf die automatische Replikation von Daten zu anderen Knoten innerhalb des Clusters aus. Daher werden Tabellen mit BACKUP NO bei einem Knotenausfall wiederhergestellt. Der Standardwert ist BACKUP YES.  
Tabellen ohne Backup werden für RA3 bereitgestellte Cluster und serverlose Amazon Redshift Workgroups nicht unterstützt. Eine Tabelle, die in einem RA3 Cluster oder einer serverlosen Arbeitsgruppe als „kein Backup“ gekennzeichnet ist, wird als permanente Tabelle behandelt, die bei der Erstellung eines Snapshots immer gesichert und bei der Wiederherstellung aus einem Snapshot immer wiederhergestellt wird. Um Snapshot-Kosten für Tabellen ohne Backup zu vermeiden, sollten Sie diese vor der Erstellung eines Snapshots kürzen.

DISTSTYLE \$1 AUTO \$1 EVEN \$1 KEY \$1 ALL \$1  
Schlüsselwort, das den Datenverteilungsstil für die gesamte Tabelle definiert. Amazon Redshift verteilt die Zeilen einer Tabelle an die Datenverarbeitungsknoten gemäß dem für die Tabelle angegebenen Verteilungstyp. Der Standardwert ist DISTSTYLE AUTO.  
Der von Ihnen für Tabellen ausgewählte Verteilungsstil wirkt sich auf die allgemeine Leistung Ihrer Datenbank aus. Weitere Informationen finden Sie unter [Datenverteilung zur Abfrageoptimierung](t_Distributing_data.md).  
+ AUTO: Amazon Redshift weist auf der Grundlage der Tabellendaten den optimalen Verteilungsstil aus. Um den Verteilungsstil einer Tabelle anzuzeigen, führen Sie eine Abfrage für die Systemkatalogtabelle PG\$1CLASS aus. Weitere Informationen finden Sie unter [Anzeigen von Verteilungsstilen](viewing-distribution-styles.md). 
+ EVEN: Die Daten in der Tabelle werden gleichmäßig in einer Round-Robin-Verteilung auf die Knoten in einem Cluster verteilt. Zeilen IDs werden verwendet, um die Verteilung zu bestimmen, und ungefähr die gleiche Anzahl von Zeilen wird auf jeden Knoten verteilt. Dies ist die Standardverteilungsmethode.
+ KEY: Die Daten werden anhand der Werte in der DISTKEY-Spalte verteilt. Wenn Sie verknüpfte Spalten von verknüpften Tabellen als Verteilungsschlüssel festlegen, werden die verknüpften Zeilen aus beiden Tabellen auf den Datenverarbeitungsknoten zusammen platziert. Wenn Daten zusammen platziert werden, kann der Optimierer Verknüpfungen effizienter ausführen. Wenn Sie einen DISTSTYLE KEY angeben, müssen Sie eine DISTKEY-Spalte benennen.
+  ALL: Eine Kopie der gesamten Tabelle wird zu jedem Knoten verteilt. Dieser Verteilungsstil stellt sicher, dass alle Zeilen, die für eine Verknüpfung erforderlich sind, auf jedem Knoten vorhanden sind. Die Speicheranforderungen werden jedoch multipliziert und die Lade- und Wartungszeiten für die Tabelle werden verlängert. Der Verteilungsstil ALL kann die Ausführungszeit verbessern, wenn er in Verbindung mit bestimmten Dimensionstabellen verwendet wird, für die der Verteilungsstil KEY nicht geeignet ist. Die Leistungsverbesserungen müssen jedoch gegen die Wartungskosten abgewogen werden. 

DISTKEY (*column*)  
Gibt einen Spaltennamen oder eine Positionsnummer für den Verteilungsschlüssel an. Verwenden Sie den Namen, der in der Liste der optionalen Spalten für die Tabelle oder in der Auswahlliste der Abfrage angegeben ist. Alternativ können Sie eine Positionsnummer verwenden, wobei die erste ausgewählte Spalte 1 ist, die zweite ausgewählte Spalte 2 ist usw. In eine Tabelle kann nur eine Spalte der Verteilungsschlüssel sein:  
+ Wenn Sie eine Spalte als DISTKEY-Spalte deklarieren, muss DISTSTYLE auf KEY festgelegt werden oder darf überhaupt nicht festgelegt werden.
+ Wenn Sie keine DISTKEY-Spalte deklarieren, können Sie DISTSTYLE auf EVEN festlegen.
+ Wenn Sie weder DISTKEY noch DISTSTYLE angeben, legt CTAS den Verteilungsstil für die neue Tabelle anhand des Abfrageplans für die SELECT-Klausel fest. Weitere Informationen finden Sie unter [Vererbung von Spalten- und Tabellenattributen](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes).
Sie können dieselbe Spalte als Verteilungs- und Sortierschlüssel definieren. Dieser Ansatz tendiert dazu, Verknüpfungen zu beschleunigen, wenn die betreffende Spalte eine Verknüpfungsspalte in der Abfrage ist.

[ COMPOUND \$1 INTERLEAVED ] SORTKEY (*column\$1name* [,... ] )  
Gibt einen oder mehrere Sortierschlüssel für die Tabelle an. Wenn Daten in die Tabelle geladen werden, werden die Daten anhand der Spalten sortiert, die als Sortierschlüssel bezeichnet sind.   
Sie können optional den COMPOUND- oder INTERLEAVED-Sortierstil angeben. Der Standard ist COMPOUND. Weitere Informationen finden Sie unter [Sortierschlüssel](t_Sorting_data.md).  
Sie können pro Tabelle maximal 400 COMPOUND SORTKEY-Spalten oder 8 INTERLEAVED SORTKEY-Spalten definieren.   
Wenn Sie SORTKEY nicht angeben, legt CTAS die Sortierschlüssel für die neue Tabelle anhand des Abfrageplans für die SELECT-Klausel fest. Weitere Informationen finden Sie unter [Vererbung von Spalten- und Tabellenattributen](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes).    
COMPOUND  
Gibt an, dass die Daten mittels eines zusammengesetzten Schlüssels sortiert werden, der aus allen aufgelisteten Spalten in der Reihenfolge ihrer Auflistung besteht. Ein zusammengesetzter Sortierschlüssel ist am nützlichsten, wenn eine Abfrage Zeilen in der Reihenfolge der Sortierspalten scannt. Die Leistungsvorteile einer Sortierung mit einem zusammengesetzten Schlüssel nehmen ab, wenn Abfragen von sekundären Sortierspalten abhängig sind. Sie können maximal 400 COMPOUND SORTKEY-Spalten pro Tabelle definieren.   
INTERLEAVED  
Gibt an, dass die Daten mittels eines überlappenden Sortierschlüssels sortiert werden. Für einen überlappenden Sortierschlüssel können maximal acht Spalten angegeben werden.   
Eine überlappende Sortierung gewichtet jede Spalte bzw. jeden Subsatz von Spalten im Sortierschlüssel gleich, so dass Abfragen nicht von der Reihenfolge der Spalten im Sortierschlüssel abhängig sind. Wenn eine Abfrage eine oder mehrere sekundäre Sortierspalten verwendet, wird die Abfrageleistung durch die überlappende Sortierung deutlich verbessert. Die überlappende Sortierung führt zu geringfügigen Overhead-Kosten für das Laden von Daten und das Bereinigen von Operationen. 

AS *query*   
Alle Abfragen (SELECT-Anweisungen), die von Amazon Redshift unterstützt werden.

# Nutzungshinweise für CTAS
<a name="r_CTAS_usage_notes"></a>

## Einschränkungen
<a name="r_CTAS_usage_notes-limits"></a>

Amazon Redshift erzwingt ein Kontingent für die Anzahl der Tabellen pro Cluster nach Knotentyp. 

Die maximale Anzahl von Zeichen für einen Tabellennamen ist 127. 

Die maximale Anzahl der Spalten, die Sie in einer einzelnen Tabelle definieren können, ist 1.600. 

## Vererbung von Spalten- und Tabellenattributen
<a name="r_CTAS_usage_notes-inheritance-of-column-and-table-attributes"></a>

CREATE TABLE AS (CTAS)-Tabellen erben keine Einschränkungen, Identitätsspalten, Standardspaltenwerte oder den Primärschlüssel aus der Tabelle, aus der sie erstellt wurden. 

Sie können für CTAS-Tabellen keine Spaltenkomprimierungskodierungen angeben. Amazon Redshift weist die Komprimierungskodierung automatisch wie folgt zu:
+ Spalten, die als Sortierschlüssel definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als Datentyp BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY oder GEOGRAPHY definiert sind, wird die RAW-Kompression zugewiesen.
+ Spalten, die als SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP oder TIMESTAMPTZ definiert sind, wird Komprimierung zugewiesen. AZ64 
+ Spalten, die als CHAR, VARCHAR oder VARBYTE definiert sind, wird LZO-Komprimierung zugewiesen.

Weitere Informationen erhalten Sie unter [Kompressionskodierungen](c_Compression_encodings.md) und [Datentypen](c_Supported_data_types.md). 

Um Spaltenkodierungen explizit zuzuweisen, verwenden Sie [CREATE TABLE](r_CREATE_TABLE_NEW.md).

CTAS legt den Verteilungsstil und Sortierschlüssel für die neue Tabelle anhand des Abfrageplans für die SELECT-Klausel fest. 

Im Fall komplexer Abfragen wie Abfragen mit Joins, Aggregationen, einer ORDER BY-Klausel oder einer LIMIT-Klausel wählt CTAS den bestmöglichen Verteilungsstil und Sortierschlüssel auf der Basis des Abfrageplans aus. 

**Anmerkung**  
Um für große Datensätze oder komplexe Abfragen eine optimale Leistung zu erzielen, werden Tests mit typischen Datensätzen empfohlen.

Häufig können Sie vorhersagen, welchen Verteilungsstil und Sortierschlüssel CTAS wählen wird, indem Sie im Abfrageplan ermitteln, welche Spalten der Abfrageoptimierer zum Sortieren und Verteilen von Daten auswählt. Wenn es sich beim obersten Knoten des Abfrageplans um einen einfache sequenziellen Scan aus einer einzelnen Tabelle handelt (XN Seq Scan), verwendet CTAS in der Regel den Verteilungsstil und Sortierschlüssel der Quelltabelle. Wenn es sich bei dem obersten Knoten des Abfrageplans um etwas anderes handelt, einen sequentiellen Scan (wie XN Limit, XN Sort, XN usw.), bemüht sich CTAS nach besten Kräften HashAggregate, den optimalen Verteilungsstil und den optimalen Sortierschlüssel auf der Grundlage des Abfrageplans auszuwählen.

Angenommen, Sie erstellen fünf Tabellen mit den folgenden Arten von SELECT-Klauseln:
+ Eine einfache SELECT-Anweisung 
+ Eine Limit-Klausel 
+ Eine Reihenfolgenklausel unter Verwendung von LISTID 
+ Eine Reihenfolgenklausel unter Verwendung von QTYSOLD 
+ Eine SUM-Aggregationsfunktion mit einer Gruppierungsklausel.

In den folgenden Beispielen wird der Abfrageplan für die einzelnen CTAS-Anweisungen gezeigt.

```
explain create table sales1_simple as select listid, dateid, qtysold from sales;
                           QUERY PLAN
----------------------------------------------------------------
 XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(1 row)


explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100;
                              QUERY PLAN
----------------------------------------------------------------------
 XN Limit  (cost=0.00..1.00 rows=100 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)


explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: listid
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: qtysold
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid;
                              QUERY PLAN
----------------------------------------------------------------------
 XN HashAggregate  (cost=3017.98..3226.75 rows=83509 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)
```

Um den Verteilungs- und Sortierschlüssel für jede Tabelle anzuzeigen, führen Sie eine Abfrage für die Systemkatalogtabelle PG\$1TABLE\$1DEF aus wie im Folgenden gezeigt. 

```
select * from pg_table_def where tablename like 'sales%';

      tablename       |   column   | distkey | sortkey
----------------------+------------+---------+---------
 sales                | salesid    | f       |       0
 sales                | listid     | t       |       0
 sales                | sellerid   | f       |       0
 sales                | buyerid    | f       |       0
 sales                | eventid    | f       |       0
 sales                | dateid     | f       |       1
 sales                | qtysold    | f       |       0
 sales                | pricepaid  | f       |       0
 sales                | commission | f       |       0
 sales                | saletime   | f       |       0
 sales1_simple        | listid     | t       |       0
 sales1_simple        | dateid     | f       |       1
 sales1_simple        | qtysold    | f       |       0
 sales2_limit         | listid     | f       |       0
 sales2_limit         | dateid     | f       |       0
 sales2_limit         | qtysold    | f       |       0
 sales3_orderbylistid | listid     | t       |       1
 sales3_orderbylistid | dateid     | f       |       0
 sales3_orderbylistid | qtysold    | f       |       0
 sales4_orderbyqty    | listid     | t       |       0
 sales4_orderbyqty    | dateid     | f       |       0
 sales4_orderbyqty    | qtysold    | f       |       1
 sales5_groupby       | listid     | f       |       0
 sales5_groupby       | dateid     | f       |       0
 sales5_groupby       | sum        | f       |       0
```

In der folgenden Tabelle werden die Ergebnisse zusammengefasst. Aus Gründen der Einfachheit werden Details zu Kosten, Zeilen und zur Breite aus dem Beispielplan ausgelassen.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_CTAS_usage_notes.html)

Sie können den Verteilungsstil und Sortierschlüssel in der CTAS-Anweisung explizit angeben. Die folgende Anweisung erstellt beispielsweise eine Tabelle mit der Verteilung EVEN und gibt SALESID als Sortierschlüssel an.

```
create table sales_disteven
diststyle even
sortkey (salesid)
as
select eventid, venueid, dateid, eventname
from event;
```

## Kompressionskodierung
<a name="r_CTAS_usage_notes_encoding"></a>

ENCODE AUTO wird Standardeinstellung für Tabellen verwendet. Amazon Redshift verwaltet automatisch die Komprimierungskodierung für alle Spalten in der Tabelle.

## Verteilung eingehender Daten
<a name="r_CTAS_usage_notes-distribution-of-incoming-data"></a>

Wenn das Hash-Verteilungsschema der eingehenden Daten dem der Zieltabelle entspricht, ist keine physische Verteilung der Daten notwendig, wenn die Daten geladen werden. Wenn beispielsweise ein Verteilungsschlüssel für die neue Tabelle festgelegt wird und die Daten aus einer anderen Tabelle eingefügt werden, die anhand der gleichen Schlüsselspalte verteilt wird, werden die Daten unter Verwendung derselben Knoten und Slices entsprechend geladen. Wenn jedoch sowohl die Quell- als auch die Zieltabelle auf eine EVEN-Verteilung festgelegt sind, werden die Daten neu zur Zieltabelle verteilt. 

## Automatische ANALYZE-Operationen
<a name="r_CTAS_usage_notes-automatic-analyze-operations"></a>

Amazon Redshift analysiert automatisch Tabellen, die Sie mit CTAS-Befehlen erstellen. Sie müssen den Befehl ANALYZE nicht für diese Tabellen ausführen, wenn sie erstellt werden. Wenn Sie sie ändern, sollten Sie sie jedoch genauso wie andere Tabellen analysieren. 

# CTAS-Beispiele
<a name="r_CTAS_examples"></a>

Im folgenden Befehl wird eine Tabelle namens EVENT\$1BACKUP für die Tabelle EVENT erstellt:

```
create table event_backup as select * from event;
```

Die erstellte Tabelle erbt die Verteilungs- und Sortierschlüssel aus der Tabelle EVENT. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'event_backup';

column    | type                        | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+--------
catid     | smallint                    | none     | false   |       0
dateid    | smallint                    | none     | false   |       1
eventid   | integer                     | none     | true    |       0
eventname | character varying(200)      | none     | false   |       0
starttime | timestamp without time zone | none     | false   |       0
venueid   | smallint                    | none     | false   |       0
```

Der folgende Befehl erstellt eine neue Tabelle namens EVENTDISTSORT, indem vier Spalten aus der Tabelle EVENT ausgewählt werden. Die neue Tabelle wird nach EVENTID verteilt und nach EVENTID und DATEID sortiert: 

```
create table eventdistsort
distkey (1)
sortkey (1,3)
as
select eventid, venueid, dateid, eventname
from event;
```

Das Ergebnis ist wie folgt:

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistsort';

column   |          type          | encoding | distkey | sortkey
---------+------------------------+----------+---------+-------
eventid   | integer               | none     | t       | 1
venueid   | smallint              | none     | f       | 0
dateid    | smallint              | none     | f       | 2
eventname | character varying(200)| none     | f       | 0
```

Sie könnten genau die gleiche Tabelle erstellen, indem Sie für die Verteilungs- und Sortierschlüssel Spaltennamen verwenden. Beispiel:

```
create table eventdistsort1
distkey (eventid)
sortkey (eventid, dateid)
as
select eventid, venueid, dateid, eventname
from event;
```

Die folgende Anweisung wendet eine gleichmäßige Verteilung auf die Tabelle an, definiert jedoch keinen expliziten Sortierschlüssel: 

```
create table eventdisteven
diststyle even
as
select eventid, venueid, dateid, eventname
from event;
```

Die Tabelle übernimmt den Sortierschlüssel nicht aus der Tabelle EVENT (EVENTID), da für die neue Tabelle die Verteilung EVEN angegeben ist. Die neue Tabelle besitzt weder einen Sortierschlüssel noch einen Verteilungsschlüssel. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdisteven';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+---------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 0
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

Die folgende Anweisung wendet eine gleichmäßige Verteilung an und definiert einen Sortierschlüssel: 

```
create table eventdistevensort diststyle even sortkey (venueid)
as select eventid, venueid, dateid, eventname from event;
```

 Die erstellte Tabelle besitzt einen Sortierschlüssel, jedoch keinen Verteilungsschlüssel. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistevensort';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+-------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 1
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

Die folgende Anweisung verteilt die Tabelle EVENT anhand einer anderen Schlüsselspalte aus den eingehenden Daten neu, die anhand der Spalte EVENTID sortiert sind, und definiert keine SORTKEY-Spalte. Daher ist die Tabelle nicht sortiert. 

```
create table venuedistevent distkey(venueid)
as select * from event;
```

Das Ergebnis ist wie folgt: 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'venuedistevent';

 column   |            type             | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+-------
eventid   | integer                     | none     | f       | 0
venueid   | smallint                    | none     | t       | 0
catid     | smallint                    | none     | f       | 0
dateid    | smallint                    | none     | f       | 0
eventname | character varying(200)      | none     | f       | 0
starttime | timestamp without time zone | none     | f       | 0
```

# VORLAGE ERSTELLEN
<a name="r_CREATE_TEMPLATE"></a>

Erstellt wiederverwendbare Vorlagen für Amazon Redshift Redshift-Befehle wie[COPY](r_COPY.md). Vorlagen speichern häufig verwendete Parameter, auf die bei mehreren Befehlsausführungen verwiesen werden kann, wodurch die Konsistenz verbessert und die manuelle Parameterspezifikation reduziert wird.

Vorlagen machen es überflüssig, dieselben Formatierungsparameter für mehrere Operationen wiederholt anzugeben, während Quellpfade, Zieltabellen und Autorisierung von Vorgang zu Vorgang variieren können.

## Erforderliche Berechtigungen
<a name="r_CREATE_TEMPLATE-privileges"></a>

Um eine Vorlage zu erstellen, benötigen Sie eine der folgenden Voraussetzungen:
+ Superuser-Rechte
+ CREATE-Berechtigung für das Schema, in dem Sie die Vorlage erstellen möchten, oder CREATE-Bereichsberechtigung für Schemas in der Datenbank, in der Sie die Vorlage erstellen möchten

## Syntax
<a name="r_CREATE_TEMPLATE-synopsis"></a>

```
CREATE [ OR REPLACE ] TEMPLATE [database_name.][schema_name.]template_name
FOR COPY [ AS ]
[ [ FORMAT ] [ AS ] data_format ]
[ parameter [ argument ] [ , ... ] ];
```

## Parameters
<a name="r_CREATE_TEMPLATE-parameters"></a>

 *ODER ERSETZEN*   
Wenn in der angegebenen Datenbank und dem angegebenen Schema bereits eine Vorlage mit demselben Namen vorhanden ist, wird die vorhandene Vorlage ersetzt. Sie können eine Vorlage nur durch eine neue Vorlage ersetzen, die denselben Operationstyp definiert, z. B. COPY. Sie müssen über die erforderlichen Rechte verfügen, um eine Vorlage zu ersetzen.

*database\$1name*  
(Optional) Der Name der Datenbank, in der die Vorlage erstellt wird. Wenn nicht angegeben, wird die Vorlage in der aktuellen Datenbank erstellt.  
Wenn die Datenbank oder das Schema nicht existiert, wird die Vorlage nicht erstellt und die Anweisung gibt einen Fehler zurück. Sie können keine Vorlagen in den Systemdatenbanken`template0`, `template1``padb_harvest`, oder erstellen`sys:internal`.

*schema\$1name*  
(Optional) Der Name des Schemas, in dem die Vorlage erstellt wird. Wenn nicht angegeben, wird die Vorlage im aktuellen Schema erstellt.  
Wenn ein Schemaname angegeben wird, wird die neue Vorlage in diesem Schema erstellt (vorausgesetzt, der Ersteller hat Zugriff auf das Schema). Der Vorlagenname muss ein eindeutiger Name für dieses Schema sein.

*Vorlagenname*  
Der Name der zu erstellenden Vorlage. Optional kann der Vorlagenname mit dem Datenbank- und Schemanamen qualifiziert werden. Im folgenden Beispiel lautet der Datenbankname`demo_database`, der Schemaname ist `demo_schema` und der Vorlagenname ist`test`. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).  

```
CREATE TEMPLATE demo_database.demo_schema.test FOR COPY AS CSV;
```

COPY  
Gibt den Redshift-Befehlstyp an, für den die Vorlage erstellt wird. Derzeit wird nur der Befehl COPY unterstützt.

[[FORMAT] [AS] *Datenformat]*   
Dieser Parameter ist optional. Dies gibt das Datenformat für COPY-Operationen an.

[*Parameter* [Argument]]  
Jeder gültige Parameter für den angegebenen Redshift-Befehl.  
Vorlagen für den Befehl COPY können beispielsweise Folgendes beinhalten:  
+ [Datenformatparameter](copy-parameters-data-format.md)
+ [Dateikomprimierungsparameter](copy-parameters-file-compression.md)
+ [Datenkonvertierungsparameter](copy-parameters-data-conversion.md)
+ [Datenladeoperationen](copy-parameters-data-load.md)
Eine vollständige Liste der unterstützten Parameter finden Sie unter [COPY](r_COPY.md) Befehl.

### Nutzungshinweise
<a name="create_template-usage-notes"></a>
+ Standardmäßig besitzen alle Benutzer CREATE- und USAGE-Rechte für das Schema PUBLIC. Um Benutzer daran zu hindern, Objekte im Schema PUBLIC einer Datenbank zu erstellen, verwenden Sie den Befehl REVOKE, um dieses Recht zu entfernen.
+ Wenn ein Parameter sowohl in der Vorlage als auch im Befehl vorhanden ist, hat der Befehlsparameter Vorrang.
+ Vorlagen sind Datenbankobjekte und folgen den standardmäßigen Redshift-Objektbenennungs- und Berechtigungsregeln. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).
+ Vorlagen dürfen keine Manifestdateispezifikationen für [COPY](r_COPY.md) Befehle enthalten.

### Einschränkungen
<a name="create_template-limitations"></a>
+ Beim Erstellen einer Vorlage muss mindestens ein Parameter angegeben werden.
+ Ausgeschlossene Parameter — Befehlsspezifische Parameter wie Quellpfade, Zieltabellen, Autorisierungsdaten und Manifestdateispezifikationen können nicht in Vorlagen enthalten sein. Diese Parameter müssen im eigentlichen Befehl angegeben werden.
+ Maximale Anzahl an Vorlagen pro Cluster — Sie können maximal 1.000 Vorlagen pro Cluster erstellen. Dieses Limit gilt für die Gesamtzahl der Vorlagen in allen Datenbanken und Schemas im Cluster.
+ Datenbankübergreifende Verweise — Vorlagen können nicht datenbankübergreifend referenziert werden.
+ Gemeinsame Nutzung von Daten — Vorlagen können nicht in Datenfreigaben enthalten sein. Vorlagen müssen in jedem Cluster, in dem sie benötigt werden, separat erstellt werden.

## Beispiele
<a name="r_CREATE_TEMPLATE-examples"></a>

Im folgenden Beispiel wird eine Vorlage für den Befehl COPY erstellt 

```
CREATE TEMPLATE test_schema.demo_template
FOR COPY
AS
FORMAT JSON 'auto'
NULL AS ''
MAXERROR 100;
```

Verwenden Sie[VORLAGE ANZEIGEN](r_SHOW_TEMPLATE.md), um die Definition der Vorlage abzurufen:

```
SHOW TEMPLATE test_schema.demo_template;
CREATE OR REPLACE TEMPLATE dev.test_schema.demo_template FOR COPY AS FORMAT AS JSON 'auto' NULL '' MAXERROR 100;
```

 Fragen Sie die [SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md) Systemansicht ab, um weitere Informationen zu einer Vorlage zu erhalten. 

```
SELECT * FROM SYS_REDSHIFT_TEMPLATE;

database_name | schema_name | template_name | template_type |        create_time         |     last_modified_time     | owner_id | last_modified_by | template_parameters 
---------------+-------------+---------------+---------------+----------------------------+----------------------------+----------+------------------+---------------------
 dev           | test_schema | demo_template |             1 | 2025-12-17 20:06:01.944171 | 2025-12-17 20:06:01.944171 |        1 |                1 | {
    "JSON": "auto",
    "MAXERROR": 100,
    "NULL": ""
}
```

# CREATE USER
<a name="r_CREATE_USER"></a>

Erstellt einen neuen Datenbankbenutzer. Je nach Berechtigungen und Rollen können Datenbankbenutzer Daten abrufen, Befehle ausführen und andere Aktionen in einer Datenbank ausführen. Sie müssen Datenbank-Superuser sein, um diesen Befehl auszuführen.

## Erforderliche Berechtigungen
<a name="r_CREATE_USER-privileges"></a>

Für CREATE USER sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung CREATE USER

## Syntax
<a name="r_CREATE_USER-synopsis"></a>

```
CREATE USER name [ WITH ]
PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ option [ ... ] ]

where option can be:

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| IN GROUP groupname [, ... ]
| VALID UNTIL 'abstime'
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit
| EXTERNALID external_id
```

## Parameters
<a name="r_CREATE_USER-parameters"></a>

 *Name*   
Der Name des zu erstellenden Benutzers. Der Benutzername darf nicht sein `PUBLIC`. Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md).

WITH  
Optionales Schlüsselwort. WITH wird von Amazon Redshift ignoriert

PASSWORD \$1 '*password*' \$1 '*md5hash*' \$1 '*sha256hash*' \$1 DISABLE \$1  
Legt das Benutzerpasswort fest.   
Standardmäßig können Benutzer ihre eigenen Passwörter ändern, es sei denn, das Passwort ist deaktiviert. Legen Sie zum Deaktivieren des Passworts eines Benutzers DISABLE fest. Wenn das Passwort eines Benutzers deaktiviert ist, wird das Passwort aus dem System gelöscht und der Benutzer kann sich nur mit temporären Benutzeranmeldeinformationen AWS Identity and Access Management (IAM) anmelden. Weitere Informationen finden Sie unter [Verwenden der IAM-Authentifizierung zum Generieren von Benutzeranmeldeinformationen für Datenbanken](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html). Nur ein Superuser kann Passwörter aktivieren oder deaktivieren. Sie können das Passwort eines Superusers nicht deaktivieren. Führen Sie zum Aktivieren eines Passworts [ALTER USER](r_ALTER_USER.md) aus und legen Sie ein Passwort fest.  
Sie können das Passwort im Klartext, als MD5 Hash-Zeichenfolge oder als SHA256 Hash-Zeichenfolge angeben.   
 Wenn Sie einen neuen Cluster mit der AWS-Managementkonsole AWS CLI, oder Amazon Redshift Redshift-API starten, müssen Sie ein Klartext-Passwort für den ersten Datenbankbenutzer angeben. Sie können das Passwort später mittels ändern [ALTER USER](r_ALTER_USER.md). 
Wenn Sie es als Klartext angeben, muss das Passwort den folgenden Einschränkungen entsprechen:  
+ Es muss 8 bis 64 Zeichen lang sein.
+ Es muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten.
+ Es kann alle ASCII-Zeichen mit den ASCII-Codes 33–126 enthalten, außer einfachen Anführungszeichen ('), doppelten Anführungszeichen ("), \$1, / oder @.
Als sicherere Alternative zur Übergabe des Kennwortparameters CREATE USER als Klartext können Sie einen MD5 Hash einer Zeichenfolge angeben, die das Passwort und den Benutzernamen enthält.   
Wenn Sie eine MD5 Hash-Zeichenfolge angeben, sucht der Befehl CREATE USER nach einer gültigen MD5 Hash-Zeichenfolge, überprüft jedoch nicht den Passwortteil der Zeichenfolge. In diesem Fall ist es möglich, ein Passwort wie beispielsweise eine leere Zeichenfolge zu erstellen, das nicht für die Anmeldung an der Datenbank verwendet werden kann.
Gehen Sie folgendermaßen vor, um ein MD5 Passwort anzugeben:   

1. Verketten Sie Passwort und Benutzername. 

   Wenn das Passwort beispielsweise `ez` und der Benutzername `user1` ist, ist die verkettete Zeichenfolge `ezuser1`. 

1. Konvertiert die verkettete Zeichenfolge in eine MD5 32-stellige Hash-Zeichenfolge. Sie können jedes beliebige MD5 Hilfsprogramm verwenden, um die Hash-Zeichenfolge zu erstellen. Das folgende Beispiel verwendet Amazon Redshift [MD5 Funktion](r_MD5.md) und den Verkettungsoperator (\$1\$1), um eine 32-stellige -Hash-Zeichenfolge zurückzugeben. MD5 

   ```
   select md5('ez' || 'user1');
                           
   md5
   --------------------------------
   153c434b4b77c89e6b94f12c5393af5b
   ```

1. *Verketten Sie '`md5`' vor der Hash-Zeichenfolge und geben Sie die verkettete Zeichenfolge als MD5 md5hash-Argument an.*

   ```
   create user user1 password 'md5153c434b4b77c89e6b94f12c5393af5b';
   ```

1. Melden Sie sich mit den Anmeldeinformationen bei der Datenbank an. 

   In diesem Beispiel melden Sie sich als `user1` mit dem Passwort `ez` an. 
Eine andere sichere Alternative ist es, einen SHA-256-Hash eines Passwortstrings anzugeben. Sie können auch einen eigenen gültigen SHA-256-Digest und ein 256-Bit-Salt, das zur Erstellung des Digest verwendet wurde, bereitstellen.  
+ Digest – Die Ausgabe einer Hashing-Funktion.
+ Salt – Zufällig generierte Daten, die mit dem Passwort kombiniert werden, um Muster in der Hashing-Funktion-Ausgabe zu reduzieren.

```
'sha256|Mypassword'
```

```
'sha256|digest|256-bit-salt'
```
Im folgenden Beispiel generiert und verwaltet Amazon Redshift das Salt.   

```
CREATE USER admin PASSWORD 'sha256|Mypassword1';
```
Im folgenden Beispiel werden ein gültiger SHA-256-Digest und ein 256-Bit-Salt, das zur Erstellung des Digest verwendet wurde, bereitgestellt.  
Gehen Sie wie folgt vor, um ein Passwort anzugeben und es mit Ihrem eigenen Salt zu hashen:  

1. Erstellen Sie ein 256-Bit-Salt. Sie können ein Salt erhalten, indem Sie einen beliebigen hexadezimalen Zeichenfolgengenerator verwenden, um eine 64 Zeichen lange Zeichenfolge zu generieren. In diesem Beispiel lautet das Salt `c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6`. 

1.  Verwenden Sie die Funktion FROM\$1HEX, um Ihr Salt in eine Binärdatei umzuwandeln. Das liegt daran, dass die SHA2 Funktion die binäre Darstellung des Salts benötigt. Sehen Sie sich die folgende Anweisung an. 

   ```
   SELECT FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6');
   ```

1.  Verwenden Sie die CONCAT-Funktion, um Ihr Salt an Ihr Passwort anzuhängen. In diesem Beispiel lautet das Passwort `Mypassword1`. Sehen Sie sich die folgende Anweisung an. 

   ```
   SELECT CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6'));
   ```

1. Verwenden Sie die SHA2 Funktion, um aus Ihrer Kombination aus Passwort und Salz einen Digest zu erstellen. Sehen Sie sich die folgende Anweisung an.

   ```
   SELECT SHA2(CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6')), 0);
   ```

1.  Erstellen Sie den Benutzer mit dem Digest und dem Salt aus den vorherigen Schritten. Sehen Sie sich die folgende Anweisung an. 

   ```
   CREATE USER admin PASSWORD 'sha256|821708135fcc42eb3afda85286dee0ed15c2c461d000291609f77eb113073ec2|c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6';
   ```

1. Melden Sie sich mit den Anmeldeinformationen bei der Datenbank an.

    In diesem Beispiel melden Sie sich als `admin` mit dem Passwort `Mypassword1` an.
Wenn Sie ein Passwort im Klartext festlegen, ohne die Hashing-Funktion anzugeben, wird ein MD5 Digest generiert, bei dem der Benutzername als Salz verwendet wird. 

CREATEDB \$1 NOCREATEDB   
Mithilfe der Option CREATEDB kann der neue Benutzer Datenbanken erstellen. Der Standardwert ist NOCREATEDB.

CREATEUSER \$1 NOCREATEUSER   
Die Option CREATEUSER erstellt einen Superuser mit allen Datenbankrechten einschließlich CREATE USER. Der Standardwert ist NOCREATEUSER. Weitere Informationen finden Sie unter [Superuser](r_superusers.md).

SYSLOG ACCESS \$1 RESTRICTED \$1 UNRESTRICTED \$1  <a name="create-user-syslog-access"></a>
Eine Klausel, über die die Zugriffsebene eines Benutzers auf die Amazon-Redshift-Systemtabellen und -Ansichten festgelegt wird.   
Reguläre Benutzer mit der Berechtigung SYSLOG ACCESS RESTRICTED können nur die Zeilen anzeigen, die von den betreffenden Benutzern in für Benutzer sichtbaren Systemtabellen und Ansichten erstellt wurden. Die Standardeinstellung ist RESTRICTED.   
Reguläre Benutzer mit der Berechtigung SYSLOG ACCESS UNRESTRICTED können alle Zeilen in für Benutzer sichtbaren Systemtabellen und Ansichten anzeigen, einschließlich Zeilen, die von anderen Benutzern erstellt wurden. Über die Option UNRESTRICTED erhält ein Benutzer keinen Zugriff auf für Superuser sichtbare Tabellen. Nur Superuser können auf solche Tabellen zugreifen.   
Wenn Sie einem Benutzer uneingeschränkten Zugriff auf Systemtabellen gewähren, sieht der Benutzer auch Daten, die von anderen Benutzern generiert wurden. STL\$1QUERY und STL\$1QUERYTEXT enthalten beispielsweise den vollständigen Text von INSERT-, UPDATE- und DELETE-Anweisungen, die möglicherweise sensible von Benutzern generierte Daten enthalten. 
Alle Zeilen in SVV\$1TRANSACTIONS sind für alle Benutzer sichtbar.   
Weitere Informationen finden Sie unter [Sichtbarkeit der Daten in Systemtabellen und Ansichten](cm_chap_system-tables.md#c_visibility-of-data).

IN GROUP *groupname*   
Gibt den Namen einer vorhandenen Gruppe an, zu der der Benutzer gehört. Es können mehrere Gruppennamen aufgelistet werden.

VALID UNTIL *abstime*   
Die Option VALID UNTIL legt eine absolute Zeit fest, nach der das Passwort des Benutzers nicht länger gültig ist. Standardmäßig gibt es für das Passwort kein Zeitlimit.

CONNECTION LIMIT \$1 *Limit* \$1 UNLIMITED \$1   
Die maximale Zahl von Datenbankverbindungen, die der Benutzer gleichzeitig geöffnet haben darf. Das Limit wird für Superuser nicht durchgesetzt. Mithilfe des Schlüsselworts UNLIMITED können Sie die maximale Zahl gleichzeitiger Verbindungen festlegen. Möglicherweise gilt auch ein Limit für die Zahl der Verbindungen für die einzelnen Datenbanken. Weitere Informationen finden Sie unter [CREATE DATABASE](r_CREATE_DATABASE.md). Der Standardwert ist UNLIMITED. Um die aktuellen Verbindungen anzuzeigen, führen Sie eine Abfrage für die Systemansicht [STV\$1SESSIONS](r_STV_SESSIONS.md) aus.  
Wenn sowohl für Benutzer- als auch für Datenbankverbindungen Limits gelten, muss ein ungenutzter Verbindungsplatz verfügbar sein, der sich innerhalb beider Grenzen befindet, wenn ein Benutzer versucht, eine Verbindung herzustellen.

SESSION TIMEOUT *limit*  
Die maximale Zeit in Sekunden, die eine Sitzung inaktiv oder untätig bleibt. Der Bereich liegt zwischen 60 Sekunden (einer Minute) und 1.728.000 Sekunden (20 Tagen). Wenn für den Benutzer kein Sitzungstimeout eingestellt ist, gilt die Clustereinstellung. Weitere Informationen finden Sie unter [ Kontingente und Limits in Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) im *Verwaltungshandbuch zu Amazon Redshift*.  
Wenn Sie das Sitzungstimeout festlegen, wird es nur auf neue Sitzungen angewendet.  
Um Informationen über aktive Benutzersitzungen, einschließlich der Startzeit, des Benutzernamens und des Sitzungstimeouts anzuzeigen, fragen Sie die [STV\$1SESSIONS](r_STV_SESSIONS.md)-Systemansicht ab. Um Informationen über den Verlauf von Benutzersitzungen anzuzeigen, fragen Sie die [STL\$1SESSIONS](r_STL_SESSIONS.md)-Ansicht an. Um Informationen über Datenbankbenutzer, einschließlich Sitzungstimeouts, abzurufen, fragen Sie die [SVL\$1USER\$1INFO](r_SVL_USER_INFO.md)-Ansicht ab.

EXTERNALID *external\$1id*  
Der Bezeichner für den Benutzer, der einem Identitätsanbieter zugeordnet ist. Der Benutzer muss sein Passwort deaktiviert haben. Weitere Informationen finden Sie unter [Nativer Identitätsanbieter(IdP)-Verbund für Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

### Nutzungshinweise
<a name="create_user-usage-notes"></a>

Standardmäßig besitzen alle Benutzer CREATE- und USAGE-Rechte für das Schema PUBLIC. Um Benutzer daran zu hindern, Objekte im Schema PUBLIC einer Datenbank zu erstellen, verwenden Sie den Befehl REVOKE, um dieses Recht zu entfernen.

Wenn Sie die IAM-Authentifizierung verwenden, um Benutzeranmeldeinformationen für Datenbanken zu erstellen, können Sie einen Superuser erstellen, der sich nur anhand vorübergehender Anmeldeinformationen anmelden kann. Sie können das Passwort eines Superusers nicht deaktivieren, aber Sie können ein unbekanntes Passwort mit einer zufällig generierten MD5 Hash-Zeichenfolge erstellen.

```
create user iam_superuser password 'md5A1234567890123456780123456789012' createuser;
```

Die Groß-/Kleinschreibung eines in doppelte Anführungszeichen eingeschlossenen *Benutzernamens* bleibt unabhängig von der Einstellung der `enable_case_sensitive_identifier`-Konfigurationsoption immer erhalten. Weitere Informationen finden Sie unter [enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md).

## Beispiele
<a name="r_CREATE_USER-examples"></a>

Der folgende Befehl erstellt einen Benutzer namens dbuser mit dem Passwort "abcD1234", Datenbankerstellungsrechten und einem Verbindungslimit von 30.

```
create user dbuser with password 'abcD1234' createdb connection limit 30;
```

 Führen Sie eine Abfrage für die Katalogtabelle PG\$1USER\$1INFO aus, um Details zu einem Datenbankbenutzer anzuzeigen. 

```
select * from pg_user_info;
         
 usename   | usesysid | usecreatedb | usesuper | usecatupd | passwd   | valuntil | useconfig | useconnlimit
-----------+----------+-------------+----------+-----------+----------+----------+-----------+-------------
 rdsdb     |        1 | true        | true     | true      | ******** | infinity |           |
 adminuser |      100 | true        | true     | false     | ******** |          |           | UNLIMITED
 dbuser    |      102 | true        | false    | false     | ******** |          |           | 30
```

Im folgenden Beispiel ist das Kontopasswort bis zum 10 Juni 2017 gültig.

```
create user dbuser with password 'abcD1234' valid until '2017-06-10';
```

 Im folgenden Beispiel wird ein Benutzer mit einen Kennwort erstellt, das zwischen Groß- und Kleinschreibung unterscheidet und Sonderzeichen enthält.

```
create user newman with password '@AbC4321!';
```

 Um einen Backslash ('\$1') in Ihrem MD5 Passwort zu verwenden, maskieren Sie den Backslash mit einem Backslash in Ihrer Quellzeichenfolge. Im folgenden Beispiel wird ein Benutzer namens `slashpass` mit einem einzelnen Backslash („`\`“) als Passwort erstellt. 

```
select md5('\\'||'slashpass');
         
md5
--------------------------------
0c983d1a624280812631c5389e60d48c
```

Erstellen Sie einen Benutzer mit dem Passwort md5.

```
create user slashpass password 'md50c983d1a624280812631c5389e60d48c';
```

Im folgenden Beispiel wird ein Benutzer mit dem Namen `dbuser` erstellt, für den das Timeout für eine Leerlaufsitzung auf 120 Sekunden eingestellt ist.

```
CREATE USER dbuser password 'abcD1234' SESSION TIMEOUT 120;
```

Im folgenden Beispiel wird ein Benutzer mit dem Namen `bob` erstellt. Der Namespace lautet `myco_aad`. Dies ist nur ein Beispiel. Um den Befehl erfolgreich ausführen zu können, benötigen Sie einen registrierten Identitätsanbieter. Weitere Informationen finden Sie unter [Nativer Identitätsanbieter(IdP)-Verbund für Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

```
CREATE USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

# CREATE VIEW
<a name="r_CREATE_VIEW"></a>

Erstellt eine Ansicht in einer Datenbank. Die Ansicht wird nicht physisch umgesetzt; die Abfrage, mit der die Ansicht definiert wird, wird jedes Mal ausgeführt, wenn die Ansicht in einer Abfrage referenziert wird. Zum Erstellen einer Ansicht mit einer externen Tabelle fügen Sie die Klausel WITH NO SCHEMA BINDING ein.

Um eine Standardansicht erstellen zu können, benötigen Sie Zugriff auf die zugrunde liegenden Tabellen oder Ansichten. Zum Abfragen einer Standardansicht benötigen Sie ausgewählte Berechtigungen für die Ansicht selbst, jedoch nicht für die zugrundeliegenden Tabellen. Wenn Sie eine Ansicht erstellen, die auf eine Tabelle oder Ansicht in einem anderen Schema oder auf eine materialisierte Ansicht verweist, benötigen Sie Nutzungsberechtigungen. Zum Abfragen einer spätbindenden Ansicht benötigen Sie SELECT-Berechtigungen für die spätbindende Ansicht selbst. Sie sollten auch sicherstellen, dass der Besitzer der spätbindenden Ansicht über Select-Berechtigungen für die referenzierten Objekte verfügt (Tabellen, Ansichten oder benutzerdefinierte Funktionen). Weitere Informationen zu spätbindenden Ansichten finden Sie unter [Nutzungshinweise](#r_CREATE_VIEW_usage_notes).

## Erforderliche Berechtigungen
<a name="r_CREATE_VIEW-privileges"></a>

Um CREATE VIEW zu verwenden, ist eine der folgenden Berechtigungen erforderlich.
+ So erstellen Sie eine Ansicht mit CREATE [OR REPLACE] VIEW:
  + Superuser
  + Benutzer mit der Berechtigung CREATE [ REPLACE ] VIEW
+ Um eine vorhandene Ansicht mit CREATE OR REPLACE VIEW zu ersetzen:
  + Superuser
  + Benutzer mit der Berechtigung CREATE [ OR REPLACE ] VIEW
  + Besitzer der Ansicht

Wenn ein Benutzer auf eine Ansicht zugreifen möchte, die eine benutzerdefinierte Funktion enthält, muss der Benutzer die EXECUTE-Berechtigung für diese Funktion besitzen.

## Syntax
<a name="r_CREATE_VIEW-synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query
[ WITH NO SCHEMA BINDING ]
```

## Parameters
<a name="r_CREATE_VIEW-parameters"></a>

OR REPLACE   
Wenn bereits eine Ansicht mit demselben Namen vorhanden ist, wird die Ansicht ersetzt. Sie können eine Ansicht nur durch eine neue Abfrage ersetzen, die einen identischen Satz von Spalten generiert und dieselben Spaltennamen und Datentypen verwendet. CREATE OR REPLACE VIEW sperrt die Ansicht für Lese- und Schreibvorgänge, bis die Operation abgeschlossen ist.  
Wenn eine Ansicht ersetzt wird, bleiben ihre anderen Eigenschaften, wie z. B. Eigentümerschaft und gewährte Berechtigungen, erhalten. 

 *Name*   
Der Name der Ansicht. Wenn ein Schemaname angegeben ist (wie `myschema.myview`), wird die Ansicht mithilfe des angegebenen Schemas erstellt. Andernfalls wird die Ansicht im aktuellen Schema erstellt. Der Name der Ansicht muss sich von den Namen anderer Ansichten oder Tabellen im selben Schema unterscheiden.   
Wenn Sie einen Ansichtnamen angeben, der mit „\$1“ beginnt, wird die Ansicht als temporäre Ansicht erstellt, die nur in der aktuellen Sitzung angezeigt wird.  
Weitere Informationen zu gültigen Namen finden Sie unter [Namen und Kennungen](r_names.md). Sie können in den Systemdatenbanken template0, template1, padb\$1harvest oder sys:internal keine Tabellen oder Ansichten erstellen.

 *column\$1name*   
Optionale Liste von Namen, die für die Spalten in der Ansicht verwendet werden sollen. Wenn keine Spaltennamen angegeben werden, werden die Spaltennamen aus der Abfrage abgeleitet. Die maximale Anzahl der Spalten, die Sie in einer einzelnen Ansicht definieren können, ist 1.600.

 *query*   
Eine Abfrage (in Form einer SELECT-Anweisung), die zu einer Tabelle evaluiert. Diese Tabelle definiert die Spalten und Zeilen in der Ansicht. 

 WITH NO SCHEMA BINDING   
Klausel, die angibt, dass die Ansicht nicht an die zugrunde liegenden Datenbankobjekte gebunden ist, wie etwa Tabellen und benutzerdefinierte Funktionen. Deshalb besteht keine Abhängigkeit zwischen der Ansicht und den Objekten, auf die sie verweist. Sie können sogar eine Ansicht erstellen, wenn die referenzierten Objekte nicht vorhanden sind. Da keine Abhängigkeit besteht, können Sie ein referenziertes Objekt entfernen oder ändern, ohne die Ansicht zu beeinflussen. Amazon Redshift sucht erst nach Abhängigkeiten, wenn die Ansicht abgefragt wird. Rekursive allgemeine Tabellenausdrücke (RCTE) werden in spätbindenden Ansichten nicht unterstützt. Um Details über spätbindende Ansichten anzuzeigen, führen Sie die Funktion [PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md) aus.  
Wenn Sie die WITH NO SCHEMA BINDING-Klausel einbeziehen, müssen Tabellen und Ansichten, die in der SELECT-Anweisung referenziert werden, mit einem Schemanamen qualifiziert werden. Das Schema muss vorhanden sein, wenn die Ansicht erstellt wird, auch wenn die referenzierte Tabelle nicht vorhanden ist. Die folgende Anweisung gibt beispielsweise einen Fehler zurück.   

```
create view myevent as select eventname from event
with no schema binding;
```
Die folgende Anweisung wird erfolgreich ausgeführt.  

```
create view myevent as select eventname from public.event
with no schema binding;
```

**Anmerkung**  
Sie können für eine Ansicht keine Aktualisierungen, Einfügungen oder Löschungen ausführen. 

## Nutzungshinweise
<a name="r_CREATE_VIEW_usage_notes"></a>



### Ansichten mit später Bindung
<a name="r_CREATE_VIEW_late-binding-views"></a>

Eine Ansicht mit später Bindung prüft zugrunde liegende Datenbankobjekte wie Tabellen und andere Ansichten erst, wenn die Ansicht abgefragt wird. Daher können Sie die zugrunde liegenden Objekte ändern oder weglassen, ohne die Ansicht wegzulassen oder neu zu erstellen. Wenn Sie zugrundeliegende Objekte weglassen, schlagen Anfragen an die Ansicht mit später Bindung fehl. Wenn die Abfrage der Ansicht mit später Bindung auf Spalten in dem zugrundeliegenden Objekt verweist, die nicht vorhanden sind, schlägt die Abfrage fehl. 

 Wenn Sie die zugrundeliegende Tabelle oder Ansicht einer Ansicht mit später Bildung weglassen und danach erneut erstellen, wird das neue Objekt mit Standard-Zugriffsberechtigungen erstellt. Sie müssen möglicherweise Benutzern, die die Ansicht abfragen werden, Berechtigungen für die zugrundeliegenden Objekte erteilen. 

Zum Erstellen einer Ansicht mit später Bindung fügen Sie die Klausel WITH NO SCHEMA BINDING ein. Im folgenden Beispiel wird eine Ansicht ohne Schemabindung erstellt. 

```
create view event_vw as select * from public.event
with no schema binding;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | eventname     | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

Das folgende Beispiel zeigt, dass Sie eine zugrunde liegende Tabelle ändern können, ohne die Ansicht neu zu erstellen. 

```
alter table event rename column eventname to title;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | title         | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

Sie können externe Amazon-Redshift-Spectrum-Tabellen nur in Ansichten mit später Bindung referenzieren. Eine Anwendung von Ansichten mit später Bindung dient zum Abfragen der Amazon-Redshift- und Redshift-Spectrum-Tabellen. Beispiel: Sie können den Befehl [UNLOAD](r_UNLOAD.md) verwenden, um ältere Daten in Amazon S3 zu archivieren. Erstellen Sie anschließend eine externe Redshift-Spectrum-Tabelle, die die Daten in Amazon S3 referenziert, und erstellen Sie eine Ansicht, die beide Tabellen abfragt. Das folgende Beispiel verwendet eine UNION ALL-Klausel zur Verbindung der `SALES`-Tabelle aus Amazon Redshift und der `SPECTRUM.SALES`-Tabelle aus Redshift Spectrum.

```
create view sales_vw as
select * from public.sales
union all
select * from spectrum.sales
with no schema binding;
```

Weitere Informationen zum Erstellen externer Redshift Spectrum-Tabellen, einschließlich der `SPECTRUM.SALES`-Tabelle finden Sie unter [Erste Schritte mit Amazon Redshift Spectrum](c-getting-started-using-spectrum.md).

**Wichtig**  
Wenn Sie eine Standardansicht aus einer spätbindenden Ansicht erstellen, enthält die Definition der Standardansicht die Definition der spätbindenden Ansicht zu dem Zeitpunkt, an dem die Standardansicht erstellt wurde, einschließlich des Besitzers der spätbindenden Ansicht. Wenn Sie eine Änderung für die zugrunde liegenden spätbindende Ansicht ausführen, werden diese Änderungen in der Standardansicht erst verwendet, wenn Sie die Standardansicht neu erstellen. Wenn die Standardansicht abgefragt wird, verwendet sie daher stets die Definition der spätbindenden Ansicht und den Besitzer der spätbindenden Ansicht für die Berechtigungsprüfung zum Zeitpunkt der Erstellung dieser Standardansicht.

Um die Standardansicht so zu aktualisieren, dass sie auf die neueste Definition der spätbindenden Ansicht verweist, führen Sie CREATE OR REPLACE VIEW mit der ursprünglichen Ansichtsdefinition aus, mit der Sie die Standardansicht erstellt haben.

Im folgenden Beispiel sehen Sie das Erstellen einer Standardansicht aus einer spätbindenden Ansicht.

```
create view sales_vw_lbv as 
select * from public.sales 
with no schema binding;

show view sales_vw_lbv;
                            Show View DDL statement
--------------------------------------------------------------------------------
 create view sales_vw_lbv as select * from public.sales with no schema binding;
(1 row)

create view sales_vw as 
select * from sales_vw_lbv;

show view sales_vw;
                                               Show View DDL statement
---------------------------------------------------------------------------------------------------------------------
 SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv;
(1 row)
```

Beachten Sie, dass die spätbindende Ansicht, wie sie in der DDL-Anweisung für die Standardansicht gezeigt wird, beim Erstellen der Standardansicht definiert und nicht aktualisiert wird, wenn Sie danach Änderungen an der spätbindenden Ansicht vornehmen.

## Beispiele
<a name="r_CREATE_VIEW-examples"></a>

In den Beispielbefehlen wird ein Beispielsatz von Objekten und Daten verwendet, die sogenannte *TICKIT*-Datenbank. Weitere Informationen finden Sie unter [Beispieldatenbank](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

Der folgende Befehl erstellt eine Ansicht namens *myevent* aus einer Tabelle namens EVENT. 

```
create view myevent as select eventname from event
where eventname = 'LeAnn Rimes';
```

Der folgende Befehl erstellt eine Ansicht namens* myuser* aus einer Tabelle namens USERS. 

```
create view myuser as select lastname from users;
```

Der folgende Befehl erstellt oder ersetzt eine Ansicht namens* myuser* aus einer Tabelle namens USERS. 

```
create or replace view myuser as select lastname from users;
```

Im folgenden Beispiel wird eine Ansicht ohne Schemabindung erstellt. 

```
create view myevent as select eventname from public.event
with no schema binding;
```

# DEALLOCATE
<a name="r_DEALLOCATE"></a>

Entfernt die Zuteilung einer vorbereiteten Anweisung. 

## Syntax
<a name="r_DEALLOCATE-synopsis"></a>

```
DEALLOCATE [PREPARE] plan_name
```

## Parameters
<a name="r_DEALLOCATE-parameters"></a>

PREPARE   
Dieses Schlüsselwort ist optional und wird ignoriert. 

 *plan\$1name*   
Der Name der vorbereiteten Anweisung, deren Zuteilung aufgehoben werden soll. 

## Nutzungshinweise
<a name="r_DEALLOCATE_usage_notes"></a>

DEALLOCATE wird verwendet, um die Zuteilung einer zuvor vorbereiteten SQL-Anweisung aufzuheben. Wenn Sie die Zuteilung einer vorbereiteten Anweisung nicht explizit aufheben, wird die Zuteilung aufgehoben, wenn die Sitzung beendet wird. Weitere Informationen zu vorbereiteten Anweisungen finden Sie unter [PREPARE](r_PREPARE.md).

## Weitere Informationen finden Sie unter:
<a name="r_DEALLOCATE-see-also"></a>

 [EXECUTE](r_EXECUTE.md), [PREPARE](r_PREPARE.md) 

# DECLARE
<a name="declare"></a>

Definiert einen neuen Cursor. Mit einem Cursor können Sie aus dem Ergebnissatz einer größeren Abfrage einige Zeilen gleichzeitig abrufen. 

Wenn die erste Zeile eines Cursors abgerufen wird, wird der gesamte Ergebnissatz auf dem Führungsknoten im Arbeitsspeicher oder auf der Festplatte umgesetzt, wenn nötig. Aufgrund der potenziellen negativen Auswirkungen der Verwendung von Cursors mit großen Ergebnissätzen wird empfohlen, alternative Ansätze anzuwenden, wann immer möglich. Weitere Informationen finden Sie unter [Überlegungen in Bezug auf die Leistung bei Verwendung von Cursors](#declare-performance).

Sie müssen einen Cursor innerhalb eines Transaktionsblocks deklarieren. Pro Sitzung kann jeweils nur ein Cursor offen sein. 

Weitere Informationen finden Sie unter [FETCH](fetch.md), [CLOSE](close.md).

## Syntax
<a name="declare-synopsis"></a>

```
DECLARE cursor_name CURSOR FOR query
```

## Parameters
<a name="declare-parameters"></a>

*cursor\$1name*   
Der Name des neuen Cursors. 

 *query*   
Eine SELECT-Anweisung, die den Cursor ausfüllt.

## Nutzungshinweise für DECLARE CURSOR
<a name="declare-usage"></a>

Wenn Ihre Clientanwendung eine ODBC-Verbindung verwendet und Ihre Abfrage eine Ergebnismenge erzeugt, die so groß ist, dass sie nicht in den Arbeitsspeicher passt, können Sie die Ergebnismenge unter Verwendung eines Cursors an die Clientanwendung übermitteln. Wenn Sie einen Cursor verwenden, wird der gesamte Ergebnissatz auf dem Führungsknoten umgesetzt. Anschließend kann Ihr Client die Ergebnisse inkrementell abrufen. 

**Anmerkung**  
Um Cursors in ODBC für Microsoft Windows zu unterstützen, aktivieren Sie die Option **Use Declare/Fetch** (Declare/Fetch verwenden) in der ODBC DSN, die Sie für Amazon Redshift verwenden. Es wird empfohlen, die Größe des ODBC-Zwischenspeichers im Feld **Cache Size (Cache-Größe)** des Dialogfelds für ODBC DSN-Optionen auf mindestens 4.000 für Mehrknoten-Cluster festzulegen, um Netzläufe zu minimieren. Legen Sie die Größe des Zwischenspeichers für Einzelknoten-Cluster auf 1.000 fest.

Aufgrund der potenziellen negativen Auswirkungen der Verwendung von Cursors wird empfohlen, alternative Ansätze anzuwenden, wann immer möglich. Weitere Informationen finden Sie unter [Überlegungen in Bezug auf die Leistung bei Verwendung von Cursors](#declare-performance).

Amazon-Redshift-Cursors werden mit den folgenden Einschränkungen unterstützt:
+ Pro Sitzung kann jeweils nur ein Cursor offen sein. 
+ Cursors müssen innerhalb einer Transaktion (BEGIN … END) verwendet werden. 
+ Die maximal zulässige kumulative Größe für Ergebnissätze für alle Cursors wird auf der Basis des Typs des Clusterknotens eingeschränkt. Wenn Sie größere Ergebnissätze benötigen, können Sie die Größe in eine XL- oder 8XL-Knotenkonfiguration ändern.

  Weitere Informationen finden Sie unter [Einschränkungen für Cursors](#declare-constraints). 

## Einschränkungen für Cursors
<a name="declare-constraints"></a>

Wenn die erste Zeile eines Cursors abgerufen wird, wird der gesamte Ergebnissatz auf dem Führungsknoten umgesetzt. Wenn der Ergebnissatz zu groß für den Arbeitsspeicher ist, wird er bei Bedarf auf die Festplatte geschrieben. Um die Integrität des Führungsknotens zu schützen, setzt Amazon Redshift Einschränkungen für die Größe aller Cursor-Ergebnissätze auf der Basis des Typs des Clusterknotens durch.

In der folgenden Tabelle wird die maximal zulässige Gesamtgröße von Ergebnissätzen für die einzelnen Cluster-Knotentypen gezeigt. Die maximale Größe von Ergebnissätzen ist in Megabyte angegeben.


| Knotentyp | Maximal zulässige Größe des Ergebnissatzes pro Cluster (MB) | 
| --- | --- | 
|   DC2 Large-Mehrfachknoten   | 192.000 | 
|   DC2 Large-Einzelknoten   | 8 000 | 
|   DC2 8XL mehrere Knoten   | 3.200.000 | 
|   RA3 16XL mehrere Knoten   | 14.400.000 | 
|   RA3 4XL mehrere Knoten   | 3.200.000 | 
|   RA3 XLPLUS mehrere Knoten   | 1 000 000 | 
|   RA3 XLPLUS Einzelknoten   | 64.000 | 
|   RA3 GROSSE, mehrere Knoten   | 240.000 | 
|   RA3 GROSSER Einzelknoten   | 8 000 | 
| Amazon Redshift Serverless | 150.000 | 

Um die aktive Cursor-Konfiguration für ein Cluster anzuzeigen, führen Sie eine Abfrage für die Systemtabelle [STV\$1CURSOR\$1CONFIGURATION](r_STV_CURSOR_CONFIGURATION.md) als Superuser aus. Um den Status aktiver Cursors anzuzeigen, führen Sie eine Abfrage für die Systemtabelle [STV\$1ACTIVE\$1CURSORS](r_STV_ACTIVE_CURSORS.md) aus. Nur die Zeilen für die eigenen Cursors eines Benutzers werden diesem angezeigt. Superuser können jedoch alle Cursors anzeigen.

## Überlegungen in Bezug auf die Leistung bei Verwendung von Cursors
<a name="declare-performance"></a>

Da Cursors den gesamten Ergebnissatz auf dem Führungsknoten umsetzen, bevor Ergebnisse an den Client zurückgegeben werden, kann sich die Verwendung von Cursors bei sehr großen Ergebnissätzen negativ auf die Leistung auswirken. Es wird nachdrücklich empfohlen, Cursors nicht bei sehr großen Ergebnissätzen zu verwenden. In einigen Fällen sind Cursors möglicherweise die einzige praktikable Lösung, beispielsweise, wenn Ihre Anwendung eine ODBC-Verbindung verwendet. Es wird empfohlen, die folgenden Alternativen zu verwenden, wenn möglich:
+ Verwenden Sie [UNLOAD](r_UNLOAD.md), um große Tabellen zu exportieren. Wenn Sie UNLOAD verwenden, arbeiten die Datenverarbeitungsknoten parallel, um die Daten direkt an Datendateien in Amazon Simple Storage Service zu übertragen. Weitere Informationen finden Sie unter [Entladen von Daten in Amazon Redshift](c_unloading_data.md). 
+ Legen Sie den JDBC-Parameter für die Abrufgröße in Ihre Clientanwendung fest. Wenn Sie eine JDBC-Verbindung verwenden und auf clientseitige out-of-memory Fehler stoßen, können Sie Ihrem Client ermöglichen, Ergebnismengen in kleineren Batches abzurufen, indem Sie den Parameter JDBC-Abrufgröße festlegen. Weitere Informationen finden Sie unter [Festlegen des JDBC-Parameters für die Abrufgröße](set-the-JDBC-fetch-size-parameter.md). 

## Beispiele für DECLARE CURSOR
<a name="declare-example"></a>

Im folgenden Beispiel wird ein Cursor namens LOLLAPALOOZA deklariert, um Verkaufsinformationen für das Lollapalooza-Ereignis auszuwählen und dann mittels des Cursors Zeilen aus dem Ergebnissatz abzurufen:

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

Im folgenden Beispiel wird eine Schleife über einen Refcursor mit allen Ergebnissen aus einer Tabelle durchgeführt:

```
CREATE TABLE tbl_1 (a int, b int);
INSERT INTO tbl_1 values (1, 2),(3, 4);

CREATE OR REPLACE PROCEDURE sp_cursor_loop() AS $$
DECLARE
    target record;
    curs1 cursor for select * from tbl_1;
BEGIN
    OPEN curs1;
    LOOP
        fetch curs1 into target;
        exit when not found;
        RAISE INFO 'a %', target.a;
    END LOOP;
    CLOSE curs1;
END;
$$ LANGUAGE plpgsql;

CALL sp_cursor_loop();
         
SELECT message 
   from svl_stored_proc_messages 
   where querytxt like 'CALL sp_cursor_loop()%';
         
  message
----------
      a 1
      a 3
```

# DELETE
<a name="r_DELETE"></a>

Löscht Zeilen aus Tabellen.

**Anmerkung**  
Die maximal zulässige Größe für eine einzelne SQL-Anweisung ist 16 MB.

## Syntax
<a name="r_DELETE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
DELETE [ FROM ] { table_name | materialized_view_name }
    [ { USING } table_name, ... ]
    [ WHERE condition ]
```

## Parameters
<a name="r_DELETE-parameters"></a>

WITH-Klausel  
Optionale Klausel, die eine oder mehrere Klausel angibt. *common-table-expressions* Siehe [WITH-Klausel](r_WITH_clause.md). 

FROM  
Das Schlüsselwort FROM ist optional, außer in den Fällen, in denen die USING-Klausel angegeben ist. Die Anweisungen `delete from event;` und `delete event;` sind gleichwertige Operationen, die alle Zeilen aus der Tabelle EVENT entfernen.  
Um alle Zeilen in einer Tabelle zu löschen, führen Sie für die Tabelle den Befehl [TRUNCATE](r_TRUNCATE.md) aus. TRUNCATE ist sehr viel effizienter als DELETE und erfordert weder VACUUM noch ANALYZE. Denken Sie jedoch daran, dass TRUNCATE ein Commit für die Transaktion ausführt, in der er ausgeführt wird.

 *table\$1name*   
Eine temporäre oder persistente Tabelle. Nur der Besitzer der Tabelle oder ein Benutzer mit dem Recht DELETE für die Tabelle können Zeilen aus der Tabelle löschen.  
Sie sollten den Befehl TRUNCATE für schnelle, nicht qualifizierte Löschoperationen für große Tabellen verwenden; siehe [TRUNCATE](r_TRUNCATE.md).  
Nach dem Löschen einer großen Zahl von Zeilen aus einer Tabelle:  
+ Führen Sie eine Vacuum-Operation für die Tabelle durch, um Speicherplatz zurückzugewinnen und die Zeilen neu zu sortieren.
+ Analysieren Sie die Tabelle, um Statistiken für den Abfrageplaner zu aktualisieren.

 *materialized\$1view\$1name*   
Eine materialisierte Ansicht. Die DELETE-Anweisung funktioniert in einer materialisierten Ansicht, die für [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md) benutzt wird. Nur der Besitzer der materialisierten Ansicht oder ein Benutzer mit DELETE-Privilegien für die materialisierte Ansicht kann Zeilen daraus löschen.  
Sie können DELETE nicht für eine materialisierte Ansicht zur Streaming-Aufnahme mit einer RLS-Richtlinie (Row Level Security) ausführen, für die dem Benutzer nicht die Berechtigung IGNORE RLS erteilt wurde. Es gibt eine Ausnahme: Wenn dem Benutzer, der den Löschvorgang ausführt, die Option IGNORE RLS gewährt wurde, wird der Vorgang erfolgreich ausgeführt. Weitere Informationen finden Sie unter [Eigentümerschaft und Verwaltung von RLS-Richtlinien](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_ownership.html).

USING *table\$1name*, ...  
Das Schlüsselwort USING wird verwendet, um eine Tabellenliste einzuführen, wenn in der WHERE-Klauselbedingung zusätzliche Tabellen referenziert werden. Die folgende Anweisung löscht beispielsweise alle Zeilen aus der Tabelle EVENT, die die Join-Bedingung für die Tabellen EVENT und SALES erfüllen. Die Tabelle SALES muss in der Liste FROM explizit genannt werden:  

```
delete from event using sales where event.eventid=sales.eventid;
```
Wenn Sie den Namen der Zieltabelle in der USING-Klausel wiederholen, führt die DELETE-Operation einen Self-Join aus. Sie können anstelle der USING-Syntax eine Unterabfrage in der WHERE-Klausel verwenden, um die gleiche Abfrage auf eine andere Art zu schreiben.

WHERE *condition*   
Optionale Klausel, die das Löschen von Zeilen auf die Zeilen einschränkt, die der Bedingung entsprechen. Bei der Bedingung kann es sich beispielsweise um eine Einschränkung für eine Spalte, eine Join-Bedingung oder eine Bedingung auf der Basis eines Abfrageergebnisses handeln. Die Abfrage kann andere Tabellen als das Ziel des Befehls DELETE referenzieren. Beispiel:  

```
delete from t1
where col1 in(select col2 from t2);
```
Wenn keine Bedingung angegeben wird, werden alle Zeilen in der Tabelle gelöscht.

## Nutzungshinweise
<a name="r_DELETE-usage"></a>
+ DELETE-Operationen enthalten exklusive Sperren, wenn sie in materialisierten Ansichten für das Streaming in Amazon Redshift ausgeführt werden, die mit einem der folgenden Streams verbunden sind:
  +  Einem Amazon-Kinesis-Datenstrom 
  +  Einem Thema in Amazon Managed Streaming für Apache Kafka 
  +  Einem unterstützten externen Stream, z. B. einem Thema in Confluent Cloud Kafka 

  Weitere Informationen finden Sie unter [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md).

## Beispiele
<a name="r_DELETE-examples"></a>

Löschen aller Zeilen aus der Tabelle CATEGORY:

```
delete from category;
```

Löschen von Zeilen mit CATID-Werten zwischen 0 und 9 aus der Tabelle CATEGORY:

```
delete from category
where catid between 0 and 9;
```

Löschen von Zeilen aus der Tabelle LISTING, deren SELLERID-Werte in der Tabelle SALES nicht vorhanden sind:

```
delete from listing
where listing.sellerid not in(select sales.sellerid from sales);
```

Die folgenden beiden Abfragen löschen jeweils eine einzelne Zeile aus der Tabelle CATEGORY, basierend auf einem Join mit der Tabelle EVENT und einer zusätzlichen Einschränkung für die Spalte CATID:

```
delete from category
using event
where event.catid=category.catid and category.catid=9;
```

```
delete from category
where catid in
(select category.catid from category, event
where category.catid=event.catid and category.catid=9);
```

Die folgende Abfrage löscht alle Zeilen aus der `mv_cities` materialisierten Ansicht. Der hier verwendete Name der materialisierten Ansicht ist ein Beispiel:

```
delete from mv_cities;
```

# DESC DATASHARE
<a name="r_DESC_DATASHARE"></a>

Zeigt eine Liste der Datenbankobjekte in einem Datashare an, die mit ALTER DATASHARE hinzugefügt werden. Amazon Redshift zeigt die Namen, Datenbanken, Schemata und Typen von Tabellen, Ansichten und Funktionen an. 

Zusätzliche Informationen zu Datashare-Objekten finden Sie, indem Sie Systemansichten verwenden. Weitere Informationen finden Sie unter [SVV\$1DATASHARE\$1OBJECTS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARE_OBJECTS.html) und [SVV\$1DATASHARES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARES.html).

## Syntax
<a name="r_DESC_DATASHARE-synopsis"></a>

```
DESC DATASHARE datashare_name [ OF [ ACCOUNT account_id ] NAMESPACE namespace_guid ]
```

## Parameters
<a name="r_DESC_DATASHARE-parameters"></a>

 *datashare\$1name*   
Der Name des Datashares. 

NAMESPACE *namespace\$1guid*   
Ein Wert, der den Namespace angibt, den das Datashare verwendet. Wenn Sie DESC DATASHARE als Administrator eines Konsumenten-Clusters ausführen, geben Sie die Option NAMESPACE an, um eingehende Datashares anzuzeigen.

ACCOUNT *account\$1id*  
Ein Wert, der das Konto angibt, zu dem das Datashare gehört.

## Nutzungshinweise
<a name="r_DESC_DATASHARE-usage"></a>

Wenn Sie als Administrator für Benutzerkonten DESC DATASHARE ausführen, um eingehende Datenfreigaben innerhalb des AWS Kontos zu sehen, geben Sie die Option NAMESPACE an. Wenn Sie DESC DATASHARE ausführen, um eingehende Datenfreigaben zwischen Konten zu sehen, geben Sie die Optionen ACCOUNT und NAMESPACE an. AWS 

## Beispiele
<a name="r_DESC_DATASHARE-examples"></a>

Im folgenden Beispiel werden Informationen zu den ausgehenden Datashares auf einem Produzenten-Cluster angezeigt.

```
DESC DATASHARE salesshare;

producer_account |          producer_namespace           | share_type  | share_name   | object_type |        object_name           |  include_new
-----------------+---------------------------------------+-------------+--------------+-------------+------------------------------+--------------
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | TABLE       | public.tickit_sales_redshift |
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | SCHEMA      | public                       |   t
```

Im folgenden Beispiel werden Informationen zu den eingehenden Datashares auf einem Konsumenten-Cluster angezeigt.

```
DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

 producer_account |          producer_namespace          | share_type | share_name | object_type |         object_name          |  include_new
------------------+--------------------------------------+------------+------------+-------------+------------------------------+--------------
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift |
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                       |
(2 rows)
```

# DESC IDENTITY PROVIDER
<a name="r_DESC_IDENTITY_PROVIDER"></a>

Zeigt Informationen über einen Identitätsanbieter an. Nur Superuser können Identitätsanbieter beschreiben.

## Syntax
<a name="r_DESC_IDENTITY_PROVIDER-synopsis"></a>

```
DESC IDENTITY PROVIDER identity_provider_name
```

## Parameters
<a name="r_DESC_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Name des Identitätsanbieters.

## Beispiel
<a name="r_DESC_IDENTITY_PROVIDER-examples"></a>

Im folgenden Beispiel werden Informationen zu dem Identitätsanbieter angezeigt.

```
DESC IDENTITY PROVIDER azure_idp;
```

Beispielausgabe.

```
  uid   |   name    | type  |              instanceid              | namespc |                                                                                                                                                 params                                                                                                                                                  | enabled
--------+-----------+-------+--------------------------------------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------
 126692 | azure_idp | azure | e40d4bb2-7670-44ae-bfb8-5db013221d73 | aad     | {"issuer":"https://login.microsoftonline.com/e40d4bb2-7670-44ae-bfb8-5db013221d73/v2.0", "client_id":"871c010f-5e61-4fb1-83ac-98610a7e9110", "client_secret":'', "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift", "https://analysis.windows.net/powerbi/connector/AWSRDS"]} | t
(1 row)
```

# TRENNEN EINER MASKIERUNGSRICHTLINIE
<a name="r_DETACH_MASKING_POLICY"></a>

Trennt eine bereits angefügte Richtlinie für die dynamische Datenmaskierung von einer Spalte. Weitere Informationen zur dynamischen Datenmaskierung finden Sie unter [Dynamische Datenmaskierung](t_ddm.md).

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Maskierungsrichtlinie trennen.

## Syntax
<a name="r_DETACH_MASKING_POLICY-synopsis"></a>

```
DETACH MASKING POLICY
{
  policy_name ON table_name
  | database_name.policy_name ON database_name.schema_name.table_name
}
( output_column_names )
FROM { user_name | ROLE role_name | PUBLIC };
```

## Parameters
<a name="r_DETACH_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der zu trennenden Maskierungsrichtlinie.

database\$1name  
Der Name der Datenbank, in der die Richtlinie und die Beziehung erstellt werden. Die Richtlinie und die Relation müssen sich in derselben Datenbank befinden. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

schema\$1name  
Der Name des Schemas, zu dem die Relation gehört.

 *table\$1name*   
Der Name der Tabelle, von der die Maskierungsrichtlinie getrennt werden soll.

*output\$1column\$1names*   
Die Namen der Spalten, denen die Maskierungsrichtlinie angefügt wurde.

*user\$1name*   
Der Name des Benutzers, dem die Maskierungsrichtlinie angefügt wurde.  
In einer einzelnen Anweisung DETACH MASKING POLICY können Sie nur entweder user\$1name, role\$1name oder PUBLIC festlegen.

*role\$1name*   
Der Name der Rolle, der die Maskierungsrichtlinie angefügt wurde.  
In einer einzelnen Anweisung DETACH MASKING POLICY können Sie nur entweder user\$1name, role\$1name oder PUBLIC festlegen.

*PUBLIC*   
Zeigt an, dass die Richtlinie allen Benutzern in der Tabelle angefügt wurde.  
In einer einzelnen Anweisung DETACH MASKING POLICY können Sie nur entweder user\$1name, role\$1name oder PUBLIC festlegen.

Informationen zur Verwendung von DETACH MASKING POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html) Redshift Redshift-Verbundberechtigungen.

# DETACH RLS POLICY
<a name="r_DETACH_RLS_POLICY"></a>

Trennen Sie eine RLS-Richtlinie auf Zeilenebene für eine Tabelle von einem oder mehreren Benutzern oder Rollen.

Superuser und Benutzer oder Rollen, die die `sys:secadmin`-Rolle haben, können eine Richtlinie aufheben.

## Syntax
<a name="r_DETACH_RLS_POLICY-synopsis"></a>

```
DETACH RLS POLICY
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
FROM { user_name | ROLE role_name | PUBLIC } [, ...];
```

## Parameters
<a name="r_DETACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der -Richtlinie.

database\$1name  
Der Name der Datenbank, in der die Richtlinie und die Beziehung erstellt werden. Die Richtlinie und die Relation müssen sich in derselben Datenbank befinden. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

schema\$1name  
Der Name des Schemas, zu dem die Relation gehört.

table\$1name  
Die Relation, an die die Sicherheitsrichtlinie auf Zeilenebene angefügt ist.

VON \$1 *user\$1name* \$1 ROLE *role\$1name* \$1 PUBLIC\$1 [, ...]  
Gibt an, ob die Richtlinie von einem oder mehreren angegebenen Benutzern oder Rollen getrennt ist. 

Informationen zur Verwendung von DETACH RLS POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html) Redshift Redshift-Verbundberechtigungen.

## Nutzungshinweise
<a name="r_DETACH_RLS_POLICY-usage"></a>

Beachten Sie bei der Arbeit mit der DETACH RLS POLICY-Anweisung Folgendes:
+ Sie können eine Richtlinie von einer Relation, einem Benutzer, einer Rolle oder einer Öffentlichkeit trennen.

## Beispiele
<a name="r_DETACH_RLS_POLICY-examples"></a>

Im folgenden Beispiel wird eine Richtlinie für eine Tabelle von einer Rolle getrennt.

```
DETACH RLS POLICY policy_concerts ON tickit_category_redshift FROM ROLE analyst, ROLE dbadmin;
```

# DROP DATABASE
<a name="r_DROP_DATABASE"></a>

Entfernt eine Datenbank. 

DROP DATABASE kann nicht innerhalb eines Transaktionsblocks (BEGIN ... END) ausgeführt werden. Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

## Syntax
<a name="r_DROP_DATABASE-synopsis"></a>

```
DROP DATABASE database_name [ FORCE ]
```

## Parameters
<a name="r_DROP_DATABASE-parameters"></a>

 *database\$1name*   
Der Name der Datenbank, die entfernt werden soll. Sie können die Datenbanken dev, padb\$1harvest, template0, template1, sys:internal oder die aktuelle Datenbank nicht entfernen.  
Um eine externe Datenbank zu entfernen, entfernen Sie das externe Schema. Weitere Informationen finden Sie unter [DROP SCHEMA](r_DROP_SCHEMA.md).

 FORCE   
Wenn Sie FORCE angeben, versucht DROP DATABASE, aktive Verbindungen zu beenden, bevor die Datenbank entfernt wird. Wenn alle aktiven Verbindungen innerhalb eines Timeouts erfolgreich beendet wurden, wird die Entfernung fortgesetzt. Wenn nicht alle Verbindungen beendet werden, gibt der Befehl einen Fehler aus.

## Nutzungshinweise für DROP DATABASE
<a name="r_DROP_DATABASE_usage"></a>

Wenn Sie die DROP DATABASE-Anweisung verwenden, beachten Sie Folgendes:
+ Im Allgemeinen raten wir davon ab, Datenbanken, die ein AWS Data Exchange -Datashare enthalten, mit der DROP DATABASE-Anweisung zu entfernen. Wenn Sie dies tun, verlieren die AWS-Konten , die Zugriff auf das Datashare haben, den Zugriff. Diese Art der Änderung kann außerdem zu einer Verletzung der Datenproduktbedingungen in AWS Data Exchange führen.

  Das folgende Beispiel zeigt einen Fehler, wenn eine Datenbank, die ein AWS Data Exchange -Datashare enthält, entfernt wird.

  ```
  DROP DATABASE test_db;
  ERROR:   Drop of database test_db that contains ADX-managed datashare(s) requires session variable datashare_break_glass_session_var to be set to value 'ce8d280c10ad41'
  ```

  Um das Entfernen einer Datenbank zu erlauben, legen Sie die folgende Variable fest und führen die DROP DATABASE-Anweisung erneut aus.

  ```
  SET datashare_break_glass_session_var to 'ce8d280c10ad41';
  ```

  ```
  DROP DATABASE test_db;
  ```

  In diesem Fall generiert Amazon Redshift einen zufälligen Einmalwert zur Festlegung der Sitzungsvariable, um DROP DATABASE für eine Datenbank, die ein AWS Data Exchange -Datashare enthält, zu erlauben.

## Beispiele
<a name="r_DROP_DATABASE-examples"></a>

Im folgenden Beispiel wird die Datenbank mit dem Namen TICKIT\$1TEST entfernt: 

```
drop database tickit_test;
```

# DROP DATASHARE
<a name="r_DROP_DATASHARE"></a>

Entfernt ein Datashare. Dieser Befehl kann nicht rückgängig gemacht werden.

Nur ein Superuser oder der Datashare-Besitzer kann ein Datashare entfernen.

## Erforderliche Berechtigungen
<a name="r_DROP_DATASHARE-privileges"></a>

Für DROP DATASHARE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP DATASHARE
+ Besitzer von Datashare

## Syntax
<a name="r_DROP_DATASHARE-synopsis"></a>

```
DROP DATASHARE datashare_name;
```

## Parameters
<a name="r_DROP_DATASHARE-parameters"></a>

 *datashare\$1name*   
Der Name des Datashares, das entfernt werden soll.

## Nutzungshinweise für DROP DATASHARE
<a name="r_DROP_DATASHARE_usage"></a>

Wenn Sie die DROP DATASHARE-Anweisung verwenden, beachten Sie Folgendes:
+ Im Allgemeinen empfehlen wir, eine Datenfreigabe nicht mithilfe der DROP AWS Data Exchange DATASHARE-Anweisung zu löschen. Wenn Sie dies tun, verlieren diejenigen, AWS-Konten die Zugriff auf den Datashare haben, den Zugriff. Diese Art der Änderung kann außerdem zu einer Verletzung der Datenproduktbedingungen in AWS Data Exchange führen.

  Das folgende Beispiel zeigt einen Fehler, wenn ein AWS Data Exchange Datashare gelöscht wird.

  ```
  DROP DATASHARE salesshare;
  ERROR:  Drop of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value '620c871f890c49'
  ```

  Um das Löschen einer AWS Data Exchange Datenfreigabe zu ermöglichen, legen Sie die folgende Variable fest und führen Sie die DROP DATASHARE-Anweisung erneut aus.

  ```
  SET datashare_break_glass_session_var to '620c871f890c49';
  ```

  ```
  DROP DATASHARE salesshare;
  ```

  In diesem Fall generiert Amazon Redshift einen zufälligen einmaligen Wert, um die Sitzungsvariable so einzustellen, dass DROP DATASHARE für ein Datashare zugelassen wird. AWS Data Exchange 

## Beispiele
<a name="r_DROP_DATASHARE-examples"></a>

Im folgenden Beispiel wird ein Datashare namens `salesshare` entfernt.

```
DROP DATASHARE salesshare;
```

# DROP EXTERNAL VIEW
<a name="r_DROP_EXTERNAL_VIEW"></a>

Entfernt eine externe Ansicht aus der Datenbank. Wenn Sie eine externe Ansicht entfernen, wird sie aus allen SQL-Engines entfernt, mit denen die Ansicht verknüpft ist, z. B. Amazon Athena und Amazon EMR Spark. Dieser Befehl kann nicht rückgängig gemacht werden. Weitere Informationen zu Data-Catalog-Ansichten finden Sie unter [AWS Glue Data Catalog -Ansichten](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntax
<a name="r_DROP_EXTERNAL_VIEW-synopsis"></a>

```
DROP EXTERNAL VIEW schema_name.view_name [ IF EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
```

## Parameters
<a name="r_DROP_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Das Schema, das an Ihre AWS Glue Datenbank angehängt ist, gefolgt vom Namen der Ansicht.

IF EXISTS  
Löscht die Ansicht nur, wenn sie existiert.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Die Notation des Schemas, das beim Löschen der Ansicht verwendet werden soll. Sie können angeben AWS Glue Data Catalog, ob Sie eine von Ihnen erstellte Glue-Datenbank oder ein von Ihnen erstelltes externes Schema verwenden möchten. Weitere Informationen finden Sie unter [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) und [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

 *query\$1definition*   
Die Definition der SQL-Abfrage, die Amazon Redshift ausführt, um die Ansicht zu ändern.

## Beispiele
<a name="r_DROP_EXTERNAL_VIEW-examples"></a>

Im folgenden Beispiel wird eine Datenkatalog-Ansicht mit dem Namen sample\$1schema.glue\$1data\$1catalog\$1view entfernt.

```
DROP EXTERNAL VIEW sample_schema.glue_data_catalog_view IF EXISTS
```

# DROP FUNCTION
<a name="r_DROP_FUNCTION"></a>

Entfernt eine benutzerdefinierte Funktion (User-Defined Function, UDF) aus der Datenbank. Die Signatur der Funktion bzw. die Liste der Argumentdatentypen muss angegeben werden, da mehrere Funktionen mit demselben Namen, jedoch unterschiedlichen Signaturen vorhanden sein können. Sie können keine in Amazon Redshift integrierten Funktionen entfernen.

Dieser Befehl kann nicht rückgängig gemacht werden.

## Erforderliche Berechtigungen
<a name="r_DROP_FUNCTION-privileges"></a>

Für DROP FUNCTION sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP FUNCTION
+ Funktionsbesitzer

## Syntax
<a name="r_DROP_FUNCTION-synopsis"></a>

```
DROP FUNCTION name
( [arg_name] arg_type   [, ...] )
[ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_FUNCTION-parameters"></a>

 *Name*   
Das Name der Funktion, die entfernt werden soll.

 *arg\$1name*   
Der Name eines Eingabearguments. DROP FUNCTION ignoriert Argumentnamen, da nur die Argumentdatentypen benötigt werden, um die Identität der Funktion zu ermitteln.

 *arg\$1type*   
Der Datentyp des Eingabearguments. Sie können eine durch Komma getrennte Liste mit maximal 32 Datentypen bereitstellen.

 CASCADE   
Ein Schlüsselwort, das angibt, dass von der Funktion abhängige Objekte, wie etwa Ansichten, automatisch entfernt werden sollen.   
Zum Erstellen einer Ansicht, die von keiner Funktion abhängig ist, fügen Sie die Klausel WITH NO SCHEMA BINDING in die Ansichtsdefinition ein. Weitere Informationen finden Sie unter [CREATE VIEW](r_CREATE_VIEW.md).

 RESTRICT   
Ein Schlüsselwort, das angibt, dass die Funktion nicht entfernt und eine Meldung zurückgegeben werden soll, wenn von der Funktion Objekte abhängig sind. Diese Aktion ist die Standardeinstellung.

## Beispiele
<a name="r_DROP_FUNCTION-examples"></a>

Im folgenden Beispiel wird die Funktion namens entfernt `f_sqrt`:

```
drop function f_sqrt(int);
```

Um eine Funktion zu entfernen, von der Objekte abhängig sind, verwenden Sie die Option CASCADE, wie im folgenden Beispiel gezeigt:

```
drop function f_sqrt(int)cascade;
```

# DROP GROUP
<a name="r_DROP_GROUP"></a>

Löscht eine Benutzergruppe. Dieser Befehl kann nicht rückgängig gemacht werden. Dieser Befehl löscht nicht die einzelnen Benutzer in einer Gruppe.

Informationen zum Löschen eines einzelnen Benutzers finden Sie unter DROP USER.

## Syntax
<a name="r_DROP_GROUP-synopsis"></a>

```
DROP GROUP name
```

## Parameter
<a name="r_DROP_GROUP-parameter"></a>

 *Name*   
Der Name der Benutzergruppe, die gelöscht werden soll.

## Beispiel
<a name="r_DROP_GROUP-example"></a>

Im folgenden Beispiel wird die Benutzergruppe `guests` gelöscht:

```
DROP GROUP guests;
```

Sie können eine Gruppe nicht entfernen, wenn die Gruppe Rechte für ein Objekt besitzt. Wenn Sie versuchen, eine solche Gruppe zu löschen, erhalten Sie die folgende Fehlermeldung.

```
ERROR: group "guests" can't be dropped because the group has a privilege on some object
```

Wenn die Gruppe Rechte für ein Objekt besitzt, müssen Sie zunächst die Rechte widerrufen, bevor Sie die Gruppe entfernen. Verwenden Sie das folgende Beispiel, um die Objekte zu finden, für die die Gruppe `guests` Berechtigungen besitzt. Weitere Informationen zur im Beispiel verwendeten Metadatenansicht finden Sie unter [SVV\$1RELATION\$1PRIVILEGES](https://docs.aws.amazon.com//redshift/latest/dg/r_SVV_RELATION_PRIVILEGES.html).

```
SELECT DISTINCT namespace_name, relation_name, identity_name, identity_type 
FROM svv_relation_privileges
WHERE identity_type='group' AND identity_name='guests';

+----------------+---------------+---------------+---------------+
| namespace_name | relation_name | identity_name | identity_type |
+----------------+---------------+---------------+---------------+
| public         | table1        | guests        | group         |
+----------------+---------------+---------------+---------------+
| public         | table2        | guests        | group         |
+----------------+---------------+---------------+---------------+
```

Im folgenden Beispiel werden alle Rechte für alle Tabellen im Schema `public` von der Benutzergruppe `guests` entfernt und die Gruppe anschließend entfernt.

```
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM GROUP guests;
DROP GROUP guests;
```

# DROP IDENTITY PROVIDER
<a name="r_DROP_IDENTITY_PROVIDER"></a>

Löscht einen Identitätsanbieter. Dieser Befehl kann nicht rückgängig gemacht werden. Nur Superuser können Identitätsanbieter löschen.

## Syntax
<a name="r_DROP_IDENTITY_PROVIDER-synopsis"></a>

```
DROP IDENTITY PROVIDER identity_provider_name [ CASCADE ]
```

## Parameter
<a name="r_DROP_IDENTITY_PROVIDER-parameter"></a>

 *identity\$1provider\$1name*   
Name des zu löschenden Identitätsanbieters.

 CASCADE   
Löscht Benutzer und Rollen, die mit dem Identitätsanbieter verbunden sind, wenn dieser gelöscht wird.

## Beispiel
<a name="r_DROP_IDENTITY_PROVIDER-example"></a>

Im folgenden Beispiel wird der Identitätsanbieter *oauth\$1provider* gelöscht.

```
DROP IDENTITY PROVIDER oauth_provider;
```

Wenn Sie den Identitätsanbieter löschen, sind manche Benutzer möglicherweise nicht in der Lage, sich anzumelden oder Client-Tools zu verwenden, die für die Verwendung des Identitätsanbieters konfiguriert sind.

# DROP LIBRARY
<a name="r_DROP_LIBRARY"></a>

Entfernt eine angepasste Python-Bibliothek aus der Datenbank. Nur der Besitzer der Bibliothek oder ein Superuser können eine Bibliothek entfernen. 

DROP LIBRARY kann nicht innerhalb eines Transaktionsblocks ausgeführt werden (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

Dieser Befehl kann nicht rückgängig gemacht werden. Der Befehl DROP LIBRARY führt sofort ein Commit aus. Wenn gleichzeitig eine UDF ausgeführt wird, die von der Bibliothek abhängig ist, schlägt die UDF möglicherweise fehl, auch wenn die UDF innerhalb einer Transaktion ausgeführt wird.

Weitere Informationen finden Sie unter [CREATE LIBRARY](r_CREATE_LIBRARY.md). 

## Erforderliche Berechtigungen
<a name="r_DROP_LIBRARY-privileges"></a>

Für DROP LIBRARY sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP LIBRARY
+ Besitzer der Bibliothek

## Syntax
<a name="r_DROP_LIBRARY-synopsis"></a>

```
DROP LIBRARY library_name
```

## Parameters
<a name="r_DROP_LIBRARY-parameters"></a>

 *library\$1name*   
Der Name der Bibliothek.

# ENTFERNEN EINER MASKIERUNGSRICHTLINIE
<a name="r_DROP_MASKING_POLICY"></a>

Entfernt eine Richtlinie für die dynamische Datenmaskierung aus allen Datenbanken. Eine Maskierungsrichtlinie, die immer noch mindestens einer Tabelle angefügt ist, kann nicht entfernt werden. Weitere Informationen zur dynamischen Datenmaskierung finden Sie unter [Dynamische Datenmaskierung](t_ddm.md).

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Richtlinie entfernen.

## Syntax
<a name="r_DROP_MASKING_POLICY-synopsis"></a>

```
DROP MASKING POLICY { policy_name | database_name.policy_name };
```

## Parameters
<a name="r_DROP_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Der Name der zu entfernenden Maskierungsrichtlinie.

database\$1name  
Der Name der Datenbank, aus der die Richtlinie gelöscht werden soll. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

Informationen zur Verwendung von DROP MASKING POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# DROP MODEL
<a name="r_DROP_MODEL"></a>

Entfernt ein Modell aus der Datenbank. Nur der Besitzer des Modells oder ein Superuser können ein Modell entfernen. 

DROP MODELL löscht außerdem alle zugehörigen Vorhersagefunktionen, die von diesem Modell abgeleitet sind, alle Amazon-Redshift-Artefakte, die sich auf das Modell beziehen, sowie alle Amazon-S3-Daten, die sich auf das Modell beziehen. Während das Modell noch in Amazon SageMaker AI trainiert wird, bricht DROP MODEL diese Operationen ab.

Dieser Befehl kann nicht rückgängig gemacht werden. Der Befehl DROP MODEL führt sofort ein Commit aus.

## Erforderliche Berechtigungen
<a name="r_DROP_MODEL-privileges"></a>

Für DROP MODEL sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP MODEL.
+ Modellbesitzer
+ Schemabesitzer

## Syntax
<a name="r_DROP_MODEL-synopsis"></a>

```
DROP MODEL [ IF EXISTS ] model_name
```

## Parameters
<a name="r_DROP_MODEL-parameters"></a>

 *IF EXISTS*   
Eine Klausel, die angibt, dass, wenn das angegebene Schema bereits vorhanden ist, der Befehl keine Änderungen vornehmen und eine Meldung zurückgeben soll, dass das Schema existiert.

 *model\$1name*   
Der Name des Modells Der Modellname in einem Schema muss eindeutig sein.

## Beispiele
<a name="r_DROP_MODEL-examples"></a>

Im folgenden Beispiel wird das Modell demo\$1ml.customer\$1churn entfernt.

```
DROP MODEL demo_ml.customer_churn
```

# DROP MATERIALIZED VIEW
<a name="materialized-view-drop-sql-command"></a>

Entfernt eine materialisierte Ansicht.

Weitere Hinweise zu materialisierten Ansichten finden Sie unter [Materialisierte Ansichten in Amazon Redshift](materialized-view-overview.md).

## Syntax
<a name="mv_DROP_MATERIALIZED_VIEW-synopsis"></a>

```
DROP MATERIALIZED VIEW [ IF EXISTS ] mv_name [, ... ] [ CASCADE | RESTRICT ]
```

## Parameters
<a name="mv_DROP_MATERIALIZED_VIEW-parameters"></a>

IF EXISTS  
Eine Klausel, die angibt, dass überprüfen werden soll, ob die benannte materialisierte Ansicht vorhanden ist. Wenn die materialisierte Ansicht nicht existiert, gibt der Befehl `DROP MATERIALIZED VIEW` eine Fehlermeldung zurück. Diese Klausel ist nützlich beim Skripten, um zu verhindern, dass das Skript versagt, wenn Sie ein Drop für eine nicht vorhandene materialisierte Ansicht durchführen.

*mv\$1name*  
Der Name der zu löschenden materialisierten Ansicht.

CASCADE  
Eine Klausel, die angibt, dass Objekte, von denen die materialisierte Ansicht abhängig ist, automatisch entfernt werden sollen, z. B. andere Ansichten.

RESTRICT  
Eine Klausel, die angibt, dass die materialisierte Ansicht nicht entfernt werden soll, wenn Objekte von ihr abhängig sind. Dies ist die Standardeinstellung.

## Nutzungshinweise
<a name="mv_DROP_MATERIALIZED_VIEW-usage"></a>

Nur der Besitzer einer materialisierten Ansicht kann für diese Ansicht `DROP MATERIALIZED VIEW` verwenden. Ausnahmen hiervon können Superuser oder Benutzer sein, denen ausdrücklich DROP-Berechtigungen erteilt wurden.

Wenn Sie eine Drop-Anweisung für eine materialisierte Ansicht schreiben und eine Ansicht mit einem übereinstimmenden Namen vorhanden ist, führt dies zu einem Fehler mit der Anweisung, DROP VIEW zu verwenden. Ein Fehler tritt auch dann auf, wenn Sie `DROP MATERIALIZED VIEW IF EXISTS` verwenden.

## Beispiel
<a name="mv_DROP_MATERIALIZED_VIEW-examples"></a>

Das folgende Beispiel löscht die materialisierte `tickets_mv`-Ansicht.

```
DROP MATERIALIZED VIEW tickets_mv;
```

# DROP PROCEDURE
<a name="r_DROP_PROCEDURE"></a>

Entfernt eine Prozedur. Zum Entfernen einer Prozedur sind sowohl der Name der Prozedur als auch die Eingabeargument-Datentypen (Signatur) erforderlich. Optional können Sie alle Argumentdatentypen angeben, auch die der OUT-Argumente. Verwenden Sie den Befehl [SHOW PROCEDURE](r_SHOW_PROCEDURE.md), um die Signatur für eine Prozedur zu finden. Weitere Informationen zu Prozedursignaturen finden Sie unter [PG\$1PROC\$1INFO](r_PG_PROC_INFO.md).

## Erforderliche Berechtigungen
<a name="r_DROP_PROCEDURE-privileges"></a>

Für DROP PROCEDURE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP PROCEDURE
+ Besitzer des Verfahrens

## Syntax
<a name="r_DROP_PROCEDURE-synopsis"></a>

```
DROP PROCEDURE sp_name ( [ [ argname ] [ argmode ] argtype [, ...] ] )
```

## Parameters
<a name="r_DROP_PROCEDURE-parameters"></a>

 *sp\$1name*   
Der Name der Prozedur, die entfernt werden soll. 

 *argname*   
Der Name eines Eingabearguments. DROP PROCEDURE ignoriert Argumentnamen, da nur die Argumentdatentypen benötigt werden, um die Identität der Prozedur zu ermitteln. 

 *argmode*   
Der Modus eines Arguments. Dieser kann IN, OUT oder INOUT sein. OUT-Argumente sind optional, da diese nicht zum Identifizieren einer gespeicherten Prozedur verwendet werden. 

 *argtype*   
Der Datentyp des Eingabearguments. Eine Liste der unterstützten Datentypen finden Sie unter [Datentypen](c_Supported_data_types.md). 

## Beispiele
<a name="r_DROP_PROCEDURE-examples"></a>

Im folgenden Beispiel wird eine Prozedur namens `quarterly_revenue` entfernt.

```
DROP PROCEDURE quarterly_revenue(volume INOUT bigint, at_price IN numeric,result OUT int);
```

# DROP RLS POLICY
<a name="r_DROP_RLS_POLICY"></a>

Entfernt eine RLS-Richtlinie auf Zeilenebene für alle Tabellen in allen Datenbanken.

Superuser und Benutzer oder Rollen mit der Rolle sys:secadmin können eine Richtlinie löschen.

## Syntax
<a name="r_DROP_RLS_POLICY-synopsis"></a>

```
DROP RLS POLICY [ IF EXISTS ] 
{ policy_name | database_name.policy_name }
[ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_RLS_POLICY-parameters"></a>

 *IF EXISTS*   
Eine Klausel, die angibt, ob die angegebene Richtlinie bereits existiert.

 *policy\$1name*   
Der Name der -Richtlinie.

database\$1name  
Der Name der Datenbank, aus der die Richtlinie gelöscht werden soll. Bei der Datenbank kann es sich um die verbundene Datenbank oder um eine Datenbank handeln, die Verbundberechtigungen von Amazon Redshift unterstützt.

 *CASCADE*   
Eine Klausel, die angibt, dass die Richtlinie automatisch von allen angefügten Tabellen getrennt werden soll, bevor die Richtlinie gelöscht wird.

 *RESTRICT*   
Eine Klausel, die angibt, die Richtlinie nicht zu löschen, wenn sie einigen Tabellen zugeordnet ist. Dies ist die Standardeinstellung.

Informationen zur Verwendung von DROP RLS POLICY im Amazon Redshift Federated Permissions Catalog finden Sie unter [Verwaltung der Zugriffskontrolle mit Amazon Redshift Redshift-Verbundberechtigungen](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Beispiele
<a name="r_DROP_RLS_POLICY-examples"></a>

Im folgenden Beispiel wird eine RLS-Richtlinie auf Zeilinienebene entfernt.

```
DROP RLS POLICY policy_concerts;
```

# DROP ROLE
<a name="r_DROP_ROLE"></a>

Entfernt eine Rolle aus einer Datenbank. Nur der Rollenbesitzer, der die Rolle erstellt hat, ein Benutzer mit der Option WITH ADMIN oder ein Superuser kann eine Rolle löschen.

Rollen, die einem Benutzer zugewiesen sind, oder Rollen, von denen andere Rollen abhängig sind, können nicht gelöscht werden.

## Erforderliche Berechtigungen
<a name="r_DROP_ROLE-privileges"></a>

Für DROP ROLE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Rollenbesitzer, der entweder der Benutzer ist, der die Rolle erstellt hat, oder ein Benutzer, dem die Rolle mit dem Privileg WITH ADMIN OPTION gewährt wurde.

## Syntax
<a name="r_DROP_ROLE-synopsis"></a>

```
DROP ROLE role_name [ FORCE | RESTRICT ] 
```

## Parameters
<a name="r_DROP_ROLE-parameters"></a>

*rollen\$1name*  
Der Name der Rolle.

[ FORCE \$1 RESTRICT ]  
Die Standardeinstellung ist RESTRICT. Amazon Redshift löst einen Fehler aus, wenn Sie versuchen, eine Rolle zu löschen, die eine andere Rolle geerbt hat. Verwenden Sie FORCE, um alle Rollenzuweisungen zu entfernen, falls vorhanden. 

## Beispiele
<a name="r_DROP_ROLE-examples"></a>

Im folgenden Beispiel wird die Rolle `sample_role` gelöscht.

```
DROP ROLE sample_role FORCE;
```

Im folgenden Beispiel wird versucht, die Rolle sample\$1role1 zu löschen, die einem Benutzer mit der Standardoption RESTRICT zugewiesen wurde.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
DROP ROLE sample_role1;
ERROR:  cannot drop this role since it has been granted on a user
```

Verwenden Sie die Option FORCE, um die Rolle sample\$1role1, die einem Benutzer zugewiesen wurde, erfolgreich zu löschen.

```
DROP ROLE sample_role1 FORCE;
```

Im folgenden Beispiel wird versucht, die Rolle sample\$1role2 zu löschen, von der eine andere Rolle mit der Standardoption RESTRICT abhängig ist.

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO sample_role2;
DROP ROLE sample_role2;
ERROR:  cannot drop this role since it depends on another role
```

Um die sample\$1role2 erfolgreich zu löschen, von der eine andere Rolle abhängig ist, verwenden Sie die Option FORCE.

```
DROP ROLE sample_role2 FORCE;
```

# DROP SCHEMA
<a name="r_DROP_SCHEMA"></a>

Löscht ein Schema. Im Fall von externen Schemen können Sie auch die mit dem Schema verknüpfte externe Datenbank entfernen. Dieser Befehl kann nicht rückgängig gemacht werden.

## Erforderliche Berechtigungen
<a name="r_DROP_SCHEMA-privileges"></a>

Für DROP SCHEMA sind folgende Berechtigungen erforderlich:
+ Superuser
+ Schemabesitzer
+ Benutzer mit der Berechtigung DROP SCHEMA

## Syntax
<a name="r_DROP_SCHEMA-synopsis"></a>

```
DROP SCHEMA [ IF EXISTS ] name [, ...]
[ DROP EXTERNAL DATABASE ]
[ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_SCHEMA-parameters"></a>

IF EXISTS  
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass das Schema nicht vorhanden ist, statt mit einem Fehler beendet zu werden, wenn das angegebene Schema nicht vorhanden ist.  
Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn DROP SCHEMA für ein nicht vorhandenes Schema ausgeführt wird.

 *Name*   
Namen der Schemata, die entfernt werden sollen. Sie können mehrere Schemanamen durch Kommas getrennt eingeben.

 DROP EXTERNAL DATABASE   
Eine Klausel, die angibt, dass mit der Entfernung eines externen Schemas die mit diesem verknüpfte externe Datenbank entfernt werden soll, sofern vorhanden. Wenn keine externe Datenbank vorhanden ist, gibt der Befehl die Meldung zurück, dass keine externe Datenbank vorhanden ist. Wenn mehrere externe Schemata entfernt werden, werden auch alle mit den angegebenen Schemata verknüpften Datenbanken entfernt.   
Wenn eine externe Datenbank abhängige Objekte wie beispielsweise Tabellen enthält, schließen Sie die Option CASCADE ein, um diese abhängigen Objekte ebenfalls zu entfernen.   
Wenn Sie eine externe Datenbank entfernen, wird die Datenbank auch für alle anderen mit der Datenbank verknüpften externen Schemata entfernt. In anderen externen Schemata definierte Tabellen, die diese Datenbank verwenden, werden ebenfalls entfernt.   
DROP EXTERNAL DATABASE unterstützt keine in einem HIVE-Metastore gespeicherten externen Datenbanken. 

CASCADE  
Ein Schlüsselwort, das angibt, dass alle Objekte im Schema automatisch entfernt werden sollen. Bei Angabe von DROP EXTERNAL DATABASE werden alle Objekte in der externen Datenbank ebenfalls entfernt.

RESTRICT  
Ein Schlüsselwort, das angibt, dass ein Schema oder eine externe Datenbank nicht entfernt werden soll, wenn darin Objekte enthalten sind. Diese Aktion ist die Standardeinstellung.

## Beispiel
<a name="r_DROP_SCHEMA-example"></a>

Im folgenden Beispiel wird ein Schema namens S\$1SALES gelöscht. In diesem Beispiel wird RESTRICT als Sicherheitsmechanismus verwendet, damit das Schema nicht gelöscht wird, wenn es Objekte enthält. In diesem Fall müssen Sie die Schemaobjekte löschen, bevor Sie das Schema löschen.

```
drop schema s_sales restrict;
```

Im folgenden Beispiel werden ein Schema mit der Bezeichnung S\$1SALES und alle Objekte, die von diesem Schema abhängig sind, gelöscht.

```
drop schema s_sales cascade;
```

Im folgenden Beispiel wird entweder das Schema S\$1SALES gelöscht, sofern es vorhanden ist, oder es erfolgt keine Aktion, und es wird eine Meldung zurückgegeben, wenn das Schema nicht vorhanden ist.

```
drop schema if exists s_sales;
```

Im folgenden Beispiel werden ein externes Schema mit der Bezeichnung S\$1SPECTRUM und die mit diesem verknüpfte externe Datenbank gelöscht. In diesem Beispiel wird RESTRICT verwendet, damit das Schema und die Datenbank nicht gelöscht werden, wenn sie Objekte enthalten. In diesem Fall müssen Sie die abhängigen Objekte löschen, bevor Sie das Schema und die Datenbank löschen.

```
drop schema s_spectrum drop external database restrict;
```

Im folgenden Beispiel werden verschiedene Schemata und die mit diesen verknüpften externen Datenbanken sowie alle abhängigen Objekte gelöscht. 

```
drop schema s_sales, s_profit, s_revenue drop external database cascade;
```

# DROP TABLE
<a name="r_DROP_TABLE"></a>

Entfernt eine Tabelle aus einer Datenbank. 

Wenn Sie alle Zeilen in einer Tabelle löschen möchten, ohne die Tabelle zu entfernen, verwenden Sie die Befehle DELETE oder TRUNCATE. 

DROP TABLE entfernt Einschränkungen für die Zieltabelle. Mit einem einzigen DROP TABLE-Befehl können mehrere Tabellen entfernt werden. 

DROP TABLE mit einer externen Tabelle kann nicht innerhalb einer Transaktion (BEGIN … END) ausgeführt werden. Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md).

Ein Beispiel, in dem die DROP-Berechtigung an eine Gruppe vergeben wird, finden Sie unter GRANT [Beispiele](r_GRANT-examples.md).

## Erforderliche Berechtigungen
<a name="r_DROP_TABLE-privileges"></a>

Für DROP TABLE sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP TABLE
+ Tabellenbesitzer mit dem USAGE-Recht für das Schema

## Syntax
<a name="r_DROP_TABLE-synopsis"></a>

```
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_TABLE-parameters"></a>

IF EXISTS  
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass die Tabelle nicht vorhanden ist, statt mit einem Fehler beendet zu werden, wenn die angegebene Tabelle nicht vorhanden ist.  
Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn DROP TABLE für eine nicht vorhandene Tabelle ausgeführt wird.

 *Name*   
Der Name der Tabelle, die entfernt werden soll. 

CASCADE  
Eine Klausel, die angibt, dass Objekte, die von der Tabelle abhängig sind, automatisch entfernt werden sollen, beispielsweise Ansichten.  
Zum Erstellen einer Ansicht, die von keinen anderen Datenbankobjekten abhängig ist, wie etwa Ansichten und Tabellen, fügen Sie die Klausel WITH NO SCHEMA BINDING in die Ansichtsdefinition ein. Weitere Informationen finden Sie unter [CREATE VIEW](r_CREATE_VIEW.md).

RESTRICT   
Eine Klausel, die angibt, dass eine Tabelle nicht entfernt werden soll, wenn von ihr Objekte abhängig sind. Diese Aktion ist die Standardeinstellung.

## Beispiele
<a name="r_DROP_TABLE-examples"></a>

 **Entfernen einer Tabelle, von der keine Objekte abhängig sind** 

Im folgenden Befehl wird eine Tabelle namens FEEDBACK erstellt und entfernt, von der keine Objekte abhängig sind: 

```
create table feedback(a int);

drop table feedback;
```

 Wenn eine Tabelle Spalten enthält, auf die von Ansichten oder anderen Tabellen verwiesen wird, zeigt Amazon Redshift eine Meldung wie die folgende an. 

```
Invalid operation: cannot drop table feedback because other objects depend on it
```

 **Gleichzeitiges Entfernen von zwei Tabellen** 

Der folgende Befehlssatz erstellt eine Tabelle namens FEEDBACK und eine Tabelle namens BUYERS und entfernt anschließend beide Tabellen mit einem einzigen Befehl: 

```
create table feedback(a int);

create table buyers(a int);

drop table feedback, buyers;
```

 **Entfernen einer Tabelle, von ein Objekt abhängig ist** 

Im Folgenden wird gezeigt, wie eine Tabelle namens FEEDBACK mithilfe der Option CASCADE entfernt wird. 

Erstellen Sie zunächst mit dem Befehl CREATE TABLE eine einfache Tabelle namens FEEDBACK: 

```
create table feedback(a int);
```

 Erstellen Sie als Nächstes mit dem Befehl CREATE VIEW eine Ansicht namens FEEDBACK\$1VIEW, die von der Tabelle FEEDBACK abhängig ist: 

```
create view feedback_view as select * from feedback;
```

 Im folgenden Beispiel werden die Tabelle FEEDBACK und die Ansicht FEEDBACK\$1VIEW entfernt, da FEEDBACK\$1VIEW von der Tabelle FEEDBACK abhängig ist: 

```
drop table feedback cascade;
```

 **Anzeigen der Abhängigkeiten für eine Tabelle** 

Verwenden Sie das folgende Beispiel, um die Abhängigkeiten für Ihre Tabelle zurückzugeben. Ersetzen Sie *my\$1schema* und durch Ihr eigenes Schema und Ihre *my\$1table* eigene Tabelle. 

```
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;
```

Verwenden Sie das folgende Beispiel, um Drop *my\$1table* und seine Abhängigkeiten zu löschen. In diesem Beispiel werden auch alle Abhängigkeiten für die Tabelle zurückgegeben, die entfernt wurde.

```
DROP TABLE my_table CASCADE;
         
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;

+------------------+----------------+---------------+--------------+-------------+
| dependent_schema | dependent_view | source_schema | source_table | column_name |
+------------------+----------------+---------------+--------------+-------------+
```

 **Entfernen einer Tabelle mit IF EXISTS** 

Im folgenden Beispiel wird entweder die Tabelle FEEDBACK gelöscht, wenn sie vorhanden ist, oder es erfolgt keine Aktion, und es wird eine Meldung zurückgegeben, wenn die Tabelle nicht vorhanden ist: 

```
drop table if exists feedback;
```

# VORLAGE LÖSCHEN
<a name="r_DROP_TEMPLATE"></a>

Löscht eine Vorlage aus einer Datenbank.

## Erforderliche Berechtigungen
<a name="r_DROP_TEMPLATE-privileges"></a>

Um eine Vorlage zu löschen, benötigen Sie eine der folgenden Voraussetzungen:
+ Superuser-Rechte
+ DROP TEMPLATE-Privileg und USAGE-Privileg für das Schema, das die Vorlage enthält

## Syntax
<a name="r_DROP_TEMPLATE-synopsis"></a>

```
DROP TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameters
<a name="r_DROP_TEMPLATE-parameters"></a>

 *database\$1name*   
(Optional) Der Name der Datenbank, in der die Vorlage erstellt wird. Wenn nicht angegeben, wird die aktuelle Datenbank verwendet. 

 *schema\$1name*   
(Optional) Der Name des Schemas, in dem die Vorlage erstellt wird. Wenn nicht angegeben, wird im aktuellen Suchpfad nach der Vorlage gesucht. 

 *Vorlagenname*   
Der Name der Vorlage, die entfernt werden soll. Im folgenden Beispiel lautet der Datenbankname`demo_database`, der Schemaname ist `demo_schema` und der Vorlagenname ist`test`.  

```
DROP TEMPLATE demo_database.demo_schema.test;
```

## Beispiele
<a name="r_DROP_TEMPLATE-examples"></a>

Im folgenden Beispiel wird die Vorlage test\$1template aus dem aktuellen Schema gelöscht:

```
DROP TEMPLATE test_template;
```

Im folgenden Beispiel wird die Vorlage test\$1template aus dem Schema test\$1schema gelöscht:

```
DROP TEMPLATE test_schema.test_template;
```

# DROP USER
<a name="r_DROP_USER"></a>

Entfernt einen Benutzer aus einer Datenbank. Mit einem einzigen DROP USER-Befehl können mehrere Benutzer entfernt werden. Sie müssen Datenbank-Superuser sein oder die Berechtigung DROP USER besitzen, um diesen Befehl auszuführen.

## Syntax
<a name="r_DROP_USER-synopsis"></a>

```
DROP USER [ IF EXISTS ] name [, ... ]
```

## Parameters
<a name="r_DROP_USER-parameters"></a>

IF EXISTS  
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass der Benutzer nicht vorhanden ist, statt mit einem Fehler beendet zu werden, wenn der angegebene Benutzer nicht vorhanden ist.  
Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn DROP USER für einen nicht vorhandenen Benutzer ausgeführt wird.

 *name*   
Der Name des Benutzers, der entfernt werden soll. Sie können mehrere Benutzer angeben, indem Sie die einzelnen Benutzernamen durch Komma trennen.

## Nutzungshinweise
<a name="r_DROP_USER-notes"></a>

Sie können den Benutzer namens `rdsdb` oder den Administratorbenutzer der Datenbank nicht löschen, der normalerweise den Namen `awsuser` oder `admin` hat.

Sie können einen Benutzer nicht entfernen, wenn der Benutzer ein Datenbankobjekt wie ein Schema, eine Datenbank, eine Tabelle oder eine Ansicht besitzt oder wenn der Benutzer über Berechtigungen für eine Datenbank, Tabelle, Spalte oder Gruppe verfügt. Wenn Sie versuchen, einen solchen Benutzer zu löschen, erhalten Sie eine der folgenden Fehlermeldungen.

```
ERROR: user "username" can't be dropped because the user owns some object [SQL State=55006]

ERROR: user "username" can't be dropped because the user has a privilege on some object [SQL State=55006]
```

Eine ausführliche Anleitung zum Suchen der Objekte, die einem Datenbankbenutzer gehören, finden Sie unter [Wie behebe ich den Fehler „Benutzer kann nicht gelöscht werden“ in Amazon Redshift?](https://repost.aws/knowledge-center/redshift-user-cannot-be-dropped) im *Wissenszentrum*.

**Anmerkung**  
Amazon Redshift überprüft nur die aktuelle Datenbank, bevor ein Benutzer entfernt wird. DROP USER gibt keinen Fehler zurück, wenn der Benutzer Datenbankobjekte oder Rechte für Objekte in einer anderen Datenbank besitzt. Wenn Sie einen Benutzer entfernen, der Objekte in einer anderen Datenbank besitzt, wird der Besitzer dieser Objekte in „unbekannt“ geändert. 

Wenn ein Benutzer ein Objekt besitzt, entfernen Sie zunächst das Objekt oder ändern dessen Besitzer in einen anderen Besitzer, bevor Sie den ursprünglichen Besitzer entfernen. Wenn der Benutzer Rechte für ein Objekt besitzt, widerrufen Sie zunächst die Rechte, bevor Sie den Benutzer entfernen. Im folgenden Beispiel werden das Entfernen eines Objekts, das Ändern des Besitzers und das Widerrufen von Rechten gezeigt, bevor der Benutzer entfernt wird.

```
drop database dwdatabase;
alter schema dw owner to dwadmin;
revoke all on table dwtable from dwuser;
drop user dwuser;
```

## Beispiele
<a name="r_DROP_USER-examples"></a>

Im folgenden Beispiel wird ein Benutzer namens „paulo“ entfernt:

```
drop user paulo;
```

Im folgenden Beispiel werden zwei Benutzer, „paulo“ und „martha“, entfernt:

```
drop user paulo, martha;
```

Im folgenden Beispiel wird entweder der Benutzer „paulo“ gelöscht, wenn er vorhanden ist, oder es erfolgt keine Aktion, und es wird eine Meldung zurückgegeben, wenn er nicht vorhanden ist:

```
drop user if exists paulo;
```

# DROP VIEW
<a name="r_DROP_VIEW"></a>

Entfernt eine Ansicht aus der Datenbank. Mit einem einzigen DROP VIEW-Befehl können mehrere Ansichten entfernt werden. Dieser Befehl kann nicht rückgängig gemacht werden.

## Erforderliche Berechtigungen
<a name="r_DROP_VIEW-privileges"></a>

Für DROP VIEW sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung DROP VIEW
+ Besitzer der Ansicht

## Syntax
<a name="r_DROP_VIEW-synopsis"></a>

```
DROP VIEW [ IF EXISTS ] name [, ... ] [ CASCADE | RESTRICT ] 
```

## Parameters
<a name="r_DROP_VIEW-parameters"></a>

IF EXISTS  
Eine Klausel, die angibt, dass der Befehl keine Änderungen ausführen und die Meldung zurückgeben soll, dass die Ansicht nicht vorhanden ist, statt mit einem Fehler beendet zu werden, wenn die angegebene Ansicht nicht vorhanden ist.  
Diese Klausel ist beim Scripting nützlich, damit das Skript nicht fehlschlägt, wenn DROP VIEW für eine nicht vorhandene Ansicht ausgeführt wird.

 *Name*   
Das Name der Ansicht, die entfernt werden soll.

CASCADE  
Eine Klausel, die angibt, dass Objekte, die von der Ansicht abhängig sind, automatisch entfernt werden sollen, beispielsweise andere Ansichten.  
Zum Erstellen einer Ansicht, die von keinen anderen Datenbankobjekten abhängig ist, wie etwa Ansichten und Tabellen, fügen Sie die Klausel WITH NO SCHEMA BINDING in die Ansichtsdefinition ein. Weitere Informationen finden Sie unter [CREATE VIEW](r_CREATE_VIEW.md).  
Beachten Sie, dass Ihr Datenbank-Client möglicherweise nicht alle entfernten Objekte in den Übersichtsergebnissen auflistet, wenn Sie CASCADE einbeziehen und die Anzahl der entfernten Datenbankobjekte auf zehn oder mehr steigt. Dies liegt in der Regel daran, dass SQL-Client-Tools Standard-Limits für die zurückgegebenen Ergebnisse haben.

RESTRICT  
Eine Klausel, die angibt, dass eine Ansicht nicht entfernt werden soll, wenn von ihr Objekte abhängig sind. Diese Aktion ist die Standardeinstellung.

## Beispiele
<a name="r_DROP_VIEW-examples"></a>

Im folgenden Beispiel wird die Ansicht namens *event* entfernt:

```
drop view event;
```

Um eine Ansicht zu entfernen, von der Objekte abhängig sind, verwenden Sie die Option CASCADE. Nehmen Sie an, Sie beginnen mit einer Tabelle namens EVENT. Anschließend erstellen Sie die Ansicht „eventview“ der Tabelle EVENT mit dem Befehl CREATE VIEW wie im folgenden Beispiel gezeigt: 

```
create view eventview as
select dateid, eventname, catid
from event where catid = 1;
```

Als Nächstes erstellen Sie eine zweite Ansicht namens *myeventview*, die auf der ersten Ansicht namens *eventview* basiert:

```
create view myeventview as
select eventname, catid
from eventview where eventname <> ' ';
```

An diesem Punkt wurden zwei Ansichten erstellt: *eventview* und *myeventview*.

Die Ansicht *myeventview* ist eine untergeordnete Ansicht der übergeordneten Ansicht *eventview*.

Um die Ansicht *eventview* zu löschen, verwenden Sie den folgenden Befehl: 

```
drop view eventview;
```

Beachten Sie, dass der folgende Fehler angezeigt wird, wenn Sie diesen Befehl in dieser Situation ausführen:

```
drop view eventview;
ERROR: can't drop view eventview because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too.
```

Um dieses Problem zu lösen, führen Sie den folgenden Befehl aus (wie von der Fehlermeldung vorgeschlagen): 

```
drop view eventview cascade;
```

Nun wurden sowohl *eventview* als auch *myeventview* erfolgreich entfernt.

Im folgenden Beispiel wird entweder die Ansicht *eventview* gelöscht, wenn sie vorhanden ist, oder es erfolgt keine Aktion, und es wird eine Meldung zurückgegeben, wenn die Ansicht nicht vorhanden ist:

```
drop view if exists eventview;
```

# END
<a name="r_END"></a>

Führt einen Commit der aktuellen Transaktion aus. Dieser Befehl hat genau die gleiche Funktion wie der Befehl COMMIT.

Detailliertere Informationen finden Sie in [COMMIT](r_COMMIT.md).

## Syntax
<a name="r_END-synopsis"></a>

```
END [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_END-parameters"></a>

WORK  
Optionales Schlüsselwort.

TRANSACTION  
Optionales Schlüsselwort; WORK und TRANSACTION sind Synonyme.

## Beispiele
<a name="r_END-examples"></a>

In den folgenden Beispielen werden der Transaktionsblock beendet und ein Commit für die Transaktion ausgeführt:

```
end;
```

```
end work;
```

```
end transaction;
```

Nach Ausführung jedes dieser Befehle beendet Amazon Redshift den Transaktionsblock und führt ein Commit für die Änderungen aus.

# EXECUTE
<a name="r_EXECUTE"></a>

Führt eine zuvor vorbereitete Anweisung aus. 

## Syntax
<a name="r_EXECUTE-synopsis"></a>

```
EXECUTE plan_name [ (parameter [, ...]) ]
```

## Parameters
<a name="r_EXECUTE-parameters"></a>

 *plan\$1name*   
Der Name der vorbereiteten Anweisung, die ausgeführt werden soll. 

 *Parameter*   
Der tatsächliche Wert eines Parameters der vorbereiteten Anweisung. Es muss sich um einen Ausdruck handeln, der einen Wert mit einem Typ zum Ergebnis hat, der mit dem Datentyp kompatibel ist, der für diese Parameterposition im Befehl PREPARE, der die vorbereitete Anweisung erstellt hat, angegeben ist. 

## Nutzungshinweise
<a name="r_EXECUTE_usage_notes"></a>

EXECUTE wird verwendet, um eine zuvor vorbereitete Anweisung auszuführen. Da vorbereitete Anweisungen nur für die Dauer einer Sitzung vorhanden sind, muss die vorbereitete Anweisung von einer PREPARE-Anweisung erstellt worden sein, die früher in der aktuellen Sitzung ausgeführt wurde. 

Wenn die vorherige PREPARE-Anweisung Parameter angegeben hat, muss ein kompatibler Satz von Parametern an die EXECUTE-Anweisung übergeben werden. Andernfalls gibt Amazon Redshift einen Fehler zurück. Anders als bei Funktionen werden vorbereitete Anweisungen nicht auf der Basis des Typs oder der Zahl der angegebenen Parameter überladen. Der Name einer vorbereiteten Anweisung muss innerhalb einer Datenbanksitzung eindeutig sein. 

Wenn ein EXECUTE-Befehl für die vorbereitete Anweisung ausgegeben wird, kann Amazon Redshift den Abfrageausführungsplan optional ändern (um die Leistung auf der Basis der angegebenen Parameterwerte zu verbessern), bevor die vorbereitete Anweisung ausgeführt wird. Für jede neue Ausführung einer vorbereiteten Anweisung kann Amazon Redshift den Abfrageausführungsplan basierend auf den unterschiedlichen Parameterwerten, die mit der EXECUTE-Anweisung angegeben werden, erneut ändern. Um den Abfrageausführungsplan zu überprüfen, den Amazon Redshift für bestimmte EXECUTE-Anweisungen ausgewählt hat, verwenden Sie den Befehl [EXPLAIN](r_EXPLAIN.md). 

Beispiele und weitere Informationen zur Erstellung und Nutzung vorbereiteter Anweisungen finden Sie unter [PREPARE](r_PREPARE.md). 

## Weitere Informationen finden Sie auch unter
<a name="r_EXECUTE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [PREPARE](r_PREPARE.md) 

# EXPLAIN
<a name="r_EXPLAIN"></a>

Zeigt den Ausführungsplan für eine Abfrageanweisung an, ohne die Abfrage auszuführen. Informationen zum Arbeitsablauf für die Abfrageanalyse finden Sie unter [Workflow zur Analyse von Abfragen](c-query-analysis-process.md).

## Syntax
<a name="r_EXPLAIN-synopsis"></a>

```
EXPLAIN [ VERBOSE ] query
```

## Parameters
<a name="r_EXPLAIN-parameters"></a>

VERBOSE   
Zeigt den vollständigen Abfrageplan und nicht nur eine Zusammenfassung an.

 *query*   
Die Abfrageanweisung, die erklärt werden soll. Bei der Abfrage kann es sich um eine SELECT-, INSERT-, CREATE TABLE AS-, UPDATE- oder DELETE-Anweisung handeln.

## Nutzungshinweise
<a name="r_EXPLAIN-usage-notes"></a>

Die Leistung von EXPLAIN wird manchmal von der Zeit beeinflusst, die benötigt wird, um temporäre Tabellen zu erstellen. Beispielsweise müssen für eine Abfrage, die die allgemeine Unterausdruckoptimierung verwendet, temporäre Tabellen erstellt und analysiert werden, um die EXPLAIN-Ausgabe zurückgeben zu können. Der Abfrageplan ist vom Schema und der Statistik der temporären Tabellen abhängig. Daher benötigt der EXPLAIN-Befehl für diese Art von Abfrage möglicherweise länger für die Ausführung als erwartet.

Sie können EXPLAIN nur für die folgenden Befehle verwenden:
+ SELECT
+ SELECT INTO
+ CREATE TABLE AS
+ INSERT
+ AKTUALISIERUNG
+ DELETE

Der Befehl EXPLAIN ist nicht erfolgreich, wenn Sie ihn für andere SQL-Befehle verwenden, wie Data Definition Language (DDL)- oder Datenbankoperationen.

Die relativen Einheitskosten der EXPLAIN-Ausgabe werden von Amazon Redshift verwendet, um einen Abfrageplan auszuwählen. Amazon Redshift vergleicht die Größen verschiedener Ressourcenschätzungen, um den Plan zu ermitteln.

## Abfrageplanung und Ausführungsschritte
<a name="r_EXPLAIN-query-planning-and-execution-steps"></a>

Der Ausführungsplan für eine bestimmte Amazon-Redshift-Abfrageanweisung unterteilt Ausführung und Berechnung einer Abfrage in eine definierte Abfolge von Schritten und Tabellenoperationen, die schließlich einen endgültigen Ergebnissatz für die Abfrage zurückgeben. Informationen zur Abfrageplanung finden Sie unter [Verarbeitung von Abfragen](c-query-processing.md).

In der folgenden Tabelle wird eine Übersicht über die Schritte bereitgestellt, die Amazon Redshift für die Entwicklung eines Ausführungsplans für eine Abfrage verwenden kann, die von einem Benutzer zur Ausführung abgesendet wird.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_EXPLAIN.html)

## Verwendung von EXPLAIN für RLS
<a name="r_EXPLAIN-RLS"></a>

Wenn eine Abfrage eine Tabelle enthält, die RLS-Richtlinien (Row Level Security) unterliegt, zeigt EXPLAIN einen speziellen RLS-Knoten an. SecureScan Amazon Redshift protokolliert denselben Knotentyp auch in der STL\$1EXPLAIN-Systemtabelle. EXPLAIN enthüllt nicht das RLS-Prädikat, das für dim\$1tbl gilt. Der SecureScan RLS-Knotentyp dient als Indikator dafür, dass der Ausführungsplan zusätzliche Operationen enthält, die für den aktuellen Benutzer unsichtbar sind.

Das folgende Beispiel zeigt einen RLS-Knoten SecureScan .

```
EXPLAIN
SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   ->  *XN* *RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)*
         Filter: ((k_dim / 10) > 0)
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

Um eine vollständige Untersuchung von Abfrageplänen zu ermöglichen, die RLS unterliegen, bietet Amazon Redshift die EXPLAIN-RLS-Systemberechtigungen an. Benutzer, denen diese Berechtigung erteilt wurde, können vollständige Abfragepläne prüfen, die auch RLS-Prädikate enthalten. 

Das folgende Beispiel zeigt, dass ein zusätzlicher Seq-Scan unterhalb des SecureScan RLS-Knotens auch das RLS-Richtlinienprädikat (k\$1dim > 1) beinhaltet.

```
EXPLAIN SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   *->  XN RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)
         Filter: ((k_dim / 10) > 0)*
         ->  *XN* *Seq Scan on fact_tbl rls_table  (cost=0.00..0.06 rows=5 width=8)
               Filter: (k_dim > 1)*
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

Während die Berechtigung EXPLAIN RLS einem Benutzer erteilt wird, protokolliert Amazon Redshift den vollständigen Abfrageplan einschließlich RLS-Prädikate in der STL\$1EXPLAIN-Systemtabelle. Abfragen, die ausgeführt werden, während diese Berechtigung nicht erteilt ist, werden ohne RLS-Interna protokolliert. Das Erteilen oder Entfernen der EXPLAIN RLS-Berechtigung ändert nichts daran, was Amazon Redshift in STL\$1EXPLAIN für frühere Abfragen protokolliert hat.

### AWS Lake Formation-RLS-geschützte Redshift-Relationen
<a name="r_EXPLAIN_RLS-LF"></a>

Das folgende Beispiel zeigt einen SecureScan LF-Knoten, mit dem Sie die Beziehungen zwischen Lake Formation und RLS anzeigen können.

```
EXPLAIN
SELECT *
FROM lf_db.public.t_share
WHERE a > 1;
QUERY PLAN
---------------------------------------------------------------
XN LF SecureScan t_share  (cost=0.00..0.02 rows=2 width=11)
(2 rows)
```

## Beispiele
<a name="r_EXPLAIN-examples"></a>

**Anmerkung**  
Für diese Beispiele kann sich die Beispielausgabe abhängig von der Amazon-Redshift-Konfiguration unterscheiden.

Im folgenden Beispiel wird der Abfrageplan für eine Abfrage zurückgegeben, die EVENTID, EVENTNAME, VENUEID und VENUENAME aus den Tabellen EVENT und VENUE auswählt:

```
explain
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(5 rows)
```

Im folgenden Beispiel wird der Abfrageplan für dieselbe Abfrage mit Verbose-Ausgabe zurückgegeben:

```
explain verbose
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
{HASHJOIN
:startup_cost 2.52
:total_cost 58653620.93
:plan_rows 8712
:plan_width 43
:best_pathkeys <>
:dist_info DS_DIST_OUTER
:dist_info.dist_keys (
TARGETENTRY
{
VAR
:varno 2
:varattno 1
...

XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(519 rows)
```

Im folgenden Beispiel wird der Abfrageplan für eine CREATE TABLE AS (CTAS)-Anweisung zurückgegeben: 

```
explain create table venue_nonulls as
select * from venue
where venueseats is not null;

QUERY PLAN
-----------------------------------------------------------
XN Seq Scan on venue  (cost=0.00..2.02 rows=187 width=45)
Filter: (venueseats IS NOT NULL)
(2 rows)
```

# FETCH
<a name="fetch"></a>

Ruft Zeilen mittels eines Cursors ab. Weitere Informationen zum Deklarieren eines Cursors finden Sie unter [DECLARE](declare.md).

FETCH ruft Zeilen auf der Basis der aktuellen Position innerhalb des Cursors ab. Wenn ein Cursor erstellt wird, wird er vor der ersten Zeile positioniert. Nach einem FETCH befindet sich der Cursor in der letzten abgerufenen Zeile. Wenn FETCH das Ende der verfügbaren Zeilen erreicht, beispielsweise infolge eines FETCH ALL, befindet sich der Cursor hinter der letzten Zeile. 

FORWARD 0 ruft die aktuelle Zeile ab, ohne den Cursor zu verschieben, d. h., sie ruft die zuletzt abgerufene Zeile ab. Wenn sich der Cursor vor der ersten oder nach der letzten Zeile befindet, wird keine Zeile zurückgegeben. 

Wenn die erste Zeile eines Cursors abgerufen wird, wird der gesamte Ergebnissatz auf dem Führungsknoten im Arbeitsspeicher oder auf der Festplatte umgesetzt, wenn nötig. Aufgrund der potenziellen negativen Auswirkungen der Verwendung von Cursors mit großen Ergebnissätzen wird empfohlen, alternative Ansätze anzuwenden, wann immer möglich. Weitere Informationen finden Sie unter [Überlegungen in Bezug auf die Leistung bei Verwendung von Cursors](declare.md#declare-performance).

Weitere Informationen finden Sie unter [DECLARE](declare.md), [CLOSE](close.md). 

## Syntax
<a name="fetch-synopsis"></a>

```
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
```

## Parameters
<a name="fetch-parameters"></a>

NEXT  
Ruft die nächste Zeile ab. Dies ist die Standardeinstellung.

ALL  
Ruft alle verbleibenden Zeilen ab. (Verhält sich wie FORWARD ALL.) ALL wird nicht für Einzelknoten-Cluster unterstützt.

FORWARD [ *count* \$1 ALL ]   
Holt die nächste *Zahl* von Zeilen oder alle erbleibenden Zeilen. `FORWARD 0` holt die aktuelle Zeile. Im Fall von Einzelknoten-Clustern ist der maximal zulässige Wert für „count“ `1000`. FORWARD ALL wird nicht für Einzelknoten-Cluster unterstützt. 

*cursor*   
Der Name des neuen Cursors. 

## Beispiel für FETCH
<a name="fetch-example"></a>

Im folgenden Beispiel wird ein Cursor namens LOLLAPALOOZA deklariert, um Verkaufsinformationen für das Lollapalooza-Ereignis auszuwählen und dann mittels des Cursors Zeilen aus dem Ergebnissatz abzurufen:

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

# GRANT
<a name="r_GRANT"></a>

Definiert die Zugriffsberechtigungen für einen Benutzer oder eine Rolle.

Zu den Berechtigungen gehören Zugriffsoptionen wie die Möglichkeit zum Lesen von Daten in Tabellen und Ansichten, zum Schreiben von Daten, zum Erstellen von Tabellen sowie zum Entfernen von Tabellen. Verwenden Sie diesen Befehl, um bestimmte Berechtigungen für eine Tabelle, eine Datenbank, ein Schema, eine Funktion, eine Prozedur, eine Sprache oder eine Spalte zu erteilen. Um Berechtigungen für ein Datenbankobjekt zu widerrufen, verwenden Sie den Befehl [REVOKE](r_REVOKE.md). 

Zu den Berechtigungen gehören auch die folgenden Zugriffsoptionen für Datashare-Produzenten:
+  Gewährung von Datashare-Zugriff auf Konsumenten-Namespaces und -Konten. 
+  Gewähren der Berechtigung zum Ändern eines Datashares durch Hinzufügen oder Entfernen von Objekten aus dem Datashare. 
+  Gewähren der Berechtigung zum Freigeben eines Datashares durch Hinzufügen oder Entfernen von Konsumenten-Namespaces aus dem Datashare. 

Die Optionen für den Datashare-Zugriff für Konsumenten sind wie folgt:
+ Gewähren des vollen Zugriffs für Benutzer auf Datenbanken, die aus einem Datashare erstellt wurden, oder auf externe Schemata, die auf solche Datenbanken verweisen.
+ Gewähren von Berechtigungen auf Objektebene für Benutzer für Datenbanken, die aus einem Datashare erstellt wurden, wie dies für lokale Datenbankobjekte möglich ist. Um diese Berechtigungsebene zu gewähren, müssen Sie die WITH PERMISSIONS-Klausel verwenden, wenn Sie eine Datenbank aus dem Datashare erstellen. Weitere Informationen finden Sie unter [CREATE DATABASE](r_CREATE_DATABASE.md).

Weitere Informationen zu Datashare-Berechtigungen finden Sie unter [Berechtigungen, die Sie Datashares gewähren können](permissions-datashares.md).

Zu den Berechtigungen gehört auch der folgende Amazon Redshift Federated Permissions Catalog:
+ Erteilen von Berechtigungen auf Tabellenebene für Benutzer und Rollen.
+ Gewährung detaillierter Berechtigungen auf Spaltenebene für Tabellen, Ansichten und materialisierte Ansichten.
+ Gewährung von bereichsspezifischen Berechtigungen für Benutzer und Rollen.
+ Erteilen von Berechtigungen auf Datenbankebene für den Amazon Redshift Federated Permissions Catalog.

Weitere Informationen zur Verwaltung von Berechtigungen im Amazon Redshift Federated Permissions Catalog finden Sie unter. [Verwaltung der Zugriffskontrolle im Verbundberechtigungskatalog von Amazon RedshiftErteilen/Widerrufen](federated-permissions-managing-access.md) [Weitere Informationen zu den von Amazon Redshift Federated Permissions Catalog unterstützten grant/revoke Syntaxen finden Sie unter Grant/Revoke.](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html#federated-permissions-managing-access-grant-revoke)

Zu den Berechtigungen gehört auch das CONNECT-Privileg für Verbundbenutzer. AWS IAM Identity Center Diese Berechtigung ermöglicht es Administratoren, den Benutzerzugriff durch detaillierte Berechtigungen in jeder Amazon Redshift-Arbeitsgruppe (n) oder jedem Cluster zu kontrollieren, in denen Amazon Redshift Federated Permissions aktiviert sind. Der Amazon Redshift Redshift-Administrator kann angeben, welche AWS IAM Identity Center Verbundbenutzer oder Gruppen Zugriff darauf haben, sich direkt mit der Amazon Redshift Redshift-Arbeitsgruppe zu verbinden, wodurch eine detaillierte Kontrolle über den AWS IAM Identity Center Benutzerzugriff in jeder Arbeitsgruppe oder jedem Cluster ermöglicht wird.

Sie können auch Rollen zuweisen, um die Datenbankberechtigungen zu verwalten und zu kontrollieren, welche Aktionen Benutzer in Bezug auf Ihre Daten durchführen können. Durch die Definition von Rollen und die Zuweisung von Rollen für Benutzer können Sie die Aktionen beschränken, die diese Benutzer ausführen können. So können Sie beispielsweise die Aktionen der Benutzer auf die Befehle CREATE TABLE und INSERT beschränken. Weitere Informationen zum Befehl CREATE ROLE finden Sie unter [CREATE ROLE](r_CREATE_ROLE.md). In Amazon Redshift gibt es systemdefinierte Rollen, die Sie ebenfalls verwenden können, um Ihren Benutzern bestimmte Berechtigungen zu erteilen. Weitere Informationen finden Sie unter [Systemdefinierte Amazon-Redshift-Rollen](r_roles-default.md).

Sie können Nutzungsberechtigungen in einem externen Schema nur Datenbankbenutzern und Benutzergruppen gewähren oder entziehen, die die ON SCHEMA-Syntax verwenden. Wenn Sie ON EXTERNAL SCHEMA with verwenden AWS Lake Formation, können Sie nur Berechtigungen für eine (IAM-) Rolle ERTEILEN und WIDERRUFEN. AWS Identity and Access Management Eine Liste der Berechtigungen finden Sie in der Syntax.

Für gespeicherte Prozeduren kann nur die Berechtigung EXECUTE erteilt werden.

GRANT (auf einer externen Ressource) kann nicht innerhalb eines Transaktionsblocks (BEGIN ... END) ausgeführt werden. Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

Wenn Sie sehen möchten, welche Berechtigungen Benutzern für eine Datenbank erteilt wurden, verwenden Sie [HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md). Wenn Sie sehen möchten, welche Berechtigungen Benutzern für ein Schema erteilt wurden, verwenden Sie [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md). Wenn Sie sehen möchten, welche Berechtigungen Benutzern für eine Tabelle erteilt wurden, verwenden Sie [HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md). 

## Syntax
<a name="r_GRANT-synopsis"></a>



```
GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]             

GRANT { { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE [database_name.][schema_name.]template_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Erteilen von Berechtigungen auf Spaltenebene für Tabellen
<a name="grant-column-level"></a>

Im Folgenden finden Sie die Syntax für Berechtigungen auf Spaltenebene für Amazon-Redshift-Tabellen und -Ansichten.

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }

     TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Erteilen von Berechtigungen ASSUMEROLE
<a name="grant-assumerole-permissions"></a>

Im Folgenden finden Sie die Syntax für die Berechtigungen ASSUMEROLE, die Benutzern und Gruppen mit einer spezifizierten Rolle erteilt werden. Informationen zur Verwendung der ASSUMEROLE-Berechtigung finden Sie unter [Hinweise zur Erteilung der Berechtigung ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole).

```
GRANT ASSUMEROLE
       ON { 'iam_role' [, ...] | default | ALL }
       TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
       FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
```

### Erteilen von Berechtigungen für die Integration von Redshift Spectrum in Lake Formation
<a name="grant-spectrum-integration-with-lf-syntax"></a>

Im Folgenden finden Sie die Syntax für die Integration von Redshift Spectrum in Lake Formation. 

```
GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ]

GRANT { { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]
```

### Erteilen von Datashare-Berechtigungen
<a name="grant-datashare-syntax"></a>

**Produzentenseitige Datashare-Berechtigungen**  
Im Folgenden finden Sie die Syntax zur Verwendung von GRANT zum Gewähren von ALTER- oder SHARE-Berechtigungen für einen Benutzer oder eine Rolle. Der Benutzer kann den Datashare mit der ALTER-Berechtigung ändern oder einem Konsumenten mit der SHARE-Berechtigung die Nutzung gestatten. ALTER und SHARE sind die einzigen Berechtigungen, die Sie Benutzern und Rollen für Datashares erteilen können.

```
GRANT { ALTER | SHARE } ON DATASHARE datashare_name
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

Im Folgenden finden Sie die Syntax für die Verwendung von GRANT für Datashare-Nutzungsberechtigungen in Amazon Redshift. Mit der Berechtigung USAGE gewähren Sie einem Konsumenten Zugriff auf ein Datashare. Sie können diese Berechtigung nicht an Benutzer oder Benutzergruppen erteilen. Diese Berechtigung unterstützt auch nicht die WITH GRANT OPTION für die GRANT-Anweisung. Nur Benutzer oder Benutzergruppen, denen zuvor die Berechtigung SHARE für das Datashare erteilt wurde, können diese Art von GRANT-Anweisung ausführen.

```
GRANT USAGE
    ON DATASHARE datashare_name
    TO NAMESPACE 'namespaceGUID' | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
```

Im Folgenden finden Sie ein Beispiel dafür, wie Sie einem Lake-Formation-Konto die Berechtigung zur Nutzung eines Datashares gewähren können.

```
GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
```

**Konsumentenseitige Datashare-Berechtigungen**  
Im Folgenden finden Sie die Syntax für die GRANT-Datashare-Nutzungsberechtigungen für eine bestimmte Datenbank oder ein bestimmtes Schema, die auf einem Datashare erstellt wurden. 

Weitere Berechtigungen, die Konsumenten für den Zugriff auf eine aus einem Datashare erstellte Datenbank benötigen, hängen davon ab, ob der CREATE DATABASE-Befehl, mit dem die Datenbank aus dem Datashare erstellt wurde, die WITH PERMISSIONS-Klausel verwendet hat oder nicht. Weitere Informationen über den CREATE DATABASE-Befehl und die WITH PERMISSIONS-Klausel finden Sie unter [CREATE DATABASE](r_CREATE_DATABASE.md).

**Ohne die WITH PERMISSIONS-Klausel erstellte Datenbanken**  
Wenn Sie die USAGE-Berechtigung für eine Datenbank gewähren, die aus einem Datashare ohne die WITH PERMISSIONS-Klausel erstellt wurde, müssen Sie Berechtigungen für die Objekte in der gemeinsam genutzten Datenbank nicht separat gewähren. Entitäten, denen die Verwendung für Datenbanken gewährt wurde, die aus Datashares ohne die WITH PERMISSIONS-Klausel erstellt wurden, haben automatisch Zugriff auf alle Objekte in der Datenbank.

**Mit der WITH PERMISSIONS-Klausel erstellte Datenbanken**  
Wenn Sie die USAGE-Berechtigung für eine Datenbank gewähren, wobei die gemeinsam genutzte Datenbank mit der WITH PERMISSIONS-Klausel aus einem Datashare erstellt wurde, müssen konsumentenseitigen Identitäten dennoch die entsprechenden Berechtigungen für Datenbankobjekte in der gemeinsam genutzten Datenbank erteilt werden, um auf sie zugreifen zu können, genauso wie Sie Berechtigungen für lokale Datenbankobjekte gewähren würden. Verwenden Sie die dreiteilige Syntax `database_name.schema_name.object_name`, um Objekten in einer Datenbank, die aus einem Datashare erstellt wurde, Berechtigungen zu gewähren. Verwenden Sie die zweiteilige Syntax `schema_name.object_name`, um Objekten in einem externen Schema, das auf ein gemeinsam genutztes Schema innerhalb der gemeinsam genutzten Datenbank verweist, Berechtigungen zu gewähren.

```
GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
    TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Gewähren von bereichsbezogenen Berechtigungen
<a name="grant-scoped-syntax"></a>

Mit bereichsbezogenen Berechtigungen können Sie einem Benutzer oder einer Rolle Berechtigungen für alle Objekte eines Typs innerhalb einer Datenbank oder eines Schemas gewähren. Benutzer und Rollen mit bereichsbezogenen Berechtigungen verfügen über die angegebenen Berechtigungen für alle aktuellen und künftigen Objekte innerhalb der Datenbank oder des Schemas.

Den Umfang der bereichsbezogenen Berechtigungen auf Datenbankebene finden Sie unter [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md). Den Umfang der bereichsbezogenen Berechtigungen auf Schemaebene finden Sie unter [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md).

Weitere Informationen zu bereichsbezogenen Berechtigungen finden Sie unter [Bereichsbeschränkte Berechtigungen](t_scoped-permissions.md).

Im Folgenden sehen Sie die Syntax zum Erteilen bereichsbezogener Berechtigungen für Benutzer oder Rollen.

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT 
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name} [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT USAGE
FOR LANGUAGES IN
{DATABASE db_name}
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]  

GRANT { { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]
```

Beachten Sie, dass bei bereichsbezogenen Berechtigungen nicht zwischen Berechtigungen für Funktionen und Prozeduren unterschieden wird. Die folgende Anweisung gewährt beispielsweise `bob` die Berechtigung `EXECUTE` sowohl für Funktionen als auch für Prozeduren im Schema `Sales_schema`.

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

### Erteilen von Machine-Learning-Berechtigungen
<a name="grant-model-syntax"></a>

Im Folgenden finden Sie die Syntax für Berechtigungen für Machine-Learning-Modelle in Amazon Redshift.

```
GRANT CREATE MODEL
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Erteilen von Rollenberechtigungen
<a name="grant-roles"></a>

Im Folgenden finden Sie die Syntax zum Gewähren von Rollen in Amazon Redshift.

```
GRANT { ROLE role_name } [, ...] TO { { user_name [ WITH ADMIN OPTION ] } | ROLE role_name }[, ...]
```

Im Folgenden finden Sie die Syntax zum Erteilen von Systemberechtigungen für Rollen in Amazon Redshift. Beachten Sie, dass Sie Berechtigungen nur für Rollen, nicht für Benutzer erteilen können.

```
GRANT
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG | ACCESS SYSTEM TABLE
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE |
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL |
    IGNORE RLS | EXPLAIN RLS | 
    EXPLAIN MASKING }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
TO ROLE role_name [, ...]
```

### Erteilen von Explain-Berechtigungen für Sicherheitsrichtlinien
<a name="grant-row-level-security"></a>

Im Folgenden finden Sie die Syntax zum Erteilen von Berechtigungen zum Erklären der Sicherheitsrichtlinienfilter einer Abfrage im EXPLAIN-Plan. Mögliche Sicherheitsrichtlinien sind Sicherheitsrichtlinien auf Zeilenebene und dynamische Datenmaskierungsrichtlinien.

```
GRANT EXPLAIN { RLS | MASKING } TO ROLE rolename 
```

Im Folgenden finden Sie die Syntax zum Erteilen von Berechtigungen zum Umgehen von RLS-Richtlinien auf Zeilenebene für eine Abfrage. Diese Syntax gilt nicht für dynamische Datenmaskierungsrichtlinien.

```
GRANT IGNORE RLS TO ROLE rolename 
```

Im Folgenden finden Sie die Syntax zum Erteilen von Berechtigungen für Nachschlagetabellen für die angegebene Sicherheitsrichtlinie. Mögliche Sicherheitsrichtlinien sind Sicherheitsrichtlinien auf Zeilenebene und dynamische Datenmaskierungsrichtlinien.

```
GRANT SELECT ON [ TABLE ] table_name [, ...]
TO { RLS | MASKING } POLICY policy_name [, ...]
```

### Verbindungsberechtigungen gewähren
<a name="grant-connection-permissions"></a>

Im Folgenden finden Sie die Syntax für die Gewährung von Berechtigungen für AWS IAM Identity Center Verbundbenutzer (oder Gruppen), eine Verbindung zu einer Arbeitsgruppe/einem Cluster herzustellen:

```
GRANT CONNECT [ON WORKGROUP]
TO [USER] <prefix>:<username> | ROLE <prefix>:<rolename> | PUBLIC;
```

## Parameters
<a name="r_GRANT-parameters"></a>

SELECT   <a name="grant-select"></a>
Erteilt die Berechtigung, Daten aus einer Tabelle oder Ansicht mittels einer SELECT-Anweisung auszuwählen. Die Berechtigung SELECT ist auch erforderlich, um vorhandene Spaltenwerte für UPDATE- oder DELETE-Operationen zu referenzieren.

INSERT   <a name="grant-insert"></a>
Erteilt die Berechtigung, Daten in eine Tabelle mittels einer INSERT- oder COPY-Anweisung zu laden. 

UPDATE   <a name="grant-update"></a>
Erteilt die Berechtigung, eine Tabellenspalte mittels einer UPDATE-Anweisung zu aktualisieren. UPDATE-Operationen erfordern ebenfalls die Berechtigung SELECT, da sie Tabellenspalten referenzieren müssen, um zu ermitteln, welche Zeilen aktualisiert werden sollen, oder um neue Werte für Spalten zu berechnen.

DELETE  <a name="grant-delete"></a>
Erteilt die Berechtigung, eine Datenzeile aus einer Tabelle zu löschen. DELETE-Operationen erfordern ebenfalls die Berechtigung SELECT, da sie Tabellenspalten referenzieren müssen, um zu ermitteln, welche Zeilen gelöscht werden sollen.

DROP  <a name="grant-drop"></a>
Erteilt dem Benutzer oder der Rolle die folgenden Berechtigungen, abhängig vom Datenbankobjekt:   
+  Bei Tabellen erteilt DROP die Berechtigung, eine Tabelle oder Ansicht zu entfernen. Weitere Informationen finden Sie unter [DROP TABLE](r_DROP_TABLE.md). 
+  Bei Datenbanken erteilt DROP die Berechtigung, eine Datenbank zu entfernen. Weitere Informationen finden Sie unter [DROP DATABASE](r_DROP_DATABASE.md). 
+  Bei Schemata erteilt DROP die Berechtigung, ein Schema zu entfernen. Weitere Informationen finden Sie unter [DROP SCHEMA](r_DROP_SCHEMA.md). 

REFERENCES   <a name="grant-references"></a>
Erteilt die Berechtigung, eine Fremdschlüsseleinschränkung zu erstellen. Sie müssen diese Berechtigung sowohl für die referenzierte als auch für die referenzierende Tabelle erteilen. Andernfalls kann der Benutzer die Einschränkung nicht erstellen. 

ALTER  <a name="grant-alter"></a>
Erteilt dem Benutzer oder der Benutzergruppe die folgenden Berechtigungen, abhängig vom Datenbankobjekt:   
+ Für Tabellen erteilt ALTER die Berechtigung, eine Tabelle oder Ansicht zu ändern. Weitere Informationen finden Sie unter [ALTER TABLE](r_ALTER_TABLE.md).
+ Für Datenbanken erteilt ALTER die Berechtigung, eine Datenbank zu ändern. Weitere Informationen finden Sie unter [ALTER DATABASE](r_ALTER_DATABASE.md).
+ Für Schemata erteilt ALTER die Berechtigung, ein Schema zu ändern. Weitere Informationen finden Sie unter [ALTER SCHEMA](r_ALTER_SCHEMA.md).
+ Für externe Tabellen erteilt ALTER t die Berechtigung zum Ändern einer Tabelle in einem AWS Glue Data Catalog , der für Lake Formation aktiviert ist. Diese Berechtigung gilt nur bei Verwendung von Lake Formation.

TRUNCATE  <a name="grant-truncate"></a>
Gewährt die Berechtigung zum Kürzen einer Tabelle. Ohne diese Berechtigung kann nur der Eigentümer einer Tabelle oder ein Superuser eine Tabelle kürzen. Weitere Informationen zur Verwendung des TRUNCATE-Befehls finden Sie unter [TRUNCATE](r_TRUNCATE.md).

ALL [ PRIVILEGES ]   <a name="grant-all"></a>
Erteilt dem angegebenen Benutzer oder der angegebenen Rolle alle verfügbaren Berechtigungen gleichzeitig. Das Schlüsselwort PRIVILEGES ist optional.  
GRANT ALL ON SCHEMA erteilt keine Berechtigungen CREATE für externe Schemata.  
Sie können einer Tabelle in einer, die für Lake Formation aktiviert ist AWS Glue Data Catalog , die ALL-Berechtigung erteilen. In diesem Fall werden die einzelnen Berechtigungen (wie SELECT, ALTER usw.) im Datenkatalog aufgezeichnet.   
 Amazon Redshift unterstützt die Berechtigungen RULE und TRIGGER nicht. Weitere Informationen finden Sie unter [Nicht unterstützte PostgreSQL-Funktionen](c_unsupported-postgresql-features.md). 

ASSUMEROLE  <a name="assumerole"></a>
Erteilt Benutzern, Rollen oder Gruppen mit einer angegebenen Rolle die Berechtigung zum Ausführen der Befehle COPY, UNLOAD, EXTERNAL FUNCTION und CREATE MODEL. Der Benutzer, die Rolle oder die Gruppe übernimmt diese Rolle beim Ausführen des jeweiligen Befehls. Informationen zur Verwendung der Berechtigung ASSUMEROLE finden Sie unter [Hinweise zur Erteilung der Berechtigung ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole).

ON [ TABLE ] *table\$1name*   <a name="grant-on-table"></a>
Erteilt die angegebenen Berechtigungen für eine Tabelle oder Ansicht. Das Schlüsselwort TABLE ist optional. Sie können in einer einzelnen Anweisung mehrere Tabellen und Ansichten auflisten.

ON ALL TABLES IN SCHEMA *schema\$1name*   <a name="grant-all-tables"></a>
Erteilt die angegebenen Berechtigungen für alle Tabellen und Ansichten im referenzierten Schema.

( *column\$1name* [,...] ) ON TABLE *table\$1name*   <a name="grant-column-level-privileges"></a>
Erteilt Benutzern, Gruppen oder PUBLIC die angegebenen Berechtigungen für die angegebenen Spalten der Amazon-Redshift-Tabelle oder -Ansicht.

( *column\$1list* ) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table-column"></a>
Erteilt einer IAM-Rolle die angegebenen Berechtigungen für die angegebenen Spalten der Lake-Formation-Tabelle im referenzierten Schema.

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table"></a>
Erteilt einer IAM-Rolle die angegebenen Berechtigungen für die angegebenen Lake-Formation-Tabellen im referenzierten Schema.

ON EXTERNAL SCHEMA *schema\$1name*   <a name="grant-external-schema"></a>
Erteilt einer IAM-Rolle die angegebenen Berechtigungen für das referenzierte Schema.

ON *iam\$1role*   <a name="grant-iam_role"></a>
Erteilt einer IAM-Rolle die angegebenen Berechtigungen.

TO *username*   <a name="grant-to"></a>
Gibt den Benutzer an, der die Berechtigungen erhält.

TO IAM\$1ROLE *iam\$1role*   <a name="grant-to-iam-role"></a>
Gibt die IAM-Rolle an, die die Berechtigungen erhält.

WITH GRANT OPTION   <a name="grant-with-grant"></a>
Gibt an, dass der Benutzer, der die Berechtigungen erhält, anderen Benutzern dieselben Berechtigungen gewähren kann. Die Berechtigung WITH GRANT OPTION kann keiner Gruppe oder PUBLIC gewährt werden.

ROLE *rollen\$1name*   <a name="grant-role"></a>
Erteilt die Berechtigungen einer Rolle.

GROUP *group\$1name*   <a name="grant-group"></a>
Erteilt die Berechtigungen einer Benutzergruppe. Dies kann eine durch Kommata getrennte Liste sein, wenn mehrere Benutzergruppen angegeben werden.

PUBLIC   <a name="grant-public"></a>
Erteilt allen Benutzern die angegebenen Berechtigungen, einschließlich Benutzern, die später erstellt werden. PUBLIC stellt eine Gruppe dar, die stets alle Benutzer enthält. Die Berechtigungen eines einzelnen Benutzers sind die Summe der Berechtigungen, die PUBLIC gewährt werden, der Berechtigungen, die Gruppen gewährt werden, zu denen der Benutzer gehört, und der Berechtigungen, die dem einzelnen Benutzer gewährt werden.  
Wenn Sie die Berechtigung PUBLIC einer EXTERNAL TABLE von Lake Formation gewähren, wird die Berechtigung der Lake-Formation-Gruppe *everyone* erteilt.

VERBINDE [IN DER ARBEITSGRUPPE] MIT \$1[USER]<prefix>: <username>\$1 ROLLE<prefix>: <rolename>\$1 ÖFFENTLICH\$1  
Erteilt AWS IAM Identity Center verbundenen Benutzern oder Gruppen die Berechtigung, eine Verbindung zu einer Arbeitsgruppe oder einem Cluster herzustellen. Das Präfix identifiziert den Identitätsanbieter. Wenn die Berechtigung PUBLIC erteilt wird, gilt sie für alle AWS IAM Identity Center Verbundbenutzer, auch für Benutzer, die später erstellt wurden. Diese Berechtigung gilt nur, wenn Amazon Redshift Federated Permissions für die Arbeitsgruppe oder den Cluster aktiviert sind.

CREATE   <a name="grant-create"></a>
Erteilt dem Benutzer oder der Benutzergruppe die folgenden Berechtigungen, abhängig vom Datenbankobjekt:  
+ Im Fall von Datenbanken ermöglicht CREATE Benutzern das Erstellen von Schemata innerhalb der Datenbank.
+ Im Fall von Schemata ermöglicht CREATE Benutzern das Erstellen von Objekten innerhalb eines Schemas. Um ein Objekt umzubenennen, muss der Benutzer über die Berechtigung CREATE verfügen und Eigentümer des Objekts sein, das umbenannt werden soll.
+ CREATE ON SCHEMA wird für externe Amazon-Redshift-Spectrum-Schematas nicht unterstützt. Um Rechte zur Nutzung externer Tabellen in einem externen Schema zu gewähren, müssen Sie den Benutzern, die diesen Zugriff benötigen, USAGE ON SCHEMA gewähren. Nur der Eigentümer eines externen Schemas oder ein Superuser darf externe Tabellen im externen Schema erstellen. Mit dem Befehl [ALTER SCHEMA](r_ALTER_SCHEMA.md) können Sie den Besitzer eines externen Schemas ändern. 

TEMPORARY \$1 TEMP   <a name="grant-temporary"></a>
Erteilt die Berechtigung, in der angegebenen Datenbank temporäre Tabellen zu erstellen. Um Amazon Redshift Spectrum-Abfragen auszuführen, benötigt der Datenbankbenutzer die Berechtigung, temporäre Tabellen in der Datenbank zu erstellen.   
Standardmäßig wird Benutzern aufgrund ihrer automatischen Mitgliedschaft in der Gruppe PUBLIC die Berechtigung gewährt, temporäre Tabellen zu erstellen. Um die Berechtigung zum Erstellen temporärer Tabellen für alle Benutzer zu entfernen, entziehen Sie der Gruppe PUBLIC die Berechtigung TEMP. Erteilen Sie dann explizit die Berechtigung, temporäre Tabellen für bestimmte Benutzer oder Benutzergruppen zu erstellen.

ON DATABASE *db\$1name*   <a name="grant-database"></a>
Erteilt die angegebenen Berechtigungen für eine Datenbank.

USAGE   <a name="grant-usage"></a>
Erteilt die Berechtigung USAGE für ein bestimmtes Schema, um Objekte in diesem Schema für Benutzer zugänglich zu machen. Spezifische Aktionen für diese Objekte müssen für lokale Amazon-Redshift-Schemata getrennt gewährt werden (z. B. Berechtigung SELECT oder UPDATE für Tabellen). Standardmäßig besitzen alle Benutzer die Berechtigungen CREATE und USAGE für das Schema PUBLIC.   
 Wenn Sie externen Schemas mithilfe der ON SCHEMA-Syntax USAGE-Berechtigung zuweisen, müssen Sie Aktionen für die Objekte in dem externen Schema nicht separat gewähren. Die entsprechenden Katalogberechtigungen steuern differenzierte Berechtigungen für die externen Schemaobjekte. 

ON SCHEMA *schema\$1name*   <a name="grant-schema"></a>
Erteilt die angegebenen Berechtigungen für ein Schema.  
GRANT CREATE ON SCHEMA und die Berechtigung CREATE in GRANT ALL ON SCHEMA werden für externe Amazon-Redshift-Spectrum-Schemata nicht unterstützt. Um Rechte zur Nutzung externer Tabellen in einem externen Schema zu gewähren, müssen Sie den Benutzern, die diesen Zugriff benötigen, USAGE ON SCHEMA gewähren. Nur der Eigentümer eines externen Schemas oder ein Superuser darf externe Tabellen im externen Schema erstellen. Mit dem Befehl [ALTER SCHEMA](r_ALTER_SCHEMA.md) können Sie den Besitzer eines externen Schemas ändern. 

EXECUTE ON ALL FUNCTIONS IN SCHEMA *schema\$1name*  <a name="grant-all-functions"></a>
Erteilt die angegebenen Berechtigungen für alle Funktionen im referenzierten Schema.  
Amazon Redshift unterstützt keine Anweisungen für GRANT (erteilen) oder REVOKE (widerrufen) für integrierte pg\$1proc-Einträge, die im Namespace pg\$1catalog definiert sind. 

EXECUTE ON PROCEDURE *procedure\$1name*   <a name="grant-procedure"></a>
Erteilt die Berechtigung EXECUTE für eine spezifische gespeicherte Prozedur. Da die Namen gespeicherter Prozeduren überladen sein können, müssen Sie die Argumentliste für die Prozedur angeben. Weitere Informationen finden Sie unter [Benennen von gespeicherten Prozeduren](stored-procedure-naming.md).

EXECUTE ON ALL PROCEDURES IN SCHEMA *schema\$1name*  <a name="grant-all-procedures"></a>
Erteilt die angegebenen Berechtigungen für alle gespeicherten Prozeduren im referenzierten Schema.

USAGE ON LANGUAGE *language\$1name*   
Erteilt die Berechtigung USAGE für eine Sprache.   
Ab dem 1. November 2025 wird Amazon Redshift die Erstellung von neuem Python UDFs nicht mehr unterstützen. Das bestehende Python UDFs wird bis zum 30. Juni 2026 weiterhin funktionieren. Ab dem 1. Juli 2026 wird Amazon Redshift Python nicht mehr unterstützen. UDFs Wir empfehlen, dass Sie Ihr vorhandenes Python UDFs vor dem 1. November 2025 UDFs auf Lambda migrieren. Informationen zur Erstellung und Verwendung von Lambda finden Sie UDFs unter[Skalares Lambda UDFs](udf-creating-a-lambda-sql-udf.md). Informationen zur Konvertierung von vorhandenem Python UDFs nach Lambda UDFs finden Sie im [Blogbeitrag](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/).
Die USAGE ON LANGUAGE-Berechtigung ist erforderlich, um benutzerdefinierte Funktionen (UDFs) durch Ausführen des [CREATE FUNCTION](r_CREATE_FUNCTION.md) Befehls zu erstellen. Weitere Informationen finden Sie unter [UDF-Sicherheit und -Berechtigungen](udf-security-and-privileges.md).   
Die Berechtigung USAGE ON LANGUAGE ist erforderlich, um gespeicherte Prozeduren durch Ausführen des Befehls [CREATE PROCEDURE](r_CREATE_PROCEDURE.md) zu erstellen. Weitere Informationen finden Sie unter [Sicherheit und Berechtigungen für gespeicherte Prozeduren](stored-procedure-security-and-privileges.md).  
Verwenden Sie für Python UDFs`plpythonu`. Verwenden Sie für SQL UDFs`sql`. Für gespeicherte Prozeduren verwenden Sie `plpgsql`.

ON COPY JOB *job\$1name*  <a name="on-copy-job"></a>
Erteilt die angegebenen Berechtigungen für einen Kopierauftrag.

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]   <a name="grant-for"></a>
Gibt den SQL-Befehl an, für den die Berechtigung erteilt wird. Sie können ALL angeben, um die Berechtigung für die Anweisungen COPY, UNLOAD, EXTERNAL FUNCTION und CREATE MODEL zu erteilen. Diese Klausel gilt nur für die Erteilung der Berechtigung ASSUMEROLE.

ALTER  
Erteilt Benutzern die Berechtigung ALTER zum Hinzufügen von Objekten zu einem Datashare oder zum Entfernen daraus oder zum Festlegen der Eigenschaft PUBLICACCESSIBLE. Weitere Informationen finden Sie unter [ALTER DATASHARE](r_ALTER_DATASHARE.md).

SHARE  
Erteilt Benutzern und Benutzergruppen Berechtigungen zum Hinzufügen von Datenkonsumenten zu einem Datashare. Diese Berechtigung ist erforderlich, damit der betreffende Konsument (Konto oder Namespace) von seinen Clustern aus auf das Datashare zugreifen kann. Bei dem Verbraucher kann es sich um dasselbe oder ein anderes AWS Konto mit demselben oder einem anderen Cluster-Namespace handeln, der durch eine GUID (Globally Unique Identifier) angegeben wird.

ON DATASHARE *datashare\$1name*   <a name="grant-datashare"></a>
Erteilt die angegebenen Berechtigungen für das referenzierte Datashare. Informationen über die Granularität der Zugriffskontrolle für Consumer finden Sie unter [Dateifreigabe auf verschiedenen Ebenen in Amazon Redshift](datashare-overview.md#granularity).

USAGE  
Wenn USAGE einem Konsumenten-Konto oder einem Namespace innerhalb desselben Kontos gewährt wird, kann dieses Konsumenten-Konto oder der Namespace innerhalb des Kontos schreibgeschützt auf das Datashare und die Objekte auf dem Datashare zugreifen. 

TO NAMESPACE 'clusternamespace GUID'  
Gibt einen Namespace in demselben Konto an, in dem Konsumenten die angegebenen Berechtigungen für das Datashare erhalten können. Namespaces verwenden eine alphanumerische 128-Bit-GUID.

TO ACCOUNT 'Kontonummer' [ VIA DATA CATALOG ]  
Gibt die Nummer eines anderen Kontos an, dessen Konsumenten die angegebenen Berechtigungen für das Datashare erhalten können. Die Angabe „VIA DATA CATALOG“ bedeutet, dass Sie einem Lake-Formation-Konto die Berechtigung zur Nutzung des Datashares gewähren. Wenn Sie diesen Parameter weglassen, gewähren Sie die Nutzungsberechtigung einem Konto, dem der Cluster gehört.

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="grant-datashare"></a>
Erteilt die angegebenen Nutzungsberechtigungen für die angegebene Datenbank, die im angegebenen Datashare erstellt wird.

ON SCHEMA* shared\$1schema*   <a name="grant-datashare"></a>
Erteilt die angegebenen Berechtigungen für das angegebene Schema, das im angegebenen Datashare erstellt wird.

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
Gibt die Datenbankobjekte an, für die Berechtigungen gewährt werden sollen. Die Parameter nach IN definieren den Bereich der gewährten Berechtigung.

CREATE MODEL  
Erteilt bestimmten Benutzern oder Benutzergruppen die Berechtigung CREATE MODEL.

ON MODEL *model\$1name*  
Erteilt die Berechtigung EXECUTE für ein spezifisches Modell. 

ACCESS CATALOG  
Gewährt die Berechtigung, relevante Metadaten von Objekten anzuzeigen, auf die die Rolle Zugriff hat.

\$1 role \$1 [, ...]  
Die Rolle, die einer anderen Rolle, einem Benutzer oder PUBLIC gewährt werden soll.  
PUBLIC stellt eine Gruppe dar, die stets alle Benutzer enthält. Die Berechtigungen eines einzelnen Benutzers sind die Summe der Berechtigungen, die PUBLIC gewährt werden, der Berechtigungen, die Gruppen gewährt werden, zu denen der Benutzer gehört, und der Berechtigungen, die dem einzelnen Benutzer gewährt werden.

TO \$1 \$1 *benutzer\$1name* [ WITH ADMIN OPTION ] \$1 \$1 role \$1[, ...]  
Gewährt die angegebene Rolle einem bestimmten Benutzer mit WITH ADMIN OPTION, einer anderen Rolle oder PUBLIC.  
Die WITH ADMIN OPTION-Klausel bietet allen Berechtigungsempfängern die Verwaltungsoptionen für alle erteilten Rollen. 

EXPLAIN \$1 RLS \$1 MASKING \$1 TO ROLE *rolename*  
Erteilt die Berechtigung, die Sicherheitsrichtlinienfilter einer Abfrage im EXPLAIN-Plan für eine Rolle zu erklären. RLS erteilt die Berechtigung, Sicherheitsrichtlinienfilter auf Zeilenebene zu erklären. MASKING erteilt die Berechtigung, Filter für die Richtlinie für dynamische Datenmaskierung zu erklären.

IGNORE RLS TO ROLE *Rollenname*   
Erteilt die Berechtigung, RLS-Richtlinien für eine Abfrage an eine Rolle zu umgehen.

TO \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
Gibt die Sicherheitsrichtlinie an, die die Berechtigungen erhält. TO RLS POLICY gibt eine Sicherheitsrichtlinie auf Zeilenebene an. TO MASKING POLICY gibt eine Richtlinie für die dynamische Datenmaskierung an.

## Nutzungshinweise
<a name="r_GRANT-usage-notes-link"></a>

Weitere Informationen zu den Nutzungshinweisen für GRANT finden Sie unter [Nutzungshinweise](r_GRANT-usage-notes.md).

## Beispiele
<a name="r_GRANT-examples-link"></a>

Beispiele für die Verwendung von GRANT finden Sie unter [Beispiele](r_GRANT-examples.md).

# Nutzungshinweise
<a name="r_GRANT-usage-notes"></a>

Um Rechte für ein Objekt zu gewähren, müssen Sie mindestens eines der folgenden Kriterien erfüllen:
+ Sie müssen der Besitzer des Objekts sein.
+ Sie müssen ein Superuser sein.
+ Sie müssen das Recht besitzen, Rechte für dieses Objekt und Recht zu gewähren.

Der folgende Befehl gewährt beispielsweise dem Benutzer HR die erforderlichen Rechte, um SELECT-Befehle für die Mitarbeitertabelle ausführen, anderen Benutzern dieselben Recht gewähren und diese Rechte für andere Benutzer widerrufen zu können.

```
grant select on table employees to HR with grant option;
```

Beachten Sie, dass HR keine Rechte für andere Operationen als SELECT oder für andere Tabellen als die Mitarbeitertabelle gewähren kann. 

Der folgende Befehl gewährt beispielsweise dem Benutzer HR die erforderlichen Rechte, um ALTER-Befehle für die Mitarbeitertabelle ausführen, anderen Benutzern dieselben Rechte gewähren und diese Rechte für andere Benutzer widerrufen zu können.

```
grant ALTER on table employees to HR with grant option;
```

Beachten Sie, dass HR keine Rechte für andere Operationen als ALTER oder für andere Tabellen als die Mitarbeitertabelle gewähren kann. 

Die Gewährung von Rechten für eine Ansicht impliziert nicht, dass auch Rechte in Bezug auf die zugrunde liegenden Tabellen gewährt werden. Gleichermaßen impliziert die Gewährung von Rechten für ein Schema nicht, dass auch Rechte in Bezug auf die zugrunde liegenden Tabellen gewährt werden. Sie müssen den Zugriff auf die zugrunde liegenden Tabellen explizit gewähren.

Um einer AWS Lake Formation Tabelle Berechtigungen zu gewähren, muss die dem externen Schema der Tabelle zugeordnete IAM-Rolle über die Berechtigung verfügen, der externen Tabelle Berechtigungen zu gewähren. Im folgenden Beispiel wird ein externes Schema mit einer zugeordneten IAM-Rolle erstellt `myGrantor`. Die IAM-Rolle `myGrantor` verfügt über die Berechtigung, anderen Berechtigungen zu gewähren. Der Befehl GRANT nutzt die Berechtigung der IAM-Rolle `myGrantor`, die dem externen Schema zugeordnet ist, um der IAM-Rolle `myGrantee` Berechtigungen zu gewähren.

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
grant select
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

Wenn Sie einer IAM-Rolle mit GRANT ALL alle Berechtigungen gewähren, werden individuelle Berechtigungen im zugehörigen Lake Formation-fähigen Datenkatalog gewährt. Mit dem folgenden GRANT ALL-Befehl werden beispielsweise die einzelnen Berechtigungen (SELECT, ALTER, DROP, DELETE und INSERT) gewährt, wie in der Lake Formation-Konsole gezeigt.

```
grant all
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

Superuser können auf alle Objekte zugreifen, unabhängig von GRANT- und REVOKE-Befehlen, mit denen Objektrechte festgelegt werden.

## Verwendungshinweise für die Zugriffskontrolle auf Spaltenebene
<a name="r_GRANT-usage-notes-clp"></a>

Die folgenden Verwendungshinweise gelten für Berechtigungen auf Spaltenebene für Amazon-Redshift-Tabellen und -Ansichten. Diese Hinweise beschreiben Tabellen; die gleichen Hinweise gelten für Ansichten, sofern nicht ausdrücklich anderweitig vermerkt. 
+ Für eine Amazon-Redshift-Tabelle können Sie nur die SELECT- und UPDATE-Berechtigungen Spaltenebene erteilen. Für eine Amazon-Redshift-Ansicht können Sie nur die SELECT-Berechtigung auf Spaltenebene erteilen. 
+ Das Schlüsselwort ALL ist ein Synonym für kombinierte SELECT- und UPDATE-Berechtigungen, wenn es im Kontext eines GRANT auf Spaltenebene für eine Tabelle verwendet wird. 
+ Wenn Sie nicht über die Berechtigung SELECT für alle Spalten in einer Tabelle verfügen, werden bei Ausführung einer Operation SELECT \$1 nur die Spalten zurückgegeben, auf die Sie Zugriff haben. Wenn Sie eine Ansicht verwenden, versucht die Operation SELECT \$1, auf alle Spalten in der Ansicht zuzugreifen. Wenn Sie nicht berechtigt sind, auf alle Spalten zuzugreifen, schlagen diese Abfragen fehl und es wird die Fehlermeldung „Zugriff verweigert“ angezeigt.
+ SELECT \$1 wird in den folgenden Fällen nicht nur auf die zugänglichen Spalten erweitert:
  + Sie können mit SELECT \$1 keine reguläre Ansicht nur mit zugänglichen Spalten erstellen.
  + Sie können mit SELECT \$1 keine materialisierte Ansicht nur mit zugänglichen Spalten erstellen.
+ Wenn Sie über SELECT- oder UPDATE-Berechtigungen für eine Tabelle oder Ansicht verfügen und eine Spalte hinzufügen, haben Sie weiterhin die gleichen Berechtigungen für die Tabelle oder Ansicht und damit alle ihre Spalten. 
+ Nur der Besitzer einer Tabelle oder ein Superuser kann Berechtigungen auf Spaltenebene erteilen. 
+ Die WITH GRANT OPTION-Klausel wird für Berechtigungen auf Spaltenebene nicht unterstützt.
+ Sie können nicht dieselbe Berechtigung sowohl auf Tabellenebene als auch auf Spaltenebene besitzen. Beispielsweise kann der Benutzer `data_scientist` nicht sowohl über die SELECT-Berechtigung für die Tabelle `employee` als auch über die SELECT-Berechtigung für die Spalte `employee.department` verfügen. Berücksichtigen Sie die folgenden Ergebnisse, wenn Sie einer Tabelle und einer Spalte innerhalb der Tabelle dieselbe Berechtigung erteilen:
  + Wenn ein Benutzer über eine Berechtigung auf Tabellenebene für eine Tabelle verfügt, hat das Gewähren derselben Berechtigung auf Spaltenebene keine Auswirkungen. 
  + Wenn ein Benutzer über eine Berechtigung auf Tabellenebene für eine Tabelle verfügt, wird beim Widerrufen derselben Berechtigung für eine oder mehrere Spalten der Tabelle ein Fehler zurückgegeben. Widerrufen Sie stattdessen die Berechtigung auf Tabellenebene. 
  + Wenn ein Benutzer über eine Berechtigung auf Spaltenebene verfügt, dann wird beim Erteilen derselben Berechtigung auf Tabellenebene ein Fehler zurückgegeben. 
  + Wenn ein Benutzer über eine Berechtigung auf Spaltenebene verfügt, werden beim Widerrufen derselben Berechtigung auf Tabellenebene sowohl Spalten- als auch Tabellenberechtigungen für alle Spalten in der Tabelle entzogen. 
+ Sie können für späte Bindungsansichten keine Berechtigungen auf Spaltenebene erteilen.
+ Sie müssen über SELECT-Berechtigungen auf Tabellenebene für die Basistabellen verfügen, um eine materialisierte Ansicht zu erstellen. Selbst, wenn Sie über Berechtigungen auf Spaltenebene für bestimmte Spalten verfügen, können Sie keine materialisierte Ansicht für nur diese Spalten erstellen. Sie können jedoch Spalten einer materialisierten Ansicht, ähnlich wie regulären Ansichten, SELECT-Berechtigungen erteilen. 
+ Verwenden Sie die Ansicht [PG\$1ATTRIBUTE\$1INFO](r_PG_ATTRIBUTE_INFO.md), um Berechtigungen auf Spaltenebene zu suchen. 

## Hinweise zur Erteilung der Berechtigung ASSUMEROLE
<a name="r_GRANT-usage-notes-assumerole"></a>

Die folgenden Nutzungshinweise gelten für die Erteilung der Berechtigung ASSUMEROLE in Amazon Redshift. 

Mit der Berechtigung ASSUMEROLE steuern Sie IAM-Rollenzugriffsberechtigungen für Datenbankbenutzer, -rollen oder -gruppen auf Befehle wie COPY, UNLOAD, EXTERNAL FUNCTION oder CREATE MODEL. Nachdem Sie einem Benutzer, einer Rolle oder einer Gruppe die Berechtigung ASSUMEROLE für eine IAM-Rolle erteilt haben, kann der Benutzer, die Rolle oder die Gruppe diese Rolle übernehmen, wenn der Befehl ausgeführt wird. Mit der Berechtigung ASSUMEROLE können Sie bei Bedarf Zugriff auf die entsprechenden Befehle gewähren.

Nur ein Datenbank-Superuser kann die Berechtigung ASSUMEROLE für Benutzer, Rollen und Gruppen erteilen oder entziehen. Ein Superuser behält immer die Berechtigung ASSUMEROLE.

Um die Verwendung der Berechtigung ASSUMEROLE für Benutzer, Rollen und Gruppen zu aktivieren, führt ein Superuser die beiden folgenden Aktionen aus:
+ Führen Sie die folgende Anweisung einmalig auf dem Cluster aus:

  ```
  revoke assumerole on all from public for all;
  ```
+ Erteilen der Berechtigung ASSUMEROLE an Benutzer, Rollen und Gruppen für die entsprechenden Befehle.

Sie können eine Rollenverkettung in der ON-Klausel angeben, wenn Sie die Berechtigung ASSUMEROLE erteilen. Verwenden Sie Kommas, um Rollen in einer Rollenkette zu trennen, z. B. ., `Role1,Role2,Role3`. Wenn beim Erteilen der Berechtigung ASSUMEROLE eine Rollenverkettung angegeben wurde, müssen Sie die Rollenkette angeben, wenn Vorgänge ausgeführt werden, die durch die Berechtigung ASSUMEROLE gewährt werden. Sie können keine einzelnen Rollen innerhalb der Rollenkette angeben, wenn Vorgänge ausgeführt werden, die durch die Berechtigung ASSUMEROLE gewährt werden. Wenn einem Benutzer, einer Rolle oder einer Gruppe beispielsweise die Rollenkette `Role1,Role2,Role3` zugewiesen wurde, können Sie nicht nur `Role1` für die Ausführung von Vorgängen angeben. 

Wenn ein Benutzer versucht, eine Operation COPY, UNLOAD, EXTERNAL FUNCTION oder CREATE MODEL auszuführen, und die Berechtigung ASSUMEROLE nicht erteilt wurde, wird eine Meldung ähnlich der folgenden angezeigt.

```
ERROR:  User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY 
```

Informationen zum Auflisten von Benutzern, denen über die Berechtigung ASSUMEROLE Zugriff auf IAM-Rollen und -Befehle gewährt wurde, finden Sie unter [HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md). Informationen zum Auflisten von Berechtigungen für IAM-Rollen und -Befehle, die einem von Ihnen spezifizierten Benutzer erteilt wurden, finden Sie unter [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md). Informationen zum Auflisten von Benutzern, Rollen und Gruppen, denen Zugriff auf eine von Ihnen spezifizierte IAM-Rolle erteilt wurde, finden Sie unter [PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md).

## Hinweise zum Erteilen von Machine-Learning-Berechtigungen
<a name="r_GRANT-usage-notes-create-model"></a>

Sie können Berechtigungen für eine ML-Funktion nicht direkt erteilen oder widerrufen. Eine ML-Funktion gehört zu einem ML-Modell, und die Berechtigungen werden über das Modell gesteuert. Stattdessen erteilen Sie Berechtigungen für das ML-Modell. Das folgende Beispiel zeigt, wie allen Benutzern Berechtigungen zum Ausführen der dem Modell `customer_churn` zugeordneten ML-Funktion erteilt werden.

```
GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;
```

Sie können einem Benutzer auch alle Berechtigungen für das ML-Modell `customer_churn` erteilen.

```
GRANT ALL on MODEL customer_churn TO ml_user;
```

Das Erteilen der Berechtigung `EXECUTE` für eine ML-Funktion schlägt fehl, wenn das Schema eine ML-Funktion enthält, auch wenn diese ML-Funktion bereits über `GRANT EXECUTE ON MODEL` über die Berechtigung `EXECUTE` verfügt. Wir empfehlen, bei Verwendung des Befehls `CREATE MODEL` ein separates Schema zu verwenden, um die ML-Funktionen in einem separaten Schema zu behalten. Das folgende Beispiel veranschaulicht die Vorgehensweise hierfür.

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# Beispiele
<a name="r_GRANT-examples"></a>

 Im folgenden Beispiel erhält der Benutzer das SELECT-Recht für die Tabelle SALES `fred`. 

```
grant select on table sales to fred;
```

Im folgenden Beispiel erhält der Benutzer das SELECT-Recht für alle Tabellen im Schema QA\$1TICKIT `fred`. 

```
grant select on all tables in schema qa_tickit to fred;
```

Im folgenden Beispiel erhält die Benutzergruppe QA\$1USERS alle Schemarechte für das Schema QA\$1TICKIT. Die Schemarechte sind CREATE und USAGE. USAGE gewährt Benutzern den Zugriff auf die Objekte im Schema, jedoch keine Rechte wie INSERT oder SELECT für diese Objekte. Gewähren Sie für jedes Objekt separat Berechtigungen.

```
create group qa_users;
grant all on schema qa_tickit to group qa_users;
```

Im folgenden Beispiel erhalten alle Benutzer in der Gruppe QA\$1USERS alle Rechte für die Tabelle SALES im Schema QA\$1TICKIT.

```
grant all on table qa_tickit.sales to group qa_users;
```

Im folgenden Beispiel erhalten alle Benutzer in den Gruppen QA\$1USERS und RO\$1USERS alle Berechtigungen für die Tabelle SALES im Schema QA\$1TICKIT.

```
grant all on table qa_tickit.sales to group qa_users, group ro_users;
```

Im folgenden Beispiel erhalten alle Benutzer in der Gruppe QA\$1USERS die DROP-Berechtigung für die Tabelle SALES im Schema QA\$1TICKIT.

```
grant drop on table qa_tickit.sales to group qa_users;>
```

Die folgende Abfolge von Befehlen zeigt, dass der Zugriff auf ein Schema keine Rechte in Bezug auf eine Tabelle im Schema gewährt. 

```
create user schema_user in group qa_users password 'Abcd1234';
create schema qa_tickit;
create table qa_tickit.test (col1 int);
grant all on schema qa_tickit to schema_user;

set session authorization schema_user;
select current_user;


current_user
--------------
schema_user
(1 row)


select count(*) from qa_tickit.test;


ERROR: permission denied for relation test [SQL State=42501]


set session authorization dw_user;
grant select on table qa_tickit.test to schema_user;
set session authorization schema_user;
select count(*) from qa_tickit.test;


count
-------
0
(1 row)
```

Die folgende Abfolge von Befehlen zeigt, dass der Zugriff auf eine Ansicht keinen Zugriff auf die zugrunde liegenden Tabellen impliziert. Der Benutzer namens VIEW\$1USER kann nicht aus der Tabelle DATE auswählen, obwohl diesem Benutzer alle Rechte in Bezug auf VIEW\$1DATE gewährt wurden. 

```
create user view_user password 'Abcd1234';
create view view_date as select * from date;
grant all on view_date to view_user;
set session authorization view_user;
select current_user;


current_user
--------------
view_user
(1 row)


select count(*) from view_date;


count
-------
365
(1 row)


select count(*) from date;


ERROR:  permission denied for relation date
```

Im folgenden Beispiel wird dem Benutzer `cust_name` die SELECT-Berechtigung für die Spalten `cust_phone` und `cust_profile` der Tabelle `user1` gewährt. 

```
grant select(cust_name, cust_phone) on cust_profile to user1;
```

Im folgenden Beispiel wird der Gruppe `cust_name` die SELECT-Berechtigung für die Spalten `cust_phone` und `cust_contact_preference` und die UPDATE-Berechtigung für die Spalte `cust_profile` der Tabelle `sales_group` gewährt. 

```
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
```

Das folgende Beispiel zeigt die Verwendung des Schlüsselworts ALL, um der Gruppe `cust_profile` sowohl SELECT- als auch UPDATE-Berechtigungen für drei Spalten der Tabelle `sales_admin` zu erteilen. 

```
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
```

Im folgenden Beispiel wird dem Benutzer `cust_name` die SELECT-Berechtigung für die Spalte `cust_profile_vw` der Ansicht `user2` gewährt. 

```
grant select(cust_name) on cust_profile_vw to user2;
```

## Beispiele für die Gewährung von Zugriff auf Datashares
<a name="r_GRANT-examples-datashare"></a>

Im Folgenden finden Sie Beispiele für die GRANT-Datashare-Nutzungsberechtigungen für eine bestimmte Datenbank oder ein bestimmtes Schema, die auf einem Datashare erstellt wurden. 

Im folgenden Beispiel erteilt ein Administrator auf Produzentenseite dem angegebenen Namespace die USAGE-Berechtigung für den `salesshare`-Datashare. 

```
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

Im folgenden Beispiel erteilt ein konsumentenseitiger Administrator die USAGE-Berechtigung auf `sales_db` für `Bob`.

```
GRANT USAGE ON DATABASE sales_db TO Bob;
```

Im folgenden Beispiel erteilt ein konsumentenseitiger Administrator der `Analyst_role`-Rolle die GRANT USAGE-Berechtigung für das `sales_schema`-Schema. `sales_schema` ist ein externes Schema, das auf sales\$1db verweist.

```
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

Zu diesem Zeitpunkt können `Bob` und `Analyst_role` auf alle Datenbankobjekte in `sales_schema` und `sales_db` zugreifen.

Das folgende Beispiel zeigt, wie zusätzliche Berechtigungen auf Objektebene für Objekte in einer gemeinsam genutzten Datenbank erteilt werden. Diese zusätzlichen Berechtigungen sind nur erforderlich, wenn der Befehl CREATE DATABASE, mit dem die gemeinsam genutzte Datenbank erstellt wurde, die WITH PERMISSIONS-Klausel verwendet hat. Wenn der Befehl CREATE DATABASE die Klausel WITH PERMISSIONS nicht verwendet hat, beinhaltet die Gewährung der USAGE-Berechtigung für die gemeinsam genutzte Datenbank vollen Zugriff auf alle Objekte in dieser Datenbank.

```
GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;
```

## Beispiele für die Gewährung von bereichsbezogenen Berechtigungen
<a name="r_GRANT-examples-scoped"></a>

Im folgenden Beispiel wird der `Sales`-Rolle die Verwendung aller derzeitigen und zukünftigen Schemata in der `Sales_db`-Datenbank gestattet.

```
GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;
```

Im folgenden Beispiel wird dem Benutzer `alice` die SELECT-Berechtigung für alle derzeitigen und zukünftigen Tabellen in der `Sales_db`-Datenbank sowie `alice` die Berechtigung erteilt, anderen Benutzern bereichsbezogene Berechtigungen für Tabellen in `Sales_db` zu gewähren.

```
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
```

Im folgenden Beispiel wird dem Benutzer `bob` die EXECUTE-Berechtigung für Funktionen im `Sales_schema`-Schema gewährt.

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

Im folgenden Beispiel werden der `Sales`-Rolle alle Berechtigungen für alle Tabellen im Schema `ShareSchema` der Datenbank `ShareDb` gewährt. Bei der Angabe des Schemas können Sie die Datenbank des Schemas im zweiteiligen Format `database.schema` angeben.

```
GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;
```

Das folgende Beispiel zeigt dieselbe Abfrage wie im vorherigen Beispiel. Sie können die Datenbank mit dem `DATABASE`-Schlüsselwort angeben, anstatt ein zweiteiliges Format zu verwenden.

```
GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;
```

## Beispiele für die Erteilung der ASSUMEROLE-Berechtigung
<a name="r_GRANT-examples-assumerole"></a>

Im Folgenden finden Sie Beispiele für die Erteilung der ASSUMEROLE-Berechtigung.

Das folgende Beispiel zeigt die REVOKE-Anweisung, die ein Superuser einmal auf dem Cluster ausführt, um die Verwendung der ASSUMEROLE-Berechtigung für Benutzer und Gruppen zu ermöglichen. Anschließend erteilt der Superuser Benutzern und Gruppen die Berechtigung ASSUMEROLE für die entsprechenden Befehle. Informationen zum Aktivieren der Verwendung der ASSUMEROLE-Berechtigung für Benutzer und Gruppen finden Sie unter [Hinweise zur Erteilung der Berechtigung ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole).

```
revoke assumerole on all from public for all;
```

Im folgenden Beispiel erhält der Benutzer `reg_user1` die ASSUMEROLE-Berechtigung für die IAM-Rolle `Redshift-S3-Read`, um COPY-Vorgänge auszuführen. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read'
to reg_user1 for copy;
```

Im folgenden Beispiel erhält der Benutzer `reg_user1` die ASSUMEROLE-Berechtigung für die IAM-Rollenkette `RoleA`, `RoleB`, um UNLOAD-Vorgänge auszuführen. 

```
grant assumerole
on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB'
to reg_user1
for unload;
```

Im Folgenden finden Sie ein Beispiel für den Befehl UNLOAD unter Verwendung der IAM-Rollenkette `RoleA`, `RoleB`.

```
unload ('select * from venue limit 10')
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

Im folgenden Beispiel erhält der Benutzer `reg_user1` die ASSUMEROLE-Berechtigung für die IAM-Rolle `Redshift-Exfunc`, um externe Funktionen auszuführen. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc'
to reg_user1 for external function;
```

Im folgenden Beispiel erhält der Benutzer `reg_user1` die ASSUMEROLE-Berechtigung für die IAM-Rolle `Redshift-model`, um Machine-Learning-Modelle zu erstellen. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML'
to reg_user1 for create model;
```

## Beispiele für die Erteilung der ROLE-Berechtigung
<a name="r_GRANT-examples-role"></a>

Im folgenden Beispiel wird die Rolle sample\$1role1 einem Benutzer mit dem Namen user1 erteilt.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
```

Im folgenden Beispiel wird dem Benutzer user1 die Rolle sample\$1role1 mit WITH ADMIN OPTION gewährt, die aktuelle Sitzung für user1 festgelegt und user1 gewährt die Rolle sample\$1role1 für user2.

```
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION;
SET SESSION AUTHORIZATION user1;
GRANT ROLE sample_role1 TO user2;
```

Im folgenden Beispiel wird die Rolle sample\$1role1 der Rolle sample\$1role2 gewährt.

```
GRANT ROLE sample_role1 TO ROLE sample_role2;
```

Im folgenden Beispiel wird die Rolle sample\$1role2 für sample\$1role3 und sample\$1role4 gewährt. Dann wird versucht, sample\$1role3 für sample\$1role1 zu gewähren.

```
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2;
ERROR: cannot grant this role, a circular dependency was detected between these roles
```

Im folgenden Beispiel werden die CREATE USER-Systemberechtigungen für sample\$1role1 gewährt.

```
GRANT CREATE USER TO ROLE sample_role1;
```

Im folgenden Beispiel wird die vom System definierte Rolle `sys:dba` für user1 gewährt.

```
GRANT ROLE sys:dba TO user1;
```

Im folgenden Beispiel wird versucht, sample\$1role3 in einer kreisförmigen Abhängigkeit von sample\$1role2 zu gewähren.

```
CREATE ROLE sample_role3;
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2; -- fail
ERROR:  cannot grant this role, a circular dependency was detected between these roles
```

# INSERT
<a name="r_INSERT_30"></a>

**Topics**
+ [Syntax](#r_INSERT_30-synopsis)
+ [Parameters](#r_INSERT_30-parameters)
+ [Nutzungshinweise](#r_INSERT_30_usage_notes)
+ [Beispiele für INSERT](c_Examples_of_INSERT_30.md)

Fügt neue Zeilen in eine Tabelle ein. Sie können eine einzelne Zeile mit der VALUES-Syntax, mehrere Zeilen mit der VALUES-Syntax oder eine oder mehrere Zeilen einfügen, die durch die Ergebnisse einer Abfrage definiert werden (INSERT INTO...SELECT).

**Anmerkung**  
Es wird nachdrücklich empfohlen, den Befehl [COPY](r_COPY.md) zu verwenden, um große Mengen von Daten zu laden. Die Verwendung einzelner INSERT-Anweisungen, um eine Tabelle auszufüllen, kann äußerst langsam sein. Wenn Ihre Daten in anderen Amazon-Redshift-Datenbanktabellen bereits vorhanden sind, können Sie alternativ INSERT INTO SELECT oder [CREATE TABLE AS](r_CREATE_TABLE_AS.md) verwenden, um die Leistung zu verbessern. Weitere Informationen zur Verwendung des Befehls COPY zum Laden von Tabellen finden Sie unter [Laden von Daten in Amazon Redshift](t_Loading_data.md).

**Anmerkung**  
Die maximal zulässige Größe für eine einzelne SQL-Anweisung ist 16 MB.

## Syntax
<a name="r_INSERT_30-synopsis"></a>

```
INSERT INTO table_name [ ( column [, ...] ) ]
{DEFAULT VALUES |
VALUES ( { expression | DEFAULT } [, ...] )
[, ( { expression | DEFAULT } [, ...] )
[, ...] ] |
query }
```

## Parameters
<a name="r_INSERT_30-parameters"></a>

 *table\$1name*   
Eine temporäre oder persistente Tabelle. Nur der Besitzer der Tabelle oder ein Benutzer mit dem Recht INSERT für die Tabelle können Zeilen einfügen. Wenn Sie die Klausel *query* verwenden, um Zeilen einzufügen, müssen Sie das SELECT-Recht für die in der Abfrage genannten Tabellen besitzen.   
Verwenden Sie INSERT (externe Tabelle), um Ergebnisse einer SELECT-Abfrage in vorhandene Tabellen im externen Katalog einzufügen. Weitere Informationen finden Sie unter [INSERT (externe Tabelle)](r_INSERT_external_table.md).

 *column*   
Sie können in eine oder mehrere Spalten der Tabelle Werte einfügen. Sie können die Zielspaltennamen in beliebiger Reihenfolge auflisten. Wenn Sie keine Spaltenliste angeben, müssen die Werte, die eingefügt werden sollen, den Tabellenspalten in der Reihenfolge entsprechen, in der sie in der Anweisung CREATE TABLE deklariert wurden. Wenn die Anzahl der Spalten, die eingefügt werden sollen, kleiner als die Anzahl der Spalten in der Tabelle ist, werden die ersten *n* Spalten geladen.   
In jede nicht in der Anweisung INSERT aufgelistete Spalte wird entweder der deklarierte Standardwert oder ein Null-Wert geladen (implizit oder explizit). 

DEFAULT VALUES   
Wenn den Spalten in der Tabelle beim Erstellen der Tabelle Standardwerte zugewiesen wurden, verwenden Sie diese Schlüsselwörter, um eine Zeile einzufügen, die ausschließlich aus Standardwerten besteht. Wenn eine oder mehrere Spalten keine Standardwerte aufweisen, werden in diese Spalten Null-Werte eingefügt. Wenn eine oder mehrere Spalten als NOT NULL deklariert wurden, gibt die Anweisung INSERT einen Fehler zurück. 

VALUES   
Verwenden Sie dieses Schlüsselwort, um eine oder mehrere Zeilen einzufügen, wobei jede Zeile aus einem oder mehreren Werten besteht. Die VALUES-Liste für jede Zeile muss der Spaltenliste entsprechen. Um mehrere Zeilen einzufügen, verwenden Sie ein Kommatrennzeichen zwischen den einzelnen Listen von Ausdrücken. Wiederholen Sie das Schlüsselwort VALUES nicht. Alle VALUES-Listen für eine INSERT-Anweisung für mehrere Zeilen müssen die gleiche Zahl von Werten enthalten. 

 *expression*   
Ein einzelner Wert oder ein Ausdruck, der in einen einzelnen Wert evaluiert wird. Jeder Wert muss mit dem Datentyp der Spalte, in die er eingefügt wird, kompatibel sein. Wenn möglich, wird ein Wert, dessen Datentyp nicht dem deklarierten Datentyp der Spalte entspricht, automatisch in einen kompatiblen Datentyp umgewandelt. Beispiel:   
+ Der Dezimalwert `1.1` wird als `1` in eine INT-Spalte eingefügt. 
+ Der Dezimalwert `100.8976` wird als `100.90` in eine DEC(5,2)-Spalte eingefügt. 
Sie können einen Wert explizit in einen kompatiblen Datentyp umwandeln, indem Sie eine Typumwandlungssyntax in den Ausdruck einschließen. Wenn die Spalte COL1 in Tabelle T1 beispielsweise eine CHAR (3) -Spalte ist:   

```
insert into t1(col1) values('Incomplete'::char(3));
```
Diese Anweisung fügt den Wert `Inc` in die Spalte ein.   
Für eine INSERT VALUES-Anweisung für eine einzelne Zeile können Sie eine skalare Unterabfrage als Ausdruck verwenden. Das Ergebnis der Unterabfrage wird in die entsprechende Tabelle eingefügt.   
Unterabfragen werden für INSERT VALUES-Anweisungen für mehrere Zeilen nicht als Ausdrücke unterstützt. 

DEFAULT   
Verwenden Sie dieses Schlüsselwort, um den Standardwert für eine Spalte einzufügen, der beim Erstellen der Tabelle definiert wurde. Wenn für eine Spalte kein Standardwert vorhanden ist, wird eine Null eingefügt. Sie können in eine Spalte, für die eine NOT NULL-Einschränkung vorhanden ist, keinen Standardwert einfügen, wenn dieser Spalte in der Anweisung CREATE TABLE nicht explizit ein Standardwert zugewiesen wurde. 

 *query*   
Sie können eine oder mehrere Zeilen in die Tabelle einfügen, indem Sie eine Abfrage definieren. Alle Zeilen, die von der Abfrage erstellt werden, werden in die Tabelle eingefügt. Die Abfrage muss eine Spaltenliste zurückgeben, die mit den Spalten in der Tabelle kompatibel ist. Die Spaltennamen müssen dabei nicht übereinstimmen. 

## Nutzungshinweise
<a name="r_INSERT_30_usage_notes"></a>

**Anmerkung**  
Es wird nachdrücklich empfohlen, den Befehl [COPY](r_COPY.md) zu verwenden, um große Mengen von Daten zu laden. Die Verwendung einzelner INSERT-Anweisungen, um eine Tabelle auszufüllen, kann äußerst langsam sein. Wenn Ihre Daten in anderen Amazon-Redshift-Datenbanktabellen bereits vorhanden sind, können Sie alternativ INSERT INTO SELECT oder [CREATE TABLE AS](r_CREATE_TABLE_AS.md) verwenden, um die Leistung zu verbessern. Weitere Informationen zur Verwendung des Befehls COPY zum Laden von Tabellen finden Sie unter [Laden von Daten in Amazon Redshift](t_Loading_data.md).

Das Datenformat für die eingefügten Werte muss mit dem Datenformat übereinstimmen, das von der Definition CREATE TABLE angegeben wird. 

 Nach dem Einfügen einer großen Zahl neuer Zeilen in eine Tabelle: 
+ Führen Sie eine Vacuum-Operation für die Tabelle durch, um Speicherplatz zurückzugewinnen und die Zeilen neu zu sortieren. 
+ Analysieren Sie die Tabelle, um Statistiken für den Abfrageplaner zu aktualisieren. 

Wenn Werte in DECIMAL-Spalten eingefügt werden und die angegebene Skala überschritten wird, werden die geladenen Werte entsprechend gerundet. Wenn beispielsweise der Wert `20.259` in eine DECIMAL(8,2)-Spalte eingefügt wird, ist der gespeicherte Wert `20.26`. 

Sie können in eine GENERATED BY DEFAULT AS IDENTITY-Spalte einfügen. Sie können als GENERATED BY DEFAULT AS IDENTITY-Spalten mit von Ihnen angegebenen Werten aktualisieren. Weitere Informationen finden Sie unter [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

# Beispiele für INSERT
<a name="c_Examples_of_INSERT_30"></a>

Die Tabelle CATEGORY in der Datenbank TICKIT enthält die folgenden Zeilen: 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
     1 | Sports   | MLB       | Major League Baseball
     2 | Sports   | NHL       | National Hockey League
     3 | Sports   | NFL       | National Football League
     4 | Sports   | NBA       | National Basketball Association
     5 | Sports   | MLS       | Major League Soccer
     6 | Shows    | Musicals  | Musical theatre
     7 | Shows    | Plays     | All non-musical theatre
     8 | Shows    | Opera     | All opera and light opera
     9 | Concerts | Pop       | All rock and pop music concerts
    10 | Concerts | Jazz      | All jazz singers and bands
    11 | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

 Erstellen Sie eine Tabelle CATEGORY\$1STAGE mit einem ähnlichen Schema wie die Tabelle CATEGORY. Definieren Sie jedoch die Standardwerte für die Spalten: 

```
create table category_stage
(catid smallint default 0,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');
```

Die folgende INSERT-Anweisung wählt alle Zeilen aus der Tabelle CATEGORY aus und fügt Sie in die Tabelle CATEGORY\$1STAGE ein. 

```
insert into category_stage
(select * from category);
```

Die Klammern, in die die Abfrage eingeschlossen ist, sind optional.

Dieser Befehl fügt eine neue Zeile in die Tabelle CATEGORY\$1STAGE ein, in der für jede Spalte der Reihenfolge nach ein Wert angegeben ist: 

```
insert into category_stage values
(12, 'Concerts', 'Comedy', 'All stand-up comedy performances');
```

Sie können auch eine neue Zeile einfügen, die spezifische Werte und Standardwerte kombiniert: 

```
insert into category_stage values
(13, 'Concerts', 'Other', default);
```

Führen Sie die folgende Abfrage aus, um die eingefügten Zeilen zurückzugeben: 

```
select * from category_stage
where catid in(12,13) order by 1;

 catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
    12 | Concerts | Comedy  | All stand-up comedy performances
    13 | Concerts | Other   | General
(2 rows)
```

In den folgenden Beispielen werden INSERT VALUES-Anweisungen für mehrere Zeilen gezeigt. Im ersten Beispiel werden spezifische CATID-Werte für zwei Zeilen und für die übrigen Spalten in den beiden Zeilen Standardwerte eingefügt. 

```
insert into category_stage values
(14, default, default, default),
(15, default, default, default);

select * from category_stage where catid in(14,15) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
    14 | General  | General | General
    15 | General  | General | General
(2 rows)
```

Im nächsten Beispiel werden drei Zeilen mit verschiedenen Kombinationen aus spezifischen und Standardwerten eingefügt: 

```
insert into category_stage values
(default, default, default, default),
(20, default, 'Country', default),
(21, 'Concerts', 'Rock', default);

select * from category_stage where catid in(0,20,21) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
     0 | General  | General | General
    20 | General  | Country | General
    21 | Concerts | Rock    | General
(3 rows)
```

Der erste Satz von VALUES in diesem Beispiel führt zu den gleichen Ergebnissen wie die Angabe von DEFAULT VALUES für eine INSERT-Anweisung für eine einzelne Zeile.

In den folgenden Beispielen wird das INSERT-Verhalten gezeigt, wenn eine Tabelle eine IDENTITY-Spalte besitzt. Erstellen Sie zunächst eine neue Version der Tabelle CATEGORY und fügen Sie dann Zeilen aus CATEGORY ein: 

```
create table category_ident
(catid int identity not null,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');


insert into category_ident(catgroup,catname,catdesc)
select catgroup,catname,catdesc from category;
```

Beachten Sie, dass Sie in die Spalte CATID IDENTITY keine spezifischen ganzzahligen Werte einfügen können. Die Werte in der IDENTITY-Spalte werden automatisch generiert.

Im folgenden Beispiel wird gezeigt, dass Unterabfragen nicht als Ausdrücke in INSERT VALUES-Anweisungen für mehrere Zeilen verwendet werden können: 

```
insert into category(catid) values
((select max(catid)+1 from category)),
((select max(catid)+2 from category));

ERROR: can't use subqueries in multi-row VALUES
```

Das folgende Beispiel zeigt eine Einfügung in eine temporäre Tabelle, die mithilfe der `WITH SELECT`-Klausel mit Daten aus der `venue`-Tabelle gefüllt wird. Weitere Informationen zur Tabelle `venue` finden Sie unter [Beispieldatenbank](c_sampledb.md).

Erstellen Sie zunächst die temporäre Tabelle `#venuetemp`.

```
CREATE TABLE #venuetemp AS SELECT * FROM venue;
```

Listen Sie die Zeilen in der `#venuetemp`-Tabelle auf.

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756	
...
```

Fügen Sie mithilfe der `WITH SELECT`-Klausel 10 doppelte Zeilen in die `#venuetemp`-Tabelle ein.

```
INSERT INTO #venuetemp (WITH venuecopy AS (SELECT * FROM venue) SELECT * FROM venuecopy ORDER BY 1 LIMIT 10);
```

Listen Sie die Zeilen in der `#venuetemp`-Tabelle auf.

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756
5        Gillette Stadium           Foxborough   MA          68756
...
```

# INSERT (externe Tabelle)
<a name="r_INSERT_external_table"></a>

Fügt die Ergebnisse einer SELECT-Abfrage in bestehende externe Tabellen in einem externen Katalog ein, z. B. für AWS Glue AWS Lake Formation, oder einen Apache Hive-Metastore. Verwenden Sie dieselbe AWS Identity and Access Management (IAM-) Rolle, die für den Befehl CREATE EXTERNAL SCHEMA verwendet wurde, um mit externen Katalogen und Amazon S3 zu interagieren.

Bei nicht partitionierten Tabellen schreibt der Befehl INSERT (externe Tabelle) Daten basierend auf den angegebenen Tabelleneigenschaften und dem Dateiformat in den Amazon-S3-Speicherort, der in der Tabelle definiert ist.

Bei partitionierten Tabellen schreibt INSERT (externe Tabelle) Daten gemäß dem in der Tabelle angegebenen Partitionsschlüssel in den Amazon-S3-Speicherort. Außerdem werden neue Partitionen automatisch im externen Katalog registriert, nachdem der INSERT-Vorgang abgeschlossen ist.

Sie können INSERT (externe Tabelle) nicht innerhalb eines Transaktionsblocks ausführen (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 

## Syntax
<a name="r_INSERT_external_table-synopsis"></a>

```
INSERT INTO external_schema.table_name
{ select_statement }
```

## Parameters
<a name="r_INSERT_external_table-parameters"></a>

 *external\$1schema.table\$1name*   
Der Name eines vorhandenen externen Schemas und einer externen Zieltabelle, in die eingefügt werden soll.

 *select-statement*   
Eine Anweisung, die mindestens eine Zeile in die externe Tabelle einfügt, indem eine beliebige Abfrage definiert wird. Alle von der Abfrage erzeugten Zeilen werden auf Grundlage der Tabellendefinition entweder im Text- oder im Parquet-Format in Amazon S3 geschrieben. Die Abfrage muss eine Spaltenliste zurückgeben, die mit den Spaltendatentypen in der externen Tabelle kompatibel ist. Die Spaltennamen müssen jedoch nicht übereinstimmen.

## Nutzungshinweise
<a name="r_INSERT_external_table_usage_notes"></a>

Die Anzahl der Spalten in der SELECT-Abfrage muss mit der Summe der Datenspalten und Partitionsspalten übereinstimmen. Der Speicherort und der Datentyp jeder Datenspalte müssen mit dem der externen Tabelle übereinstimmen. Die Position der Partitionsspalten muss am Ende der SELECT-Abfrage liegen, in derselben Reihenfolge, in der sie im Befehl CREATE EXTERNAL TABLE definiert wurden. Die Spaltennamen müssen nicht übereinstimmen.

In einigen Fällen möchten Sie möglicherweise den Befehl INSERT (externe Tabelle) für einen AWS Glue -Datenkatalog oder einen Hive-Metastore ausführen. Im Fall von muss die IAM-Rolle AWS Glue, die zur Erstellung des externen Schemas verwendet wurde, sowohl Lese- als auch Schreibberechtigungen für Amazon S3 und AWS Glue haben. Wenn Sie einen AWS Lake Formation Katalog verwenden, wird diese IAM-Rolle der Besitzer der neuen Lake Formation-Tabelle. Diese IAM-Rolle muss mindestens über die folgenden Berechtigungen verfügen: 
+ SELECT-, INSERT-, UPDATE-Berechtigung für die externe Tabelle
+ Datenspeicherort-Berechtigung für den Amazon-S3-Pfad der externen Tabelle

Um sicherzustellen, dass Dateinamen eindeutig sind, verwendet Amazon Redshift das folgende Format für den Namen jeder Datei, die standardmäßig in Amazon S3 hochgeladen wurde. 

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

Ein Beispiel ist `20200303_004509_810669_1007_0001_part_00.parquet`.

Berücksichtigen Sie Folgendes, wenn Sie den Befehl INSERT (externe Tabelle) ausführen:
+ Externe Tabellen, die ein anderes Format als PARQUET oder TEXTFILE haben, werden nicht unterstützt.
+ Dieser Befehl unterstützt vorhandene Tabelleneigenschaften wie 'write.parallel', 'write.maxfilesize.mb', 'compression\$1type' und 'serialization.null.format'. Um diese Werte zu aktualisieren, führen Sie den Befehl ALTER TABLE SET TABLE PROPERTIES aus.
+ Die Tabelleneigenschaft 'numRows' wird automatisch gegen Ende des INSERT-Vorgangs aktualisiert. Die Tabelleneigenschaft muss bereits definiert oder der Tabelle hinzugefügt werden, wenn sie nicht durch den CREATE EXTERNAL TABLE AS-Vorgang erstellt wurde.
+ Die LIMIT-Klausel wird in der äußeren SELECT-Abfrage nicht unterstützt. Verwenden Sie stattdessen eine verschachtelte LIMIT-Klausel.
+ Sie können die [STL\$1UNLOAD\$1LOG](r_STL_UNLOAD_LOG.md)-Tabelle verwenden, um die Dateien zu verfolgen, die von jedem INSERT (externe Tabelle)-Vorgang in Amazon S3 geschrieben wurden.
+ Amazon Redshift unterstützt nur die Amazon-S3-Standardverschlüsselung für INSERT (externe Tabelle).

## Beispiele für INSERT (externe Tabelle)
<a name="c_Examples_of_INSERT_external_table"></a>

Im folgenden Beispiel werden die Ergebnisse der SELECT-Anweisung in die externe Tabelle eingefügt.

```
INSERT INTO spectrum.lineitem
SELECT * FROM local_lineitem;
```

Im folgenden Beispiel werden die Ergebnisse der SELECT-Anweisung mithilfe der statischen Partitionierung in eine partitionierte externe Tabelle eingefügt. Die Partitionsspalten sind in der SELECT-Anweisung fest kodiert. Die Partitionsspalten müssen sich am Ende der Abfrage befinden.

```
INSERT INTO spectrum.customer
SELECT name, age, gender, 'May', 28 FROM local_customer;
```

Im folgenden Beispiel werden die Ergebnisse der SELECT-Anweisung mithilfe der dynamischen Partitionierung in eine partitionierte externe Tabelle eingefügt. Die Partitionsspalten sind nicht fest kodiert. Daten werden automatisch zu den vorhandenen Partitionsordnern oder zu neuen Ordnern hinzugefügt, wenn eine neue Partition hinzugefügt wird.

```
INSERT INTO spectrum.customer
SELECT name, age, gender, month, day FROM local_customer;
```

# LOCK
<a name="r_LOCK"></a>

Schränkt den Zugriff auf eine Datenbanktabelle ein. Dieser Befehl ist nur sinnvoll, wenn er innerhalb eines Transaktionsblocks ausgeführt wird.

Der LOCK-Befehl bewirkt eine Sperrung auf Tabellenebene im Modus ACCESS EXCLUSIVE und wartet auf die Freigabe widersprüchlicher Sperren, wenn notwendig. Die explizite Sperrung einer Tabelle auf diese Weise führt dazu, dass Lese- und Schreibvorgänge für die Tabelle abwarten, wenn sie über andere Transaktionen oder Sitzungen versucht werden. Eine explizite Tabellensperre, die von einem Benutzer erstellt wird, hindert andere Benutzer vorübergehend daran, Daten aus dieser Tabelle auszuwählen oder Daten in diese Tabelle zu laden. Die Sperre wird aufgehoben, wenn die Transaktion, die den LOCK-Befehl enthält, abgeschlossen ist.

Befehle, die Tabellen referenzieren, wie Schreibvorgänge, bewirken implizit weniger einschränkende Tabellensperren. Wenn ein Benutzer beispielsweise versucht, Daten aus einer Tabelle zu lesen, während ein anderer Benutzer die Tabelle aktualisiert, stellen die gelesenen Daten einen Snapshot der Daten dar, für die bereits ein Commit ausgeführt wurde. (In einigen Fällen werden Abfragen abgebrochen, wenn sie Regeln für die serialisierbare Isolierung verletzen.) Siehe [Verwalten gleichzeitiger Schreiboperationen](c_Concurrent_writes.md).

Einige DDL-Operationen, wie z. B. DROP TABLE und TRUNCATE, erstellen exklusive Sperren. Diese Operationen verhindern, dass Daten gelesen werden.

Wenn ein Sperrkonflikt auftritt, zeigt Amazon Redshift eine Fehlermeldung an, um den Benutzer zu warnen, der die konfliktbehaftete Transaktion gestartet hat. Die Transaktion, die den Sperrkonflikt empfangen hat, wird abgebrochen. Jedes Mal, wenn ein Sperrkonflikt eintritt, schreibt Amazon Redshift einen Eintrag in die Tabelle [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md).

## Syntax
<a name="section_r_LOCK-synopsis"></a>

```
LOCK [ TABLE ] table_name [, ...]
```

## Parameters
<a name="parameters"></a>

TABLE   
Optionales Schlüsselwort.

 *table\$1name*   
Der Name der Tabelle, die gesperrt werden soll. Sie können mehrere Tabellen sperren, indem Sie eine Liste verwenden, in der Tabellennamen durch Komma getrennt werden. Sie können keine Ansichten sperren. 

## Beispiel
<a name="example2"></a>

```
begin;

lock event, sales;

...
```

# MERGE
<a name="r_MERGE"></a>

Führt Zeilen aus einer Quelltabelle bedingt in einer Zieltabelle zusammen. Herkömmlicherweise ist dies nur durch separate Verwendung mehrerer Insert-, Update- oder Delete-Anweisungen möglich. Weitere Informationen zu den Operationen, die Sie mithilfe von MERGE kombinieren können, finden Sie unter [UPDATE](https://docs.aws.amazon.com/redshift/latest/dg/r_UPDATE.html), [DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_DELETE.html) und [INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_30.html).

## Syntax
<a name="r_MERGE-synopsis"></a>

```
MERGE INTO target_table 
USING source_table [ [ AS ] alias ] 
ON match_condition 
[ WHEN MATCHED THEN { UPDATE SET col_name = { expr } [,...] | DELETE }
WHEN NOT MATCHED THEN INSERT [ ( col_name [,...] ) ] VALUES ( { expr } [, ...] ) |
REMOVE DUPLICATES ]
```

## Parameters
<a name="r_MERGE-parameters"></a>

 *target\$1table*  
Die temporäre oder permanente Tabelle, in die die MERGE-Anweisung zusammengeführt wird.

 *source\$1table*  
Die temporäre oder permanente Tabelle, die die Zeilen bereitstellt, die in *target\$1table* zusammengeführt werden sollen. *source\$1table* kann auch eine Spectrum-Tabelle sein. 

 *alias*  
Der temporäre alternative Name für *source\$1table*.  
Dieser Parameter ist optional. Optional kann dem *Alias* auch AS vorangestellt sein.

 *match\$1condition*  
Gibt übereinstimmende Prädikate zwischen der Quelltabellenspalte und der Zieltabellenspalte an, anhand derer bestimmt wird, ob die Zeilen in *source\$1table* mit Zeilen in *target\$1table* abgeglichen werden können. Wenn die Bedingung erfüllt ist, führt MERGE *matched\$1clause* für diese Zeile aus. Andernfalls führt MERGE *not\$1matched\$1clause* für diese Zeile aus.

WHEN MATCHED  
 Gibt die Aktion an, die ausgeführt werden soll, wenn die Übereinstimmungsbedingung zwischen einer Quell- und einer Zielzeile „True“ (Wahr) ergibt. Sie können entweder eine UPDATE-Aktion oder eine DELETE-Aktion angeben. 

UPDATE  
 Aktualisiert die übereinstimmende Zeile in *target\$1table*. Nur Werte in dem von Ihnen angegebenen *col\$1name* werden aktualisiert. 

DELETE  
 Löscht die übereinstimmende Zeile in *target\$1table*. 

WHEN NOT MATCHED  
 Gibt die Aktion an, die ausgeführt werden soll, wenn die Übereinstimmungsbedingung „False“ (Falsch) oder „Unknown“ (Unbekannt) ergibt. Sie können nur die INSERT-Einfügeaktion für diese Klausel angeben. 

INSERT  
 Fügt in *target\$1table* Zeilen aus *source\$1table* ein, die mit keiner Zeile in *target\$1table* übereinstimmen, abhängig von *match\$1condition*. Der Ziel-*col\$1name* kann in beliebiger Reihenfolge aufgelistet werden. Wenn Sie keine *col\$1name*-Werte angeben, werden standardmäßig alle Spalten der Tabelle in ihrer deklarierten Reihenfolge angeordnet. 

 *col\$1name*  
Ein oder mehrere Spaltennamen, die Sie ändern möchten. Beziehen Sie den Tabellennamen bei der Angabe der Zielspalte nicht ein.

 *expr*  
Der Ausdruck, der den neuen Wert für *col\$1name* definiert.

 REMOVE DUPLICATES  
Gibt an, dass der MERGE-Befehl im vereinfachten Modus ausgeführt wird. Für den vereinfachten Modus gelten folgende Anforderungen:  
+  *target\$1table* und *source\$1table* müssen über dieselbe Anzahl von Spalten, kompatible Spaltentypen und dieselbe Spaltenreihenfolge verfügen. 
+  Lassen Sie die WHEN-Klausel und die UPDATE- und INSERT-Klauseln in Ihrem MERGE-Befehl weg. 
+  Verwenden Sie die REMOVE DUPLICATES-Klausel in Ihrem MERGE-Befehl. 
Im vereinfachten Modus bewirkt MERGE Folgendes:  
+  Zeilen in *target\$1table*, die eine Übereinstimmung in *source\$1table* haben, werden aktualisiert, so dass sie den Werten in *source\$1table* entsprechen. 
+  Zeilen in *source\$1table*, die keine Übereinstimmung in *target\$1table* haben, werden in *target\$1table* eingefügt. 
+  Wenn mehrere Zeilen in *target\$1table* mit derselben Zeile in *source\$1table* übereinstimmen, werden die doppelten Zeilen entfernt. Amazon Redshift behält eine Zeile bei und aktualisiert sie. Doppelte Zeilen, die keiner Zeile in *source\$1table* entsprechen, bleiben unverändert. 
Die Verwendung von REMOVE DUPLICATES bietet eine bessere Leistung als die Verwendung von WHEN MATCHED und WHEN NOT MATCHED. Wir empfehlen die Verwendung von REMOVE DUPLICATES, wenn *target\$1table* und *source\$1table* kompatibel sind und Sie keine doppelten Zeilen in *target\$1table* beibehalten müssen.

## Nutzungshinweise
<a name="r_MERGE_usage_notes"></a>
+ Um MERGE-Anweisungen ausführen zu können, müssen Sie sowohl Besitzer von *source\$1table* als auch von *target\$1table* sein oder über die SELECT-Berechtigung für diese Tabellen verfügen. Darüber hinaus benötigen Sie UPDATE-, DELETE- und INSERT-Berechtigungen für *target\$1table*, je nachdem, welche Operationen in Ihrer MERGE-Anweisung enthalten sind.
+  *target\$1table* kann keine Systemtabelle, Katalogtabelle oder externe Tabelle sein. 
+  *source\$1table* und *target\$1table* können nicht dieselbe Tabelle sein. 
+  Sie können die WITH-Klausel nicht in einer MERGE-Anweisung verwenden. 
+  Zeilen in *target\$1table* können nicht mit mehreren Zeilen in *source\$1table* übereinstimmen. 

  Betrachten Sie das folgende Beispiel:

  ```
  CREATE TABLE target (id INT, name CHAR(10));
  CREATE TABLE source (id INT, name CHAR(10));
  
  INSERT INTO target VALUES (1, 'Bob'), (2, 'John');
  INSERT INTO source VALUES (1, 'Tony'), (1, 'Alice'), (3, 'Bill');
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN DELETE
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  ```

  Bei beiden MERGE-Anweisungen schlägt der Vorgang fehl, da es mehrere Zeilen in der `source`-Tabelle mit einem ID-Wert von `1` gibt.
+  *match\$1condition* und *expr* können nicht teilweise auf Spalten vom Typ SUPER verweisen. Wenn Ihr Objekt vom Typ SUPER beispielsweise ein Array oder eine Struktur ist, können Sie nicht einzelne Elemente dieser Spalte für *match\$1condition* oder *expr* verwenden, die gesamte Spalte dagegen schon. 

  Betrachten Sie das folgende Beispiel:

  ```
  CREATE TABLE IF NOT EXISTS target (key INT, value SUPER);
  CREATE TABLE IF NOT EXISTS source (key INT, value SUPER);
  
  INSERT INTO target VALUES (1, JSON_PARSE('{"key": 88}'));
  INSERT INTO source VALUES (1, ARRAY(1, 'John')), (2, ARRAY(2, 'Bill'));
  
  MERGE INTO target USING source ON target.key = source.key
  WHEN matched THEN UPDATE SET value = source.value[0]
  WHEN NOT matched THEN INSERT VALUES (source.key, source.value[0]);
  ERROR: Partial reference of SUPER column is not supported in MERGE statement.
  ```

  Weitere Informationen zum Typ SUPER finden Sie unter [Typ SUPER](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html).
+ Bei einer großen *source\$1table* kann die Leistung verbessert werden, indem die Join-Spalten von *target\$1table* und *source\$1table* als Verteilungsschlüssel definiert werden.
+ Um die REMOVE DUPLICATES-Klausel benutzen zu können, benötigen Sie die SELECT-, INSERT- und DELETE-Berechtigungen für *target\$1table*.
+  *source\$1table* kann eine Ansicht oder Unterabfrage sein. Im Folgenden finden Sie ein Beispiel für eine MERGE-Anweisung, bei der *source\$1table* eine Unterabfrage ist, die duplizierte Zeilen entfernt. 

  ```
  MERGE INTO target
  USING (SELECT id, name FROM source GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```
+ Das Ziel darf keine Datenquelle einer Unterabfrage derselben MERGE-Anweisung sein. Der folgende SQL-Befehl gibt beispielsweise einen Fehler wie ERROR zurück: Die Anweisung Source view/subquery in Merge kann nicht auf die Zieltabelle verweisen. weil die Unterabfrage `target` statt auf verweist. `source`

  ```
  MERGE INTO target
  USING (SELECT id, name FROM target GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```

## Beispiele
<a name="sub-examples-merge"></a>

Im folgenden Beispiel werden zwei Tabellen erstellt und anschließend wird eine MERGE-Operation für sie ausgeführt. Dabei werden übereinstimmende Zeilen in der Zieltabelle aktualisiert und nicht übereinstimmende Zeilen eingefügt. Daraufhin wird ein weiterer Wert in die Quelltabelle eingefügt und eine weitere MERGE-Operation ausgeführt. Dieses Mal werden dabei übereinstimmende Zeilen gelöscht und die neue Zeile aus der Quelltabelle wird eingefügt.

Erstellen Sie zunächst die Quell- und Zieltabellen und füllen Sie sie aus.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (101, 'Bob'), (102, 'John'), (103, 'Susan');
INSERT INTO source VALUES (102, 'Tony'), (103, 'Alice'), (104, 'Bill');

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | John
 103 | Susan
(3 rows)

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
(3 rows)
```

Führen Sie anschließend die Quelltabelle mit der Zieltabelle zusammen. Aktualisieren Sie dabei die Zieltabelle mit übereinstimmenden Zeilen und fügen Sie Zeilen aus der Quelltabelle ein, zu denen es keine Übereinstimmung gibt.

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | Tony
 103 | Alice
 104 | Bill
(4 rows)
```

Beachten Sie, dass die Zeilen mit den ID-Werten 102 und 103 aktualisiert werden, sodass sie den Namenswerten aus der Zieltabelle entsprechen. Außerdem wird eine neue Zeile mit dem ID-Wert 104 und dem Namenswert „Bill“ in die Zieltabelle eingefügt.

Fügen Sie als Nächstes eine neue Zeile in die Quelltabelle ein.

```
INSERT INTO source VALUES (105, 'David');

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
 105 | David
(4 rows)
```

Führen Sie abschließend eine Merge-Operation aus. Löschen Sie dabei übereinstimmende Zeilen in der Zieltabelle und fügen Sie nicht übereinstimmende Zeilen ein.

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 105 | David
(2 rows)
```

Die Zeilen mit den ID-Werten 102, 103 und 104 werden aus der Zieltabelle gelöscht, und eine neue Zeile mit dem ID-Wert 105 und dem Namenswert „David“ wird in die Zieltabelle eingefügt.

Das folgende Beispiel zeigt die vereinfachte Syntax eines MERGE-Befehls unter Verwendung der Klausel REMOVE DUPLICATES.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (11, 'Alice'), (23, 'Bill');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
11 | Alice
23 | David
22 | Clarence
(4 rows)
```

Das folgende Beispiel zeigt die vereinfachte Syntax eines MERGE-Befehls, der die Klausel REMOVE DUPLICATES verwendet und duplizierte Zeilen aus *target\$1table* entfernt, wenn es für sie übereinstimmende Zeilen in *source\$1table* gibt.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (30, 'Daisy'), (11, 'Alice'), (23, 'Bill'), (23, 'Nikki');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
30 | Daisy
11 | Alice
23 | David
22 | Clarence
(5 rows)
```

Nach der Ausführung von MERGE gibt es in *target\$1table* nur eine Zeile mit dem ID-Wert 23. Da es in *source\$1table* keine Zeile mit dem ID-Wert 30 gab, verbleiben die beiden doppelten Zeilen mit den ID-Werten 30 in *target\$1table*.

## Weitere Informationen finden Sie auch unter
<a name="r_MERGE-see-also"></a>

 [INSERT](r_INSERT_30.md), [UPDATE](r_UPDATE.md), [DELETE](r_DELETE.md) 

# PREPARE
<a name="r_PREPARE"></a>

Bereitet eine Anweisung für die Ausführung vor. 

PREPARE erstellt eine vorbereitete Anweisung. Wenn die PREPARE-Anweisung ausgeführt wird, wird die angegebene Anweisung (SELECT, INSERT, UPDATE oder DELETE) analysiert, neu geschrieben und geplant. Wenn dann ein EXECUTE-Befehl für die vorbereitete Anweisung ausgegeben wird, kann Amazon Redshift den Abfrageausführungsplan optional ändern (um die Leistung auf der Basis der angegebenen Parameterwerte zu verbessern), bevor die vorbereitete Anweisung ausgeführt wird. 

## Syntax
<a name="r_PREPARE-synopsis"></a>

```
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
```

## Parameters
<a name="r_PREPARE-parameters"></a>

 *plan\$1name*   
Ein zufällig ausgewählter Name, der dieser bestimmten vorbereiteten Anweisung gegeben wird. Er muss innerhalb einer einzelnen Sitzung eindeutig sein und wird anschließend verwendet, um eine zuvor vorbereitete Anweisung auszuführen oder deren Zuteilung aufzuheben.

 *datatype*   
Der Datentyp eines Parameters der vorbereiteten Anweisung. Um auf die Parameter in der erstellten Anweisung selbst zu verweisen, verwenden Sie \$11, \$12 usw. bis maximal \$132767.

 *statement*   
Eine SELECT-, INSERT-, UPDATE- oder DELETE-Anweisung.

## Nutzungshinweise
<a name="r_PREPARE_usage_notes"></a>

Vorbereitete Anweisungen können Parameter besitzen: Werte, die in die Anweisung ersetzt werden, wenn sie ausgeführt wird. Um Parameter in eine vorbereitete Anweisung einzuschließen, stellen Sie in der PREPARE-Anweisung eine Liste von Datentypen bereit und verweisen Sie in der vorzubereitenden Anweisung selbst auf die Parameter nach Position, in der Schreibweise \$11, \$12... Die maximale Anzahl von Parametergruppen ist 32767. Wenn die Anweisung ausgeführt wird, geben Sie die tatsächlichen Werte für diese Parameter in der Anweisung EXECUTE an. Weitere Details finden Sie unter [EXECUTE](r_EXECUTE.md). 

Vorbereitete Anweisungen sind nur für die Dauer der aktuellen Sitzung gültig. Nach Ende der Sitzung wird die vorbereitete Anweisung verworfen. Daher muss sie erneut erstellt werden, um erneut verwendet zu werden. Das bedeutet auch, dass eine einzelne vorbereitete Anweisung nicht von mehreren Datenbankclients gleichzeitig verwendet werden kann. Jeder Client kann jedoch eine eigene vorbereitete Anweisung zur Verwendung erstellen. Die vorbereitete Anweisung kann mittels des Befehls DEALLOCATE manuell entfernt werden. 

Vorbereitete Anweisungen bieten den größten Leistungsvorteil, wenn eine einzelne Sitzung zur Ausführung einer großen Zahl ähnlicher Anweisungen verwendet wird. Wie bereits erwähnt, kann Amazon Redshift für jede neue Ausführung einer vorbereiteten Anweisung den Abfrageausführungsplan ändern, um die Leistung auf der Basis der angegebenen Parameterwerte zu verbessern. Um den Abfrageausführungsplan zu überprüfen, den Amazon Redshift für spezifische EXECUTE-Anweisungen ausgewählt hat, verwenden Sie den Befehl [EXPLAIN](r_EXPLAIN.md). 

Weitere Informationen zur Abfrageplanung und zu den Statistiken, die von Amazon Redshift für die Optimierung von Abfragen gesammelt werden, finden Sie unter dem Befehl [ANALYZE](r_ANALYZE.md). 

## Beispiele
<a name="sub-examples-prepare"></a>

Erstellung einer temporären Tabelle, Vorbereitung einer INSERT-Anweisung vor und anschließende Ausführung:

```
DROP TABLE IF EXISTS prep1;
CREATE TABLE prep1 (c1 int, c2 char(20));
PREPARE prep_insert_plan (int, char)
AS insert into prep1 values ($1, $2);
EXECUTE prep_insert_plan (1, 'one');
EXECUTE prep_insert_plan (2, 'two');
EXECUTE prep_insert_plan (3, 'three');
DEALLOCATE prep_insert_plan;
```

Vorbereitung einer SELECT-Anweisung und anschließende Ausführung:

```
PREPARE prep_select_plan (int)
AS select * from prep1 where c1 = $1;
EXECUTE prep_select_plan (2);
EXECUTE prep_select_plan (3);
DEALLOCATE prep_select_plan;
```

## Weitere Informationen finden Sie auch unter
<a name="r_PREPARE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [EXECUTE](r_EXECUTE.md) 

# REFRESH MATERIALIZED VIEW
<a name="materialized-view-refresh-sql-command"></a>

Aktualisiert eine materialisierte Ansicht.

Wenn Sie eine materialisierte Ansicht erstellen, spiegelt ihr Inhalt den Zustand der zugrundeliegenden Datenbanktabelle(n) zu diesem Zeitpunkt wider. Die Daten in der materialisierten Ansicht bleiben unverändert, auch wenn Anwendungen Änderungen an den Daten in den zugrundeliegenden Tabellen vornehmen.

Um die Daten in einer materialisierten Ansicht zu aktualisieren, können Sie jederzeit die Anweisung `REFRESH MATERIALIZED VIEW` verwenden. Wenn Sie diese Anweisung verwenden, identifiziert Amazon Redshift Änderungen, die in der oder den Basistabellen stattgefunden haben, und wendet diese Änderungen dann auf die materialisierte Ansicht an.

Weitere Hinweise zu materialisierten Ansichten finden Sie unter [Materialisierte Ansichten in Amazon Redshift](materialized-view-overview.md).

## Syntax
<a name="mv_REFRESH_MATERIALIZED_VIEW-synopsis"></a>

```
REFRESH MATERIALIZED VIEW mv_name [ RESTRICT | CASCADE ]
```

## Parameters
<a name="mv_REFRESH_MATERIALIZED_VIEW-parameters"></a>

*mv\$1name*  
Der Name der zu aktualisierenden materialisierten Ansicht.

RESTRICT  
Optionales Schlüsselwort. Aktualisiert die angegebene materialisierte Ansicht, nicht jedoch ihre abhängigen materialisierten Ansichten. Die Standardeinstellung, wenn weder RESTRICT noch CASCADE angegeben sind.

CASCADE  
Optionales Schlüsselwort. Aktualisiert die angegebene materialisierte Ansicht und alle materialisierten Ansichten, die von ihr abhängig sind.

## Nutzungshinweise
<a name="mv_REFRESH_MARTERIALIZED_VIEW_usage"></a>

Nur der Besitzer einer materialisierten Ansicht kann eine `REFRESH MATERIALIZED VIEW`-Operation für diese Ansicht ausführen. Darüber hinaus muss der Besitzer über SELECT-Berechtigungen für die zugrunde liegenden Basistabellen verfügen, um erfolgreich ausführen zu können `REFRESH MATERIALIZED VIEW`. 

Der Befehl `REFRESH MATERIALIZED VIEW` wird als Transaktion von sich selbst ausgeführt. Die Amazon-Redshift-Transaktionssemantik wird befolgt, um zu bestimmen, welche Daten aus Basistabellen für den Befehl `REFRESH` sichtbar sind oder wann die durch den Befehl `REFRESH` vorgenommenen Änderungen für andere Transaktionen sichtbar gemacht werden, die in Amazon Redshift ausgeführt werden.
+ Für inkrementelle materialisierte Ansichten verwendet `REFRESH MATERIALIZED VIEW` nur die Zeilen der Basistabelle, die bereits festgeschrieben wurden. Wenn der Aktualisierungsvorgang nach einer DML-Anweisung (Data Manipulation Language) in derselben Transaktion ausgeführt wird, sind Änderungen dieser DML-Anweisung nicht sichtbar, um zu aktualisieren. 
+ Für eine vollständige Aktualisierung einer materialisierten Ansicht zeigt `REFRESH MATERIALIZED VIEW` alle Basistabellenzeilen an, die für die Aktualisierungstransaktion sichtbar sind, entsprechend der üblichen Amazon-Redshift-Transaktionssemantik. 
+ Abhängig vom Eingabeargumenttyp unterstützt Amazon Redshift weiterhin die inkrementelle Aktualisierung für materialisierte Ansichten für die folgenden Funktionen mit bestimmten Eingabeargumenttypen: DATE (Zeitstempel), DATE\$1PART (Datum, Uhrzeit, Intervall, Zeitzone), DATE\$1TRUNC (Zeitstempel, Intervall).
+ Die inkrementelle Aktualisierung wird auch für eine materialisierte Ansicht unterstützt, bei der sich die Basistabelle in einem Datashare befindet.
+ Die Aktualisierung von gemeinsam genutzten materialisierten Ansichten aus Remote-Datasharing-Clustern wird nicht für materialisierte Ansichten unterstützt, die Verweise auf andere materialisierte Ansichten, Spectrum-Tabellen, Tabellen enthalten, die in einem anderen Redshift-Cluster definiert sind, oder. UDFs Solche materialisierten Ansichten können vom lokalen (Produzenten-) Cluster aus aktualisiert werden.

Einige Operationen in Amazon Redshift interagieren mit materialisierten Ansichten. Einige dieser Vorgänge erzwingen möglicherweise einen Vorgang vom Typ `REFRESH MATERIALIZED VIEW`, um die materialisierte Ansicht vollständig neu zu berechnen, auch wenn die Abfrage, die die materialisierte Ansicht definiert, nur die SQL-Features verwendet, die sich für eine inkrementelle Aktualisierung eignen. Beispiel:
+ Im Hintergrund ausgeführte Bereinigungsoperationen können blockiert werden, wenn materialisierte Ansichten nicht aktualisiert werden. Nach einem intern definierten Zeitraum kann eine Bereinigungsoperation ausgeführt werden. Bei dieser Bereinigungsoperation werden alle abhängigen materialisierten Ansichten bei der nächsten Aktualisierung zur Neuberechnung markiert (auch wenn sie inkrementell sind). Weitere Informationen zu VACUUM finden Sie unter [VACUUM](r_VACUUM_command.md). Weitere Hinweise zu Ereignissen und Statusänderungen finden Sie unter [STL\$1MV\$1STATE](r_STL_MV_STATE.md).
+ Einige vom Benutzer initiierte Operationen für Basistabellen zwingen eine materialisierte Ansicht dazu, bei der nächsten Ausführung einer REFRESH-Operation vollständig neu berechnet zu werden. Beispiele für solche Operationen sind eine manuell aufgerufene VACUUM-Operation, eine klassische Größenänderung, eine ALTER DISTKEY-Operation, eine ALTER SORTKEY-Operation und eine Operation zum Kürzen. Automatische Operationen können in einigen Fällen auch dazu führen, dass eine materialisierte Ansicht bei der nächsten Ausführung einer REFRESH-Operation vollständig neu berechnet wird. Beispielsweise kann ein die Löschoperation auto-vacuum zu einer vollständigen Neuberechnung führen. Weitere Hinweise zu Ereignissen und Statusänderungen finden Sie unter [STL\$1MV\$1STATE](r_STL_MV_STATE.md). 

## Kaskadierende Aktualisierung
<a name="mv_REFRESH_MATERIALIZED_VIEW_cascading"></a>

Die Option CASCADE aktualisiert die angegebene materialisierte Ansicht und all ihre abhängigen materialisierten Ansichten in der Reihenfolge ihrer Abhängigkeit: Die Basisansicht steht REFRESHed vor der MVs obersten Ansicht ( MVs topologische Reihenfolge). Auf diese Weise können Sie einen verschachtelten Satz von materialisierten Ansichten mit einem einzigen Befehl aktualisieren.

Die Option RESTRICT (die Standardoption, wenn weder RESTRICT noch CASCADE angegeben sind) aktualisiert nur die angegebene materialisierte Ansicht.

Bei Verwendung der Option CASCADE gelten die folgenden Regeln:
+ Nur der Besitzer der materialisierten Ansicht oder ein Superuser können den Befehl `REFRESH MATERIALIZED VIEW ... CASCADE` ausführen.
+ Wenn eine der materialisierten Ansichten in der Kaskade nicht aktualisiert werden kann, wird die gesamte CASCADE-Operation beendet.

Die Funktion zur kaskadierenden Aktualisierung wird nur für materialisierte Ansichten unterstützt, die auf lokalen Ansichten MVs geschachtelt sind, und für gestreamte materialisierte Ansichten. Materialisierte Ansichten mit anderen Quelltypen, wie Spectrum oder Data Sharing, werden im Kaskadenmodus nicht unterstützt. CASCADE führt die Aktualisierung in einer einzigen Transaktion für alle verschachtelten Objekte aus. MVs

## Inkrementelle Aktualisierung für materialisierte Ansichten in einem Datashare
<a name="mv_REFRESH_MATERIALIZED_VIEW_datashare"></a>

 Amazon Redshift unterstützt die automatische und inkrementelle Aktualisierung für materialisierte Ansichten in einem Consumer-Datashare, wenn die Basistabellen geteilt werden. Die inkrementelle Aktualisierung ist ein Vorgang, bei dem Amazon Redshift Änderungen in der Basistabelle oder in Tabellen identifiziert, die nach der vorherigen Aktualisierung ausgeführt wurden, und nur die entsprechenden Datensätze in der materialisierten Ansicht aktualisiert. Weitere Informationen zu diesem Verhalten finden Sie unter [CREATE MATERIALIZED VIEW](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html#mv_CREATE_MARTERIALIZED_VIEW_datashare). 

## Einschränkungen für die inkrementelle Aktualisierung
<a name="mv_REFRESH_MARTERIALIZED_VIEW_limitations"></a>

Amazon Redshift unterstützt derzeit keine inkrementelle Aktualisierung für materialisierte Ansichten, die mit einer Abfrage mit einem der folgenden SQL-Elemente definiert sind:
+ OUTER JOIN (RIGHT, LEFT oder FULL).
+ Set-Operationen: UNION, INTERSECT, EXCEPT, MINUS.
+ UNION ALL, wenn sie in einer Unterabfrage enthalten ist und eine Aggregatfunktion oder die Klausel GROUP BY in der Abfrage vorhanden ist oder wenn die materialisierte Zielansicht einen Sortierschlüssel enthält.
+ Aggregatfunktionen: MEDIAN, PERCENTILE\$1CONT, LISTAGG, STDDEV\$1SAMP, STDDEV\$1POP, APPROXIMATE COUNT, APPROXIMATE PERCENTILE sowie bitweise Aggregatfunktionen.
**Anmerkung**  
Die Aggregatfunktionen COUNT, SUM, MIN, MAX und AVG werden unterstützt.
+ DISTINCT-Aggregatfunktionen, wie DISTINCT COUNT, DISTINCT SUM usw.
+ Fensterfunktionen.
+ Eine Abfrage, die temporäre Tabellen für die Abfrageoptimierung verwendet, z. B. das Optimieren allgemeiner Unterausdrücke.
+ Unterabfragen
+ Externe Tabellen, die in der Abfrage, die die materialisierte Ansicht definiert, auf die folgenden Formate verweisen. 
  +  Delta Lake 
  +  Hudi 

  Die inkrementelle Aktualisierung wird für materialisierte Ansichten unterstützt, die mit anderen als den oben aufgeführten Formaten definiert wurden. Weitere Informationen finden Sie unter [Materialisierte Ansichten für externe Data-Lake-Tabellen in Amazon Redshift SpectrumMaterialisierte Ansichten für externe Data-Lake-Tabellen](materialized-view-external-table.md). 
+ Veränderbare Funktionen, wie Datum-Uhrzeit-Funktionen, RANDOM und nicht-STABLE benutzerdefinierte Funktionen.
+ Einschränkungen in Bezug auf die inkrementelle Aktualisierung von Null-ETL-Integrationen finden Sie unter [Überlegungen zur Verwendung von Null-ETL-Integrationen mit Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl.reqs-lims.html).
+ Zugreifen auf Tabellen aus mehr als einer Datenbank.

Weitere Informationen zu Einschränkungen bei materialisierten Ansichten, einschließlich der Auswirkungen von Hintergrundoperationen wie VACUUM auf Aktualisierungsvorgänge in materialisierten Ansichten, finden Sie unter [Nutzungshinweise](#mv_REFRESH_MARTERIALIZED_VIEW_usage).

## Beispiele
<a name="mv_REFRESH_MARTERIALIZED_VIEW_examples"></a>

Das folgende Beispiel aktualisiert die materialisierte `tickets_mv`-Ansicht.

```
REFRESH MATERIALIZED VIEW tickets_mv;
```

Im folgenden Beispiel werden die materialisierte Ansicht `products_mv` und alle materialisierten Ansichten, die von ihr abhängig sind, aktualisiert:

```
REFRESH MATERIALIZED VIEW products_mv CASCADE; 
```

# RESET
<a name="r_RESET"></a>

Setzt den Wert eines Konfigurationsparameter auf den Standardwert zurück.

Sie können einen einzelnen angegebenen Parameter oder alle Parameter auf einmal zurücksetzen. Um einen Parameter auf einen spezifischen Wert festzulegen, verwenden Sie den Befehl [SET](r_SET.md). Um den aktuellen Wert eines Parameters anzuzeigen, verwenden Sie den Befehl [ZEIGEN](r_SHOW.md).

## Syntax
<a name="r_RESET-synopsis"></a>

```
RESET { parameter_name | ALL }
```

Die folgende Anweisung legt den Wert einer Sitzungskontextvariablen auf NULL fest.

```
RESET { variable_name | ALL }
```

## Parameters
<a name="r_RESET-parameters"></a>

 *parameter\$1name*   
Der Name des Parameters, der zurückgesetzt werden soll. Weitere Informationen zu Parametern finden Sie unter [Modifizieren der Serverkonfiguration](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings).

ALL   
Setzt alle Laufzeitparameter zurück, einschließlich aller Sitzungskontextvariablen.

*Variable*   
Der Name der Variablen, die zurückgesetzt werden soll. Wenn der Wert für RESET eine Sitzungskontextvariable ist, setzt Amazon Redshift ihn auf NULL.

## Beispiele
<a name="r_RESET-examples"></a>

Im folgenden Beispiel wird der Parameter `query_group` auf den Standardwert zurückgesetzt: 

```
reset query_group;
```

Im folgenden Beispiel werden alle Laufzeitparameter auf die Standardwerte zurückgesetzt. 

```
reset all;
```

Im folgenden Beispiel wird die Kontextvariable zurückgesetzt.

```
RESET app_context.user_id;
```

# REVOKE
<a name="r_REVOKE"></a>

Entfernt Zugriffsberechtigungen wie beispielsweise die Berechtigungen zum Erstellen, Entfernen oder Aktualisieren von Tabellen von einem Benutzer oder einer Rolle.

Sie können nur mit der ON SCHEMA-Syntax GRANT- oder REVOKE USAGE-Berechtigungen auf einem externen Schema für Datenbankbenutzern und Rollen einrichten. Wenn Sie ON EXTERNAL SCHEMA with verwenden AWS Lake Formation, können Sie nur die Berechtigungen GRANT und REVOKE für eine AWS Identity and Access Management (IAM-) Rolle gewähren. Eine Liste der Berechtigungen finden Sie in der Syntax.

Für gespeicherte Prozeduren werden die Berechtigungen USAGE ON LANGUAGE `plpgsql` standardmäßig PUBLIC gewährt. Die Berechtigung EXECUTE ON PROCEDURE wird standardmäßig nur dem Besitzer und Superusern gewährt.

Geben Sie im Befehl REVOKE die Berechtigungen an, die Sie entfernen möchten. Verwenden Sie den Befehl [GRANT](r_GRANT.md), um Berechtigungen zu erteilen. 

## Syntax
<a name="r_REVOKE-synopsis"></a>

```
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
EXECUTE
    ON FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { EXECUTE } [,...] | ALL [ PRIVILEGES ] }
    ON PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
USAGE
    ON LANGUAGE language_name [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [GRANT OPTION FOR] 
{ { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]    

REVOKE [GRANT OPTION FOR]
{ { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE template_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Widerrufen von Berechtigungen auf Spaltenebene für Tabellen
<a name="revoke-column-level"></a>

Im Folgenden finden Sie die Syntax für Berechtigungen auf Spaltenebene für Amazon-Redshift-Tabellen und -Ansichten. 

```
REVOKE { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
     [ RESTRICT ]
```

### Widerrufen von Berechtigungen ASSUMEROLE
<a name="revoke-assumerole-permissions"></a>

Im Folgenden finden Sie die Syntax zum Widerrufen der Berechtigung ASSUMEROLE von Benutzern und Gruppen mit einer spezifizierten Rolle. 

```
REVOKE ASSUMEROLE
    ON { 'iam_role' [, ...]  | default | ALL }
    FROM { user_name | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL }
```

### Widerrufen von Berechtigungen für Redshift Spectrum für Lake Formation
<a name="revoke-spectrum-integration-with-lf-permissions"></a>

Im Folgenden finden Sie die Syntax für die Integration von Redshift Spectrum in Lake Formation.

```
REVOKE [ GRANT OPTION FOR ]
{ SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    FROM { IAM_ROLE iam_role } [, ...]

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    FROM { { IAM_ROLE iam_role } [, ...] | PUBLIC }

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    FROM { IAM_ROLE iam_role } [, ...]
```

### Widerrufen von Datashare-Berechtigungen
<a name="revoke-datashare-permissions"></a>

**Produzentenseitige Datashare-Berechtigungen**  
Im Folgenden finden Sie die Syntax zur Verwendung von REVOKE zum Entfernen von ALTER- oder SHARE-Berechtigungen von einem Benutzer oder einer Rolle. Der Benutzer, dessen Berechtigungen widerrufen wurden, kann das Datashare nicht mehr ändern oder einem Konsumenten dessen Nutzung gewähren. 

```
REVOKE { ALTER | SHARE } ON DATASHARE datashare_name
 FROM { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

Im Folgenden finden Sie die Syntax zur Verwendung von REVOKE, um einem Konsumenten den Zugriff auf ein Datashare zu verweigern.

```
REVOKE USAGE
 ON DATASHARE datashare_name
 FROM NAMESPACE 'namespaceGUID' [, ...] | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ] [, ...]
```

Im Folgenden finden Sie ein Beispiel dafür, wie Sie die Berechtigung eines Lake-Formation-Kontos zur Nutzung eines Datashares widerrufen können.

```
REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012' VIA DATA CATALOG;
```

**Konsumentenseitige Datashare-Berechtigungen**  
Im Folgenden finden Sie die REVOKE-Syntax für Datashare-Nutzungsberechtigungen für eine bestimmte Datenbank oder ein bestimmtes Schema, die auf einem Datashare erstellt wurden. Durch den Widerruf der Nutzungsberechtigung für eine Datenbank, die mit der WITH PERMISSIONS-Klausel erstellt wurde, werden keine zusätzlichen Berechtigungen, die Sie einem Benutzer oder einer Rolle erteilt haben, entzogen, einschließlich Berechtigungen auf Objektebene, die für zugrunde liegende Objekte gewährt wurden. Wenn Sie diesem Benutzer oder dieser Rolle erneut die Nutzungsberechtigung gewähren, behält dieser Benutzer oder diese Rolle alle zusätzlichen Berechtigungen bei, die er/sie hatte, bevor Sie die Nutzung widerrufen haben.

```
REVOKE USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
 FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Widerrufen von bereichsbezogenen Berechtigungen
<a name="revoke-scoped-permissions"></a>

Mit bereichsbezogenen Berechtigungen können Sie einem Benutzer oder einer Rolle Berechtigungen für alle Objekte eines Typs innerhalb einer Datenbank oder eines Schemas gewähren. Benutzer und Rollen mit bereichsbezogenen Berechtigungen verfügen über die angegebenen Berechtigungen für alle aktuellen und künftigen Objekte innerhalb der Datenbank oder des Schemas.

Den Umfang der bereichsbezogenen Berechtigungen auf Datenbankebene finden Sie unter [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md). Den Umfang der bereichsbezogenen Berechtigungen auf Schemaebene finden Sie unter [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md).

Weitere Informationen zu bereichsbezogenen Berechtigungen finden Sie unter [Bereichsbeschränkte Berechtigungen](t_scoped-permissions.md).

Im Folgenden sehen Sie die Syntax zum Widerrufen bereichsbezogener Berechtigungen für Benutzer oder Rollen. 

```
REVOKE [ GRANT OPTION ] 
{ CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{ SCHEMA schema_name [ DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] USAGE
FOR LANGUAGES IN
DATABASE db_name
FROM { username | ROLE role_name } [, ...]  

REVOKE [GRANT_OPTION] 
{ { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
FROM { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]      

REVOKE [ GRANT OPTION ]
{ {ALTER | DROP  | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]
```

Beachten Sie, dass bei bereichsbezogenen Berechtigungen nicht zwischen Berechtigungen für Funktionen und Prozeduren unterschieden wird. Die folgende Anweisung widerruft beispielsweise `EXECUTE`-Berechtigungen für Funktionen und Prozeduren aus `bob` im Schema `Sales_schema`. 

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

### Widerrufen von Machine-Learning-Berechtigungen
<a name="revoke-model-permissions"></a>

Im Folgenden finden Sie die Syntax für Berechtigungen für Machine-Learning-Modelle in Amazon Redshift.

```
REVOKE [ GRANT OPTION FOR ]
    CREATE MODEL FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]
```

### Widerrufen von Rollenberechtigungen
<a name="revoke-roles"></a>

Im Folgenden finden Sie die Syntax zum Widerrufen von Rollenberechtigungen in Amazon Redshift.

```
REVOKE [ ADMIN OPTION FOR ] { ROLE role_name } [, ...] FROM { user_name } [, ...]
```

```
REVOKE { ROLE role_name } [, ...] FROM { ROLE role_name } [, ...]
```

Im Folgenden finden Sie die Syntax zum Widerrufen von Systemberechtigungen für Rollen in Amazon Redshift.

```
REVOKE
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG |
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
FROM { ROLE role_name } [, ...]
```

### Widerrufen von Berechtigungen für Sicherheitsrichtlinien
<a name="revoke-role-level"></a>

Im Folgenden finden Sie die Syntax für den Widerruf von Berechtigungen, um die Sicherheitsrichtlinienfilter einer Abfrage im EXPLAIN-Plan zu erklären. Mögliche Sicherheitsrichtlinien sind Sicherheitsrichtlinien auf Zeilenebene und dynamische Datenmaskierungsrichtlinien.

```
REVOKE EXPLAIN { RLS | MASKING } FROM ROLE rolename 
```

Im Folgenden finden Sie die Syntax für den Widerruf von Berechtigungen zum Umgehen von Sicherheitsrichtlinien auf Zeilenebene für eine Abfrage. 

```
REVOKE IGNORE RLS FROM ROLE rolename 
```

Im Folgenden finden Sie die Syntax für den Widerruf von Berechtigungen aus der angegebenen Sicherheitsrichtlinie auf Zeilenebene. Mögliche Sicherheitsrichtlinien sind Sicherheitsrichtlinien auf Zeilenebene und dynamische Datenmaskierungsrichtlinien.

```
REVOKE SELECT ON [ TABLE ] table_name [, ...]
            FROM { RLS | MASKING } POLICY policy_name [, ...]
```

## Parameters
<a name="r_REVOKE-parameters"></a>

GRANT OPTION FOR   
Widerruft nur die Option, anderen Benutzern eine spezifische Berechtigung zu gewähren, und nicht die Berechtigung selbst. Sie können GRANT OPTION nicht für eine Gruppe oder PUBLIC widerrufen.

SELECT   
Widerruft die Berechtigung, Daten aus einer Tabelle oder Ansicht mittels einer SELECT-Anweisung auszuwählen.

INSERT   
Widerruft die Berechtigung, Daten in eine Tabelle mittels einer INSERT- oder COPY-Anweisung zu laden. 

UPDATE   
Widerruft die Berechtigung, eine Tabellenspalte mittels einer UPDATE-Anweisung zu aktualisieren. 

DELETE   
Widerruft die Berechtigung, eine Datenzeile aus einer Tabelle zu löschen.

REFERENCES   
Widerruft die Berechtigung, eine Fremdschlüsseleinschränkung zu erstellen. Sie sollten diese Berechtigung sowohl für die referenzierte als auch für die referenzierende Tabelle widerrufen.

TRUNCATE  
Widerruft die Berechtigung zum Kürzen einer Tabelle. Ohne diese Berechtigung kann nur der Eigentümer einer Tabelle oder ein Superuser eine Tabelle kürzen. Weitere Informationen zur Verwendung des TRUNCATE-Befehls finden Sie unter [TRUNCATE](r_TRUNCATE.md).

ALL [ PRIVILEGES ]   
Widerruft für den angegebenen Benutzer oder die angegebenen Benutzergruppe alle verfügbaren Berechtigungen auf einmal. Das Schlüsselwort PRIVILEGES ist optional.  
 Amazon Redshift unterstützt die Berechtigungen RULE und TRIGGER nicht. Weitere Informationen finden Sie unter [Nicht unterstützte PostgreSQL-Funktionen](c_unsupported-postgresql-features.md). 

ALTER  
Widerruft die folgenden Berechtigungen für den Benutzer oder die Benutzergruppe, abhängig vom Datenbankobjekt:   
+ Bei Tabellen widerruft ALTER die Erlaubnis, eine Tabelle oder Ansicht zu ändern. Weitere Informationen finden Sie unter [ALTER TABLE](r_ALTER_TABLE.md).
+ Bei Datenbanken widerruft ALTER die Erlaubnis, eine Datenbank zu ändern. Weitere Informationen finden Sie unter [ALTER DATABASE](r_ALTER_DATABASE.md).
+ Bei Schemata widerruft ALTER die Erlaubnis zum Ändern eines Schemas. Weitere Informationen finden Sie unter [ALTER SCHEMA](r_ALTER_SCHEMA.md).
+ ALTER widerruft für externe Tabellen die Berechtigung zum Verändern einer Tabelle in einem AWS Glue Data Catalog , der für Lake Formation aktiviert ist. Diese Berechtigung gilt nur bei Verwendung von Lake Formation.

DROP  
Widerruft die folgenden Berechtigungen für den Benutzer oder die Rolle, abhängig vom Datenbankobjekt:  
+  Bei Tabellen widerruft DROP die Berechtigung, eine Tabelle oder Ansicht zu entfernen. Weitere Informationen finden Sie unter [DROP TABLE](r_DROP_TABLE.md). 
+  Bei Datenbanken widerruft DROP die Berechtigung, eine Datenbank zu entfernen. Weitere Informationen finden Sie unter [DROP DATABASE](r_DROP_DATABASE.md). 
+  Bei Schemata widerruft DROP die Berechtigung, ein Schema zu entfernen. Weitere Informationen finden Sie unter [DROP SCHEMA](r_DROP_SCHEMA.md). 

ASSUMEROLE  <a name="assumerole"></a>
Widerruft die Berechtigung zum Ausführen der Befehle COPY, UNLOAD, EXTERNAL FUNCTION und CREATE MODEL für Benutzer, Rollen oder Gruppen mit einer angegebenen Rolle. 

ON [ TABLE ] *table\$1name*   
Widerruft die angegebenen Rechte für eine Tabelle oder Ansicht. Das Schlüsselwort TABLE ist optional.

ON ALL TABLES IN SCHEMA *schema\$1name*   
Widerruft die angegebenen Rechte für alle Tabellen im referenzierten Schema.

( *column\$1name* [,...] ) ON TABLE *table\$1name*   <a name="revoke-column-level-privileges"></a>
Widerruft die angegebenen Berechtigungen von Benutzern, Gruppen oder PUBLIC für die angegebenen Spalten der Amazon-Redshift-Tabelle oder -Ansicht.

( *column\$1list* ) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table-column"></a>
Widerruft die angegebenen Berechtigungen einer IAM-Rolle für die angegebenen Spalten der Lake Formation-Tabelle im referenzierten Schema.

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table"></a>
Widerruft die angegebenen Berechtigungen einer IAM-Rolle für die angegebenen Lake Formation-Tabellen im referenzierten Schema.

ON EXTERNAL SCHEMA *schema\$1name*   <a name="revoke-external-schema"></a>
Widerruft die angegebenen Berechtigungen einer IAM-Rolle für das referenzierte Schema.

FROM IAM\$1ROLE *iam\$1role*   <a name="revoke-from-iam-role"></a>
Gibt die IAM-Rolle an, die die Berechtigungen verliert.

ROLE *role\$1name*   
Widerruft die Berechtigungen für die angegebene Rolle.

GROUP *group\$1name*   
Widerruft die Berechtigungen für den angegebenen Benutzer oder die angegebene Benutzergruppe.

PUBLIC   
Widerruft die angegebenen Berechtigungen für alle Benutzer. PUBLIC stellt eine Gruppe dar, die stets alle Benutzer enthält. Die Berechtigungen eines einzelnen Benutzers sind die Summe der Berechtigungen, die PUBLIC gewährt werden, der Berechtigungen, die Gruppen gewährt werden, zu denen der Benutzer gehört, und der Berechtigungen, die dem einzelnen Benutzer gewährt werden.  
Indem Sie die Berechtigung PUBLIC für eine externe Lake-Formation-Tabelle widerrufen, widerrufen Sie die Berechtigung für die Lake-Formation-Gruppe *everyone*.

CREATE   
Widerruft die folgenden Berechtigungen für den Benutzer oder die Benutzergruppe, abhängig vom Datenbankobjekt:  
+ Im Fall von Datenbanken verhindert die Verwendung der CREATE-Klausel für REVOKE, dass Benutzer innerhalb der Datenbank Schemata erstellen.
+ Im Fall von Schemata verhindert die Verwendung der CREATE-Klausel für REVOKE, dass Benutzer innerhalb eines Schemas Objekte erstellen. Um ein Objekt umzubenennen, muss der Benutzer über die Berechtigung CREATE verfügen und Eigentümer des Objekts sein, das umbenannt werden soll. 
Standardmäßig besitzen alle Benutzer CREATE- und USAGE-Berechtigungen für das Schema PUBLIC einer Datenbank.

TEMPORARY \$1 TEMP   
Widerruft die Berechtigung, in der angegebenen Datenbank temporäre Tabellen zu erstellen.  
Standardmäßig wird Benutzern aufgrund ihrer automatischen Mitgliedschaft in der Gruppe PUBLIC die Berechtigung gewährt, temporäre Tabellen zu erstellen. Um die Berechtigung zum Erstellen temporärer Tabellen für alle Benutzer zu entfernen, widerrufen Sie die Berechtigung TEMP für die Gruppe PUBLIC und gewähren Sie dann explizit die Berechtigung zum Erstellen temporärer Tabellen für spezifische Benutzer oder Benutzergruppen.

ON DATABASE *db\$1name*   
Widerruft die Berechtigungen für die angegebene Datenbank.

USAGE   
Widerruft Berechtigungen USAGE für Objekte innerhalb eines bestimmten Schemas, wodurch diese Objekte für Benutzer nicht zugänglich sind. Spezifische Aktionen für diese Objekte müssen getrennt widerrufen werden (z. B. die Berechtigung EXECUTE für Funktionen).  
Standardmäßig besitzen alle Benutzer CREATE- und USAGE-Berechtigungen für das Schema PUBLIC einer Datenbank.

ON SCHEMA *schema\$1name*   
Widerruft die Berechtigungen für das angegebene Schema. Sie können Schemaberechtigungen verwenden, um die Erstellung von Tabellen zu steuern. Die Berechtigung CREATE für eine Datenbank steuert nur die Erstellung von Schemata.

RESTRICT   
Widerruft nur die Berechtigungen, die der Benutzer direkt erteilt hat. Dieses Verhalten ist das Standardverhalten.

EXECUTE ON PROCEDURE *procedure\$1name*   
Widerruft die Berechtigung EXECUTE für eine spezifische gespeicherte Prozedur. Da die Namen gespeicherter Prozeduren überladen sein können, müssen Sie die Argumentliste für die Prozedur angeben. Weitere Informationen finden Sie unter [Benennen von gespeicherten Prozeduren](stored-procedure-naming.md).

EXECUTE ON ALL PROCEDURES IN SCHEMA *procedure\$1name*   
Widerruft die angegebenen Berechtigungen für alle Prozeduren im referenzierten Schema.

USAGE ON LANGUAGE *language\$1name*   
Widerruft die Berechtigung USAGE für eine Sprache. Verwenden `plpythonu` Sie für benutzerdefinierte Python-Funktionen (UDFs). Verwenden `sql` Sie für SQL UDFs. Für gespeicherte Prozeduren verwenden Sie `plpgsql`.   
Zum Erstellen einer UDF müssen Sie über die Berechtigung für die Sprachennutzung für SQL oder `plpythonu` (Python) verfügen. USAGE ON LANGUAGE SQL wird standardmäßig PUBLIC gewährt. USAGE ON LANGUAGE PLPYTHONU müssen Sie jedoch spezifischen Benutzern oder Gruppen explizit gewähren.   
Um die Nutzung für SQL zu widerrufen, widerrufen Sie zuerst die Nutzung von PUBLIC. Erteilen Sie dann nur bestimmten Benutzern oder Gruppen, die SQL erstellen dürfen, Zugriff auf SQL UDFs. Im folgenden Beispiel wird die Nutzung in SQL von PUBLIC widerrufen. Anschließend wird die Nutzung der Benutzergruppe erlaubt `udf_devs`.   

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```
Weitere Informationen finden Sie unter [UDF-Sicherheit und -Berechtigungen](udf-security-and-privileges.md).   
Um die Nutzung für gespeicherte Prozeduren zu widerrufen, widerrufen Sie zuerst die Nutzung von PUBLIC. Erlauben Sie dann die Nutzung von `plpgsql` nur spezifischen Benutzern oder Gruppen, die auch gespeicherte Prozeduren erstellen dürfen. Weitere Informationen finden Sie unter [Sicherheit und Berechtigungen für gespeicherte Prozeduren](stored-procedure-security-and-privileges.md). 

ON COPY JOB *job\$1name*  <a name="on-copy-job-revoke"></a>
Widerruft die angegebenen Berechtigungen für einen Kopierjob.

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]  <a name="revoke-for"></a>
Gibt den SQL-Befehl an, für den die Berechtigung widerrufen wird. Sie können ALL angeben, um die Berechtigung für die Anweisungen COPY, UNLOAD, EXTERNAL FUNCTION und CREATE MODEL zu widerrufen. Diese Klausel gilt nur für das Widerrufen der Berechtigung ASSUMEROLE.

ALTER  
Widerruft die Berechtigung ALTER für Benutzer oder Benutzergruppen, die es ihnen ermöglicht, ein Datashare zu ändern, das ihnen nicht gehört. Diese Berechtigung ist erforderlich, um Objekte zu einem Datashare hinzuzufügen oder daraus zu entfernen oder um die Eigenschaft PUBLICACCESSIBLE festzulegen. Weitere Informationen finden Sie unter [ALTER DATASHARE](r_ALTER_DATASHARE.md).

SHARE  
Widerruft Berechtigungen von Benutzern und Benutzergruppen zum Hinzufügen von Konsumenten zu einem Datashare. Das Widerrufen dieser Berechtigung ist erforderlich, um den Zugriff des jeweiligen Konsumenten auf das Datashare von seinen Clustern aus zu unterbinden. 

ON DATASHARE *datashare\$1name *  
Erteilt die angegebenen Berechtigungen für das referenzierte Datashare.

FROM Benutzername  
Gibt den Benutzer an, der die Berechtigungen verliert.

FROM GROUP *group\$1name*  
Gibt die Benutzergruppe an, die die Berechtigungen verliert.

WITH GRANT OPTION  
Gibt an, dass der Benutzer, der die Berechtigungen verliert, dieselben Berechtigungen von anderen Benutzern widerrufen kann. Sie können WITH GRANT OPTION nicht für eine Gruppe oder PUBLIC widerrufen. 

USAGE  
Wenn USAGE einem Konsumenten-Konto oder einem Namespace innerhalb desselben Kontos entzogen wird, kann dieses Konsumenten-Konto oder der Namespace innerhalb des Kontos nicht mehr schreibgeschützt auf das Datashare und die Objekte auf dem Datashare zugreifen.   
Wenn Sie die Berechtigung USAGE widerrufen, wird Konsumenten der Zugriff auf ein Datashare entzogen. 

FROM NAMESPACE 'clusternamespace GUID'   
Gibt den Namespace in demselben Konto an, in dem Konsumenten die Berechtigungen für das Datashare verlieren. Namespaces verwenden einen 128 Bit großen alphanumerischen globalen eindeutigen Bezeichner (Globally Unique Identifier, GUID).

FROM ACCOUNT 'Kontonummer' [ VIA DATA CATALOG ]  
Gibt die Kontonummer eines anderen Kontos an, in dem Konsumenten die Berechtigungen für das Datashare verlieren. Die Angabe „VIA DATA CATALOG“ bedeutet, dass Sie die Berechtigung eines Lake-Formation-Kontos zur Nutzung des Datashares widerrufen. Wenn Sie die Kontonummer weglassen, bedeutet das, dass Sie die Berechtigung des Kontos widerrufen, dem der Cluster gehört.

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="revoke-datashare"></a>
Widerruft die angegebenen Nutzungsberechtigungen für die angegebene Datenbank, die im angegebenen Datashare erstellt wurde. 

ON SCHEMA* shared\$1schema*   <a name="revoke-datashare"></a>
Widerruft die angegebenen Berechtigungen für das angegebene Schema, das im angegebenen Datashare erstellt wurde.

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
Gibt die Datenbankobjekte an, für die Berechtigungen widerrufen werden sollen. Die Parameter nach IN definieren den Bereich der widerrufenen Berechtigung.

CREATE MODEL  
Widerruft die Berechtigung CREATE MODEL, mit der sich Machine-Learning-Modelle in der angegebenen Datenbank erstellen lassen.

ON MODEL *model\$1name*  
Widerruft die Berechtigung EXECUTE für ein spezifisches Modell. 

ACCESS CATALOG  
Widerruft die Berechtigung, relevante Metadaten von Objekten anzuzeigen, auf die die Rolle Zugriff hat.

[ ADMIN OPTION FOR ] \$1 role \$1 [, ...]  
Die Rolle, die Sie für einen bestimmten Benutzer widerrufen, der über die WITH ADMIN-OPTION verfügt.

FROM \$1 role \$1 [, ...]  
Die Rolle, für die Sie die angegebene Rolle widerrufen.

EXPLAIN \$1 RLS \$1 MASKING \$1 FROM ROLE *rolename*  
Widerruft die Berechtigung, die Sicherheitsrichtlinienfilter einer Abfrage im EXPLAIN-Plan aus einer Rolle zu erklären. RLS widerruft die Berechtigung, Sicherheitsrichtlinienfilter auf Zeilenebene zu erklären. MASKING widerruft die Berechtigung, Filter für die Richtlinie für die dynamische Datenmaskierung zu erklären.

IGNORE RLS FROM ROLE *rolename*   
Widerruft die Berechtigung, Sicherheitsrichtlinien auf Zeilenebene für eine Abfrage aus einer Rolle zu umgehen.

FROM \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
Gibt die Sicherheitsrichtlinie an, die die Berechtigungen verliert. TO RLS POLICY gibt eine Sicherheitsrichtlinie auf Zeilenebene an. TO MASKING POLICY gibt eine Richtlinie für die dynamische Datenmaskierung an.

## Nutzungshinweise
<a name="r_REVOKE-usage-notes-link"></a>

Weitere Informationen zu den Nutzungshinweisen für REVOKE finden Sie unter [Nutzungshinweise](r_REVOKE-usage-notes.md).

## Beispiele
<a name="r_REVOKE-examples-link"></a>

Beispiele für die Verwendung von REVOKE finden Sie unter [Beispiele](r_REVOKE-examples.md).

# Nutzungshinweise
<a name="r_REVOKE-usage-notes"></a>

Um Rechte für ein Objekt zu widerrufen, müssen Sie mindestens eines der folgenden Kriterien erfüllen:
+ Sie müssen der Besitzer des Objekts sein.
+ Sie müssen ein Superuser sein.
+ Sie müssen das Recht besitzen, Rechte für dieses Objekt und Recht zu gewähren.

  Der folgende Befehl gewährt beispielsweise dem Benutzer HR die erforderlichen Rechte, um SELECT-Befehle für die Mitarbeitertabelle ausführen, anderen Benutzern dieselben Recht gewähren und diese Rechte für andere Benutzer widerrufen zu können.

  ```
  grant select on table employees to HR with grant option;
  ```

  HR kann keine Rechte für andere Operationen als SELECT oder für andere Tabellen als die Mitarbeitertabelle widerrufen. 

Superuser können auf alle Objekte zugreifen, unabhängig von GRANT- und REVOKE-Befehlen, mit denen Objektrechte festgelegt werden.

PUBLIC stellt eine Gruppe dar, die stets alle Benutzer enthält. Standardmäßig besitzen alle Mitglieder von PUBLIC CREATE- und USAGE-Berechtigungen für das Schema PUBLIC. Zum Einschränken sämtlicher Benutzerberechtigungen im PUBLIC-Schema müssen Sie zuerst alle Berechtigungen von PUBLIC im PUBLIC-Schema widerrufen und die Berechtigungen dann spezifischen Benutzern oder Gruppen erteilen. Im folgenden Beispiel werden Rechte für die Tabellenerstellung im Schema PUBLIC gesteuert.

```
revoke create on schema public from public;
```

Um Berechtigungen für eine Lake Formation-Tabelle zu widerrufen, muss die mit dem externen Schema der Tabelle verknüpfte IAM-Rolle über die Berechtigung verfügen, Rechte für die externe Tabelle zu widerrufen. Im folgenden Beispiel wird ein externes Schema mit einer zugeordneten IAM-Rolle erstellt `myGrantor`. Die IAM-Rolle `myGrantor` verfügt über die Berechtigung, anderen Berechtigungen zu widerrufen. Der Befehl REVOKE nutzt die Berechtigung der IAM-Rolle `myGrantor`, die dem externen Schema zugeordnet ist, um Berechtigungen der IAM-Rolle `myGrantee` zu widerrufen.

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
revoke select
on external table mySchema.mytable
from iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

**Anmerkung**  
Wenn die IAM-Rolle auch über die `ALL` Berechtigung in einer verfügt AWS Glue Data Catalog , die für Lake Formation aktiviert ist, wird die `ALL` Berechtigung nicht widerrufen. Nur die Berechtigung `SELECT` wird widerrufen. Sie können die Lake Formation Berechtigungen in der Lake Formation-Konsole anzeigen.

## Hinweise zum Widerrufen der Berechtigung ASSUMEROLE
<a name="r_REVOKE-usage-notes-assumerole"></a>

Die folgenden Hinweise gelten für den Entzug der ASSUMEROLE-Berechtigung in Amazon Redshift. 

Nur ein Datenbank-Superuser kann die Berechtigung ASSUMEROLE für Benutzer und Gruppen entziehen. Ein Superuser hat immer die Berechtigung ASSUMEROLE. 

Um die Verwendung der ASSUMEROLE-Berechtigung für Benutzer und Gruppen zu aktivieren, führt ein Superuser die folgende Anweisung einmalig auf dem Cluster aus. Bevor die ASSUMEROLE-Berechtigung an Benutzer und Gruppen vergeben wird, muss ein Superuser die folgende Anweisung einmalig auf dem Cluster ausführen. 

```
revoke assumerole on all from public for all;
```

## Hinweise zum Widerrufen von Machine-Learning-Berechtigungen
<a name="r_REVOKE-usage-notes-create-model"></a>

Sie können Berechtigungen für eine ML-Funktion nicht direkt erteilen oder widerrufen. Eine ML-Funktion gehört zu einem ML-Modell, und die Berechtigungen werden über das Modell gesteuert. Stattdessen können Sie Berechtigungen im Zusammenhang mit dem ML-Modell widerrufen. Das folgende Beispiel zeigt, wie für alle Benutzer im Zusammenhang mit dem Modell `customer_churn` die Ausführungsberechtigung widerrufen wird.

```
REVOKE EXECUTE ON MODEL customer_churn FROM PUBLIC;
```

Sie können auch alle Berechtigungen für einen Benutzer für das ML-Modell `customer_churn` widerrufen.

```
REVOKE ALL on MODEL customer_churn FROM ml_user;
```

Das Erteilen oder Widerrufen der Berechtigung `EXECUTE` für eine ML-Funktion schlägt fehl, wenn das Schema eine ML-Funktion enthält, auch wenn diese ML-Funktion bereits über `GRANT EXECUTE ON MODEL` über die Berechtigung `EXECUTE` verfügt. Wir empfehlen, bei Verwendung des Befehls `CREATE MODEL` ein separates Schema zu verwenden, um die ML-Funktionen in einem separaten Schema zu behalten. Das folgende Beispiel veranschaulicht die Vorgehensweise hierfür.

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# Beispiele
<a name="r_REVOKE-examples"></a>

Im folgenden Beispiel werden INSERT-Rechte für die Tabelle SALES für die Benutzergruppe GUESTS widerrufen. Dieser Befehl verhindert, dass Mitglieder von GUESTS mittels des Befehls INSERT Daten in die Tabelle SALES laden können. 

```
revoke insert on table sales from group guests;
```

Im folgenden Beispiel wird für den Benutzer die SELECT-Berechtigung für alle Tabellen im Schema QA\$1TICKIT widerrufen `fred`.

```
revoke select on all tables in schema qa_tickit from fred;
```

Im folgenden Beispiel wird für den Benutzer das Recht widerrufen, aus einer Ansicht auszuwählen `bobr`.

```
revoke select on table eventview from bobr;
```

Im folgenden Beispiel wird für alle Benutzer das Recht widerrufen, in der TICKIT-Datenbank temporäre Tabellen zu erstellen.

```
revoke temporary on database tickit from public;
```

Im folgenden Beispiel wird dem Benutzer `cust_name` die SELECT-Berechtigung für die Spalten `cust_phone` und `cust_profile` der Tabelle `user1` entzogen. 

```
revoke select(cust_name, cust_phone) on cust_profile from user1;
```

Im folgenden Beispiel wird die SELECT-Berechtigung für die Spalten `cust_name` und `cust_phone` und die UPDATE-Berechtigung für die Spalte `cust_contact_preference` der Tabelle `cust_profile` der Gruppe `sales_group` entzogen. 

```
revoke select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile from group sales_group;
```

Das folgende Beispiel zeigt die Verwendung des Schlüsselworts ALL, um SELECT- und UPDATE-Berechtigungen für drei Spalten der Tabelle `cust_profile` aus der `sales_admin` Gruppe zu entziehen. 

```
revoke ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile from group sales_admin;
```

Im folgenden Beispiel wird dem Benutzer `cust_name` die SELECT-Berechtigung für die Spalte `cust_profile_vw` der Ansicht `user2` entzogen. 

```
revoke select(cust_name) on cust_profile_vw from user2;
```

## Beispiele für den Entzug der USAGE-Berechtigung in Datenbanken, die aus Datashares erstellt wurden
<a name="r_REVOKE-examples-datashare"></a>

Im folgenden Beispiel wird der Zugriff auf das `salesshare`-Datashare vom Namespace `13b8833d-17c6-4f16-8fe4-1a018f5ed00d` aus widerrufen.

```
REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

Im folgenden Beispiel wird die USAGE-Berechtigung auf `sales_db` von `Bob` widerrufen.

```
REVOKE USAGE ON DATABASE sales_db FROM Bob;
```

Im folgenden Beispiel wird die REVOKE USAGE-Berechtigung auf `sales_schema` von `Analyst_role` verwendet.

```
REVOKE USAGE ON SCHEMA sales_schema FROM ROLE Analyst_role;
```

## Beispiele für den Widerruf von bereichsbezogenen Berechtigungen
<a name="r_REVOKE-examples-scoped"></a>

Im folgenden Beispiel wird für die `Sales`-Rolle die Verwendung aller derzeitigen und zukünftigen Schemata in der `Sales_db`-Datenbank widerrufen.

```
REVOKE USAGE FOR SCHEMAS IN DATABASE Sales_db FROM ROLE Sales;
```

Im folgenden Beispiel wird dem Benutzer `alice` die Fähigkeit entzogen, die SELECT-Berechtigung für alle derzeitigen und zukünftigen Tabellen in der `Sales_db`-Datenbank zu erteilen. `alice` behält den Zugriff auf alle Tabellen in `Sales_db` bei.

```
REVOKE GRANT OPTION SELECT FOR TABLES IN DATABASE Sales_db FROM alice;
```

Im folgenden Beispiel wird für den Benutzer `bob` die EXECUTE-Berechtigung für Funktionen im `Sales_schema`-Schema widerrufen.

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

Im folgenden Beispiel werden für die `Sales`-Rolle alle Berechtigungen für alle Tabellen im Schema `ShareSchema` der Datenbank `ShareDb` widerrufen. Bei der Angabe des Schemas können Sie die Datenbank des Schemas auch im zweiteiligen Format `database.schema` angeben.

```
REVOKE ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema FROM ROLE Sales;
```

Das folgende Beispiel zeigt dieselbe Abfrage wie im vorherigen Beispiel. Sie können die Datenbank des Schemas mit dem `DATABASE`-Schlüsselwort angeben, anstatt ein zweiteiliges Format zu verwenden.

```
REVOKE ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb FROM ROLE Sales;
```

## Beispiele für den Entzug der ASSUMEROLE-Berechtigung
<a name="r_REVOKE-examples-assumerole"></a>

Im Folgenden finden Sie Beispiele für den Entzug der ASSUMEROLE-Berechtigung. 

Ein Superuser muss die Verwendung der ASSUMEROLE-Berechtigung für Benutzer und Gruppen aktivieren, indem er die folgende Anweisung einmal auf dem Cluster ausführt: 

```
revoke assumerole on all from public for all;
```

Die folgende Anweisung entzieht dem Benutzer reg\$1user1 die ASSUMEROLE-Berechtigung für alle Rollen für alle Vorgänge. 

```
revoke assumerole on all from reg_user1 for all;
```

## Beispiele für den Entzug der ROLE-Berechtigung
<a name="r_REVOKE-examples-role"></a>

Im folgenden Beispiel wird die Rolle sample\$1role1, die der Rolle sample\$1role2 zugewiesen ist, widerrufen.

```
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO ROLE sample_role2;
REVOKE ROLE sample_role1 FROM ROLE sample_role2;
```

Im folgenden Beispiel werden Systemberechtigungen von user1 widerrufen.

```
GRANT ROLE sys:DBA TO user1;
REVOKE ROLE sys:DBA FROM user1;
```

Im folgenden Beispiel werden sample\$1role1 und sample\$1role2 von user1 widerrufen.

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1, ROLE sample_role2 TO user1;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM user1;
```

Im folgenden Beispiel wird sample\$1role2 mit der ADMIN OPTION von user1 widerrufen.

```
GRANT ROLE sample_role2 TO user1 WITH ADMIN OPTION;
REVOKE ADMIN OPTION FOR ROLE sample_role2 FROM user1;
REVOKE ROLE sample_role2 FROM user1;
```

Im folgenden Beispiel werden sample\$1role1 und sample\$1role2 von sample\$1role5 widerrufen.

```
CREATE ROLE sample_role5;
GRANT ROLE sample_role1, ROLE sample_role2 TO ROLE sample_role5;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM ROLE sample_role5;
```

Im folgenden Beispiel werden die Systemberechtigungen CREATE SCHEMA und DROP SCHEMA für sample\$1role1 widerrufen.

```
GRANT CREATE SCHEMA, DROP SCHEMA TO ROLE sample_role1;
REVOKE CREATE SCHEMA, DROP SCHEMA FROM ROLE sample_role1;
```

# ROLLBACK
<a name="r_ROLLBACK"></a>

Bricht die aktuelle Transaktion ab und verwirft alle Aktualisierungen, die durch diese Transaktion ausgeführt wurden.

Dieser Befehl hat die gleiche Funktion wie der Befehl [ABORT](r_ABORT.md).

## Syntax
<a name="r_ROLLBACK-synopsis"></a>

```
ROLLBACK [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_ROLLBACK-parameters"></a>

WORK  
Optionales Schlüsselwort. Dieses Schlüsselwort wird in einer gespeicherten Prozedur nicht unterstützt. 

TRANSACTION  
Optionales Schlüsselwort. WORK und TRANSACTION sind Synonyme. Beide werden in einer gespeicherten Prozedur nicht unterstützt. 

Informationen zur Verwendung von ROLLBACK innerhalb einer gespeicherten Prozedur finden Sie unter [Verwalten von Transaktionen](stored-procedure-transaction-management.md). 

## Beispiel
<a name="r_ROLLBACK-example"></a>

Im folgenden Beispiel werden eine Tabelle erstellt und eine Transaktion gestartet, bei der Daten in die Tabelle eingefügt werden. Der Befehl ROLLBACK nimmt die Dateneinfügung anschließend zurück, sodass die Tabelle leer ist.

Mit dem folgenden Befehl wird eine Beispieltabelle namens MOVIE\$1GROSS erstellt:

```
create table movie_gross( name varchar(30), gross bigint );
```

Mit dem nächsten Satz von Befehlen wird eine Transaktion gestartet, die zwei Datenzeilen in die Tabelle einfügt:

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

Als Nächstes werden mit dem folgenden Befehl die Daten aus der Tabelle ausgewählt, um zu zeigen, dass sie erfolgreich eingefügt wurden:

```
select * from movie_gross;
```

Die Befehlsausgabe zeigt, dass beide Zeilen erfolgreich eingefügt wurden:

```
name           |  gross
-------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

Mit diesem Befehl werden nun die Datenänderungen auf den Zeitpunkt zurückgesetzt, an dem die Transaktion gestartet wurde:

```
rollback;
```

Wenn nun Daten aus der Tabelle ausgewählt werden, wird eine leere Tabelle gezeigt:

```
select * from movie_gross;

name | gross
------+-------
(0 rows)
```

# SELECT
<a name="r_SELECT_synopsis"></a>

Gibt Zeilen aus Tabellen, Ansichten und benutzerdefinierten Funktionen zurück. 

**Anmerkung**  
Die maximal zulässige Größe für eine einzelne SQL-Anweisung ist 16 MB.

## Syntax
<a name="r_SELECT_synopsis-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

**Topics**
+ [Syntax](#r_SELECT_synopsis-synopsis)
+ [WITH-Klausel](r_WITH_clause.md)
+ [SELECT-Liste](r_SELECT_list.md)
+ [EXCLUDE column\$1list](r_EXCLUDE_list.md)
+ [FROM-Klausel](r_FROM_clause30.md)
+ [WHERE-Klausel](r_WHERE_clause.md)
+ [GROUP BY-Klausel](r_GROUP_BY_clause.md)
+ [HAVING-Klausel](r_HAVING_clause.md)
+ [QUALIFY-Klausel](r_QUALIFY_clause.md)
+ [UNION, INTERSECT und EXCEPT](r_UNION.md)
+ [ORDER BY-Klausel](r_ORDER_BY_clause.md)
+ [CONNECT BY-Klausel](r_CONNECT_BY_clause.md)
+ [Beispiele für Unterabfragen](r_Subquery_examples.md)
+ [Korrelierte Unterabfragen](r_correlated_subqueries.md)

# WITH-Klausel
<a name="r_WITH_clause"></a>

Eine WITH-Klausel ist eine optionale Klausel, die der SELECT-Liste in einer Abfrage vorangeht. Die WITH-Klausel definiert einen oder mehrere *allgemeine Tabellenausdrücke* (CTE). Jeder allgemeine Tabellenausdruck (CTE) definiert eine temporäre Tabelle, die einer Ansichtdefinition ähnelt. Sie können diese temporären Tabellen in der FROM-Klausel referenzieren. Sie werden nur verwendet, während die Abfrage, zu der sie gehören, ausgeführt wird. Jede CTE in der WITH-Klausel gibt einen Tabellennamen, eine optionale Liste von Spaltennamen und einen Abfrageausdruck an, der in eine Tabelle evaluiert wird (eine SELECT-Anweisung). Wenn Sie den Namen der temporären Tabelle in der FROM-Klausel desselben Abfrageausdrucks referenzieren, der ihn definiert, ist der CTE rekursiv. 

Unterabfragen mit einer WITH-Klausel sind eine effiziente Art, Tabellen zu definieren, die während der Ausführung einer einzelnen Abfrage verwendet werden können. In allen Fällen können dieselben Ergebnisse erzielt werden, indem im Hauptteil der SELECT-Anweisung Unterabfragen verwendet werden. Unterabfragen mit WITH-Klauseln können jedoch leichter geschrieben und gelesen werden. Wenn möglich, werden Unterabfragen mit WITH-Klauseln, die mehrmals referenziert werden, als gemeinsame Unterausdrücke optimiert. Das bedeutet, dass es möglich sein kann, eine WITH-Unterabfrage einmal zu evaluieren und die Ergebnisse wiederzuverwenden. (Beachten Sie, dass gemeinsame Unterausdrücke nicht auf diejenigen begrenzt sind, die in der WITH-Klausel definiert sind.)

## Syntax
<a name="r_WITH_clause-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
```

Der *allgemeine Tabellenausdruck* where kann entweder nicht rekursiv oder rekursiv sein. Dies ist die nicht-rekursive Form: 

```
CTE_table_name [ ( column_name [, ...] ) ] AS ( query )
```

Dies ist die rekursive Form des *allgemeinen Tabellenausdrucks*:

```
CTE_table_name (column_name [, ...] ) AS ( recursive_query )
```

## Parameters
<a name="r_WITH_clause-parameters"></a>

 RECURSIVE   
Schlüsselwort, das die Abfrage als rekursiven CTE identifiziert. Dieses Schlüsselwort ist erforderlich, wenn ein in der WITH-Klausel definierter *allgemeiner Tabellenausdruck* rekursiv ist. Sie können das RECURSIVE-Schlüsselwort nur einmal direkt nach dem WITH-Schlüsselwort angeben, auch wenn die WITH-Klausel mehrere CTEs rekursive Elemente enthält. Im Allgemeinen ist ein rekursiver CTE eine UNION ALL-Unterabfrage mit zwei Teilen. 

 *common\$1table\$1expression*   
Definiert eine temporäre Tabelle, auf die Sie in der [FROM-Klausel](r_FROM_clause30.md) verweisen können und die nur während der Ausführung der Abfrage verwendet wird, zu der sie gehört. 

 *CTE\$1table\$1name*   
Ein eindeutiger Name für eine temporäre Tabelle, die die Ergebnisse einer Unterabfrage mit WITH-Klausel definiert. Sie können in einer einzelnen WITH-Klausel keine duplizierten Namen verwenden. Jede Unterabfrage muss einen Tabellennamen erhalten, der in der referenziert werden kann [FROM-Klausel](r_FROM_clause30.md).

 *column\$1name*   
 Eine Liste von Ausgabespaltennamen für die Unterabfrage der WITH-Klausel, kommagetrennt. Die Anzahl der angegebenen Spaltennamen muss größer als oder gleich der Anzahl der Spalten sein, die von der Unterabfrage definiert wird. Bei einem CTE, das nicht rekursiv ist, ist die *column\$1name*-Klausel optional. Für einen rekursiven CTE ist die *column\$1name*-Liste erforderlich.

 *query*   
 Alle SELECT-Abfragen, die Amazon Redshift unterstützt. Siehe [SELECT](r_SELECT_synopsis.md). 

 *recursive\$1query*   
Eine UNION ALL-Abfrage, die aus zwei SELECT-Unterabfragen besteht:  
+ Die erste SELECT-Unterabfrage hat keinen rekursiven Verweis auf denselben *CTE\$1table\$1name*. Sie gibt eine Ergebnismenge zurück, die den Ausgangspunkt der Rekursion bildet. Dieses Teil wird als erstes Element oder Ausgangselement bezeichnet.
+ Die zweite SELECT-Unterabfrage verweist in ihrer FROM-Klausel auf denselben *CTE\$1table\$1name*. Dies wird als rekursives Mitglied bezeichnet. Die *recursive\$1query* enthält eine WHERE-Bedingung, um die *recursive\$1query* zu beenden. 

## Nutzungshinweise
<a name="r_WITH_clause-usage-notes"></a>

Sie können in den folgenden SQL-Anweisungen eine WITH-Klausel verwenden: 
+ SELECT 
+ SELECT INTO
+ CREATE TABLE AS
+ CREATE VIEW
+ DECLARE
+ EXPLAIN
+ INSERT INTO...SELECT 
+ PREPARE
+ UPDATE (innerhalb einer WHERE-Klausel-Unterabfrage. Sie können keinen rekursiven CTE in der Unterabfrage definieren. Der rekursive CTE muss der UPDATE-Klausel vorausgehen).
+ DELETE

Wenn die FROM-Klausel einer Abfrage, die eine WITH-Klausel enthält, keine der Tabellen referenziert, die von der WITH-Klausel definiert werden, wird die WITH-Klausel ignoriert, und die Abfrage wird wie normal ausgeführt.

Eine Tabelle, die von einer Unterabfrage mit WITH-Klausel definiert ist, kann nur im Bereich der SELECT-Abfrage referenziert werden, die die WITH-Klausel beginnt. Sie können beispielsweise eine solche Tabelle in der FROM-Klausel einer Unterabfrage in der SELECT-Liste, in einer WHERE-Klausel oder in einer HAVING-Klausel referenzieren. Sie können eine WITH-Klausel nicht in einer Unterabfrage verwenden und ihre Tabelle in der FROM-Klausel der Hauptabfrage oder einer anderen Unterabfrage referenzieren. Dieses Abfragemuster führt zu einer Fehlermeldung der Art `relation table_name doesn't exist` für die Tabelle der WITH-Klausel.

Sie können innerhalb einer Unterabfrage mit WITH-Klausel keine weitere WITH-Klausel angeben.

Sie können keine Vorausreferenzen auf Tabellen erstellen, die durch Unterabfragen mit WITH-Klauseln definiert werden. Die folgende Abfrage gibt beispielsweise aufgrund der Vorausreferenz auf die Tabelle W2 in der Definition der Tabelle W1 einen Fehler zurück: 

```
with w1 as (select * from w2), w2 as (select * from w1)
select * from sales;
ERROR:  relation "w2" does not exist
```

Eine Unterabfrage mit WITH-Klausel darf nicht aus einer SELECT INTO-Anweisung bestehen. Sie können jedoch eine WITH-Klausel in einer SELECT-Anweisung verwenden.

## Rekursive allgemeine Tabellenausdrücke
<a name="r_WITH_clause-recursive-cte"></a>

Eine rekursiver *allgemeiner Tabellenausdruck (CTE)* ist ein CTE, der sich selbst referenziert. Ein rekursiver CTE ist nützlich für die Abfrage hierarchischer Daten, wie z. B. Organigramme, die Hierarchien zwischen Mitarbeitern und Führungskräften zeigen. Siehe [Beispiel: Rekursiver CTE](#r_WITH_clause-recursive-cte-example).

Eine weitere häufige Anwendung ist eine hierarchisch aufgebaute Stückliste, wenn ein Produkt aus vielen Komponenten besteht und jede Komponente selbst auch aus anderen Komponenten oder Unterbaugruppen besteht.

Achten Sie darauf, die Rekursionstiefe zu begrenzen, indem Sie eine WHERE-Klausel in die zweite SELECT-Unterabfrage der rekursiven Abfrage aufnehmen. Ein Beispiel finden Sie unter [Beispiel: Rekursiver CTE](#r_WITH_clause-recursive-cte-example). Andernfalls kann ein Fehler wie der folgende auftreten:
+ `Recursive CTE out of working buffers.`
+ `Exceeded recursive CTE max rows limit, please add correct CTE termination predicates or change the max_recursion_rows parameter.`

**Anmerkung**  
`max_recursion_rows` ist ein Parameter, der die maximale Anzahl von Zeilen festlegt, die ein rekursiver CTE zurückgeben kann, um endlose Rekursionsschleifen zu verhindern. Wir raten davon ab, diesen Wert in einen höheren Wert als den Standardwert zu ändern. Dadurch wird verhindert, dass aufgrund von Problemen mit endlosen Rekursionen in Ihren Abfragen übermäßig viel Speicherplatz in Ihrem Cluster beansprucht wird.

 Sie können eine Sortierreihenfolge und ein Limit für das Ergebnis des rekursiven CTE angeben. Sie können die group by- und distinct-Optionen auf das Endergebnis des rekursiven CTE anwenden.

Sie können keine WITH RECURSIVE-Klausel innerhalb einer Unterabfrage angeben. Das *recursive\$1query*-Mitglied kann keine order by- oder limit-Klausel enthalten. 

## Beispiele
<a name="r_WITH_clause-examples"></a>

Im folgenden Beispiel wird der einfachste mögliche Fall einer Abfrage gezeigt, die eine WITH-Klausel enthält. Die WITH-Abfrage namens VENUECOPY wählt alle Zeilen aus der Tabelle VENUE aus. Die Hauptabfrage wählt anschließend alle Zeilen aus VENUECOPY aus. Die Tabelle VENUECOPY besteht nur für die Dauer dieser Abfrage. 

```
with venuecopy as (select * from venue)
select * from venuecopy order by 1 limit 10;
```

```
 venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |          0
2 | Columbus Crew Stadium      | Columbus        | OH         |          0
3 | RFK Stadium                | Washington      | DC         |          0
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |          0
5 | Gillette Stadium           | Foxborough      | MA         |      68756
6 | New York Giants Stadium    | East Rutherford | NJ         |      80242
7 | BMO Field                  | Toronto         | ON         |          0
8 | The Home Depot Center      | Carson          | CA         |          0
9 | Dick's Sporting Goods Park | Commerce City   | CO         |          0
v     10 | Pizza Hut Park             | Frisco          | TX         |          0
(10 rows)
```

Im folgenden Beispiel wird eine WITH-Klausel gezeigt, die zwei Tabellen namens VENUE\$1SALES und TOP\$1VENUES erstellt. Die zweite WITH-Abfragetabelle wählt aus der ersten aus. Die WHERE-Klausel des Hauptabfrageblocks enthält eine Unterabfrage, die die Tabelle TOP\$1VENUES einschränkt. 

```
with venue_sales as
(select venuename, venuecity, sum(pricepaid) as venuename_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
group by venuename, venuecity),

top_venues as
(select venuename
from venue_sales
where venuename_sales > 800000)

select venuename, venuecity, venuestate,
sum(qtysold) as venue_qty,
sum(pricepaid) as venue_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
and venuename in(select venuename from top_venues)
group by venuename, venuecity, venuestate
order by venuename;
```

```
        venuename       |   venuecity   | venuestate | venue_qty | venue_sales
------------------------+---------------+------------+-----------+-------------
August Wilson Theatre   | New York City | NY         |      3187 |  1032156.00
Biltmore Theatre        | New York City | NY         |      2629 |   828981.00
Charles Playhouse       | Boston        | MA         |      2502 |   857031.00
Ethel Barrymore Theatre | New York City | NY         |      2828 |   891172.00
Eugene O'Neill Theatre  | New York City | NY         |      2488 |   828950.00
Greek Theatre           | Los Angeles   | CA         |      2445 |   838918.00
Helen Hayes Theatre     | New York City | NY         |      2948 |   978765.00
Hilton Theatre          | New York City | NY         |      2999 |   885686.00
Imperial Theatre        | New York City | NY         |      2702 |   877993.00
Lunt-Fontanne Theatre   | New York City | NY         |      3326 |  1115182.00
Majestic Theatre        | New York City | NY         |      2549 |   894275.00
Nederlander Theatre     | New York City | NY         |      2934 |   936312.00
Pasadena Playhouse      | Pasadena      | CA         |      2739 |   820435.00
Winter Garden Theatre   | New York City | NY         |      2838 |   939257.00
(14 rows)
```

In den folgenden beiden Beispielen werden die Regeln für den Bereich der Tabellenreferenzen auf der Basis von Unterabfragen mit WITH-Klausel gezeigt. Die erste Abfrage wird ausgeführt. Die zweite Abfrage schlägt jedoch mit einem erwarteten Fehler fehl. Die erste Abfrage enthält eine Unterabfrage mit WITH-Klausel innerhalb der SELECT-Liste der Hauptabfrage. Die von der WITH-Klausel definierte Tabelle (HOLIDAYS) wird in der FROM-Klausel der Unterabfrage in der SELECT-Liste referenziert: 

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join date on sales.dateid=date.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

caldate   | daysales | dec25sales
-----------+----------+------------
2008-12-25 | 70402.00 |   70402.00
2008-12-31 | 12678.00 |   70402.00
(2 rows)
```

Die zweite Abfrage schlägt fehl, weil sie versucht, die Tabelle HOLIDAYS in der Hauptabfrage und in der Unterabfrage der SELECT-Liste zu referenzieren. Die Referenzen der Hauptabfrage liegen außerhalb des Bereichs. 

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join holidays on sales.dateid=holidays.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

ERROR:  relation "holidays" does not exist
```

## Beispiel: Rekursiver CTE
<a name="r_WITH_clause-recursive-cte-example"></a>

Im Folgenden finden Sie ein Beispiel für einen rekursiven CTE, der die Mitarbeiter zurückgibt, die direkt oder indirekt an John berichten. Die rekursive Abfrage enthält eine WHERE-Klausel, um die Rekursionstiefe auf weniger als 4 Ebenen zu begrenzen.

```
--create and populate the sample table
  create table employee (
  id int,
  name varchar (20),
  manager_id int
  );
  
  insert into employee(id, name, manager_id)  values
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
  
--run the recursive query
  with recursive john_org(id, name, manager_id, level) as
( select id, name, manager_id, 1 as level
  from employee
  where name = 'John'
  union all
  select e.id, e.name, e.manager_id, level + 1 as next_level
  from employee e, john_org j
  where e.manager_id = j.id and level < 4
  )
 select distinct id, name, manager_id from john_org order by manager_id;
```

Nachfolgend das Ergebnis der Abfrage.

```
    id        name      manager_id
  ------+-----------+--------------
   101    John           100
   102    Jorge          101
   103    Kwaku          101
   110    Liu            101
   201    Sofía          102
   106    Mateo          102
   110    Nikki          103
   104    Paulo          103
   105    Richard        103
   120    Saanvi         104
   200    Shirley        104
   205    Zhang          104
```

Im Folgenden finden Sie ein Organigramm für Johns Abteilung.

![\[Im Folgenden finden Sie ein Organigramm für Johns Abteilung.\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/images/org-chart.png)


# SELECT-Liste
<a name="r_SELECT_list"></a>

**Topics**
+ [Syntax](#r_SELECT_list-synopsis)
+ [Parameters](#r_SELECT_list-parameters)
+ [Nutzungshinweise](#r_SELECT_list_usage_notes)
+ [Beispiele](#r_SELECT_list-examples)

Die SELECT-Liste nennt die Spalten, Funktionen und Ausdrücke, die die Abfrage zurückgeben soll. Der Liste stellt die Ausgabe der Abfrage dar. 

Weitere Hinweise zu SQL-Funktionen finden Sie unter [SQL-Funktionsreferenz](c_SQL_functions.md). Weitere Informationen zu Ausdrücken finden Sie unter [Bedingte Ausdrücke](c_conditional_expressions.md).

## Syntax
<a name="r_SELECT_list-synopsis"></a>

```
SELECT
[ TOP number ]
[ ALL | DISTINCT ] * | expression [ AS column_alias ] [, ...]
```

## Parameters
<a name="r_SELECT_list-parameters"></a>

TOP *number*   
TOP verwendet als Argument eine positive Ganzzahl, die die Anzahl der Zeilen definiert, die an den Client zurückgegeben werden. Das Verhalten mit TOP-Klausel ist mit dem Verhalten mit LIMIT-Klausel identisch. Die Anzahl der zurückgegebenen Zeilen ist fest, der Zeilensatz jedoch nicht. Verwenden Sie zur Rückgabe eines konsistenten Zeilensatzes TOP oder LIMIT in Verbindung mit einer ORDER BY-Klausel. 

ALL   
Ein redundantes Schlüsselwort, das das Standardverhalten definiert, wenn Sie nicht DISTINCT angeben. `SELECT ALL *` bedeutet das gleiche wie `SELECT *` (Auswahl aller Zeilen für alle Spalten und Beibehaltung von Duplikaten). 

DISTINCT   
Eine Option, die duplizierte Zeilen aus dem Ergebnissatz entfernt, basierend auf übereinstimmenden Werten in einer oder mehreren Spalten.   
Wenn Ihre Anwendung ungültige Fremd- oder Primärschlüssel zulässt, kann dies dazu führen, dass einige Abfragen falsche Ergebnisse zurückgeben. Beispielsweise kann eine SELECT DISTINCT-Abfrage duplizierte Zeilen zurückgeben, wenn der Primärschlüssel nicht alle eindeutigen Werte enthält. Weitere Informationen finden Sie unter [Definieren von Tabelleneinschränkungen](https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html).

\$1 (Sternchen)   
Gibt den gesamten Inhalt der Tabelle zurück (alle Spalten und alle Zeilen). 

 *expression*   
Ein Ausdruck, der aus einer oder mehreren Spalten gebildet wird, die in den Tabellen vorhanden sind, die von der Abfrage referenziert werden. Ein Ausdruck kann SQL-Funktionen enthalten. Beispiel:   

```
avg(datediff(day, listtime, saletime))
```

AS *column\$1alias*   
Ein temporärer Name für die Spalte, der im endgültigen Ergebnissatz verwendet wird. Das Schlüsselwort AS ist optional. Beispiel:   

```
avg(datediff(day, listtime, saletime)) as avgwait
```
Wenn Sie keinen Alias für einen Ausdruck angeben, bei dem es sich nicht um einen einfachen Spaltennamen handelt, wendet der Ergebnissatz einen Standardnamen auf diese Spalte an.   
Der Alias wird sofort nach seiner Definition in der Zielliste erkannt. Sie können einen Alias in anderen danach definierten Ausdrücken in derselben Zielliste verwenden. Das folgende Beispiel illustriert dies.   

```
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
```
Der Nutzen der lateralen Alias-Referenz ist es, dass Sie den Alias-Ausdruck nicht wiederholen müssen, wenn Sie komplexere Ausdrücke in derselben Zielliste erstellen. Wenn Amazon Redshift diesen Typ einer Referenz analysiert, stimmt es lediglich die zuvor definierten Aliase aufeinander ab. Falls eine Spalte mit demselben Namen wie der vorherige Alias-Ausdruck in der `FROM`-Klausel definiert wurde, erhält die Spalte in der `FROM`-Klausel Priorität. Beispiel: Wenn in der Abfrage oben eine Spalte mit der Bezeichnung „Wahrscheinlichkeit“ in den Rohdaten der Tabelle enthalten ist, bezieht sich die „Wahrscheinlichkeit“ im zweiten Ausdruck in der Zielliste auf diese Spalte anstatt auf den Aliasnamen „Wahrscheinlichkeit“. 

## Nutzungshinweise
<a name="r_SELECT_list_usage_notes"></a>

TOP ist eine SQL-Erweiterung. Sie bietet eine Alternative zum LIMIT-Verhalten. Sie können TOP und LIMIT nicht in derselben Abfrage verwenden.

## Beispiele
<a name="r_SELECT_list-examples"></a>

Im folgenden Beispiel werden 10 Zeilen aus der Tabelle SALES zurückgegeben. Trotz Verwendung der TOP-Klausel in der Abfrage wird dennoch ein unvorhersehbarer Satz von Zeilen zurückgegeben, da keine Klausel ORDER BY angegeben ist.

```
select top 10 *
from sales;
```

Die folgende Abfrage ist funktionell gleichwertig, verwendet jedoch anstelle einer TOP-Klausel eine LIMIT-Klausel:

```
select *
from sales
limit 10;
```

Im folgenden Beispiel werden unter Verwendung der TOP-Klausel die ersten 10 Zeilen aus der Tabelle SALES zurückgegeben, in absteigender Reihenfolge nach der Spalte QTYSOLD angeordnet.

```
select top 10 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
8 |      574
8 |      718
8 |      868
8 |     2663
8 |     3396
8 |     3726
8 |     5250
8 |     6216
(10 rows)
```

Im folgenden Beispiel werden die ersten beiden QTYSOLD- und SELLERID-Werte aus der Tabelle SALES zurückgegeben, nach der Spalte QTYSOLD angeordnet:

```
select top 2 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
(2 rows)
```

Im folgenden Beispiel ist die Liste der verschiedenen Kategoriegruppen aus der Tabelle CATEGORY zu sehen:

```
select distinct catgroup from category
order by 1;

catgroup
----------
Concerts
Shows
Sports
(3 rows)

--the same query, run without distinct
select catgroup from category
order by 1;

catgroup
----------
Concerts
Concerts
Concerts
Shows
Shows
Shows
Sports
Sports
Sports
Sports
Sports
(11 rows)
```

Im folgenden Beispiel wird der eindeutige Satz von Wochenzahlen für Dezember 2008 zurückgegeben. Ohne die DISTINCT-Klausel würde die Anweisung 31 Zeilen bzw. eine Zeile für jeden Tag des Monats zurückgeben.

```
select distinct week, month, year
from date
where month='DEC' and year=2008
order by 1, 2, 3;

week | month | year
-----+-------+------
49 | DEC   | 2008
50 | DEC   | 2008
51 | DEC   | 2008
52 | DEC   | 2008
53 | DEC   | 2008
(5 rows)
```



# EXCLUDE column\$1list
<a name="r_EXCLUDE_list"></a>

Die Spalte „EXCLUDE column\$1list“ nennt die Spalten, die aus den Abfrageergebnissen ausgeschlossen sind. Die Verwendung der Option EXCLUDE ist nützlich, wenn nur eine Teilmenge von Spalten aus einer *breiten* Tabelle ausgeschlossen werden muss. d. h. einer Tabelle, die zahlreiche Spalten enthält. 

**Topics**
+ [Syntax](#r_EXCLUDE_list-synopsis)
+ [Parameters](#r_EXCLUDE_list-parameters)
+ [Beispiele](#r_EXCLUDE_list-examples)

## Syntax
<a name="r_EXCLUDE_list-synopsis"></a>

```
EXCLUDE column_list
```

## Parameters
<a name="r_EXCLUDE_list-parameters"></a>

 *column\$1list*   
Eine kommagetrennte Liste mit einem oder mehreren Spaltennamen, die in den Tabellen vorhanden sind, die von der Abfrage referenziert werden. *column\$1list* kann optional in Klammern eingeschlossen werden. Ausschlusslisten von Spaltennamen unterstützen nur Spaltennamen, keine Ausdrücke (wie`upper(col1)`) oder Sternchen (\$1)).  

```
column-name, ... | ( column-name, ... )
```
Beispiel:   

```
SELECT * EXCLUDE col1, col2 FROM tablea;
```

```
SELECT * EXCLUDE (col1, col2) FROM tablea;
```

## Beispiele
<a name="r_EXCLUDE_list-examples"></a>

In den folgenden Beispielen wird die Tabelle SALES verwendet, die folgende Spalten enthält: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission und saletime. Weitere Informationen zur Tabelle SALES finden Sie unter [Beispieldatenbank](c_sampledb.md).

Im folgenden Beispiel werden Zeilen aus der Tabelle SALES zurückgegeben. Dabei wird die Spalte SALETIME ausgeschlossen.

```
SELECT * EXCLUDE saletime FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

Im folgenden Beispiel werden Zeilen aus der Tabelle SALES zurückgegeben. Dabei werden die Spalten QTYSOLD und SALETIME ausgeschlossen.

```
SELECT * EXCLUDE (qtysold, saletime) FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 482        |  72.3	
...
```

Im folgenden Beispiel wird eine Ansicht erstellt, die Zeilen aus der Tabelle SALES zurückgibt. Dabei wird die Spalte SALETIME ausgeschlossen.

```
CREATE VIEW sales_view AS SELECT * EXCLUDE saletime FROM sales;
SELECT * FROM sales_view;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

Im folgenden Beispiel werden nur die nicht ausgeschlossenen Spalten für eine temporäre Tabelle ausgewählt.

```
SELECT * EXCLUDE saletime INTO TEMP temp_sales FROM sales;
SELECT * FROM temp_sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

# FROM-Klausel
<a name="r_FROM_clause30"></a>

Die -Klausel in einer Abfrage listet die Tabellenreferenzen (Tabellen, Ansichten und Unterabfragen) auf, aus denen Daten ausgewählt werden. Wenn mehrere Tabellenreferenzen aufgelistet werden, muss ein Join für die Tabellen ausgeführt werden, indem entweder in der FROM-Klausel oder in der WHERE-Klausel die entsprechende Syntax verwendet wird. Wenn keine Join-Kriterien angegeben werden, verarbeitet das System die Abfrage als Kreuz-Join (kartesisches Produkt). 

**Topics**
+ [Syntax](#r_FROM_clause30-synopsis)
+ [Parameters](#r_FROM_clause30-parameters)
+ [Nutzungshinweise](#r_FROM_clause_usage_notes)
+ [Beispiele für PIVOT und UNPIVOT](r_FROM_clause-pivot-unpivot-examples.md)
+ [JOIN-Beispiele](r_Join_examples.md)
+ [Beispiele für UNNEST](r_FROM_clause-unnest-examples.md)

## Syntax
<a name="r_FROM_clause30-synopsis"></a>

```
FROM table_reference [, ...]
```

wobei *table\$1reference* eins der folgenden ist: 

```
with_subquery_table_name [ table_alias ]
table_name [ * ] [ table_alias ]
( subquery ) [ table_alias ]
table_reference [ NATURAL ] join_type table_reference
   [ ON join_condition | USING ( join_column [, ...] ) ]
table_reference  join_type super_expression 
   [ ON join_condition ]
table_reference PIVOT ( 
   aggregate(expr) [ [ AS ] aggregate_alias ]
   FOR column_name IN ( expression [ AS ] in_alias [, ...] )
) [ table_alias ]
table_reference UNPIVOT [ INCLUDE NULLS | EXCLUDE NULLS ] ( 
   value_column_name 
   FOR name_column_name IN ( column_reference [ [ AS ]
   in_alias ] [, ...] )
) [ table_alias ]
UNPIVOT expression AS value_alias [ AT attribute_alias ]
( super_expression.attribute_name ) AS value_alias [ AT index_alias ]
UNNEST ( column_reference )
  [AS] table_alias ( unnested_column_name )
UNNEST ( column_reference ) WITH OFFSET
  [AS] table_alias ( unnested_column_name, [offset_column_name] )
```

*table\$1alias* kann optional verwendet werden, um Tabellen und komplexen Tabellenverweisen und, falls gewünscht, auch ihren Spalten temporäre Namen zu geben, wie im Folgenden gezeigt: 

```
[ AS ] alias [ ( column_alias [, ...] ) ]
```

## Parameters
<a name="r_FROM_clause30-parameters"></a>

 *with\$1subquery\$1table\$1name*   
Eine Tabelle, die von einer Unterabfrage in der definiert wird [WITH-Klausel](r_WITH_clause.md). 

 *table\$1name*   
Der Name einer Tabelle oder Ansicht. 

 *alias*   
Der temporäre alternative Name für eine Tabelle oder Ansicht. Für eine Tabelle, die von einer Unterabfrage abgeleitet wird, muss ein Alias bereitgestellt werden. In anderen Tabellenreferenzen sind Aliasnamen optional. Das Schlüsselwort AS ist stets optional. Tabellenaliasnamen stellen eine bequeme Abkürzung für die Identifizierung von Tabellen in anderen Teilen einer Abfrage dar, beispielsweise in der WHERE-Klausel. Beispiel:   

```
select * from sales s, listing l
where s.listid=l.listid
```

 *column\$1alias*   
Der temporäre alternative Name für eine Spalte in einer Tabelle oder Ansicht. 

 *subquery*   
Ein Abfrageausdruck, der zu einer Tabelle evaluiert wird. Die Tabelle ist nur für die Dauer der Abfrage vorhanden und erhält in der Regel einen Namen oder einen *Alias*. Ein Alias ist jedoch nicht erforderlich. Sie können auch Spaltennamen für Tabellen definieren, die von Unterabfragen abgeleitet werden. Die Vergabe von Spaltenaliasnamen ist wichtig, wenn Sie für die Ergebnisse von Unterabfragen einen Join mit anderen Tabellen ausführen möchten und wenn Sie diese Spalten an anderer Stelle in der Abfrage auswählen oder einschränken möchten.   
Eine Unterabfrage kann eine ORDER BY-Klausel enthalten. Diese Klausel hat jedoch keine Auswirkungen, wenn nicht auch eine LIMIT- oder OFFSET-Klausel angegeben ist. 

NATURAL   
Definiert einen Join, der automatisch alle Paare identisch benannter Spalten in den beiden Tabellen als Joining-Spalten verwendet. Es ist keine explizite Join-Bedingung erforderlich. Wenn die Tabellen CATEGORY und EVENT beispielsweise beide Spalten namens CATID besitzen, ist ein Join ihrer CATID-Spalten ein NATURAL-Join dieser Tabellen.   
Wenn ein NATURAL-Join angegeben ist, in den Tabellen, für die ein Join ausgeführt werden soll, jedoch keine identisch benannten Spaltenpaare vorhanden sind, wird für die Abfrage standardmäßig ein Kreuz-Join ausgeführt. 

 *join\$1type*   
Geben Sie eine der folgenden Join-Arten an:   
+ [INNER] JOIN 
+ LEFT [OUTER] JOIN 
+ RIGHT [OUTER] JOIN 
+ FULL [OUTER] JOIN 
+ CROSS JOIN 
Kreuz-Joins sind nicht qualifizierte Joins. Sie geben das kartesische Produkt der beiden Tabellen zurück.   
Interne und externe Joins sind qualifizierte Joins. Sie sind entweder implizit (in natürlichen Joins), mit der ON- oder USING-Syntax in der FROM-Klausel oder mit einer WHERE-Klauselbedingung qualifiziert.   
Ein interner Join gibt nur übereinstimmende Zeilen zurück, basierend auf der Join-Bedingung oder der Liste der Joining-Spalten. Ein externer Join gibt alle Zeilen zurück, die der entsprechende interne Join zurückgeben würde, und zusätzlich nicht übereinstimmende Zeilen aus der Tabelle „links“, aus der Tabelle „rechts“ oder aus beiden Tabellen. Die linke Tabelle wird zuerst aufgelistet. Die rechte Tabelle wird als zweite Tabelle aufgelistet. Die nicht übereinstimmenden Zeilen enthalten NULL-Werte, um die Lücken in den Ausgabespalten zu füllen. 

ON *join\$1condition*   
Eine Join-Spezifikation, in der die Joining-Spalten als eine Bedingung angegeben werden, die dem Schlüsselwort ON folgt. Beispiel:   

```
sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
```

USING ( *join\$1column* [, ...] )   
Eine Join-Spezifikation, in der die Joining-Spalten in Klammern angegeben werden. Wenn mehrere Joining-Spalten angegeben werden, werden sie durch Komma abgetrennt. Das Schlüsselwort USING muss der Liste vorangestellt werden. Beispiel:   

```
sales join listing
using (listid,eventid)
```

PIVOT  
Dreht die Ausgabe von Zeilen zu Spalten, um tabellarische Daten in einem einfach lesbaren Format darzustellen. Die Ausgabe wird horizontal über mehrere Spalten hinweg dargestellt. PIVOT ähnelt einer GROUP BY-Abfrage mit einer Aggregation, wobei ein Aggregatausdruck verwendet wird, um ein Ausgabeformat anzugeben. Im Gegensatz zu GROUP BY werden die Ergebnisse jedoch in Spalten anstelle von Zeilen zurückgegeben.  
Beispiele, die Abfragen mit PIVOT und UNPIVOT veranschaulichen, finden Sie unter [Beispiele für PIVOT und UNPIVOT](r_FROM_clause-pivot-unpivot-examples.md).

UNPIVOT  
*Umwandeln von Spalten in Zeilen mit UNPIVOT*: Der Operator wandelt Ergebnisspalten aus einer Eingabetabelle oder aus Abfrageergebnissen in Zeilen um, damit die Ausgabe besser lesbar ist. UNPIVOT fasst die Daten der Eingabespalten in zwei Ergebnisspalten zusammen: eine Namensspalte und eine Wertspalte. Die Namensspalte enthält die Spaltennamen aus der Eingabe als Zeileneinträge. Die Wertspalte enthält Werte aus den Eingabespalten, wie etwa die Ergebnisse einer Aggregation. Zum Beispiel die Anzahl der Elemente in verschiedenen Kategorien.  
*Entpivotieren von Objekten mit UNPIVOT (SUPER)*: Sie können Objekte entpivotieren, *expression* ein SUPER-Ausdruck ist, der auf ein anderes FROM-Klauselelement verweist. Weitere Informationen finden Sie unter [Entpivotieren von Objekten](query-super.md#unpivoting). Hier finden Sie auch Beispiele für Abfragen für halbstrukturierte Daten, z. B. Daten im JSON-Format.

*super\$1expression*  
Ein gültiger SUPER-Ausdruck. Amazon Redshift gibt für jeden Wert im angegebenen Attribut jeweils eine Zeile zurück. Weitere Informationen zum Datentyp SUPER finden Sie unter [Typ SUPER](r_SUPER_type.md). Weitere Informationen zu nicht verschachtelten SUPER-Werten finden Sie unter [Aufheben der Verschachtelung von Abfragen](query-super.md#unnest).

*Attributname*  
Der Name eines Attributs im SUPER-Ausdruck.

*index\$1alias*  
Alias für den Index, der die Position des Werts im SUPER-Ausdruck angibt.

UNNEST  
Erweitert eine verschachtelte Struktur, in der Regel ein SUPER-Array, in Spalten, die die nicht verschachtelten Elemente enthalten. Weitere Informationen zum Entschachteln von SUPER-Daten finden Sie unter [Abfragen halbstrukturierter Daten](query-super.md). Beispiele finden Sie unter [Beispiele für UNNEST](r_FROM_clause-unnest-examples.md). 

*unnested\$1column\$1name*  
Der Name der Spalte, in der die nicht verschachtelten Elemente gespeichert sind. 

UNNEST ... WITH OFFSET  
Fügt der nicht verschachtelten Ausgabe eine Offset-Spalte hinzu, wobei der Offset den nullbasierten Index jedes Elements im Array darstellt. Diese Variante ist nützlich, wenn Sie die Position von Elementen innerhalb eines Arrays anzeigen möchten. Weitere Informationen zum Entschachteln von SUPER-Daten finden Sie unter [Abfragen halbstrukturierter Daten](query-super.md). Beispiele finden Sie unter [Beispiele für UNNEST](r_FROM_clause-unnest-examples.md). 

*offset\$1column\$1name*  
Ein benutzerdefinierter Name für die Offset-Spalte, mit dem Sie die Anzeige der Indexspalte in der Ausgabe explizit definieren können. Dieser Parameter ist optional. Standardmäßig ist der Name der Offset-Spalte `offset_col`. 

## Nutzungshinweise
<a name="r_FROM_clause_usage_notes"></a>

Joining-Spalten müssen vergleichbare Datentypen haben. 

Ein NATURAL- oder -USING-Join enthält jeweils nur eine Spalte jedes Joining-Spaltenpaars im Zwischenergebnissatz. 

Ein Join mit der ON-Syntax enthält beide Joining-Spalten im Zwischenergebnissatz. 

Weitere Informationen finden Sie auch unter [WITH-Klausel](r_WITH_clause.md). 

# Beispiele für PIVOT und UNPIVOT
<a name="r_FROM_clause-pivot-unpivot-examples"></a>

PIVOT und UNPIVOT sind Parameter in der FROM-Klausel, die die Abfrageausgabe von Zeilen in Spalten bzw. von Spalten in Zeilen drehen. Sie stellen tabellarische Abfrageergebnisse in einem leicht lesbaren Format dar. In den folgenden Beispielen wird anhand von Testdaten und Abfragen ihre Verwendung dargestellt.

Weitere Informationen zu diesen und anderen Parametern finden Sie unter [FROM-Klausel](https://docs.aws.amazon.com/redshift/latest/dg/r_FROM_clause30.html).

## Beispiele für PIVOT
<a name="r_FROM_clause-pivot-examples"></a>

Richten Sie die Beispieltabelle und -daten ein und verwenden Sie sie, um die folgenden Beispielabfragen auszuführen.

```
CREATE TABLE part (
    partname varchar,
    manufacturer varchar,
    quality int,
    price decimal(12, 2)
);

INSERT INTO part VALUES ('prop', 'local parts co', 2, 10.00);
INSERT INTO part VALUES ('prop', 'big parts co', NULL, 9.00);
INSERT INTO part VALUES ('prop', 'small parts co', 1, 12.00);

INSERT INTO part VALUES ('rudder', 'local parts co', 1, 2.50);
INSERT INTO part VALUES ('rudder', 'big parts co', 2, 3.75);
INSERT INTO part VALUES ('rudder', 'small parts co', NULL, 1.90);

INSERT INTO part VALUES ('wing', 'local parts co', NULL, 7.50);
INSERT INTO part VALUES ('wing', 'big parts co', 1, 15.20);
INSERT INTO part VALUES ('wing', 'small parts co', NULL, 11.80);
```

PIVOT auf `partname` mit einer `AVG`-Aggregation auf `price`.

```
SELECT *
FROM (SELECT partname, price FROM part) PIVOT (
    AVG(price) FOR partname IN ('prop', 'rudder', 'wing')
);
```

Die Abfrage führt zur folgenden Ausgabe.

```
  prop   |  rudder  |  wing
---------+----------+---------
 10.33   | 2.71     | 11.50
```

Im vorherigen Beispiel werden die Ergebnisse in Spalten umgewandelt. Das folgende Beispiel zeigt eine `GROUP BY`-Abfrage, die die Durchschnittspreise in Zeilen und nicht in Spalten zurückgibt.

```
SELECT partname, avg(price)
FROM (SELECT partname, price FROM part)
WHERE partname IN ('prop', 'rudder', 'wing')
GROUP BY partname;
```

Die Abfrage führt zur folgenden Ausgabe.

```
 partname |  avg
----------+-------
 prop     | 10.33
 rudder   |  2.71
 wing     | 11.50
```

Ein `PIVOT`-Beispiel mit `manufacturer` als impliziter Spalte.

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) FOR quality IN (1, 2, NULL)
);
```

Die Abfrage führt zur folgenden Ausgabe.

```
 manufacturer      | 1  | 2  | null
-------------------+----+----+------
 local parts co    | 1  | 1  |  1
 big parts co      | 1  | 1  |  1
 small parts co    | 1  | 0  |  2
```

 Eingabetabellenspalten, die nicht in der `PIVOT`-Definition referenziert sind, werden implizit zur Ergebnistabelle hinzugefügt. Dies ist zum Beispiel bei der `manufacturer`-Spalte im vorigen Beispiel der Fall. Das Beispiel zeigt auch, dass `NULL` ein gültiger Wert für den `IN`-Operator ist. 

`PIVOT` im obigen Beispiel gibt ähnliche Informationen zurück wie die folgende Abfrage, die `GROUP BY` umfasst. Der Unterschied besteht darin, dass `PIVOT` den Wert `0` für Spalte `2` und den Hersteller `small parts co` zurückgibt. Die `GROUP BY`-Abfrage enthält keine entsprechende Zeile. In dem meisten Fällen fügt `PIVOT` `NULL` ein, wenn eine Zeile keine Eingabedaten für eine bestimmte Spalte aufweist. Das Zählaggregat gibt jedoch nicht `NULL` zurück und `0` ist der Standardwert.

```
SELECT manufacturer, quality, count(*)
FROM (SELECT quality, manufacturer FROM part)
WHERE quality IN (1, 2) OR quality IS NULL
GROUP BY manufacturer, quality
ORDER BY manufacturer;
```

Die Abfrage führt zur folgenden Ausgabe.

```
 manufacturer        | quality | count
---------------------+---------+-------
 big parts co        |         |     1
 big parts co        |       2 |     1
 big parts co        |       1 |     1
 local parts co      |       2 |     1
 local parts co      |       1 |     1
 local parts co      |         |     1
 small parts co      |       1 |     1
 small parts co      |         |     2
```

 Der PIVOT-Operator akzeptiert optionale Aliase auf dem Aggregatausdruck und jedem Wert für den `IN`-Operator. Verwenden Sie Aliase, um die Spaltennamen anzupassen. Wenn kein Aggregatalias vorliegt, werden nur `IN`-Listenaliase verwendet. Andernfalls wird das Aggregatalias an den Spaltennamen angefügt (mit einem Unterstrich, um die Namen auseinanderzuhalten). 

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) AS count FOR quality IN (1 AS high, 2 AS low, NULL AS na)
);
```

Die Abfrage führt zur folgenden Ausgabe.

```
 manufacturer      | high_count  | low_count | na_count
-------------------+-------------+-----------+----------
 local parts co    |           1 |         1 |        1
 big parts co      |           1 |         1 |        1
 small parts co    |           1 |         0 |        2
```

Richten Sie die folgende Beispieltabelle und -daten ein und verwenden Sie sie, um die folgenden Beispielabfragen auszuführen. Die Daten stellen Buchungstermine für eine Reihe von Hotels dar.

```
CREATE TABLE bookings (
    booking_id int,
    hotel_code char(8),
    booking_date date,
    price decimal(12, 2)
);

INSERT INTO bookings VALUES (1, 'FOREST_L', '02/01/2023', 75.12);
INSERT INTO bookings VALUES (2, 'FOREST_L', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (3, 'FOREST_L', '02/04/2023', 85.54);

INSERT INTO bookings VALUES (4, 'FOREST_L', '02/08/2023', 75.00);
INSERT INTO bookings VALUES (5, 'FOREST_L', '02/11/2023', 75.00);
INSERT INTO bookings VALUES (6, 'FOREST_L', '02/14/2023', 90.00);

INSERT INTO bookings VALUES (7, 'FOREST_L', '02/21/2023', 60.00);
INSERT INTO bookings VALUES (8, 'FOREST_L', '02/22/2023', 85.00);
INSERT INTO bookings VALUES (9, 'FOREST_L', '02/27/2023', 90.00);

INSERT INTO bookings VALUES (10, 'DESERT_S', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (11, 'DESERT_S', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (12, 'DESERT_S', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (13, 'DESERT_S', '02/05/2023', 75.00);
INSERT INTO bookings VALUES (14, 'DESERT_S', '02/06/2023', 34.00);
INSERT INTO bookings VALUES (15, 'DESERT_S', '02/09/2023', 85.00);

INSERT INTO bookings VALUES (16, 'DESERT_S', '02/12/2023', 23.00);
INSERT INTO bookings VALUES (17, 'DESERT_S', '02/13/2023', 76.00);
INSERT INTO bookings VALUES (18, 'DESERT_S', '02/14/2023', 85.00);

INSERT INTO bookings VALUES (19, 'OCEAN_WV', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (20, 'OCEAN_WV', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (21, 'OCEAN_WV', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (22, 'OCEAN_WV', '02/06/2023', 75.00);
INSERT INTO bookings VALUES (23, 'OCEAN_WV', '02/09/2023', 34.00);
INSERT INTO bookings VALUES (24, 'OCEAN_WV', '02/12/2023', 85.00);

INSERT INTO bookings VALUES (25, 'OCEAN_WV', '02/13/2023', 23.00);
INSERT INTO bookings VALUES (26, 'OCEAN_WV', '02/14/2023', 76.00);
INSERT INTO bookings VALUES (27, 'OCEAN_WV', '02/16/2023', 85.00);

INSERT INTO bookings VALUES (28, 'CITY_BLD', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (29, 'CITY_BLD', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (30, 'CITY_BLD', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (31, 'CITY_BLD', '02/12/2023', 75.00);
INSERT INTO bookings VALUES (32, 'CITY_BLD', '02/13/2023', 34.00);
INSERT INTO bookings VALUES (33, 'CITY_BLD', '02/17/2023', 85.00);

INSERT INTO bookings VALUES (34, 'CITY_BLD', '02/22/2023', 23.00);
INSERT INTO bookings VALUES (35, 'CITY_BLD', '02/23/2023', 76.00);
INSERT INTO bookings VALUES (36, 'CITY_BLD', '02/24/2023', 85.00);
```

 In dieser Beispielabfrage werden die Buchungsdatensätze zusammengezählt, um eine Gesamtsumme für jede Woche zu erhalten. Das Enddatum für jede Woche wird zu einem Spaltennamen.

```
SELECT * FROM
    (SELECT
       booking_id,
       (date_trunc('week', booking_date::date) + '5 days'::interval)::date as enddate,
       hotel_code AS "hotel code"
FROM bookings
) PIVOT (
    count(booking_id) FOR enddate IN ('2023-02-04','2023-02-11','2023-02-18') 
);
```

Die Abfrage führt zur folgenden Ausgabe.

```
 hotel code | 2023-02-04  | 2023-02-11 | 2023-02-18
------------+-------------+------------+----------
 FOREST_L   |           3 |          2 |        1
 DESERT_S   |           4 |          3 |        2
 OCEAN_WV   |           3 |          3 |        3
 CITY_BLD   |           3 |          1 |        2
```

 Amazon Redshift unterstützt CROSSTAB, um mehrere Spalten zu pivotieren. Mit einer Abfrage wie der folgenden können Sie jedoch Zeilendaten in Spalten ändern, ähnlich wie bei einer Aggregation mit PIVOT. Dabei werden dieselben Buchungsbeispieldaten wie im vorherigen Beispiel verwendet.

```
SELECT 
  booking_date,
  MAX(CASE WHEN hotel_code = 'FOREST_L' THEN 'forest is booked' ELSE '' END) AS FOREST_L,
  MAX(CASE WHEN hotel_code = 'DESERT_S' THEN 'desert is booked' ELSE '' END) AS DESERT_S,
  MAX(CASE WHEN hotel_code = 'OCEAN_WV' THEN 'ocean is booked' ELSE '' END)  AS OCEAN_WV
FROM bookings
GROUP BY booking_date
ORDER BY booking_date asc;
```

Die Beispielabfrage ergibt Buchungsdaten, die neben kurzen Ausdrücken aufgeführt sind und angeben, welche Hotels gebucht wurden.

```
 booking_date  | forest_l         | desert_s         | ocean_wv
---------------+------------------+------------------+--------------------
 2023-02-01    | forest is booked | desert is booked |  ocean is booked
 2023-02-02    | forest is booked | desert is booked |  ocean is booked
 2023-02-04    | forest is booked | desert is booked |  ocean is booked
 2023-02-05    |                  | desert is booked |        
 2023-02-06    |                  | desert is booked |
```

Im Folgenden finden Sie Nutzungshinweise für `PIVOT`:
+ `PIVOT`kann auf Tabellen, Unterabfragen und allgemeine Tabellenausdrücke () angewendet werden. CTEs `PIVOT`kann nicht auf irgendwelche `JOIN` Ausdrücke, rekursive CTEs Ausdrücke oder `UNPIVOT` Ausdrücke angewendet werden. `PIVOT` Ebenfalls nicht unterstützt werden nicht verschachtelte `SUPER`-Ausdrücke sowie verschachtelte Redshift-Spectrum-Tabellen.
+  `PIVOT` unterstützt die Aggregatfunktionen `COUNT`, `SUM`, `MIN`, `MAX` und `AVG`. 
+ Der `PIVOT`-Aggregatausdruck muss ein Aufruf einer unterstützten Aggregatfunktion sein. Komplexe Ausdrücke, die auf dem Aggregat aufbauen, werden nicht unterstützt. Die Aggregatargumente können keine Verweise auf Tabellen enthalten, bei denen es sich nicht um die `PIVOT`-Eingabetabelle handelt. Korrelierte Verweise auf eine übergeordnete Abfrage werden ebenfalls nicht unterstützt. Das Aggregatargument kann Unterabfragen enthalten. Diese können intern oder in der `PIVOT`-Eingabetabelle korreliert werden.
+  Die `PIVOT IN`-Listenwerte können keine Spaltenverweise oder Unterabfragen sein. Alle Werte müssen mit dem `FOR`-Spaltenverweis typenkompatibel sein. 
+  Wenn die `IN`-Listenwerte keine Aliase haben, generiert `PIVOT` Standardspaltennamen. Bei konstanten `IN`-Werten wie etwa „abc“ oder „5“ ist der Spaltennamen die Konstante. Bei komplexen Ausdrücken ist der Spaltenname ein Amazon-Redshift-Standardname wie etwa `?column?`. 

## Beispiele für UNPIVOT
<a name="r_FROM_clause-unpivot-examples"></a>

Richten Sie die Beispieldaten ein und verwenden Sie sie, um die folgenden Beispiele auszuführen.

```
CREATE TABLE count_by_color (quality varchar, red int, green int, blue int);

INSERT INTO count_by_color VALUES ('high', 15, 20, 7);
INSERT INTO count_by_color VALUES ('normal', 35, NULL, 40);
INSERT INTO count_by_color VALUES ('low', 10, 23, NULL);
```

`UNPIVOT` in den Eingabespalten rot, grün und blau.

```
SELECT *
FROM (SELECT red, green, blue FROM count_by_color) UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

Die Abfrage führt zur folgenden Ausgabe.

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |  23
 blue  |   7
 blue  |  40
```

Standardmäßig werden `NULL`-Werte in der Eingabespalte übersprungen und ergeben keine Ergebniszeile. 

Das folgende Beispiel zeigt `UNPIVOT` mit `INCLUDE NULLS`.

```
SELECT *
FROM (
    SELECT red, green, blue
    FROM count_by_color
) UNPIVOT INCLUDE NULLS (
    cnt FOR color IN (red, green, blue)
);
```

Die resultierende Ausgabe sieht wie folgt aus.

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |
 green |  23
 blue  |   7
 blue  |  40
 blue  |
```

Wenn der Parameter `INCLUDING NULLS` festgelegt wurde, generieren `NULL`-Eingabewerte Ergebniszeilen.

`The following query shows UNPIVOT` mit `quality` als impliziter Spalte.

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

Die Abfrage führt zur folgenden Ausgabe.

```
 quality | color | cnt
---------+-------+-----
 high    | red   |  15
 normal  | red   |  35
 low     | red   |  10
 high    | green |  20
 low     | green |  23
 high    | blue  |   7
 normal  | blue  |  40
```

Spalten der Eingabetabelle, die nicht in der `UNPIVOT`-Definition referenziert sind, werden implizit zur Ergebnistabelle hinzugefügt. Im Beispiel ist dies bei der `quality`-Spalte der Fall.

Das folgende Beispiel zeigt `UNPIVOT` mit Aliasen für Werte in der `IN`-Liste.

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
```

Die vorige Abfrage führt zu der folgenden Ausgabe.

```
 quality | color | cnt
---------+-------+-----
 high    | r     |  15
 normal  | r     |  35
 low     | r     |  10
 high    | g     |  20
 low     | g     |  23
 high    | b     |   7
 normal  | b     |  40
```

Der `UNPIVOT`-Operator akzeptiert optionale Aliase auf jedem `IN`-Listenwert. Jeder Alias ermöglicht die Anpassung der Daten in jeder `value`-Spalte.

Im Folgenden finden Sie Nutzungshinweise für `UNPIVOT`.
+ `UNPIVOT`kann auf Tabellen, Unterabfragen und allgemeine Tabellenausdrücke () CTEs angewendet werden. `UNPIVOT`kann nicht auf irgendwelche `JOIN` Ausdrücke, rekursive CTEs Ausdrücke oder `UNPIVOT` Ausdrücke angewendet werden. `PIVOT` Ebenfalls nicht unterstützt werden nicht verschachtelte `SUPER`-Ausdrücke sowie verschachtelte Redshift-Spectrum-Tabellen.
+ Die Liste `UNPIVOT IN` darf nur Spaltenverweise auf Eingabetabellen enthalten. Die `IN`-Listenspalten müssen einen gemeinsamen Typ haben, mit dem sie alle kompatibel sind. Die `UNPIVOT`-Wertspalte hat diesen gemeinsamen Typ. Der `UNPIVOT`-Spaltenname hat den Typ `VARCHAR`.
+ Wenn ein `IN`-Listenwert keinen Alias hat, verwendet `UNPIVOT` den Spaltennamen als Standardwert.

# JOIN-Beispiele
<a name="r_Join_examples"></a>

Eine SQL JOIN-Klausel wird verwendet, um die Daten aus zwei oder mehr Tabellen basierend auf gemeinsamen Feldern zu kombinieren. Die Ergebnisse können sich je nach festgelegter Join-Methode ändern oder nicht. Weitere Informationen zur Syntax einer JOIN-Klausel finden Sie unter [Parameters](r_FROM_clause30.md#r_FROM_clause30-parameters). 

In den folgenden Beispielen werden Daten aus der `TICKIT`-Beispieldatenbank verwendet. Weitere Informationen über das Datenbankschema finden Sie unter [Beispieldatenbank](c_sampledb.md). Informationen zum Laden von Beispieldaten finden Sie unter [Laden von Daten](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) im Handbuch *Erste Schritte mit Amazon Redshift*.

Die folgende Abfrage ist ein innerer Join (ohne das Schlüsselwort JOIN) zwischen den Tabellen LISTING und SALES, wobei die LISTID aus der Tabelle LISTING zwischen 1 und 5 liegt. Diese Abfrage gleicht LISTID-Spaltenwerte in der Tabelle LISTING (linke Tabelle) und der Tabelle SALES (rechte Tabelle) ab. Die Ergebnisse zeigen, dass LISTID 1, 4 und 5 den Kriterien entsprechen.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing, sales
where listing.listid = sales.listid
and listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Bei der folgenden Abfrage handelt es sich um einen linken, externen Join. Externe Joins nach links und rechts behalten die Werte aus einer der Tabellen, für die ein Join ausgeführt wurde, wenn in der anderen Tabelle keine Übereinstimmung gefunden wurde. Die Tabellen links und rechts werden in der Syntax als erste und zweite Tabelle aufgelistet. Es werden NULL-Werte verwendet, um die „Lücken“ im Ergebnissatz zu füllen. Diese Abfrage gleicht LISTID-Spaltenwerte in der Tabelle LISTING (linke Tabelle) und der Tabelle SALES (rechte Tabelle) ab. Die Ergebnisse zeigen, dass LISTIDs 2 und 3 zu keinen Verkäufen geführt haben.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing left outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Bei der folgenden Abfrage handelt es sich um einen rechten, externen Join. Diese Abfrage gleicht LISTID-Spaltenwerte in der Tabelle LISTING (linke Tabelle) und der Tabelle SALES (rechte Tabelle) ab. Die Ergebnisse zeigen, dass LISTIDs 1, 4 und 5 den Kriterien entsprechen.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing right outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Bei der folgenden Abfrage handelt es sich um einen vollständigen Join. Vollständige Joins behalten die Werte aus einer der Tabellen bei, für die ein Join ausgeführt wurde, wenn in der anderen Tabelle keine Übereinstimmung gefunden wurde. Die Tabellen links und rechts werden in der Syntax als erste und zweite Tabelle aufgelistet. Es werden NULL-Werte verwendet, um die „Lücken“ im Ergebnissatz zu füllen. Diese Abfrage gleicht LISTID-Spaltenwerte in der Tabelle LISTING (linke Tabelle) und der Tabelle SALES (rechte Tabelle) ab. Die Ergebnisse zeigen, dass LISTIDs 2 und 3 zu keinen Verkäufen geführt haben.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Bei der folgenden Abfrage handelt es sich um einen vollständigen Join. Diese Abfrage gleicht LISTID-Spaltenwerte in der Tabelle LISTING (linke Tabelle) und der Tabelle SALES (rechte Tabelle) ab. Nur Zeilen, die zu keinen Verkäufen führen (LISTIDs 2 und 3), sind in den Ergebnissen enthalten.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
and (listing.listid IS NULL or sales.listid IS NULL)
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     2 | NULL   | NULL
     3 | NULL   | NULL
```

Bei dem folgenden Beispiel handelt es sich um einen inneren Join mit der ON-Klausel. In diesem Fall werden NULL-Zeilen nicht zurückgegeben.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

Bei der folgenden Abfrage handelt es sich um einen Cross Join oder kartesischen Join der LISTING- und der SALES-Tabelle mit einem Prädikat zur Begrenzung der Ergebnisse. Diese Abfrage entspricht den LISTID-Spaltenwerten in der SALES-Tabelle und der LISTING-Tabelle für LISTIDs 1, 2, 3, 4 und 5 in beiden Tabellen. Die Ergebnisse zeigen, dass 20 Zeilen den Kriterien entsprechen.

```
select sales.listid as sales_listid, listing.listid as listing_listid
from sales cross join listing
where sales.listid between 1 and 5
and listing.listid between 1 and 5
order by 1,2;

sales_listid | listing_listid
-------------+---------------
1            | 1
1            | 2
1            | 3
1            | 4
1            | 5
4            | 1
4            | 2
4            | 3
4            | 4
4            | 5
5            | 1
5            | 1
5            | 2
5            | 2
5            | 3
5            | 3
5            | 4
5            | 4
5            | 5
5            | 5
```

Das folgende Beispiel ist ein NATURAL-Join zwischen zwei Tabellen. In diesem Fall haben die Spalten listid, sellerid, eventid und dateid identische Namen und Datentypen in beiden Tabellen und werden daher als Join-Spalten verwendet. Die Ergebnisse sind auf 5 Zeilen begrenzt.

```
select listid, sellerid, eventid, dateid, numtickets
from listing natural join sales
order by 1
limit 5;

listid | sellerid  | eventid | dateid | numtickets
-------+-----------+---------+--------+-----------
113    | 29704     | 4699    | 2075   | 22
115    | 39115     | 3513    | 2062   | 14
116    | 43314     | 8675    | 1910   | 28
118    | 6079      | 1611    | 1862   | 9
163    | 24880     | 8253    | 1888   | 14
```

Das folgende Beispiel ist ein Join zwischen zwei Tabellen mit der USING-Klausel. In diesem Fall werden die Spalten listid und eventid als Join-Spalten verwendet. Die Ergebnisse sind auf 5 Zeilen begrenzt.

```
select listid, listing.sellerid, eventid, listing.dateid, numtickets
from listing join sales
using (listid, eventid)
order by 1
limit 5;

listid | sellerid | eventid | dateid | numtickets
-------+----------+---------+--------+-----------
1      | 36861    | 7872    | 1850   | 10
4      | 8117     | 4337    | 1970   | 8
5      | 1616     | 8647    | 1963   | 4
5      | 1616     | 8647    | 1963   | 4
6      | 47402    | 8240    | 2053   | 18
```

Die folgende Abfrage ist ein interner Join zweiter Unterabfragen in der FROM-Klausel. Die Abfrage ermittelt die Zahl der verkauften und nicht verkauften Tickets für verschiedene Veranstaltungskategorien (Konzerte und Shows). Die Unterabfragen mit FROM-Klausel sind *Tabellen*-Unterabfragen und können mehrere Spalten und Zeilen zurückgeben.

```
select catgroup1, sold, unsold
from
(select catgroup, sum(qtysold) as sold
from category c, event e, sales s
where c.catid = e.catid and e.eventid = s.eventid
group by catgroup) as a(catgroup1, sold)
join
(select catgroup, sum(numtickets)-sum(qtysold) as unsold
from category c, event e, sales s, listing l
where c.catid = e.catid and e.eventid = s.eventid
and s.listid = l.listid
group by catgroup) as b(catgroup2, unsold)

on a.catgroup1 = b.catgroup2
order by 1;

catgroup1 |  sold  | unsold
----------+--------+--------
Concerts  | 195444 |1067199
Shows     | 149905 | 817736
```

# Beispiele für UNNEST
<a name="r_FROM_clause-unnest-examples"></a>

UNNEST ist ein Parameter in der FROM-Klausel, der verschachtelte Daten zu Spalten erweitert, die die nicht verschachtelten Elemente der Daten enthalten. Informationen zum Entschachteln von Daten finden Sie unter [Abfragen halbstrukturierter Daten](query-super.md).

Mit der folgenden Anweisung wird die `orders` Tabelle erstellt und aufgefüllt, die eine `products` Spalte mit Produktarrays enthält. IDs Für die Beispiele in diesem Abschnitt werden die Beispieldaten in dieser Tabelle verwendet. 

```
CREATE TABLE orders (
    order_id INT,
    products SUPER
);

-- Populate table
INSERT INTO orders VALUES
(1001, JSON_PARSE('[
        {
            "product_id": "P456",
            "name": "Monitor",
            "price": 299.99,
            "quantity": 1,
            "specs": {
                "size": "27 inch",
                "resolution": "4K"
            }
        }
    ]
')),
(1002, JSON_PARSE('
    [
        {
            "product_id": "P567",
            "name": "USB Cable",
            "price": 9.99,
            "quantity": 3
        },
        {
            "product_id": "P678",
            "name": "Headphones",
            "price": 159.99,
            "quantity": 1,
            "specs": {
                "type": "Wireless",
                "battery_life": "20 hours"
            }
        }
    ]
'));
```

Im Folgenden finden Sie einige Beispiele für das Entschachteln von Abfragen mit den Beispieldaten unter Verwendung der PartiQL-Syntax.

## Entschachteln eines Arrays ohne OFFSET-Spalte
<a name="r_FROM_clause-unnest-examples-no-offset"></a>

Die folgende Abfrage entschachtelt die SUPER-Arrays in der Produktspalte, wobei jede Zeile ein Element aus der Bestellung `order_id` darstellt.

```
SELECT o.order_id, unnested_products.product
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(3 rows)
```

Die folgende Abfrage findet in jeder Bestellung das teuerste Produkt.

```
SELECT o.order_id, MAX(unnested_products.product)
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(2 rows)
```

## Entschachteln eines Arrays mit einer impliziten OFFSET-Spalte
<a name="r_FROM_clause-unnest-examples-implicit-offset"></a>

Die folgende Abfrage verwendet den Parameter `UNNEST ... WITH OFFSET`, um die nullbasierte Position jedes Produkts innerhalb des Bestellungs-Arrays anzuzeigen.

```
SELECT o.order_id, up.product, up.offset_col
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product);

 order_id |                                                           product                                                           | offset_col 
----------+-----------------------------------------------------------------------------------------------------------------------------+------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |          0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |          0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |          1
(3 rows)
```

Da die Anweisung keinen Alias für die Offset-Spalte angibt, benennt Amazon Redshift sie standardmäßig mit `offset_col`.

## Entschachteln eines Arrays mit einer expliziten OFFSET-Spalte
<a name="r_FROM_clause-unnest-examples-explicit-offset"></a>

Die folgende Abfrage verwendet den Parameter `UNNEST ... WITH OFFSET`, um die Produkte innerhalb ihrer Bestellungs-Arrays anzuzeigen. Der Unterschied zwischen dieser Abfrage und der Abfrage im vorherigen Beispiel besteht darin, dass sie die Offset-Spalte explizit mit dem Alias `idx` benennt.

```
SELECT o.order_id, up.product, up.idx
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product, idx);

 order_id |                                                           product                                                           | idx 
----------+-----------------------------------------------------------------------------------------------------------------------------+-----
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |   0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |   0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |   1
(3 rows)
```

# WHERE-Klausel
<a name="r_WHERE_clause"></a>

Die WHERE-Klausel enthält Bedingungen, die entweder einen Join für Tabellen ausführen oder Prädikate auf Spalten in Tabellen anwenden. Für Tabellen können interne Joins ausgeführt werden, indem entweder in der WHERE-Klausel oder in der FROM-Klausel die entsprechende Syntax verwendet wird. Die Kriterien für externe Joins müssen in der FROM-Klausel angegeben werden. 

## Syntax
<a name="r_WHERE_clause-synopsis"></a>

```
[ WHERE condition ]
```

## *Bedingung*
<a name="r_WHERE_clause-synopsis-condition"></a>

Jede Suchbedingung mit einem Booleschen Ergebnis, wie eine Join-Bedingung oder ein Prädikat für eine Tabellenspalte. In den folgenden Beispielen werden gültige Join-Bedingungen gezeigt: 

```
sales.listid=listing.listid
sales.listid<>listing.listid
```

In den folgenden Beispielen werden gültige Bedingungen für Spalten in Tabellen gezeigt: 

```
catgroup like 'S%'
venueseats between 20000 and 50000
eventname in('Jersey Boys','Spamalot')
year=2008
length(catdesc)>25
date_part(month, caldate)=6
```

Bedingungen können einfach oder komplex sein. Im Fall komplexer Bedingungen können Sie Klammern verwenden, um logische Einheiten zu isolieren. Im folgenden Beispiel wird die Join-Bedingung durch Klammern umschlossen. 

```
where (category.catid=event.catid) and category.catid in(6,7,8)
```

## Nutzungshinweise
<a name="r_WHERE_clause_usage_notes"></a>

Sie können in der WHERE-Klausel Aliase verwenden, um Auswahllistenausdrücke zu referenzieren. 

Sie können die Ergebnisse aggregierter Funktionen in der WHERE-Klausel nicht einschränken. Verwenden Sie für diesen Zweck die HAVING-Klausel. 

Spalten, die in der WHERE-Klausel eingeschränkt sind, müssen von Tabellenreferenzen in der FROM-Klausel abgeleitet werden. 

## Beispiel
<a name="r_SELECT_synopsis-example"></a>

Die folgende Abfrage verwendet eine Kombination aus verschiedenen WHERE-Klauseleinschränkungen, einschließlich einer Join-Bedingung für die Tabellen SALES und EVENT, eines Prädikats für die EVENTNAME-Spalte und zweier Prädikate für die STARTTIME-Spalte. 

```
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Hannah Montana'
and date_part(quarter, starttime) in(1,2)
and date_part(year, starttime) = 2008
order by 3 desc, 4, 2, 1 limit 10;

eventname    |      starttime      |   costperticket   | qtysold
----------------+---------------------+-------------------+---------
Hannah Montana | 2008-06-07 14:00:00 |     1706.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |     1658.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       3
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       4
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       1
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       4
(10 rows)
```

# Externe Joins nach Oracle in der WHERE-Klausel
<a name="r_WHERE_oracle_outer"></a>

Um Kompatibilität mit Oracle zu erzielen, unterstützt Amazon Redshift die Verwendung des Oracle-Operators für externe Joins (\$1) in WHERE-Klausel-Join-Bedingungen. Dieser Operator ist ausschließlich für die Verwendung zur Definition von Bedingungen für externe Joins vorgesehen. Verwenden Sie ihn nicht in anderen Zusammenhängen. In den meisten Fällen werden andere Verwendungen dieses Operators stillschweigend ignoriert. 

Ein externer Join gibt alle Zeilen zurück, die der entsprechende interne Join zurückgeben würde, und zusätzlich nicht übereinstimmende Zeilen aus einer oder beiden Tabellen. In der FROM-Klausel können Sie externe Joins nach links, rechts und in beide Richtungen angeben. In der WHERE-Klausel können Sie nur externe Joins nach links und rechts angeben. 

Geben Sie `TABLE1 LEFT OUTER JOIN TABLE2` in der FROM-Klausel einen Wert an oder wenden Sie den Operator TABLE1 (\$1) auf alle verknüpften Spalten aus TABLE2 der WHERE-Klausel an, um Tabellen TABLE1 zu verlinken und nicht übereinstimmende Zeilen zurückzugeben. TABLE2 Für alle Zeilen TABLE1 , die keine übereinstimmenden Zeilen enthalten TABLE2, enthält das Ergebnis der Abfrage Nullen für alle Ausdrücke in der Auswahlliste, die Spalten von enthalten. TABLE2 

Geben `TABLE1 RIGHT OUTER JOIN TABLE2` Sie in TABLE2 der FROM-Klausel an oder wenden Sie den Operator (\$1) auf alle TABLE1 verknüpften Spalten aus TABLE1 der WHERE-Klausel an, um dasselbe Verhalten für alle Zeilen zu erzeugen, die keine übereinstimmenden Zeilen enthalten. 

## Basissyntax
<a name="r_WHERE_oracle_outer-basic-syntax"></a>

```
[ WHERE {
[ table1.column1 = table2.column1(+) ]
[ table1.column1(+) = table2.column1 ]
}
```

Die erste Bedingung entspricht: 

```
from table1 left outer join table2
on table1.column1=table2.column1
```

Die zweite Bedingung entspricht: 

```
from table1 right outer join table2
on table1.column1=table2.column1
```

**Anmerkung**  
Die hier gezeigte Syntax deckt den einfachen Fall eines equijoin für ein einzelnes Paar von Joining-Spalten ab. Andere Arten von Vergleichsbedingungen und mehrere Paare von Joining-Spalten sind jedoch ebenfalls gültig. 

Beispielsweise definiert die folgende WHERE-Klausel einen externen Join über zwei Paare von Spalten. Der Operator (\$1) muss in beiden Bedingungen der gleichen Tabelle angefügt werden: 

```
where table1.col1 > table2.col1(+)
and table1.col2 = table2.col2(+)
```

## Nutzungshinweise
<a name="r_WHERE_oracle_outer_usage_notes"></a>

Verwenden Sie, wenn möglich, die OUTER JOIN-Standardsyntax für die FROM-Klausel anstelle des Operators (\$1) in der WHERE-Klausel. Abfragen, die den Operator (\$1) enthalten, unterliegen den folgenden Regeln: 
+ Sie können den Operator (\$1) nur in der WHERE-Klausel verwenden und nur in Bezug auf Spalten aus Tabellen oder Ansichten. 
+ Sie können den Operator (\$1) nicht auf Ausdrücke anwenden. Ein Ausdruck kann jedoch Spalten enthalten, die den Operator (\$1) verwenden. Beispielsweise gibt die folgende Join-Bedingung einen Syntaxfehler zurück: 

  ```
  event.eventid*10(+)=category.catid
  ```

  Die folgende Join-Bedingungen ist jedoch gültig: 

  ```
  event.eventid(+)*10=category.catid
  ```
+ Sie können den Operator (\$1) nicht in einem Abfrageblock verwenden, der auch Join-Syntax der FROM-Klausel enthält. 
+ Wenn für zwei Tabellen ein Join über mehrere Join-Bedingungen ausgeführt wird, müssen Sie den Operator (\$1) entweder in allen oder in keinen dieser Bedingungen verwenden. Ein Join mit gemischten Syntaxstilen wird ohne Warnung als interner Join ausgeführt. 
+ Der Operator (\$1) erstellt keinen externen Join, wenn Sie für eine Tabelle in der externen Abfrage einen Join mit einer Tabelle ausführen, die das Ergebnis einer internen Abfrage ist. 
+ Um den Operator (\$1) zu verwenden, um einen externen Join einer Tabelle mit sich selbst auszuführen, müssen Sie in der FROM-Klausel Tabellenaliase definieren und diese in der Join-Bedingung referenzieren: 

  ```
  select count(*)
  from event a, event b
  where a.eventid(+)=b.catid;
  
  count
  -------
  8798
  (1 row)
  ```
+ Sie können keine Join-Bedingung kombinieren, die den Operator (\$1) mit einer OR-Bedingung oder einer IN-Bedingung enthält. Beispiel: 

  ```
  select count(*) from sales, listing
  where sales.listid(+)=listing.listid or sales.salesid=0;
  ERROR:  Outer join operator (+) not allowed in operand of OR or IN.
  ```
+  Der Operator (\$1) kann in einer WHERE-Klausel, die einen Join für mehr als zwei Tabellen ausführt, nur einmal auf eine bestimmte Tabelle angewendet werden. Im folgenden Beispiel kann die Tabelle SALES nicht mit dem Operator (\$1) in zwei aufeinanderfolgenden Joins referenziert werden. 

  ```
  select count(*) from sales, listing, event
  where sales.listid(+)=listing.listid and sales.dateid(+)=date.dateid;
  ERROR:  A table may be outer joined to at most one other table.
  ```
+  Wenn die äußere Join-Bedingung der WHERE-Klausel eine Spalte von TABLE2 mit einer Konstante vergleicht, wenden Sie den Operator (\$1) auf die Spalte an. Wenn Sie den Operator nicht angeben, werden die mit der Außenseite verknüpften Zeilen von entfernt TABLE1, die Nullen für die eingeschränkte Spalte enthalten. Beispiele hierfür finden Sie unten im Beispielabschnitt. 

## Beispiele
<a name="r_WHERE_oracle_outer-examples"></a>

Die folgende Join-Abfrage gibt einen externen Join nach links für die Tabellen SALES und LISTING für ihre LISTID-Spalten an: 

```
select count(*)
from sales, listing
where sales.listid = listing.listid(+);

count
--------
172456
(1 row)
```

Die folgende gleichwertige Abfrage führt zum gleichen Ergebnis, verwendet jedoch die Join-Syntax der FROM-Klausel: 

```
select count(*)
from sales left outer join listing on sales.listid = listing.listid;

count
--------
172456
(1 row)
```

Die Tabelle SALES enthält nicht für alle Einträge in der Tabelle LISTING Datensätze, da nicht alle Einträge zu Verkäufen führen. Die folgende Abfrage führt einen externen Join für SALES und LISTING aus und gibt Zeilen aus LISTING zurück, auch wenn in der Tabelle SALES für eine bestimmte Listen-ID keine Verkäufe eingetragen sind. Die Spalten PRICE und COMM, abgeleitet von der Tabelle SALES, enthalten im Ergebnissatz Null-Werte für diese nicht übereinstimmenden Zeilen. 

```
select listing.listid, sum(pricepaid) as price,
sum(commission) as comm
from listing, sales
where sales.listid(+) = listing.listid and listing.listid between 1 and 5
group by 1 order by 1;

listid | price  |  comm
--------+--------+--------
1 | 728.00 | 109.20
2 |        |
3 |        |
4 |  76.00 |  11.40
5 | 525.00 |  78.75
(5 rows)
```

Wenn der Join-Operator der WHERE-Klausel verwendet wird, spielt die Reihenfolge der Tabellen in der FROM-Klausel keine Rolle. 

Ein Beispiel für eine komplexere Bedingung in der WHERE-Klausel für einen externen Join ist der Fall, in dem die Bedingung aus einem Vergleich zwischen zwei Tabellenspalten *und* einem Vergleich mit einer Konstante besteht: 

```
where category.catid=event.catid(+) and eventid(+)=796;
```

Beachten Sie, dass der Operator (\$1) an zwei Stellen verwendet wird: zunächst im Gleichheits-Vergleich zwischen den Tabellen und dann in der Vergleichsbedingungen für die Spalte EVENTID. Das Ergebnis dieser Syntax ist die Bewahrung der Zeilen mit externen Joins, wenn die Einschränkung für EVENTID evaluiert wird. Wenn Sie den Operator (\$1) aus der Einschränkung EVENTID entfernen, behandelt die Abfrage diese Einschränkung als Filter und nicht als Teil der Bedingung für den externen Join. Daher Zeilen mit dem externen Join, die Null-Werte für EVENTID enthalten, aus dem Ergebnissatz entfernt. 

Im folgenden sehen Sie eine vollständige Abfrage, die dieses Verhalten illustriert: 

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid(+)=796;

catname | catgroup | eventid
-----------+----------+---------
Classical | Concerts |
Jazz | Concerts |
MLB | Sports   |
MLS | Sports   |
Musicals | Shows    | 796
NBA | Sports   |
NFL | Sports   |
NHL | Sports   |
Opera | Shows    |
Plays | Shows    |
Pop | Concerts |
(11 rows)
```

Die entsprechende Abfrage, die die Syntax der FROM-Klausel verwendet, ist wie folgt: 

```
select catname, catgroup, eventid
from category left join event
on category.catid=event.catid and eventid=796;
```

Wenn Sie den zweiten Operator (\$1) aus der WHERE-Klauselversion dieser Abfrage entfernen, wird nur 1 Zeile zurückgegeben (die Zeile mit `eventid=796`). 

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid=796;

catname | catgroup | eventid
-----------+----------+---------
Musicals | Shows    | 796
(1 row)
```

# GROUP BY-Klausel
<a name="r_GROUP_BY_clause"></a>

Die GROUP BY-Klausel identifiziert die Gruppierungsspalten für die Abfrage. Sie wird verwendet, um die Zeilen in einer Tabelle zu gruppieren, die in allen aufgelisteten Spalten dieselben Werte haben. Die Reihenfolge, in der die Spalten aufgeführt werden, spielt keine Rolle. Das Ergebnis besteht darin, jeden Satz von Zeilen mit gemeinsamen Werten zu einer einzelnen Gruppenzeile zusammenzufassen, die alle Zeilen in der Gruppe darstellt. Mit GROUP BY können Sie Redundanzen in der Ausgabe beseitigen und Aggregate berechnen, die für die Gruppen gelten. Gruppierungsspalten müssen deklariert werden, wenn die Abfrage aggregierte Werte mit Standardfunktionen wie SUM, AVG und COUNT berechnet. Weitere Informationen finden Sie unter [Aggregationsfunktionen](c_Aggregate_Functions.md).

## Syntax
<a name="r_GROUP_BY_clause-syntax"></a>

```
[ GROUP BY  expression [, ...] | ALL | aggregation_extension  ]
```

wobei *aggregation\$1extension* eins der folgenden Elemente ist:

```
GROUPING SETS ( () | aggregation_extension [, ...] ) |
ROLLUP ( expr [, ...] ) |
CUBE ( expr [, ...] )
```

## Parameters
<a name="r_GROUP_BY_clause-parameters"></a>

 *expression*  
Der Liste der Spalten oder Ausdrücke muss der Liste der nicht aggregierten Ausdrücke in der Auswahlliste der Abfrage entsprechen. Betrachten Sie beispielsweise die folgende einfache Abfrage.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by listid, eventid
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```
In dieser Abfrage besteht die Auswahlliste aus zwei aggregierten Ausdrücken. Der erste verwendet die SUM-Funktion und der zweite verwendet die COUNT-Funktion. Die übrigen beiden Spalten, LISTID und EVENTID, müssen als Gruppierungsspalten deklariert werden.  
Ausdrücke in der -Klausel können ebenfalls die Auswahlliste durch Verwendung von Ordinalzahlen referenzieren. Das vorherige Beispiel könnte beispielsweise wie folgt abgekürzt werden.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by 1,2
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```

ALL  
ALL gibt an, dass nach allen in der SELECT-Liste angegebenen Spalten gruppiert werden soll, mit Ausnahme der aggregierten Spalten. Sehen Sie sich beispielsweise die folgende Abfrage an, die nach `col1` und `col2` gruppiert, ohne sie in der Klausel GROUP BY einzeln angeben zu müssen. Die Spalte `col3` ist das Argument der Funktion `SUM` und daher nicht gruppiert.  

```
SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
```
Wenn Sie für eine Spalte in der SELECT-Liste EXCLUDE angeben, gruppiert die Klausel GROUP BY ALL die Ergebnisse nicht anhand dieser spezifischen Spalte.  

```
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
```

 * *aggregation\$1extension* *   
Sie können die Aggregationserweiterungen GROUPING SETS, ROLLUP und CUBE verwenden, um die Arbeit mehrerer GROUP BY-Operationen in einer einzigen Anweisung auszuführen. Weitere Informationen zu Aggregationserweiterungen und verwandten Funktionen finden Sie unter [Aggregationserweiterungen](r_GROUP_BY_aggregation-extensions.md). 

## Beispiele
<a name="r_GROUP_BY_clause-examples"></a>

In den folgenden Beispielen wird die Tabelle SALES verwendet, die folgende Spalten enthält: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission und saletime. Weitere Informationen zur Tabelle SALES finden Sie unter [Beispieldatenbank](c_sampledb.md).

Die folgende Beispielabfrage gruppiert nach `salesid` und `listid`, ohne sie in der Klausel GROUP BY einzeln angeben zu müssen. Die Spalte `qtysold` ist das Argument der Funktion `SUM` und daher nicht gruppiert.

```
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;

salesid | listid  | sum
--------+---------+------
33095   | 36572   | 2	
88268   | 100813  | 4	
110917  | 127048  | 1	
...
```

Die folgende Beispielabfrage schließt mehrere Spalten in der SELECT-Liste aus. Daher gruppiert GROUP BY ALL nur die Gruppen salesid und listid.

```
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 
FROM sales GROUP BY ALL;

salesid | listid 
--------+---------
33095   | 36572   	
88268   | 100813 	
110917  | 127048 	
...
```

# Aggregationserweiterungen
<a name="r_GROUP_BY_aggregation-extensions"></a>

Amazon Redshift unterstützt Aggregationserweiterungen, um die Arbeit mehrerer GROUP BY-Operationen in einer einzigen Anweisung zu erledigen.

 In den Beispielen zu Aggregationserweiterungen wird die Tabelle `orders` verwendet. Diese enthält Verkaufsdaten für ein Elektronikunternehmen. Sie können `orders` wie folgt erstellen.

```
CREATE TABLE ORDERS (
    ID INT,
    PRODUCT CHAR(20),
    CATEGORY CHAR(20),
    PRE_OWNED CHAR(1),
    COST DECIMAL
);

INSERT INTO ORDERS VALUES
    (0, 'laptop',       'computers',    'T', 1000),
    (1, 'smartphone',   'cellphones',   'T', 800),
    (2, 'smartphone',   'cellphones',   'T', 810),
    (3, 'laptop',       'computers',    'F', 1050),
    (4, 'mouse',        'computers',    'F', 50);
```

## *GROUPING SETS*
<a name="r_GROUP_BY_aggregation-extensions-grouping-sets"></a>

 Berechnet einen oder mehrere Gruppierungssätze in einer einzigen Anweisung. Ein Gruppierungssatz ist die Menge einer einzelnen GROUP BY-Klausel, eine Menge von 0 oder mehr Spalten, nach denen Sie die Ergebnismenge einer Abfrage gruppieren können. GROUP BY GROUPING SETS entspricht der Ausführung einer UNION ALL-Abfrage für eine Ergebnismenge, die nach verschiedenen Spalten gruppiert ist. Beispielsweise entspricht GROUP BY GROUPING SETS((a), (b)) GROUP BY a UNION ALL GROUP BY b. 

 Das folgende Beispiel gibt die Kosten der Produkte der Bestelltabelle zurück, gruppiert sowohl nach den Produktkategorien als auch nach der Art der verkauften Produkte. 

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(category, product);

       category       |       product        | total
----------------------+----------------------+-------
 computers            |                      |  2100
 cellphones           |                      |  1610
                      | laptop               |  2050
                      | smartphone           |  1610
                      | mouse                |    50

(5 rows)
```

## *ROLLUP*
<a name="r_GROUP_BY_aggregation-extensions-rollup"></a>

 Geht von einer Hierarchie aus, bei der vorangehende Spalten als übergeordnete Spalten der nachfolgenden Spalten betrachtet werden. ROLLUP gruppiert Daten nach den bereitgestellten Spalten und gibt zusätzlich zu den gruppierten Zeilen weitere Zwischensummenzeilen zurück, die die Summen auf allen Ebenen der Gruppierungsspalten darstellen. Beispielsweise können Sie GROUP BY ROLLUP((a), (b)) verwenden, um eine Ergebnismenge zurückzugeben, die zuerst nach a und dann nach b gruppiert ist, wobei angenommen wird, dass b ein Unterabschnitt von a ist. ROLLUP gibt auch eine Zeile mit der gesamten Ergebnismenge ohne Gruppierungsspalten zurück. 

GROUP BY ROLLUP((a), (b)) entspricht GROUP BY GROUPING SETS((a,b), (a), ()). 

Im folgenden Beispiel werden die Kosten der Produkte der Bestelltabelle zurückgegeben, zuerst nach Kategorie und dann nach Produkt gruppiert, wobei „product“ (Produkt) eine Unterteilung von „category“ (Kategorie) darstellt.

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY ROLLUP(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      |                      |  3710
(6 rows)
```

## *CUBE*
<a name="r_GROUP_BY_aggregation-extensions-cube"></a>

 Gruppiert Daten nach den bereitgestellten Spalten und gibt zusätzlich zu den gruppierten Zeilen weitere Zwischensummenzeilen zurück, die die Summen auf allen Ebenen der Gruppierungsspalten darstellen. CUBE gibt dieselben Zeilen wie ROLLUP zurück und fügt zusätzliche Zwischensummenzeilen für jede Kombination von Gruppierungsspalten hinzu, die nicht von ROLLUP abgedeckt wird. Beispielsweise können Sie GROUP BY CUBE ((a), (b)) verwenden, um eine Ergebnismenge zurückzugeben, die zuerst nach a und dann nach b – unter der Annahme, dass b ein Unterabschnitt von a ist – und dann nur nach b gruppiert ist. CUBE gibt auch eine Zeile mit der gesamten Ergebnismenge ohne Gruppierungsspalten zurück.

GROUP BY CUBE((a), (b)) entspricht GROUP BY GROUPING SETS((a, b), (a), (b), ()). 

Im folgenden Beispiel werden die Kosten der Produkte der Bestelltabelle zurückgegeben, zuerst nach Kategorie und dann nach Produkt gruppiert, wobei „product“ (Produkt) eine Unterteilung von „category“ (Kategorie) darstellt. Im Gegensatz zum vorherigen Beispiel für ROLLUP gibt die Anweisung Ergebnisse für jede Kombination von Gruppierungsspalten zurück. 

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      | laptop               |  2050
                      | mouse                |    50
                      | smartphone           |  1610
                      |                      |  3710
(9 rows)
```

## *GROUPING/GROUPING\$1ID-Funktionen*
<a name="r_GROUP_BY_aggregation-extentions-grouping"></a>

 ROLLUP und CUBE fügen der Ergebnismenge NULL-Werte hinzu, um Zwischensummenzeilen anzugeben. So gibt GROUP BY ROLLUP((a), (b)) beispielsweise eine oder mehrere Zeilen zurück, die in der Gruppierungsspalte b den Wert NULL haben, um anzugeben, dass es sich um Zwischensummen von Feldern in der Gruppierungsspalte a handelt. Diese NULL-Werte dienen nur dazu, das Format der Rückgabe-Tupel einzuhalten.

 Wenn Sie GROUP BY-Operationen mit ROLLUP und CUBE für Relationen ausführen, die selbst NULL-Werte speichern, kann dies zu Ergebnismengen mit Zeilen führen, die identische Gruppierungsspalten zu haben scheinen. Zurück zum vorherigen Beispiel: Wenn die Gruppierungsspalte b einen gespeicherten NULL-Wert enthält, gibt GROUP BY ROLLUP((a), (b)) eine Zeile mit dem Wert NULL in Gruppierungsspalte b zurück, bei der es sich nicht um eine Zwischensumme handelt. 

 Um zwischen NULL-Werten, die von ROLLUP und CUBE erstellt wurden, und den in den Tabellen selbst gespeicherten NULL-Werten zu unterscheiden, können Sie die GROUPING-Funktion oder ihren Alias GROUPING\$1ID verwenden. GROUPING verwendet einen einzelnen Gruppierungssatz als Argument und gibt für jede Zeile in der Ergebnismenge einen 0- oder 1-Bit-Wert entsprechend der Gruppierungsspalte an der betreffenden Position zurück und wandelt diesen Wert dann in eine Ganzzahl um. Wenn der Wert an dieser Position ein NULL-Wert ist, der durch eine Aggregationserweiterung erstellt wurde, gibt GROUPING 1 zurück. Für alle anderen Werte einschließlich gespeicherter NULL-Werte wird 0 zurückgegeben.

 Beispielsweise kann GROUPING(Kategorie, Produkt) die folgenden Werte für eine bestimmte Zeile zurückgeben, je nach Gruppierungsspaltenwerten für diese Zeile. Für die Zwecke dieses Beispiels sind alle NULL-Werte in der Tabelle NULL-Werte, die durch eine Aggregationserweiterung erstellt wurden.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_GROUP_BY_aggregation-extensions.html)

GROUPING-Funktionen werden im SELECT-Listenbereich der Abfrage im folgenden Format angezeigt.

```
SELECT ... [GROUPING( expr )...] ...
  GROUP BY ... {CUBE | ROLLUP| GROUPING SETS} ( expr ) ...
```

Das folgende Beispiel entspricht dem vorherigen Beispiel für CUBE, enthält jedoch zusätzliche GROUPING-Funktionen für die Gruppierungssätze

```
SELECT category, product,
       GROUPING(category) as grouping0,
       GROUPING(product) as grouping1,
       GROUPING(category, product) as grouping2,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 3,1,2;

       category       |       product        | grouping0 | grouping1 | grouping2 | total
----------------------+----------------------+-----------+-----------+-----------+-------
 cellphones           | smartphone           |         0 |         0 |         0 |  1610
 cellphones           |                      |         0 |         1 |         1 |  1610
 computers            | laptop               |         0 |         0 |         0 |  2050
 computers            | mouse                |         0 |         0 |         0 |    50
 computers            |                      |         0 |         1 |         1 |  2100
                      | laptop               |         1 |         0 |         2 |  2050
                      | mouse                |         1 |         0 |         2 |    50
                      | smartphone           |         1 |         0 |         2 |  1610
                      |                      |         1 |         1 |         3 |  3710
(9 rows)
```

## *Partielle ROLLUP- und CUBE-Operationen*
<a name="r_GROUP_BY_aggregation-extentions-partial"></a>

 Sie können ROLLUP- und CUBE-Operationen nur mit einem Teil der Zwischensummen ausführen. 

 Die Syntax für partielle ROLLUP- und CUBE-Operationen lautet wie folgt.

```
GROUP BY expr1, { ROLLUP | CUBE }(expr2, [, ...])
```

Hier erstellt die GROUP BY-Klausel nur Zwischensummenzeilen auf der Ebene *expr2* und höher.

Die folgenden Beispiele zeigen partielle ROLLUP- und CUBE-Operationen in der Bestelltabelle, wobei zuerst danach gruppiert wird, ob ein Produkt gebraucht ist, und dann ROLLUP und CUBE für die Kategorie- und Produktspalten ausgeführt werden.

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, ROLLUP(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(9 rows)

SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, CUBE(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(13 rows)
```

Da die Spalte für gebrauchte Produkte nicht in den ROLLUP- und CUBE-Operationen enthalten ist, gibt es keine Gesamtsummenzeile, die alle anderen Zeilen enthält. 

## *Verkettete Gruppierung*
<a name="r_GROUP_BY_aggregation-extentions-concat"></a>

 Sie können mehrere GROUPING-Klauseln verketten, um unterschiedliche Stufen von Zwischensummen zu SETS/ROLLUP/CUBE berechnen. Verkettete Gruppierungen geben das kartesische Produkt der bereitgestellten Gruppierungssätze zurück. 

 Die Syntax für die Verkettung von GROUPING-Klauseln lautet wie folgt. SETS/ROLLUP/CUBE

```
GROUP BY {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...]),
         {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...])[, ...]
```

Im folgenden Beispiel sehen Sie, wie eine kleine verkettete Gruppierung eine große endgültige Ergebnismenge ergeben kann.

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product), GROUPING SETS(pre_owned, ())
ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
           | cellphones           | smartphone           |        1 |  1610
           | computers            | laptop               |        1 |  2050
           | computers            | mouse                |        1 |    50
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
           | cellphones           |                      |        3 |  1610
           | computers            |                      |        3 |  2100
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
           |                      | laptop               |        5 |  2050
           |                      | mouse                |        5 |    50
           |                      | smartphone           |        5 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
           |                      |                      |        7 |  3710
(22 rows)
```

## *Verschachtelte Gruppierung*
<a name="r_GROUP_BY_aggregation-extentions-nested"></a>

 *Sie können SETS/ROLLUP/CUBE GROUPING-Operationen als Ihren GROUPING SETS-Ausdruck verwenden, um eine verschachtelte Gruppierung zu bilden.* Die Untergruppierung innerhalb verschachtelter GROUPING SETS ist abgeflacht. 

 Die Syntax für die verschachtelte Gruppierung lautet wie folgt.

```
GROUP BY GROUPING SETS({ROLLUP|CUBE|GROUPING SETS}(expr[, ...])[, ...])
```

Betrachten Sie das folgende Beispiel.

```
SELECT category, product, pre_owned,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(ROLLUP(category), CUBE(product, pre_owned))
ORDER BY 4,1,2,3;

       category       |       product        | pre_owned | group_id | total
----------------------+----------------------+-----------+----------+-------
 cellphones           |                      |           |        3 |  1610
 computers            |                      |           |        3 |  2100
                      | laptop               | F         |        4 |  1050
                      | laptop               | T         |        4 |  1000
                      | mouse                | F         |        4 |    50
                      | smartphone           | T         |        4 |  1610
                      | laptop               |           |        5 |  2050
                      | mouse                |           |        5 |    50
                      | smartphone           |           |        5 |  1610
                      |                      | F         |        6 |  1100
                      |                      | T         |        6 |  2610
                      |                      |           |        7 |  3710
                      |                      |           |        7 |  3710
(13 rows)
```

Beachten Sie, dass die Zeile, die die Gesamtsumme darstellt, dupliziert wird, da sowohl ROLLUP(categorie) als auch CUBE(product, pre\$1owned) den Gruppierungssatz () enthalten.

## *Nutzungshinweise*
<a name="r_GROUP_BY_aggregation-extensions-usage-notes"></a>
+ Die GROUP BY-Klausel unterstützt bis zu 64 Gruppierungssätze. Im Falle von ROLLUP und CUBE oder einer Kombination von GROUPING SETS, ROLLUP und CUBE gilt diese Einschränkung für die implizite Anzahl an Gruppierungssätzen. So zählt beispielsweise GROUP BY CUBE((a), (b)) als 4 und nicht als 2 Gruppierungssätze.
+ Bei Verwendung von Aggregationserweiterungen können Sie keine Konstanten als Gruppierungsspalten verwenden.
+ Sie können keinen Gruppierungssatz erstellen, der doppelte Spalten enthält.

# HAVING-Klausel
<a name="r_HAVING_clause"></a>

Die HAVING-Klausel wendet eine Bedingung auf den gruppierten Zwischenergebnissatz an, den eine Abfrage zurückgibt.

## Syntax
<a name="r_HAVING_clause-synopsis"></a>

```
[ HAVING condition ]
```

Sie können beispielsweise die Ergebnisse einer SUM-Funktion einschränken:

```
having sum(pricepaid) >10000
```

Die HAVING-Bedingung wird angewendet, nachdem alle WHERE-Klauselbedingungen angewendet wurden und die GROUP BY-Operationen abgeschlossen sind.

Die Bedingung selbst hat das gleiche Format wie eine WHERE-Klauselbedingung.

## Nutzungshinweise
<a name="r_HAVING_clause_usage_notes"></a>
+ Bei jeder, in einer -Klauselbedingung referenzierten Spalte muss es sich entweder um eine Gruppierungsspalte handeln oder um eine Spalte, die sich auf das Ergebnis einer aggregierten Funktion bezieht.
+ In einer HAVING-Klausel können Sie Folgendes nicht angeben:
  + Eine Ordinalzahl, die ein Auswahllistenelement referenziert. Nur die Klauseln GROUP BY und ORDER BY akzeptieren Ordinalzahlen.

## Beispiele
<a name="r_HAVING_clause-examples"></a>

Die folgende Abfrage berechnet den Ticket-Gesamtverkauf für alle Veranstaltungen nach Namen. Anschließend werden Veranstaltungen entfernt, deren Gesamtverkauf weniger als 800.000 USD betrug. Die HAVING-Bedingung wird auf die Ergebnisse der Aggregierungsfunktion in der Auswahlliste angewendet: `sum(pricepaid)`.

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(pricepaid) > 800000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

Die folgende Abfrage berechnet einen ähnlichen Ergebnissatz. In diesem Fall wird die HAVING-Bedingung jedoch auf ein Aggregat angewendet, das nicht in der Auswahlliste angegeben ist: `sum(qtysold)`. Veranstaltungen, für weniger als 2.000 Tickets verkauft wurden, werden aus dem Endergebnis entfernt.

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(qtysold) >2000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
Chicago          |  790993.00
Spamalot         |  714307.00
```

Die folgende Abfrage berechnet den Ticket-Gesamtverkauf für alle Veranstaltungen nach Namen. Anschließend werden Veranstaltungen entfernt, deren Gesamtverkauf weniger als 800.000 USD betrug. Die Bedingung HAVING wird auf die Ergebnisse der Aggregierungsfunktion in der SELECT-Liste unter Verwendung des Alias `pp` für `sum(pricepaid)` angewendet.

```
select eventname, sum(pricepaid) as pp
from sales join event on sales.eventid = event.eventid
group by 1
having pp > 800000
order by 2 desc, 1;

eventname        |    pp
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

# QUALIFY-Klausel
<a name="r_QUALIFY_clause"></a>

Die QUALIFY-Klausel filtert die Ergebnisse einer zuvor berechneten Fensterfunktion anhand benutzerdefinierter Suchbedingungen. Sie können die Klausel verwenden, um Filterbedingungen auf das Ergebnis einer Fensterfunktion anzuwenden, ohne eine Unterabfrage zu verwenden.

Die Klausel ist der [HAVING-Klausel](https://docs.aws.amazon.com/redshift/latest/dg/r_HAVING_clause.html) ähnlich, die eine Bedingung anwendet, um Zeilen aus einer WHERE-Klausel weiter zu filtern. Der Unterschied zwischen QUALIFY und HAVING besteht darin, dass gefilterte Ergebnisse aus der QUALIFY-Klausel auf dem Ergebnis der Ausführung von Fensterfunktionen für die Daten basieren können. Sie können sowohl die QUALIFY- als auch die HAVING-Klausel in einer Abfrage verwenden.

## Syntax
<a name="r_QUALIFY-synopsis"></a>

```
QUALIFY condition
```

**Anmerkung**  
Wenn Sie die QUALIFY-Klausel direkt nach der FROM-Klausel benutzen, muss vor der QUALIFY-Klausel vor dem Namen der FROM-Beziehung ein Alias angegeben werden.

## Beispiele
<a name="r_QUALIFY-examples"></a>

Für die Beispiele in diesem Abschnitt werden die unten angegebenen Beispieldaten verwendet.

```
create table store_sales (ss_sold_date date, ss_sold_time time, 
               ss_item text, ss_sales_price float);
insert into store_sales values ('2022-01-01', '09:00:00', 'Product 1', 100.0),
                               ('2022-01-01', '11:00:00', 'Product 2', 500.0),
                               ('2022-01-01', '15:00:00', 'Product 3', 20.0),
                               ('2022-01-01', '17:00:00', 'Product 4', 1000.0),
                               ('2022-01-01', '18:00:00', 'Product 5', 30.0),
                               ('2022-01-02', '10:00:00', 'Product 6', 5000.0),
                               ('2022-01-02', '16:00:00', 'Product 7', 5.0);
```

Das folgende Beispiel zeigt, wie Sie die beiden teuersten Artikel finden, die täglich nach 12:00 Uhr verkauft werden.

```
SELECT *
FROM store_sales ss
WHERE ss_sold_time > time '12:00:00'
QUALIFY row_number()
OVER (PARTITION BY ss_sold_date ORDER BY ss_sales_price DESC) <= 2
               

 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 17:00:00     | Product 4 |           1000
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

Sie können dann den letzten Artikel finden, der jeden Tag verkauft wurde.

```
SELECT *
FROM store_sales ss
QUALIFY last_value(ss_item)
OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
      ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) = ss_item;
               
ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

Das folgende Beispiel gibt die gleichen Datensätze wie die vorherige Abfrage zurück (den letzten Artikel, der jeden Tag verkauft wurde), verwendet dabei jedoch nicht die QUALIFY-Klausel.

```
SELECT * FROM (
  SELECT *,
  last_value(ss_item)
  OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ss_last_item
  FROM store_sales ss
)
WHERE ss_last_item = ss_item;
               
 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price | ss_last_item 
--------------+--------------+-----------+----------------+--------------
 2022-01-02   | 16:00:00     | Product 7 |              5 | Product 7
 2022-01-01   | 18:00:00     | Product 5 |             30 | Product 5
```

# UNION, INTERSECT und EXCEPT
<a name="r_UNION"></a>

**Topics**
+ [Syntax](#r_UNION-synopsis)
+ [Parameters](#r_UNION-parameters)
+ [Reihenfolge der Evaluierung für Satzoperatoren](#r_UNION-order-of-evaluation-for-set-operators)
+ [Nutzungshinweise](#r_UNION-usage-notes)
+ [Beispiel für UNION-Abfragen](c_example_union_query.md)
+ [Beispiel für die UNION ALL-Abfrage](c_example_unionall_query.md)
+ [Beispiel für INTERSECT-Abfragen](c_example_intersect_query.md)
+ [Beispiel für die EXCEPT-Abfrage](c_Example_MINUS_query.md)

Die *Satzoperatoren* UNION, INTERSECT und EXCEPT werden verwendet, um die Ergebnisse von zwei getrennten Abfrageausdrücken zu vergleichen und zusammenzuführen. Wenn Sie beispielsweise wissen möchten, welche Benutzer einer Website sowohl Käufer als auch Verkäufer sind, die Namen jedoch in getrennten Spalten oder Tabellen gespeichert sind, können Sie die *Überschneidung* zwischen diesen beiden Arten von Benutzern finden. Wenn Sie wissen möchten, welche Benutzer einer Website Käufer, jedoch nicht Verkäufer sind, können Sie den Operator EXCEPT verwenden, um den *Unterschied* zwischen diesen beiden Listen von Benutzern zu finden. Wenn Sie eine Liste aller Benutzer unabhängig von der Rolle erstellen möchten, können Sie den Operator UNION verwenden.

## Syntax
<a name="r_UNION-synopsis"></a>

```
query
{ UNION [ ALL ] | INTERSECT | EXCEPT | MINUS }
query
```

## Parameters
<a name="r_UNION-parameters"></a>

 *query*   
Ein Abfrageausdruck, der in Form seiner Auswahlliste einem zweiten Abfrageausdruck entspricht, der dem Operator UNION, INTERSECT oder EXCEPT folgt. Die beiden Ausdrücke müssen die gleiche Zahl von Ausgabespalten mit kompatiblen Datentypen enthalten. Andernfalls können die beiden Ergebnissätze nicht verglichen und zusammengeführt werden. Satzoperationen lassen die implizite Umwandlung zwischen unterschiedlichen Kategorien von Datentypen nicht zu. Weitere Informationen finden Sie unter [Kompatibilität von Typen und Umwandlung zwischen Typen](c_Supported_data_types.md#r_Type_conversion).  
Sie können Abfragen erstellen, die eine unbegrenzte Anzahl von Abfrageausdrücken enthalten, und sie mithilfe der Operatoren UNION, INTERSECT und EXCEPT in beliebigen Kombinationen verbinden. Beispielsweise ist die folgende Abfragestruktur gültig, wenn die Tabellen T1, T2 und T3 kompatible Sätze von Spalten enthalten:   

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

UNION   
Satzoperation, die Zeilen aus zwei Abfrageausdrücken zurückgibt, unabhängig davon, ob die Zeilen von einem oder von beiden Ausdrücken abgeleitet werden.

INTERSECT   
Satzoperation, die Zeilen zurückgibt, die von zwei Abfrageausdrücken abgeleitet werden. Zeilen, die nicht von beiden Ausdrücken zurückgegeben werden, werden verworfen.

EXCEPT \$1 MINUS   
Satzoperation, die Zeilen zurückgibt, die von einem von zwei Abfrageausdrücken abgeleitet werden. Um sich für das Ergebnis zu qualifizieren, dürfen Zeilen zwar in der ersten Ergebnistabelle, nicht jedoch in der zweiten vorhanden sein. MINUS und EXCEPT sind exakte Synonyme. 

ALL   
Das Schlüsselwort ALL behält alle duplizierten Zeilen, die von UNION erstellt werden. Wenn das Schlüsselwort ALL nicht verwendet wird, besteht das Standardverhalten darin, diese Duplikate zu verwerfen. INTERSECT ALL, EXCEPT ALL und MINUS ALL werden nicht unterstützt.

## Reihenfolge der Evaluierung für Satzoperatoren
<a name="r_UNION-order-of-evaluation-for-set-operators"></a>

Die Satzoperatoren UNION und EXCEPT sind links-assoziativ. Wenn keine Klammern angegeben werden, um die Reihenfolge zu beeinflussen, wird eine Kombination dieser Satzoperatoren von links nach rechts ausgewertet. Beispielsweise wird in der folgenden Abfrage der Operator UNION von T1 und T2 zuerst ausgewertet. Anschließend wird die Operation EXCEPT für das UNION-Ergebnis ausgeführt: 

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

Der Operator INTERSECT hat Vorrang vor den Operatoren UNION und EXCEPT, wenn in derselben Abfrage eine Kombination von Operatoren verwendet wird. Beispielsweise wird in der folgenden Abfrage die Schnittmenge von T2 und T3 ausgewertet und anschließend mit T1 vereinigt: 

```
select * from t1
union
select * from t2
intersect
select * from t3
order by c1;
```

Durch die Hinzufügung von Klammern können Sie eine andere Reihenfolge für die Auswertung erzwingen. Im folgenden Fall wird für das Ergebnis von UNION für T1 und T2 eine Überschneidung mit T3 ausgewertet. Die Abfrage führt wahrscheinlich zu einem anderen Ergebnis. 

```
(select * from t1
union
select * from t2)
intersect
(select * from t3)
order by c1;
```

## Nutzungshinweise
<a name="r_UNION-usage-notes"></a>
+ Die Spaltennamen, die im Ergebnis einer Satzoperationsabfrage zurückgegeben werden, sind die Spaltennamen (Spaltenaliase) aus den Tabellen im ersten Abfrageausdruck. Da diese Spaltennamen potenziell irreführend sein können, da die Werte in der Spalte aus Tabellen auf beiden Seiten des Satzoperators abgeleitet werden, sollten Sie möglicherweise sinnvolle Aliase für den Ergebnissatz bereitstellen.
+ Ein Abfrageausdruck, der einem Operator vorangeht, sollte keine ORDER BY-Klausel enthalten. Eine ORDER BY-Klausel gibt nur dann sinnvolle, sortierte Ergebnisse zurück, wenn sie am Ende einer Abfrage mit Satzoperatoren verwendet wird. In diesem Fall wird die ORDER BY-Klausel auf die Endergebnisse aller Satzoperationen angewendet. Die Abfrage ganz außen kann auch LIMIT- und OFFSET-Standardklauseln enthalten. 
+ Wenn Abfragen mit Satzoperatoren Dezimalergebnisse zurückgeben, geben die entsprechenden Ergebnisspalten Werte mit derselben Genauigkeit und Skalierung zurück. In der folgenden Abfrage, in der T1.REVENUE eine DECIMAL(10,2)-Spalte ist und T2.REVENUE eine DECIMAL(8,4)-Spalte ist, ist das Dezimalergebnis DECIMAL(12,4): 

  ```
  select t1.revenue union select t2.revenue;
  ```

  Die Skalierung ist `4`, da dies die maximale Skalierung der beiden Spalten ist. Die Genauigkeit ist `12`, da T1.REVENUE 8 Stellen links vom Dezimalkomma erfordert (12 – 4 = 8). Dieser Vorgang stellt sicher, dass alle Werte aus beiden Seiten der UNION-Operation in das Ergebnis passen. Für 64-Bit-Werte ist die maximale Ergebnisgenauigkeit 19 und die maximale Ergebnisskalierung 18. Für 128-Bit-Werte ist die maximale Ergebnisgenauigkeit 38 und die maximale Ergebnisskalierung 37.

  Wenn der Ergebnisdatentyp die Genauigkeits- und Skalierungslimits von Amazon Redshift überschreitet, gibt die Abfrage einen Fehler zurück.
+ Bei Satzoperationen werden zwei Zeilen als identisch behandelt, wenn für jedes korrespondierendes Spaltenpaar die beiden Datenwerte beide *gleich* oder beide *NULL* sind. Wenn beispielsweise die Tabellen T1 und T2 beide nur eine Spalte und eine Zeile enthalten und diese Zeile in beiden Tabellen NULL ist, gibt eine INTERSECT-Operation für diese Tabellen diese Zeile zurück.

# Beispiel für UNION-Abfragen
<a name="c_example_union_query"></a>

In der folgenden UNION-Abfrage werden Zeilen in der Tabelle SALES mit Zeilen in der Tabelle LISTING zusammengeführt. Aus jeder Tabelle werden drei kompatible Spalten ausgewählt. In diesem Fall haben die korrespondierenden Spalten die gleichen Namen und Datentypen. 

Das Endergebnis wird nach der ersten Spalte in der Tabelle LISTING angeordnet und ist auf die 5 Zeilen mit dem höchsten LISTID-Wert begrenzt. 

```
select listid, sellerid, eventid from listing
union select listid, sellerid, eventid from sales
order by listid, sellerid, eventid desc limit 5;

listid | sellerid | eventid
--------+----------+---------
1 |    36861 |    7872
2 |    16002 |    4806
3 |    21461 |    4256
4 |     8117 |    4337
5 |     1616 |    8647
(5 rows)
```

Das folgende Beispiel zeigt, wie Sie der Ausgabe einer UNION-Abfrage einen Literalwert hinzufügen können, um zu sehen, durch welche Abfrageausdrücke die einzelnen Zeilen im Ergebnissatz jeweils generiert wurden. Die Abfrage identifiziert Zeilen aus dem ersten Abfrageausdruck als „B“ (für Käufer) und Zeilen aus dem zweiten Abfrageausdruck als „S“ (für Verkäufer). 

Die Abfrage identifiziert Käufer und Verkäufer für Tickettransaktionen, die einen Wert von mindestens 10.000 USD haben. Der einzige Unterschied zwischen den beiden Abfrageausdrücken auf beiden Seiten des UNION-Operators besteht in der Joining-Spalte für die Tabelle SALES. 

```
select listid, lastname, firstname, username,
pricepaid as price, 'S' as buyorsell
from sales, users
where sales.sellerid=users.userid
and pricepaid >=10000
union
select listid, lastname, firstname, username, pricepaid,
'B' as buyorsell
from sales, users
where sales.buyerid=users.userid
and pricepaid >=10000
order by 1, 2, 3, 4, 5;

listid | lastname | firstname | username |   price   | buyorsell
--------+----------+-----------+----------+-----------+-----------
209658 | Lamb     | Colette   | VOR15LYI |  10000.00 | B
209658 | West     | Kato      | ELU81XAA |  10000.00 | S
212395 | Greer    | Harlan    | GXO71KOC |  12624.00 | S
212395 | Perry    | Cora      | YWR73YNZ |  12624.00 | B
215156 | Banks    | Patrick   | ZNQ69CLT |  10000.00 | S
215156 | Hayden   | Malachi   | BBG56AKU |  10000.00 | B
(6 rows)
```

Das folgende Beispiel verwendet einen UNION ALL-Operator, da duplizierte Zeilen im Ergebnis beibehalten werden müssen, wenn gefunden. Für eine bestimmte Reihe von Ereignissen gibt die Abfrage 0 oder mehr Zeilen für jeden Verkauf zurück IDs, der mit jeder Veranstaltung verknüpft ist, und 0 oder 1 Zeile für jede Auflistung dieser Veranstaltung. Ereignisse IDs sind für jede Zeile in den Tabellen LISTING und EVENT eindeutig, aber es kann mehrere Verkäufe für dieselbe Kombination aus Ereignis und Angebot IDs in der Tabelle SALES geben. 

Die dritte Spalte im Ergebnissatz identifiziert die Quelle der Zeile. Wenn sie aus der Tabelle SALES stammt, wird sie in der Spalte SALESROW mit „Ja“ markiert. (SALESROW ist ein Alias für SALES.LISTID.) Wenn sie aus der Tabelle LISTING stammt, wird sie in der Spalte SALESROW mit „Nein“ markiert. 

In diesem Fall besteht der Ergebnissatz aus drei Verkaufszeilen für Auflistung 500, Ereignis 7787. Mit anderen Worten, für diese Kombination von Auflistung und Ereignis fanden drei verschiedene Transaktionen statt. Bei den anderen beiden Auflistungen, 501 und 502, wurden keine Verkäufe erzielt. Daher IDs stammt die einzige Zeile, die die Abfrage für diese Listen generiert, aus der Tabelle LISTING (SALESROW = 'No'). 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

Wenn Sie die gleiche Abfrage ohne das Schlüsselwort ALL ausführen, gibt das Ergebnis nur eine der Verkaufstransaktionen zurück. 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# Beispiel für die UNION ALL-Abfrage
<a name="c_example_unionall_query"></a>

Das folgende Beispiel verwendet einen UNION ALL-Operator, da duplizierte Zeilen im Ergebnis beibehalten werden müssen, wenn gefunden. Für eine bestimmte Reihe von Ereignissen IDs gibt die Abfrage 0 oder mehr Zeilen für jeden Verkauf zurück, der mit jeder Veranstaltung verknüpft ist, und 0 oder 1 Zeile für jede Auflistung dieser Veranstaltung. Ereignisse IDs sind für jede Zeile in den Tabellen LISTING und EVENT eindeutig, aber es kann mehrere Verkäufe für dieselbe Kombination aus Ereignis und Angebot IDs in der Tabelle SALES geben.

Die dritte Spalte im Ergebnissatz identifiziert die Quelle der Zeile. Wenn sie aus der Tabelle SALES stammt, wird sie in der Spalte SALESROW mit „Ja“ markiert. (SALESROW ist ein Alias für SALES.LISTID.) Wenn sie aus der Tabelle LISTING stammt, wird sie in der Spalte SALESROW mit „Nein“ markiert.

In diesem Fall besteht der Ergebnissatz aus drei Verkaufszeilen für Auflistung 500, Ereignis 7787. Mit anderen Worten, für diese Kombination von Auflistung und Ereignis fanden drei verschiedene Transaktionen statt. Bei den anderen beiden Auflistungen, 501 und 502, wurden keine Verkäufe erzielt. Daher IDs stammt die einzige Zeile, die die Abfrage für diese Listen generiert, aus der Tabelle LISTING (SALESROW = 'No').

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

Wenn Sie die gleiche Abfrage ohne das Schlüsselwort ALL ausführen, gibt das Ergebnis nur eine der Verkaufstransaktionen zurück. 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# Beispiel für INTERSECT-Abfragen
<a name="c_example_intersect_query"></a>

Vergleichen Sie das folgende Beispiel mit dem ersten UNION-Beispiel. Der einzige Unterschied zwischen den beiden Beispielen besteht im verwendeten Satzoperator. Die Ergebnisse unterscheiden sich jedoch stark. Nur eine Zeile ist identisch: 

```
235494 |    23875 |    8771
```

 Dies ist die einzige Zeile im begrenzten Ergebnis von 5 Zeilen, die in beiden Tabellen gefunden wurde.

```
select listid, sellerid, eventid from listing
intersect
select listid, sellerid, eventid from sales
order by listid desc, sellerid, eventid
limit 5;

listid | sellerid | eventid
--------+----------+---------
235494 |    23875 |    8771
235482 |     1067 |    2667
235479 |     1589 |    7303
235476 |    15550 |     793
235475 |    22306 |    7848
(5 rows)
```

Die folgende Abfrage sucht Veranstaltungen (für die Tickets verkauft wurden), die im März sowohl in New York City als auch in Los Angeles stattfanden. Der Unterschied zwischen den beiden Abfrageausdrücken auf beiden Seiten des UNION-Operators besteht in der Einschränkung für die Spalte VENUECITY.

```
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='Los Angeles'
intersect
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='New York City'
order by eventname asc;

eventname
----------------------------
A Streetcar Named Desire
Dirty Dancing
Electra
Running with Annalise
Hairspray
Mary Poppins
November
Oliver!
Return To Forever
Rhinoceros
South Pacific
The 39 Steps
The Bacchae
The Caucasian Chalk Circle
The Country Girl
Wicked
Woyzeck
(16 rows)
```

# Beispiel für die EXCEPT-Abfrage
<a name="c_Example_MINUS_query"></a>

Die Tabelle CATEGORY in der Datenbank TICKIT enthält die folgenden 11 Zeilen: 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
   1   | Sports   | MLB       | Major League Baseball
   2   | Sports   | NHL       | National Hockey League
   3   | Sports   | NFL       | National Football League
   4   | Sports   | NBA       | National Basketball Association
   5   | Sports   | MLS       | Major League Soccer
   6   | Shows    | Musicals  | Musical theatre
   7   | Shows    | Plays     | All non-musical theatre
   8   | Shows    | Opera     | All opera and light opera
   9   | Concerts | Pop       | All rock and pop music concerts
  10   | Concerts | Jazz      | All jazz singers and bands
  11   | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

Angenommen, eine Tabelle namens CATEGORY\$1STAGE (eine Staging-Tabelle) enthält eine einzige zusätzliche Zeile: 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
1 | Sports   | MLB       | Major League Baseball
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
6 | Shows    | Musicals  | Musical theatre
7 | Shows    | Plays     | All non-musical theatre
8 | Shows    | Opera     | All opera and light opera
9 | Concerts | Pop       | All rock and pop music concerts
10 | Concerts | Jazz      | All jazz singers and bands
11 | Concerts | Classical | All symphony, concerto, and choir concerts
12 | Concerts | Comedy    | All stand up comedy performances
(12 rows)
```

Gibt den Unterschied zwischen den beiden Tabellen zurück. Mit anderen Worten, gibt Zeilen zurück, die in der Tabelle CATEGORY\$1STAGE, jedoch nicht in der Tabelle CATEGORY enthalten sind: 

```
select * from category_stage
except
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

Die folgende gleichwertige Abfrage verwendet das Synonym MINUS. 

```
select * from category_stage
minus
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

Wenn Sie die Reihenfolge der SELECT-Ausdrücke umkehren, gibt die Abfrage keine Zeilen zurück. 

# ORDER BY-Klausel
<a name="r_ORDER_BY_clause"></a>

**Topics**
+ [Syntax](#r_ORDER_BY_clause-synopsis)
+ [Parameters](#r_ORDER_BY_clause-parameters)
+ [Nutzungshinweise](#r_ORDER_BY_usage_notes)
+ [Beispiele mit ORDER BY](r_Examples_with_ORDER_BY.md)

Die ORDER BY-Klausel sortiert den Ergebnissatz einer Abfrage.

## Syntax
<a name="r_ORDER_BY_clause-synopsis"></a>

```
[ ORDER BY expression [ ASC | DESC ] ]
[ NULLS FIRST | NULLS LAST ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
```

## Parameters
<a name="r_ORDER_BY_clause-parameters"></a>

 *expression*   
Ausdruck, der die Sortierreihenfolge des Abfrageergebnissatzes definiert, in der Regel durch die Angabe mindestens einer Spalte in der Auswahlliste. Die Ergebnisse werden auf der Basis einer binären UTF-8-Reihenfolge zurückgegeben. Sie können auch Folgendes angeben:  
+ Spalten, die nicht in der Auswahlliste vorhanden sind
+ Ausdrücke, die aus einer oder mehreren Spalten gebildet werden, die in den Tabellen vorhanden sind, die von der Abfrage referenziert werden
+ Ordinalzahlen, die die Position der Auswahllisteneinträge darstellen (oder die Position der Spalten in der Tabelle, wenn keine Auswahlliste vorhanden ist)
+ Aliase, die Auswahllisteneinträge definieren
Wenn die -Klausel mehrere Ausdrücke enthält, wird der Ergebnissatz nach dem ersten Ausdruck sortiert. Anschließend wird der zweite Ausdruck auf Zeilen mit übereinstimmenden Werten aus dem ersten Ausdruck angewendet usw.

ASC \$1 DESC   
Eine Option, die die Sortierreihenfolge für den Ausdruck wie folgt definiert:   
+ ASC: aufsteigend (beispielsweise niedrig nach hoch für numerische Werte und A bis Z für Zeichenfolgen). Wenn keine Option angegeben wird, werden die Daten standardmäßig in aufsteigender Reihenfolge sortiert. 
+ DESC: absteigend (beispielsweise hoch nach niedrig für numerische Werte und Z bis A für Zeichenfolgen). 

NULLS FIRST \$1 NULLS LAST  
Option, die angibt, ob NULL-Werte vor Nicht-Null-Werten oder nach Nicht-Null-Werten aufgelistet werden sollen. Standardmäßig werden NULL-Werte in einer ASC-Reihenfolge an letzter Stelle sortiert und aufgeführt und in einer DESC-Reihenfolge an erster Stelle sortiert und aufgeführt.

LIMIT *number* \$1 ALL   <a name="order-by-clause-limit"></a>
Option, die die Anzahl der sortierten Zeilen steuert, die von der Abfrage zurückgegeben werden. Bei der LIMIT-Zahl muss es sich um eine positive Ganzzahl handeln. Der maximal zulässige Wert ist `2147483647`.   
LIMIT 0 gibt keine Zeilen zurück. Sie können diese Syntax für Testzwecke verwenden: um zu prüfen, ob eine Abfrage ausgeführt wird (ohne Zeilen anzuzeigen) oder um eine Spaltenliste aus einer Tabelle zurückzugeben. Eine -Klausel ist redundant, wenn Sie LIMIT 0 verwenden, um eine Spaltenliste zurückzugeben. Der Standardwert ist LIMIT ALL. 

OFFSET *start*   <a name="order-by-clause-offset"></a>
Option, die die Anzahl der Zeilen vor *start* angibt, die übersprungen werden sollen, bevor Zeilen zurückgegeben werden. Bei der OFFSET-Zahl muss es sich um eine positive Ganzzahl handeln. Der maximal zulässige Wert ist `2147483647`. Bei der Verwendung mit der Option LIMIT werden OFFSET-Zeilen übersprungen, bevor die Zahl der LIMIT-Zeilen gezählt werden, die zurückgegeben werden. Wenn die LIMIT-Option nicht verwendet wird, wird die Zahl der Zeilen im Ergebnissatz um die Zahl der übersprungenen Zeilen reduziert. Die von einer OFFSET-Klausel übersprungenen Zeilen müssen dennoch gescannt werden. Daher ist es möglicherweise ineffizient, einen großen OFFSET-Wert zu verwenden.

## Nutzungshinweise
<a name="r_ORDER_BY_usage_notes"></a>

 Beachten Sie das folgende erwartete Verhalten bei Verwendung von ORDER BY-Klauseln: 
+ NULL-Werte gelten als „höher“ als alle anderen Werte. Bei Verwendung der standardmäßigen aufsteigenden Sortierfolge befinden sich NULL-Werte am Ende. Um dieses Verhalten zu ändern, wählen Sie die Option NULLS FIRST.
+ Wenn eine Anfrage keine ORDER BY-Klausel enthält, gibt das System Ergebnissätze ohne vorhersagbare Anordnung der Zeilen zurück. Wenn dieselbe Abfrage zweimal ausgeführt wird, wird der Ergebnissatz möglicherweise in einer anderen Reihenfolge zurückgegeben. 
+ Die Optionen LIMIT und OFFSET können ohne ORDER BY-Klausel verwendet werden. Um jedoch einen konsistenten Satz von Zeilen zurückzugeben, verwenden Sie diese Optionen in Verbindung mit ORDER BY. 
+ In einem parallelen System wie Amazon Redshift, in dem ORDER BY keine spezifische Anordnung generiert, ist die Reihenfolge der Zeilen nicht deterministisch. Wenn der ORDER BY-Ausdruck duplizierte Werte produziert, kann sich die Rückgabereihenfolge dieser Zeilen von der anderer Systeme oder zwischen Ausführungen in Amazon Redshift unterscheiden. 
+ Amazon Redshift unterstützt keine Zeichenfolgeliterale in ORDER-BY-Klauseln.

# Beispiele mit ORDER BY
<a name="r_Examples_with_ORDER_BY"></a>

Gibt alle 11 Zeilen aus der Tabelle CATEGORY geordnet nach der zweiten Spalte, CATGROUP, zurück. Ergebnisse, die denselben CATGROUP-Wert haben, ordnen die CATDESC-Spaltenwerte nach der Länge der Zeichenfolge. Dann wird nach Spalten CATID und CATNAME geordnet. 

```
select * from category order by 2, length(catdesc), 1, 3;

catid | catgroup |  catname  |                  catdesc
------+----------+-----------+----------------------------------------
10    | Concerts | Jazz      | All jazz singers and bands
9     | Concerts | Pop       | All rock and pop music concerts
11    | Concerts | Classical | All symphony, concerto, and choir conce
6     | Shows    | Musicals  | Musical theatre
7     | Shows    | Plays     | All non-musical theatre
8     | Shows    | Opera     | All opera and light opera
5     | Sports   | MLS       | Major League Soccer
1     | Sports   | MLB       | Major League Baseball
2     | Sports   | NHL       | National Hockey League
3     | Sports   | NFL       | National Football League
4     | Sports   | NBA       | National Basketball Association
(11 rows)
```

Gibt ausgewählte Spalten aus der Tabelle SALES zurück, geordnet nach den höchsten QTYSOLD-Werten. Begrenzt das Ergebnis auf die obersten 10 Zeilen: 

```
select salesid, qtysold, pricepaid, commission, saletime from sales
order by qtysold, pricepaid, commission, salesid, saletime desc
limit 10;

salesid | qtysold | pricepaid | commission |      saletime
--------+---------+-----------+------------+---------------------
15401   |       8 |    272.00 |      40.80 | 2008-03-18 06:54:56
61683   |       8 |    296.00 |      44.40 | 2008-11-26 04:00:23
90528   |       8 |    328.00 |      49.20 | 2008-06-11 02:38:09
74549   |       8 |    336.00 |      50.40 | 2008-01-19 12:01:21
130232  |       8 |    352.00 |      52.80 | 2008-05-02 05:52:31
55243   |       8 |    384.00 |      57.60 | 2008-07-12 02:19:53
16004   |       8 |    440.00 |      66.00 | 2008-11-04 07:22:31
489     |       8 |    496.00 |      74.40 | 2008-08-03 05:48:55
4197    |       8 |    512.00 |      76.80 | 2008-03-23 11:35:33
16929   |       8 |    568.00 |      85.20 | 2008-12-19 02:59:33
(10 rows)
```

Gibt unter Verwendung der LIMIT 0-Syntax eine Spaltenliste, aber keine Zeilen zurück: 

```
select * from venue limit 0;
venueid | venuename | venuecity | venuestate | venueseats
---------+-----------+-----------+------------+------------
(0 rows)
```

# CONNECT BY-Klausel
<a name="r_CONNECT_BY_clause"></a>

Die CONNECT BY-Klausel gibt die Beziehung zwischen Zeilen in einer Hierarchie an. Sie können CONNECT BY verwenden, um Zeilen in einer hierarchischen Reihenfolge auszuwählen, indem Sie die Tabelle mit sich selbst verbinden und die hierarchischen Daten verarbeiten. Sie können dies beispielsweise verwenden, um rekursiv ein Organigramm zu durchlaufen und Daten aufzulisten.

Hierarchische Abfragen werden in der folgenden Reihenfolge verarbeitet:

1. Wenn die FROM-Klausel eine Verknüpfung enthält, wird diese zuerst verarbeitet.

1. Die CONNECT BY-Klausel wird ausgewertet.

1. Die WHERE-Klausel wird ausgewertet.

## Syntax
<a name="r_CONNECT_BY_clause-synopsis"></a>

```
[START WITH start_with_conditions]
CONNECT BY connect_by_conditions
```

**Anmerkung**  
START und CONNECT sind zwar keine reservierten Wörter, Sie sollten jedoch abgegrenzte Kennungen (doppelte Anführungszeichen) oder AS verwenden, wenn Sie START und CONNECT als Tabellenaliasse in Ihrer Abfrage verwenden, um Fehler während der Laufzeit zu vermeiden.

```
SELECT COUNT(*)
FROM Employee "start"
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

```
SELECT COUNT(*)
FROM Employee AS start
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

## Parameters
<a name="r_CONNECT_BY_parameters"></a>

 *start\$1with\$1conditions*   
Bedingungen, die die Stammzeile(n) der Hierarchie angeben.

 *connect\$1by\$1conditions*   
Bedingungen, die die Beziehung zwischen übergeordneten Zeilen und untergeordneten Zeilen der Hierarchie angeben. Mindestens eine Bedingung muss mit dem unären Operator ` ` qualifiziert werden, der für den Verweis auf die übergeordnete Zeile verwendet wird.  

```
PRIOR column = expression
-- or
expression > PRIOR column
```

## Operatoren
<a name="r_CONNECT_BY_operators"></a>

Sie können die folgenden Operatoren in einer CONNECT BY-Abfrage verwenden.

 *LEVEL*   
Pseudospalte, die die aktuelle Zeilenebene in der Hierarchie zurückgibt. Gibt 1 für die Stammzeile, 2 für das untergeordnete Element der Stammzeile zurück usw.

 *PRIOR*   
Unärer Operator, der den Ausdruck für die übergeordnete Zeile der aktuellen Zeile in der Hierarchie auswertet.

## Beispiele
<a name="r_CONNECT_BY_example"></a>

Im Folgenden finden Sie eine CONNECT BY-Abfrage, die die Anzahl der Mitarbeiter zurückgibt, die direkt oder indirekt John unterstellt sind, und zwar auf 4 Ebenen begrenzt. 

```
SELECT id, name, manager_id
FROM employee
WHERE LEVEL < 4
START WITH name = 'John'
CONNECT BY PRIOR id = manager_id;
```

Nachfolgend das Ergebnis der Abfrage.

```
id      name      manager_id
------+----------+--------------
  101     John        100
  102     Jorge       101
  103     Kwaku       101
  110     Liu         101
  201     Sofía       102
  106     Mateo       102
  110     Nikki       103
  104     Paulo       103
  105     Richard     103
  120     Saanvi      104
  200     Shirley     104
  205     Zhang       104
```

 Die Tabellendefinition für dieses Beispiel lautet wie folgt: 

```
CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
   );
```

 Im Folgenden werden die Zeilen in die Tabelle eingefügt. 

```
INSERT INTO employee(id, name, manager_id)  VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
```

Im Folgenden finden Sie ein Organigramm für Johns Abteilung.

![\[Im Folgenden finden Sie ein Organigramm für Johns Abteilung.\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/images/org-chart.png)


# Beispiele für Unterabfragen
<a name="r_Subquery_examples"></a>

In den folgenden Beispielen zeigen verschiedene Möglichkeiten, wie Unterabfragen in SELECT-Abfragen integriert werden können. Ein weiteres Beispiel für die Verwendung von Unterabfragen finden Sie unter [JOIN-Beispiele](r_Join_examples.md). 

## Unterabfragen in der SELECT-Liste
<a name="r_Subquery_examples-select-list-subquery"></a>

Das folgende Beispiel enthält eine Unterabfrage in der SELECT-Liste. Diese Unterabfrage ist *skalar*: Sie gibt nur eine Spalte und einen Wert zurück. Dies wird im Ergebnis für jede Zeile wiederholt, die von der umschließenden Abfrage zurückgegeben wird. Die Abfrage vergleicht den von der Unterabfrage berechneten Q1SALES-Wert mit den Verkaufswerten für zwei andere Quartale (2 und 3) im Jahr 2008 wie von der umschließenden Abfrage definiert. 

```
select qtr, sum(pricepaid) as qtrsales,
(select sum(pricepaid)
from sales join date on sales.dateid=date.dateid
where qtr='1' and year=2008) as q1sales
from sales join date on sales.dateid=date.dateid
where qtr in('2','3') and year=2008
group by qtr
order by qtr;

qtr  |  qtrsales   |   q1sales
-------+-------------+-------------
2     | 30560050.00 | 24742065.00
3     | 31170237.00 | 24742065.00
(2 rows)
```

## Unterabfragen in der WHERE-Klausel
<a name="r_Subquery_examples-where-clause-subquery"></a>

Das folgende Beispiel enthält eine Tabellenunterabfrage in der WHERE-Klausel. Diese Unterabfrage produziert mehrere Zeilen. In diesem Fall enthalten die Zeilen nur eine Spalte. Tabellenunterabfragen können jedoch mehrere Spalten und Zeilen enthalten, genau wie jede andere Tabelle. 

Die Abfrage sucht die 10 Top-Verkäufer in Bezug die meisten verkauften Tickets. Die Liste der Top 10 wird durch die Unterabfrage eingeschränkt, die Benutzer entfernt, die in Städten mit Ticketverkaufsstellen leben. Diese Abfrage kann auf verschiedene Arten geschrieben werden. Beispielsweise könnte die Unterabfrage als ein Join innerhalb der Hauptabfrage geschrieben werden. 

```
select firstname, lastname, city, max(qtysold) as maxsold
from users join sales on users.userid=sales.sellerid
where users.city not in(select venuecity from venue)
group by firstname, lastname, city
order by maxsold desc, city desc
limit 10;

firstname | lastname  |      city      | maxsold
-----------+-----------+----------------+---------
Noah       | Guerrero | Worcester      |       8
Isadora    | Moss     | Winooski       |       8
Kieran     | Harrison | Westminster    |       8
Heidi      | Davis    | Warwick        |       8
Sara       | Anthony  | Waco           |       8
Bree       | Buck     | Valdez         |       8
Evangeline | Sampson  | Trenton        |       8
Kendall    | Keith    | Stillwater     |       8
Bertha     | Bishop   | Stevens Point  |       8
Patricia   | Anderson | South Portland |       8
(10 rows)
```

## Unterabfragen in der WITH-Klausel
<a name="r_Subquery_examples-with-clause-subqueries"></a>

Siehe [WITH-Klausel](r_WITH_clause.md). 

# Korrelierte Unterabfragen
<a name="r_correlated_subqueries"></a>

Das folgende Beispiel enthält eine *korrelierte Unterabfrage* in der WHERE-Klausel. Diese Art von Unterabfrage enthält mindestens eine Korrelation zwischen ihren Spalten und den Spalten, die von der umschließenden Abfrage produziert werden. In diesem Fall ist die Korrelation `where s.listid=l.listid`. Die Unterabfrage wird für jede Zeile ausgeführt, die die umschließende Abfrage produziert, um die Zeile zu qualifizieren oder zu disqualifizieren. 

```
select salesid, listid, sum(pricepaid) from sales s
where qtysold=
(select max(numtickets) from listing l
where s.listid=l.listid)
group by 1,2
order by 1,2
limit 5;

salesid | listid |   sum
--------+--------+----------
 27     |     28 | 111.00
 81     |    103 | 181.00
 142    |    149 | 240.00
 146    |    152 | 231.00
 194    |    210 | 144.00
(5 rows)
```

## Muster für korrelierte Unterabfragen, die nicht unterstützt werden
<a name="r_correlated_subqueries-correlated-subquery-patterns-that-are-not-supported"></a>

Der Abfrageplaner verwendet eine Methode für das Neuschreiben von Abfragen, die als Entkorrelierung von Unterabfragen bezeichnet wird, um verschiedene Muster korrelierter Unterabfragen für die Ausführung in einer MPP-Umgebung zu optimieren. Einige Arten von korrelierten Unterabfragen folgen Mustern, die Amazon Redshift nicht entkorrelieren kann und nicht unterstützt. Abfragen, die die folgenden Korrelierungsreferenzen enthalten, geben Fehler zurück: 
+  Korrelierungsreferenzen, die einen Abfrageblock überspringen, auch als „überspringende Korrelierungsreferenzen“ bekannt. Beispielsweise sind in der folgenden Abfrage der Block mit der Korrelierungsreferenz und der übersprungene Block durch ein NOT EXISTS-Prädikat verbunden: 

  ```
  select event.eventname from event
  where not exists
  (select * from listing
  where not exists
  (select * from sales where event.eventid=sales.eventid));
  ```

  Der übersprungende Block ist in diesem Fall die Unterabfrage für die LISTING-Tabelle. Die Korrelierungsreferenz korreliert die Tabellen EVENT und SALES. 
+  Korrelierungsreferenzen aus einer Unterabfrage, die Teil einer ON-Klausel in einer externen Abfrage ist: 

  ```
  select * from category
  left join event
  on category.catid=event.catid and eventid =
  (select max(eventid) from sales where sales.eventid=event.eventid);
  ```

  Die ON-Klausel enthält eine Korrelierungsreferenz aus SALES in der Unterabfrage für EVENT in der umschließenden Abfrage. 
+ Null-sensible Korrelierungsreferenzen für eine Amazon-Redshift-Systemtabelle. Beispiel: 

  ```
  select attrelid
  from stv_locks sl, pg_attribute
  where sl.table_id=pg_attribute.attrelid and 1 not in
  (select 1 from pg_opclass where sl.lock_owner = opcowner);
  ```
+ Korrelierungsreferenzen aus einer Unterabfrage, die eine Fensterfunktion enthält. 

  ```
  select listid, qtysold
  from sales s
  where qtysold not in
  (select sum(numtickets) over() from listing l where s.listid=l.listid);
  ```
+ Referenzen in einer GROUP BY-Spalte zu den Ergebnissen einer korrelierten Unterabfrage. Beispiel: 

  ```
  select listing.listid,
  (select count (sales.listid) from sales where sales.listid=listing.listid) as list
  from listing
  group by list, listing.listid;
  ```
+ Korrelierungsreferenzen aus einer Unterabfrage mit einer Aggregationsfunktion und einer GROUP BY-Klausel, die durch ein IN-Prädikat mit der umschließenden Abfrage verbunden sind. (Diese Einschränkung gilt nicht für die Aggregationsfunktionen MIN und MAX.) Beispiel: 

  ```
  select * from listing where listid in
  (select sum(qtysold)
  from sales
  where numtickets>4
  group by salesid);
  ```

# SELECT INTO
<a name="r_SELECT_INTO"></a>

Wählt Zeilen aus, die durch eine beliebige Abfrage definiert sind, und fügt sie in eine neue Tabelle ein. Sie können angeben, ob eine temporäre oder eine persistente Tabelle erstellt werden soll. 

## Syntax
<a name="r_SELECT_INTO-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

 Details zu den Parametern dieses Befehls finden Sie unter [SELECT](r_SELECT_synopsis.md). 

## Beispiele
<a name="r_SELECT_INTO-examples"></a>

Wählen Sie alle Zeilen aus der Tabelle EVENT aus und erstellen Sie die Tabelle NEWEVENT: 

```
select * into newevent from event;
```

Fügen Sie das Ergebnis einer Aggregatabfrage in eine temporäre Tabelle namens PROFITS ein: 

```
select username, lastname, sum(pricepaid-commission) as profit
into temp table profits
from sales, users
where sales.sellerid=users.userid
group by 1, 2
order by 3 desc;
```

# SET
<a name="r_SET"></a>

Legt den Wert eines Serverkonfigurationsparameters fest. Mit dem SET-Befehl setzen Sie eine Einstellung nur für die Dauer der aktuellen Sitzung oder Transaktion außer Kraft.

Mit dem [RESET](r_RESET.md)-Befehl setzen Sie einen Parameter auf dessen Standardwert zurück. 

Sie können die Serverkonfigurationsparameter auf verschiedene Arten ändern. Weitere Informationen finden Sie unter [Modifizieren der Serverkonfiguration](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings). 

## Syntax
<a name="r_SET-synopsis"></a>

```
SET { [ SESSION | LOCAL ]
{ SEED | parameter_name } { TO | = }
{ value | 'value' | DEFAULT } |
SEED TO value }
```

Die folgende Anweisung legt den Wert einer Sitzungskontextvariablen fest.

```
SET { [ SESSION | LOCAL ]
variable_name { TO | = }
{ value | 'value'  }
```

## Parameters
<a name="r_SET-parameters"></a>

SESSION   
Gibt an, dass die Einstellung für die aktuelle Sitzung gültig ist. Standardwert.

*variable\$1name*   
Gibt den Namen der Kontextvariablen an, die für die Sitzung festgelegt wurde.  
Die Benennungskonvention ist ein zweiteiliger Name, der durch einen Punkt getrennt ist, z.B. *identifier.identifier*. Es ist nur ein Punkttrennzeichen zulässig. Verwenden Sie eine *Kennung*, die den Standardkennungsregeln für Amazon Redshift folgt. Weitere Informationen finden Sie unter [Namen und Kennungen](r_names.md). Begrenzte Kennungen sind nicht zulässig.

LOCAL   
Gibt an, dass die Einstellung für die aktuelle Transaktion gültig ist. 

SEED TO *value*   
Legt einen internen Seed fest, der von der Funktion RANDOM für die Zufallsgenerierung einer Zahl verwendet werden soll.  
SET SEED verwendet einen numerischen *Wert* zwischen 0 und 1 und multipliziert diese Zahl mit (231-1) zur Verwendung mit der Funktion [Die Funktion RANDOM](r_RANDOM.md). Wenn Sie SET SEED verwenden, bevor Sie mehrere RANDOM-Aufrufe ausführen, generiert RANDOM Zahlen in einer vorhersagbaren Sequenz.

 *parameter\$1name*   
Der Name des Parameters, der festgelegt werden soll. Weitere Informationen über Parameter finden Sie unter [Modifizieren der Serverkonfiguration](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings).

 *Wert*   
Neuer Parameterwert. Verwenden Sie einfache Anführungszeichen, um den Wert für eine bestimmte Zeichenfolge festzulegen. Wenn Sie SET SEED verwenden, enthält dieser Parameter den SEED-Wert. 

DEFAULT   
Legt den Parameter auf den Standardwert fest.

## Beispiele
<a name="r_SET-examples"></a>

 **Ändern eines Parameters für die aktuelle Sitzung** 

Im folgenden Beispiel wird der Datenstil festgelegt:

```
set datestyle to 'SQL,DMY';
```

 **Einrichten einer Abfragegruppe für das Workload-Management** 

Wenn Abfragegruppen in einer Warteschlangendefinition als Teil der WLM-Konfiguration des Clusters aufgeführt werden, können Sie den Parameter QUERY\$1GROUP auf einen aufgeführten Abfragegruppennamen festlegen. Nachfolgende Abfragen werden der verknüpften Abfragewarteschlange zugewiesen. Die Einstellung QUERY\$1GROUP bleibt für die Dauer der Sitzung gültig oder bis sie auf den Befehl RESET QUERY\$1GROUP trifft.

In diesem Beispiel werden zwei Abfragen als Teil der Abfragegruppe „Priority“ ausgeführt. Anschließend wird die Abfragegruppe zurückgesetzt. 

```
set query_group to 'priority';
select tbl, count(*)from stv_blocklist;
select query, elapsed, substring from svl_qlog order by query desc limit 5;
reset query_group;
```

Weitere Informationen finden Sie unter [Workload-Management](cm-c-implementing-workload-management.md). 

 **Ändern des standardmäßigen Identitäts-Namespace für die Sitzung** 

Ein Datenbankbenutzer kann `default_identity_namespace` festlegen. Dieses Beispiel zeigt, wie Sie `SET SESSION` verwenden, um die Einstellung für die Dauer der aktuellen Sitzung zu überschreiben und dann den neuen Identitätsanbieterwert anzuzeigen. Dieses Verfahren wird am häufigsten verwendet, wenn Sie einen Identitätsanbieter mit Redshift und IAM Identity Center verwenden. Weitere Informationen zur Verwendung eines Identitätsanbieters mit Redshift finden Sie unter [Redshift mit IAM Identity Center verbinden, um Benutzern eine Single-Sign-On-Erfahrung zu bieten](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

```
SET SESSION default_identity_namespace = 'MYCO';
         
SHOW default_identity_namespace;
```

Nachdem Sie den Befehl ausgeführt haben, können Sie eine GRANT- oder CREATE-Anweisung wie die folgende ausführen:

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
         
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

In diesem Fall entspricht die Einstellung des standardmäßigen Identitäts-Namespace der Präfigierung jeder Entität mit dem Namespace. In diesem Beispiel wird `alice` durch `MYCO:alice` ersetzt. Weitere Informationen zu Einstellungen, die die Redshift-Konfiguration mit IAM Identity Center betreffen, finden Sie unter [ALTER SYSTEM](r_ALTER_SYSTEM.md) und [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md).

 **Festlegen einer Bezeichnung für eine Gruppe von Abfragen** 

Der Parameter QUERY\$1GROUP definiert eine Bezeichnung für mindestens eine Abfrage, die in derselben Sitzung nach einem SET-Befehl ausgeführt wird. Diese Bezeichnung wird protokolliert, wenn Abfragen ausgeführt werden, und kann zur Einschränkung der Ergebnisse verwendet werden, die von den Systemtabellen STL\$1QUERY und STV\$1INFLIGHT sowie der Ansicht SVL\$1QLOG zurückgegeben werden. 

```
show query_group;
query_group
-------------
unset
(1 row)

set query_group to '6 p.m.';


show query_group;
query_group
-------------
6 p.m.
(1 row)

select * from sales where salesid=500;
salesid | listid | sellerid | buyerid | eventid | dateid | ...
---------+--------+----------+---------+---------+--------+-----
500 |    504 |     3858 |    2123 |    5871 |   2052 | ...
(1 row)

reset query_group;

select query, trim(label) querygroup, pid, trim(querytxt) sql
from stl_query
where label ='6 p.m.';
query | querygroup |  pid  |                  sql
-------+------------+-------+----------------------------------------
57 | 6 p.m.     | 30711 | select * from sales where salesid=500;
(1 row)
```

Bezeichnungen von Abfragegruppen sind ein nützlicher Mechanismus, um einzelne Abfragen oder Gruppen von Abfragen zu isolieren, die als Teil von Skripts ausgeführt werden. Sie müssen Anfragen nicht anhand ihrer Namen identifizieren und nachverfolgen. Sie IDs können sie anhand ihrer Labels verfolgen.

 **Festlegen eines Seed-Wert für die Zufallsgenerierung von Zahlen** 

Im folgenden Beispiel wird die SEED-Option mit SET verwendet, damit die Funktion RANDOM Zahlen in einer vorhersagbaren Sequenz generiert.

Geben Sie zunächst drei RANDOM-Ganzzahlen zurück, ohne zuerst den SEED-Wert festzulegen: 

```
select cast (random() * 100 as int);
int4
------
6
(1 row)

select cast (random() * 100 as int);
int4
------
68
(1 row)

select cast (random() * 100 as int);
int4
------
56
(1 row)
```

Legen Sie nun den SEED-Wert auf `.25` fest und geben Sie drei weitere RANDOM-Zahlen zurück: 

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

Setzen Sie zum Schluss den SEED-Wert auf `.25` zurück und überprüfen Sie, ob RANDOM dieselben Ergebnisse wie in den vorherigen drei Aufrufen zurückgibt: 

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

Im folgenden Beispiel wird eine benutzerdefinierte Kontextvariable festgelegt. 

```
SET app_context.user_id TO 123;
SET app_context.user_id TO 'sample_variable_value';
```

# SET SESSION AUTHORIZATION
<a name="r_SET_SESSION_AUTHORIZATION"></a>

Legt den Benutzernamen für die aktuelle Sitzung fest.

Sie können beispielsweise den Befehl SET SESSION AUTHORIZATION verwenden, um den Datenbankzugriff zu testen, indem Sie eine Sitzung oder Transaktion vorübergehend als nicht berechtigter Benutzer ausführen. Sie müssen Datenbank-Superuser sein, um diesen Befehl auszuführen.

## Syntax
<a name="r_SET_SESSION_AUTHORIZATION-synopsis"></a>

```
SET [ LOCAL ] SESSION AUTHORIZATION { user_name | DEFAULT }
```

## Parameters
<a name="r_SET_SESSION_AUTHORIZATION-parameters"></a>

LOCAL  
Gibt an, dass die Einstellung für die aktuelle Transaktion gültig ist. Durch Weglassen dieses Parameters wird angegeben, dass die Einstellung für die aktuelle Sitzung gültig ist.

 *user\$1name*   
Der Name des Benutzers, der festgelegt werden soll. Der Benutzernamen kann als Bezeichner oder Zeichenfolgeliteral geschrieben werden.

DEFAULT  
Legt den Benutzernamen für die Sitzung auf den Standardwert fest.

## Beispiele
<a name="r_SET_SESSION_AUTHORIZATION-examples"></a>

Im folgenden Beispiel wird der Benutzername für die aktuelle Sitzung auf festgelegt `dwuser`:

```
SET SESSION AUTHORIZATION 'dwuser';
```

Im folgenden Beispiel wird der Benutzername für die aktuelle Transaktion auf festgelegt `dwuser`:

```
SET LOCAL SESSION AUTHORIZATION 'dwuser';
```

In diesem Beispiel wird der Benutzername für die aktuelle Sitzung auf den Standardbenutzernamen festgelegt:

```
SET SESSION AUTHORIZATION DEFAULT;
```

# SET SESSION CHARACTERISTICS
<a name="r_SET_SESSION_CHARACTERISTICS"></a>

Dieser Befehl ist veraltet.

# ZEIGEN
<a name="r_SHOW"></a>

Zeigt den aktuellen eines Serverkonfigurationsparameters an. Dieser Wert ist möglicherweise spezifisch für die aktuelle Sitzung, wenn ein SET-Befehl in Kraft ist. Eine Liste der Konfigurationsparameter finden Sie unter [Konfigurationsreferenz](cm_chap_ConfigurationRef.md).

## Syntax
<a name="r_SHOW-synopsis"></a>

```
SHOW { parameter_name | ALL }
```

Die folgende Anweisung zeigt den aktuellen Wert einer Sitzungskontextvariablen an. Wenn die Variable nicht existiert, löst Amazon Redshift einen Fehler aus.

```
SHOW variable_name
```

## Parameters
<a name="r_SHOW-parameters"></a>

 *parameter\$1name*   
Zeigt den aktuellen Wert des angegebenen Parameters an.

ALL   
Zeigt die aktuellen Werte aller Parameter an.

*variable\$1name*   
Zeigt den aktuellen Wert der angegebenen Variablen an.

## Beispiele
<a name="r_SHOW-examples"></a>

Im folgenden Beispiel wird der Wert für den Parameter query\$1group angezeigt: 

```
show query_group;

query_group

unset
(1 row)
```

Im folgenden Beispiel wird eine Liste aller Parameter und ihrer Werte angezeigt: 

```
show all;
name        |   setting
--------------------+--------------
datestyle          | ISO, MDY
extra_float_digits | 0
query_group        | unset
search_path        | $user,public
statement_timeout  | 0
```

Im folgenden Beispiel wird der aktuelle Wert der angegebenen Variablen angezeigt.

```
SHOW app_context.user_id;
```

# SPALTE „ZUSCHÜSSE“ ANZEIGEN
<a name="r_SHOW_COLUMN_GRANTS"></a>

Zeigt Zuschüsse in einer Spalte innerhalb einer Tabelle an.

## Erforderliche Berechtigungen
<a name="r_SHOW_COLUMN_GRANTS-required-permissions"></a>

Mit SHOW GRANTS für ein Zielobjekt werden nur Zuschüsse angezeigt, die für den aktuellen Benutzer sichtbar sind. Ein Grant ist für den aktuellen Benutzer sichtbar, wenn der aktuelle Benutzer eines der folgenden Kriterien erfüllt:
+ Seien Sie ein Superuser
+ Seien Sie der berechtigte Benutzer
+ Erteilen Sie sich den Besitzer der erteilten Rolle
+ Ihnen wird die Rolle zugewiesen, für die die Objektzuweisung vorgesehen ist

## Syntax
<a name="r_SHOW_COLUMN_GRANTS-synopsis"></a>

```
SHOW COLUMN GRANTS ON TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_COLUMN_GRANTS-parameters"></a>

database\$1name  
Der Name der Datenbank, die die Zieltabelle enthält

schema\$1name  
Der Name des Schemas, das die Zieltabelle enthält

table\$1name  
Der Name der Zieltabelle

username  
Nehmen Sie nur Zuschüsse für den Benutzernamen in die Ausgabe auf

role\$1name  
Nehmen Sie nur Zuschüsse für role\$1name in die Ausgabe auf

PUBLIC  
Nehmen Sie nur Zuschüsse an PUBLIC in die Ausgabe auf

row\$1limit  
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen.

## Beispiele
<a name="r_SHOW_COLUMN_GRANTS-examples"></a>

Das folgende Beispiel zeigt die Spalte Grants in der Tabelle demo\$1db.demo\$1schema.t100:

```
SHOW COLUMN GRANTS ON TABLE demo_db.demo_schema.t100;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         134 | bob           | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | SELECT         |         130 | alice         | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | UPDATE         |         130 | alice         | user          | f            | COLUMN          | dbadmin
```

Das folgende Beispiel zeigt Spaltenzuweisungen in der Tabelle demo\$1schema.t100 für den Benutzer bob:

```
SHOW COLUMN GRANTS ON TABLE demo_schema.t100 for bob;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         135 | bob           | user          | f            | COLUMN          | dbadmin
```

# SHOW\$1COLUMNS
<a name="r_SHOW_COLUMNS"></a>

Zeigt eine Liste der Spalten in einer Tabelle zusammen mit einigen Spaltenattributen an.

Jede Ausgabezeile besteht aus einer kommagetrennten Liste mit Datenbanknamen, Schemanamen, Tabellennamen, Spaltennamen, Ordinalposition, Spaltenstandard, ist NULL-fähig, Datentyp, maximale Zeichenlänge, numerische Genauigkeit, Anmerkungen, Sortierschlüsseltyp, Sortierschlüsselreihenfolge, Verteilungsschlüssel, Kodierung und Sortierung. Weitere Informationen zu diesen Attributen finden Sie unter [SVV\$1ALL\$1COLUMNS](r_SVV_ALL_COLUMNS.md).

Wenn der Befehl SHOW COLUMNS mehr als 10 000 Spalten ergeben würde, wird ein Fehler zurückgegeben.

## Erforderliche Berechtigungen
<a name="r_SHOW_COLUMNS-privileges"></a>

Um eine Spalte in einer Amazon-Redshift-Tabelle anzuzeigen, müssen die aktuellen Benutzer eines der folgenden Kriterien erfüllen:
+ Sie müssen Superuser sein.
+ Sie müssen die Besitzer der Tabelle sein.
+ Ihnen müssen die Berechtigung USAGE für das übergeordnete Schema und die Berechtigung SELECT für die Tabelle oder die Berechtigung SELECT für die Spalte erteilt worden sein.

## Syntax
<a name="r_SHOW_COLUMNS-synopsis"></a>

```
SHOW COLUMNS FROM TABLE database_name.schema_name.table_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_COLUMNS-parameters"></a>

 *database\$1name*   
Der Name der Datenbanktabelle, welche die aufzulistenden Tabellen enthält.   
Um Tabellen in einer anzuzeigen AWS Glue Data Catalog, geben Sie (`awsdatacatalog`) als Datenbanknamen an und stellen Sie sicher, dass die Systemkonfiguration auf eingestellt ist. `data_catalog_auto_mount` `true` Weitere Informationen finden Sie unter [ALTER SYSTEM](r_ALTER_SYSTEM.md).

 *schema\$1name*   
Der Name des Schemas, das die aufzulistenden Tabellen enthält.   
Um AWS Glue Data Catalog Tabellen anzuzeigen, geben Sie den AWS Glue Datenbanknamen als Schemanamen an.

 *table\$1name*   
Der Name der Tabelle, welche die aufzulistenden Spalten enthält. 

 *filter\$1pattern*   
Ein gültiger UTF-8-Zeichenfolgenausdruck mit einem Muster zum Abgleich der Tabellennamen. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_COLUMNS.html)
Wenn *filter-pattern* keine Metazeichen enthält, repräsentiert das Muster die Zeichenfolge selbst. In diesem Fall liefert LIKE dasselbe Ergebnis wie der Gleichheitsoperator. 

 *row\$1limit*   
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen. 

## Beispiele
<a name="r_SHOW_COLUMNS-examples"></a>

Das folgende Beispiel zeigt die Spalten in der Amazon-Redshift-Datenbank mit dem Namen `sample_data_dev`, die sich im Schema `tickit` und in der Tabelle `event` befinden.

```
SHOW COLUMNS FROM TABLE demo_schema.compound_sort_table;

  database_name | schema_name |     table_name      | column_name | ordinal_position | column_default | is_nullable |     data_type     | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+---------------------+-------------+------------------+----------------+-------------+-------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 demo_db       | demo_schema | compound_sort_table | id          |                1 |                | YES         | integer           |                          |                32 |             0 |         | COMPOUND      |        1 |        1 | delta32k | 
 demo_db       | demo_schema | compound_sort_table | name        |                2 |                | YES         | character varying |                       50 |                   |               |         | COMPOUND      |        2 |          | lzo      | default
 demo_db       | demo_schema | compound_sort_table | date_col    |                3 |                | YES         | date              |                          |                   |               |         |               |        0 |          | delta    | 
 demo_db       | demo_schema | compound_sort_table | amount      |                4 |                | YES         | numeric           |                          |                10 |             2 |         |               |        0 |          | mostly16 |
```

Das folgende Beispiel zeigt die Tabellen in der genannten AWS Glue Data Catalog Datenbank`awsdatacatalog`, die sich in Schema `batman` und Tabelle befinden`nation`. Die Ausgabe ist auf `2` Zeilen begrenzt.

```
SHOW COLUMNS FROM TABLE second_db.public.t22;

 database_name | schema_name | table_name | column_name | ordinal_position | column_default | is_nullable |          data_type          | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+------------+-------------+------------------+----------------+-------------+-----------------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 second_db     | public      | t22        | col1        |                1 |                | YES         | integer                     |                          |                32 |             0 |         | INTERLEAVED   |       -1 |          | mostly8  | 
 second_db     | public      | t22        | col2        |                2 |                | YES         | character varying           |                      100 |                   |               |         | INTERLEAVED   |        2 |          | text255  | default
 second_db     | public      | t22        | col3        |                3 |                | YES         | timestamp without time zone |                          |                   |               |         |               |        0 |          | raw      | 
 second_db     | public      | t22        | col4        |                4 |                | YES         | numeric                     |                          |                10 |             2 |         |               |        0 |          | az64     |
```

# EINSCHRÄNKUNGEN ANZEIGEN
<a name="r_SHOW_CONSTRAINTS"></a>

Zeigt eine Liste von Primärschlüssel- und Fremdschlüsseleinschränkungen in einer Tabelle an.

## Erforderliche Berechtigungen
<a name="r_SHOW_CONSTRAINTS-required-permissions"></a>

Um SHOW CONSTRAINTS für eine Tabelle auszuführen, muss der aktuelle Benutzer eines der folgenden Kriterien erfüllen:
+ Seien Sie ein Superuser
+ Sei der Besitzer des Tisches
+ Ihnen wird das USAGE-Privileg für das übergeordnete Schema und das SELECT-Privileg für die Tabelle gewährt

## Syntax
<a name="r_SHOW_CONSTRAINTS-synopsis"></a>

```
SHOW CONSTRAINTS {PRIMARY KEYS | FOREIGN KEYS [EXPORTED]}
FROM TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_CONSTRAINTS-parameters"></a>

*database\$1name*  
Der Name der Datenbank, die die Zieltabelle enthält

*schema\$1name*  
Der Name des Schemas, das die Zieltabelle enthält

*table\$1name*  
Der Name der Zieltabelle

EXPORTIERT  
Wenn EXPORTED angegeben ist, listet alle Fremdschlüssel aus anderen Tabellen auf, die auf die Zieltabelle verweisen.

*row\$1limit*  
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen.

## Beispiele
<a name="r_SHOW_CONSTRAINTS-examples"></a>

Das folgende Beispiel zeigt Primärschlüsseleinschränkungen aus der Tabelle demo\$1db.demo\$1schema.pk1:

```
SHOW CONSTRAINTS PRIMARY KEYS FROM TABLE demo_db.demo_schema.pk1;
 database_name | schema_name | table_name | pk_name  | column_name | key_seq 
---------------+-------------+------------+----------+-------------+---------
 demo_db       | demo_schema | pk1        | pk1_pkey | i           |       1
 demo_db       | demo_schema | pk1        | pk1_pkey | j           |       2
 demo_db       | demo_schema | pk1        | pk1_pkey | c           |       3
```

Das folgende Beispiel zeigt Fremdschlüsseleinschränkungen aus der Tabelle demo\$1schema.fk2:

```
SHOW CONSTRAINTS FOREIGN KEYS FROM TABLE demo_schema.fk2;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |  fk_name   | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey | pk1_pkey |             |             |
```

Das folgende Beispiel zeigt exportierte Fremdschlüsseleinschränkungen aus der Tabelle demo\$1schema.pk1:

```
SHOW CONSTRAINTS FOREIGN KEYS EXPORTED FROM TABLE demo_schema.pk1;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |     fk_name     | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+-----------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | other_fk      | i              |       1 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | other_fk      | j              |       2 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | other_fk      | c              |       3 | other_fk_i_fkey | pk1_pkey |             |             |
```

# SHOW EXTERNAL TABLE
<a name="r_SHOW_EXTERNAL_TABLE"></a>

Zeigt die Definition einer externen Tabelle an, einschließlich der Tabellenattribute und Spaltenattribute. Sie können die Ausgabe der SHOW EXTERNAL TABLE-Anweisung verwenden, um die Tabelle neu zu erstellen. 

Weitere Informationen zur Erstellung einer externen Tabelle finden Sie unter [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). 

## Syntax
<a name="r_SHOW_EXTERNAL_TABLE-synopsis"></a>

```
SHOW EXTERNAL TABLE [external_database].external_schema.table_name [ PARTITION ]
```

## Parameters
<a name="r_SHOW_EXTERNAL_TABLE-parameters"></a>

 *external\$1database*   
Der Name der verbundenen externen Datenbank. Dieser Parameter ist optional.

 *external\$1schema*   
Der Name des verbundenen externen Schemas. 

 *table\$1name*   
Der Name der Tabelle, die angezeigt werden soll. 

PARTITION   
Zeigt ALTER TABLE-Anweisungen zum Hinzufügen von Partitionen zur Tabellendefinition an. 

## Beispiele
<a name="r_SHOW_EXTERNAL_TABLE-examples"></a>

Die folgenden Beispiele basieren auf einer externen Tabelle, die wie folgt definiert ist:

```
CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
     csmallint smallint,
     cint int,
     cbigint bigint,
     cfloat float4,
     cdouble float8,
     cchar char(10),
     cvarchar varchar(255),
     cdecimal_small decimal(18,9),
     cdecimal_big decimal(30,15),
     ctimestamp TIMESTAMP,
     cboolean boolean,
     cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime TIMESTAMP)
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
```

Im Folgenden finden Sie ein Beispiel für den Befehl SHOW EXTERNAL TABLE und die Ausgabe für die Tabelle `my_schema.alldatatypes_parquet_test_partitioned`.

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

Im Folgenden finden Sie ein Beispiel für den Befehl SHOW EXTERNAL TABLE und die Ausgabe für dieselbe Tabelle, wobei auch die Datenbank im Parameter angegeben ist.

```
SHOW EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

Im Folgenden finden Sie ein Beispiel für den Befehl SHOW EXTERNAL TABLE und die Ausgabe bei Verwendung des Parameters `PARTITION`. Die Ausgabe enthält ALTER TABLE-Anweisungen zum Hinzufügen von Partitionen zur Tabellendefinition.

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned PARTITION;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-01') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-01';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-02') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-02';"
```

# SHOW DATABASES
<a name="r_SHOW_DATABASES"></a>

Zeigt Datenbanken aus einem Data Catalog oder einem Data Warehouse in Amazon Redshift an. SHOW DATABASES listet alle zugänglichen Datenbanken auf, z. B. innerhalb des Data Warehouse AWS Glue Data Catalog Datenbanken (awsdatacatalog), Datenaustauschdatenbanken und Lake Formation Formation-Datenbanken.

## Erforderliche Berechtigungen
<a name="r_SHOW_DATABASES-privileges"></a>

Alle Datenbanken sind für Benutzer sichtbar, mit Ausnahme von:
+ Im Fall von Datenbanken, die aus einem Datashare mit Berechtigungen erstellt wurden, muss dem aktuellen Benutzer die Berechtigung USAGE für die Datenbank erteilt werden.

## Syntax
<a name="r_SHOW_DATABASES-syntax"></a>

So zeigen Sie Datenbanken aus einem Data Warehouse in Amazon Redshift an:

```
SHOW DATABASES 
[ LIKE '<expression>' ]
[ LIMIT row_limit ]
```

So zeigen Sie Datenbanken aus einem Data Catalog an:

```
SHOW DATABASES FROM DATA CATALOG 
[ ACCOUNT  '<id1>', '<id2>', ... ]
[ LIKE '<expression>' ]
[ IAM_ROLE default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ]
[ LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_DATABASES-parameters"></a>

ACCOUNT '<id1>', '<id2>', ...   
Die AWS Glue Data Catalog Konten, von denen aus Datenbanken aufgelistet werden sollen. Wenn Sie diesen Parameter weglassen, bedeutet das, dass Amazon Redshift die Datenbanken des Kontos anzeigen soll, dem der Cluster gehört.

LIKE '<Ausdruck>'  
Filtert die Liste der Datenbanken nach denen, die dem von Ihnen angegebenen Ausdruck entsprechen. Dieser Parameter unterstützt Muster, die die Platzhalterzeichen % (Prozentzeichen) und \$1 (Unterstrich) verwenden.

IAM\$1ROLE default \$1 'SESSION' \$1 'arn:aws:iam::<account-id>:role/<role-name>'  
Wenn Sie beim Ausführen des SHOW DATABASE-Befehls eine IAM-Rolle angeben, die dem Cluster zugeordnet ist, benutzt Amazon Redshift die Anmeldeinformationen der Rolle, wenn Sie Abfragen in der Datenbank ausführen.  
Die Angabe des Schlüsselworts `default` bedeutet, die IAM-Rolle zu verwenden, die als Standard festgelegt und mit dem Cluster verknüpft ist.  
Benutzen Sie `'SESSION'`, wenn Sie über eine Verbundidentität eine Verbindung zu Ihrem Amazon-Redshift-Cluster herstellen und über das mit dem [CREATE DATABASE](r_CREATE_DATABASE.md)-Befehl erstellte externe Schema auf die Tabellen zugreifen. Ein Beispiel zur Verwendung einer Verbundidentität finden Sie unter [Verwenden einer Verbundidentität zur Verwaltung des Amazon-Redshift-Zugriffs auf lokale Ressourcen und externe Amazon-Redshift-Spectrum-Tabellen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). Darin wird erläutert, wie Sie eine Verbundidentität konfigurieren.   
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Die IAM-Rolle muss mindestens die Berechtigung besitzen, eine LIST-Operation für den Amazon-S3-Bucket auszuführen, auf den zugegriffen werden soll, und eine GET-Operation für die Amazon-S3-Objekte, die der Bucket enthält. Weitere Informationen zu Datenbanken, die aus den AWS Glue Data Catalog for Datashares und mithilfe von IAM\$1ROLE erstellt wurden, finden Sie unter [Working with Lake Formation-managed](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html) datashares as a consumer.  
Nachfolgend ist die Syntax für die IAM\$1ROLE-Parameterzeichenfolge für einen einzelnen ARN aufgeführt.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Sie können Rollen miteinander verketten. Auf diese Weise kann der Cluster eine andere IAM-Rolle annehmen, die möglicherweise zu einem anderen Konto gehört. Es können bis zu 10 Rollen miteinander verkettet werden. Weitere Informationen finden Sie unter [Verketten von IAM-Rollen in Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Fügen Sie dieser IAM-Rolle eine IAM-Berechtigungsrichtlinie ähnlich der folgenden an:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Informationen zu den Schritten für das Erstellen einer IAM-Rolle zur Verwendung mit der Verbundabfrage finden Sie unter [Erstellen eines Secrets und einer IAM-Rolle für die Verwendung von Verbundabfragen](federated-create-secret-iam-role.md).   
Fügen Sie keine Leerzeichen in die Liste der verketteten Rollen ein.
Nachfolgend finden Sie die Syntax für die Verkettung von drei Rollen.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

LIMIT *row\$1limit*  
Klausel zum Begrenzen der Anzahl der zurückgegebenen Zeilen Wobei *row\$1limit* die maximale Anzahl der Zeilen ist, die zurückgegeben werden sollen. Der Wert *row\$1limit* kann 0–10 000 betragen.

## Beispiele
<a name="r_SHOW_DATABASES-examples"></a>

Im folgenden Beispiel werden alle Datenkatalogdatenbanken der Konto-ID 123456789012 angezeigt.

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012'

  catalog_id  | database_name |                        database_arn                    |     type     |                                             target_database                                      | location | parameters
--------------+---------------+--------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------+----------+------------
 123456789012 |   database1   | arn:aws:glue:us-east-1:123456789012:database/database1 | Data Catalog |                                                                                                  |          |
 123456789012 |   database2   | arn:aws:glue:us-east-1:123456789012:database/database2 | Data Catalog | arn:aws:redshift:us-east-1:123456789012:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/database2 |          |
```

Die folgenden Beispiele veranschaulichen, wie Sie mithilfe der Anmeldeinformationen einer IAM-Rolle alle Datenkatalog-Datenbanken aus Konto-ID 123456789012 anzeigen.

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE default;
```

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE <iam-role-arn>;
```

Im folgenden Beispiel werden alle Datenbanken des verbundenen Data Warehouse in Amazon Redshift angezeigt.

```
SHOW DATABASES

database_name  | database_owner | database_type        | database_acl | parameters | database_isolation_level
---------------+----------------+----------------------+--------------+------------+--------------------
awsdatacatalog | 1              | auto mounted catalog | NULL         | UNKNOWN    | UNKNOWN
dev            | 1              | local                | NULL         | NULL       | Snapshot Isolation
```

# FUNKTIONEN ANZEIGEN
<a name="r_SHOW_FUNCTIONS"></a>

Zeigt eine Liste der Funktionen in einem Schema zusammen mit Informationen zu den aufgelisteten Objekten an.

Jede Ausgabezeile enthält die Spalten database\$1name, schema\$1name, function\$1name, number\$1of\$1arguments, argument\$1list, return\$1type und Anmerkungen.

Wenn mehr als 10.000 Zeilen aus SHOW FUNCTIONS resultieren würden, löst der Befehl einen Fehler aus.

## Erforderliche Berechtigungen
<a name="r_SHOW_FUNCTIONS-required-permissions"></a>

Um eine Funktion in einem Redshift-Schema anzuzeigen, muss der aktuelle Benutzer eines der folgenden Kriterien erfüllen:
+ Seien Sie ein Superuser
+ Sei der Besitzer der Funktion
+ Es wurde das USAGE-Privileg für das übergeordnete Schema und das EXECUTE-Recht für die Funktion erteilt

## Syntax
<a name="r_SHOW_FUNCTIONS-synopsis"></a>

```
SHOW FUNCTIONS FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_FUNCTIONS-parameters"></a>

*database\$1name*  
Der Name der Datenbank, die die aufzulistenden Funktionen enthält.

*schema\$1name*  
Der Name des Schemas, das die aufzulistenden Funktionen enthält.

*filter\$1pattern*  
Ein gültiger UTF-8-Zeichenausdruck mit einem Muster, das Funktionsnamen entspricht. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_FUNCTIONS.html)
Beachten Sie, dass das filter\$1pattern nur dem Funktionsnamen entspricht.

*row\$1limit*  
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen.

## Beispiele
<a name="r_SHOW_FUNCTIONS-examples"></a>

Das folgende Beispiel zeigt Funktionen aus dem Schema demo\$1db.demo\$1schema:

```
SHOW FUNCTIONS FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |    function_name     | number_of_arguments |                                  argument_list                                  |    return_type    | remarks 
---------------+-------------+----------------------+---------------------+---------------------------------------------------------------------------------+-------------------+---------
 demo_db       | demo_schema | f2                   |                   6 | integer, character varying, numeric, date, timestamp without time zone, boolean | character varying | 
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer                                                                | numeric           | 
 demo_db       | demo_schema | f_days_between       |                   2 | date, date                                                                      | integer           |
```

Das folgende Beispiel zeigt Funktionen aus dem Schema demo\$1schema, deren Namen auf 'discount' enden:

```
SHOW FUNCTIONS FROM SCHEMA demo_schema like '%discount';
 database_name | schema_name |    function_name     | number_of_arguments |  argument_list   | return_type | remarks 
---------------+-------------+----------------------+---------------------+------------------+-------------+---------
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer | numeric     |
```

# SHOW GRANTS
<a name="r_SHOW_GRANTS"></a>

Zeigt Erteilungen für Benutzer, Rollen oder Objekte an. Das Objekt kann eine Datenbank, ein Schema, eine Tabelle, eine Funktion oder eine Vorlage sein. Wenn Sie ein Objekt angeben, z. B. eine Tabelle oder Funktion, müssen Sie es mit einer zwei- oder dreiteiligen Notation qualifizieren. Zum Beispiel `schema_name.table_name` oder `database_name.schema_name.table_name`.

Wenn mehr als 10.000 Zeilen aus SHOW GRANTS resultieren würden, löst der Befehl einen Fehler aus.

## Erforderliche Berechtigungen
<a name="r_SHOW_GRANTS-permissions"></a>

Um SHOW GRANTS für einen Zielbenutzer oder eine Zielrolle auszuführen, muss der aktuelle Benutzer eines der folgenden Kriterien erfüllen:
+ Seien Sie ein Superuser
+ Sei der Zielbenutzer
+ Seien Sie der Besitzer der Zielrolle
+ Ihnen wird die Rolle gewährt

SHOW GRANTS für ein Zielobjekt zeigt nur Zuschüsse an, die für den aktuellen Benutzer sichtbar sind. Ein Grant ist für den aktuellen Benutzer sichtbar, wenn der aktuelle Benutzer eines der folgenden Kriterien erfüllt:
+ Seien Sie ein Superuser
+ Sei der Zielbenutzer
+ Erteilen Sie sich den Besitzer der erteilten Rolle
+ Ihnen wird die Rolle zugewiesen, für die die Objektzuweisung vorgesehen ist

## Syntax
<a name="r_SHOW_GRANTS-syntax"></a>

Im Folgenden finden Sie die Syntax für die Anzeige von Erteilungen für Objekte. Beachten Sie, dass die zweite Art der Angabe einer Funktion nur für externe Schemata und Datenbanken gilt, die aus einem Datashare erstellt wurden.

```
SHOW GRANTS ON
{
 DATABASE database_name |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } ( [ [ argname ] argtype [, ...] ] ) |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } |
 SCHEMA {database_name.schema_name | schema_name} | 
 { TABLE {database_name.schema_name.table_name | schema_name.table_name} | table_name }
 TEMPLATE {database_name.schema_name.template_name | template_name}
}
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

Im Folgenden finden Sie die Syntax für die Anzeige von Erteilungen für Benutzer oder Rollen. 

```
SHOW GRANTS FOR
{username | ROLE role_name}
[FROM DATABASE database_name]
[LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_GRANTS-parameters"></a>

 *database\$1name*   
Der Name der Datenbank, für die Erteilungen angezeigt werden sollen.

 *function\$1name*   
Der Name der Funktion, für die Erteilungen angezeigt werden sollen.

Vorlagenname  
Der Name der Vorlage, für die Zuschüsse angezeigt werden sollen.

 *schema\$1name*   
Der Name des Schemas, für das Erteilungen angezeigt werden sollen.

 *table\$1name*   
Der Name der Tabelle, für die Erteilungen angezeigt werden sollen.

FOR *username*   
Zeigt an, dass Erteilungen für einen Benutzer angezeigt werden.

FOR ROLE *role\$1name*   
Zeigt an, dass Erteilungen für eine Rolle angezeigt werden.

FOR PUBLIC  
Zeigt an, dass Erteilungen für PUBLIC angezeigt werden.

 *row\$1limit*   
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen. 

## Beispiele
<a name="r_SHOW_GRANTS-examples"></a>

Im folgenden Beispiel werden alle Erteilungen für eine Datenbank mit dem Namen `dev` angezeigt.

```
SHOW GRANTS on database demo_db;

  database_name | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | ALTER          |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TRUNCATE       |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DROP           |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | INSERT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TEMP           |           0 | public        | public        | f            | DATABASE        | dbadmin
 demo_db       | SELECT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | UPDATE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DELETE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | REFERENCES     |         112 | alice         | user          | f            | TABLES          | dbadmin
```

Der folgende Befehl zeigt alle Erteilungen für ein Schema mit dem Namen `demo` an.

```
SHOW GRANTS ON SCHEMA demo_schema;

 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | demo_schema | SCHEMA      | ALTER          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | DROP           |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | USAGE          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | CREATE         |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
```

Der folgende Befehl zeigt alle Erteilungen für einen Benutzer mit dem Namen `alice` an.

```
SHOW GRANTS FOR alice;

 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 demo_db       |             |             | DATABASE    | INSERT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | SELECT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | UPDATE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DELETE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | REFERENCES     |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DROP           |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | TRUNCATE       |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | ALTER          |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | USAGE          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | CREATE         |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | DROP           |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | ALTER          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | INSERT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | SELECT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | UPDATE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DELETE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | RULE           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | REFERENCES     |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRIGGER        |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DROP           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRUNCATE       |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | ALTER          |         124 | alice         | user          | TABLE           | dbadmin
```

```
SHOW GRANTS FOR alice FROM DATABASE second_db;
 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 second_db     | public      | t22         | TABLE       | SELECT         |         101 | alice         | user          | TABLE           | dbadmin
```

Der folgende Befehl zeigt alle Erteilungen für eine Tabelle mit dem Namen `t3` für einen Benutzer mit dem Namen `alice` an. Beachten Sie, dass Sie zur Angabe des Tabellennamens entweder eine zweiteilige oder eine dreiteilige Notation verwenden können.

```
SHOW GRANTS ON TABLE demo_db.demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin


SHOW GRANTS ON TABLE demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

Das folgende Beispiel zeigt alle Erteilungen für eine Tabelle mit dem Namen `t4` an. Beachten Sie die verschiedenen Möglichkeiten, wie Sie den Tabellennamen angeben können.

```
SHOW GRANTS ON t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 
SHOW GRANTS ON TABLE public.t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

# SHOW MODEL
<a name="r_SHOW_MODEL"></a>

Zeigt nützliche Informationen über ein Machine-Learning-Modell an, einschließlich dessen Status, die Parameter, die zum Erstellen verwendet werden, und die Vorhersagefunktion mit seinen Eingabeargumenttypen. Sie können die Informationen aus SHOW MODEL verwenden, um das Modell neu zu erstellen. Wenn Basistabellen geändert wurden, führt das Ausführen von CREATE MODEL mit derselben SQL-Anweisung zu einem anderen Modell. Die von SHOW MODEL zurückgegebenen Informationen unterscheiden sich für den Modellbesitzer und für einen Benutzer mit der Berechtigung EXECUTE. SHOW MODELL zeigt unterschiedliche Ausgaben an, wenn ein Modell von Amazon Redshift trainiert wird oder wenn es sich um ein BYOM-Modell handelt.

## Syntax
<a name="r_SHOW_MODEL-synopsis"></a>

```
SHOW MODEL ( ALL | model_name )
```

## Parameters
<a name="r_SHOW_MODEL-parameters"></a>

ALL   
Gibt alle Modelle zurück, die der Benutzer verwenden kann, und ihre Schemata.

 *model\$1name*   
Der Name des Modells Der Modellname in einem Schema muss eindeutig sein.

## Nutzungshinweise
<a name="r_SHOW_MODEL_usage_notes"></a>

Der Befehl SHOW MODEL erzeugt die folgende Ausgabe. 
+ Der Modellname.
+ Das Schema, in dem das Modell erstellt wurde.
+ Der Besitzer des Modells.
+ Zeitpunkt der Erstellung des Modells.
+ Der Status des Modells, z. B. READY, TRAINING oder FAILED.
+ Der Grund für den Fehlschlag eines Modells.
+ Der Validierungsfehler, wenn das Modell das Training abgeschlossen hat.
+ Die geschätzten Kosten, die erforderlich sind, um das Modell für einen Nicht-BYOM-Ansatz abzuleiten. Nur der Besitzer des Modells kann diese Informationen anzeigen.
+ Eine Liste der benutzerdefinierten Parameter und deren Werte, insbesondere die folgenden:
  + Die angegebene TARGET-Spalte.
  + Der Modelltyp, AUTO oder XGBoost.
  + Der Problemtyp, z. B. REGRESSION, BINARY\$1CLASSIFICATION, MULTICLASS\$1CLASSIFICATION. Dieser Parameter ist spezifisch für AUTO.
  + Der Name des Amazon SageMaker AI-Trainingsjobs oder des Amazon SageMaker AI Autopilot-Jobs, mit dem das Modell erstellt wurde. Sie können diesen Jobnamen verwenden, um weitere Informationen über das Modell auf Amazon SageMaker AI zu finden.
  + Das Ziel, wie MSE, F1, Genauigkeit. Dieser Parameter ist spezifisch für AUTO.
  + Der Name der erstellten Funktion.
  + Die Art der Inferenz, lokal oder remote.
  + Die Eingabeargumente der Vorhersagefunktion.
  + Die Eingabeargumenttypen der Vorhersagefunktion für Modelle, die nicht BYOM sind.
  + Der Rückgabewert der Vorhersagefunktion. Dieser Parameter ist spezifisch für BYOM.
  + Der Name des Amazon SageMaker AI-Endpunkts für ein BYOM-Modell mit Remote-Inferenz.
  + Die IAM-Rolle. Kann nur der Besitzer des Modells sehen.
  + Der Name des S3 Buckets. Kann nur der Besitzer des Modells sehen.
  + Der AWS KMS Schlüssel, falls einer angegeben wurde. Kann nur der Besitzer des Modells sehen.
  + Die maximale Ausführungsdauer des Modells.
+ Wenn der Modelltyp nicht AUTO ist, zeigt Amazon Redshift auch die Liste der bereitgestellten Hyperparameter und deren Werte an.

Sie können auch einige der von SHOW MODEL bereitgestellten Informationen in anderen Katalogtabellen wie pg\$1proc anzeigen. Amazon Redshift gibt Informationen über die Vorhersagefunktion zurück, die in der Katalogtabelle pg\$1proc registriert ist. Zu diesen Informationen gehören die Namen der Eingabeargumente und deren Typen für die Vorhersagefunktion. Amazon Redshift liefert dieselben Informationen mit dem Befehl SHOW MODEL.

```
SELECT * FROM pg_proc WHERE proname ILIKE '%<function_name>%';
```

## Beispiele
<a name="r_SHOW_MODEL-examples"></a>

Das folgende Beispiel zeigt die Ausgabe für SHOW MODEL.

```
SHOW MODEL ALL;

Schema Name |  Model Name
------------+---------------
 public     | customer_churn
```

Der Besitzer von customer\$1churn kann die folgende Ausgabe sehen. Ein Benutzer, der nur die Berechtigung EXECUTE hat, kann die IAM-Rolle, den Amazon-S3-Bucket und die geschätzten Kosten des Modells nicht sehen.

```
SHOW MODEL customer_churn;

       Key                 |           Value
---------------------------+-----------------------------------
 Model Name                | customer_churn
 Schema Name               | public
 Owner                     | 'owner'
 Creation Time             | Sat, 15.01.2000 14:45:20
 Model State               | READY
 validation:F1             | 0.855
 Estimated Cost            | 5.7
                           |
 TRAINING DATA:            |
 Table                     | customer_data
 Target Column             | CHURN
                           |
 PARAMETERS:               |
 Model Type                | auto
 Problem Type              | binary_classification
 Objective                 | f1
 Function Name             | predict_churn
 Function Parameters       | age zip average_daily_spend average_daily_cases
 Function Parameter Types  | int int float float
 IAM Role                  | 'iam_role'
 KMS Key                   | 'kms_key'
 Max Runtime               | 36000
```

# SHOW DATASHARES
<a name="r_SHOW_DATASHARES"></a>

Zeigt die eingehenden und ausgehenden Datashares in einem Cluster aus demselben Konto oder kontenübergreifend an. Wenn Sie keinen Datashare-Namen angeben, zeigt Amazon Redshift alle Datashares in allen Datenbanken im Cluster an. Benutzer mit ALTER- und SHARE-Berechtigungen können die Datashares anzeigen, für die sie über Berechtigungen verfügen. 

## Syntax
<a name="r_SHOW_DATASHARES-synopsis"></a>

```
SHOW DATASHARES [ LIKE 'namepattern' ] 
```

## Parameters
<a name="r_SHOW_DATASHARES-parameters"></a>

LIKE  
Eine optionale Klausel, die das angegebene Namensmuster mit der Beschreibung des Datashares vergleicht. Wenn diese Klausel verwendet wird, zeigt Amazon Redshift nur die Datashares an, deren Namen dem angegebenen Namensmuster entsprechen.

*namepattern*  
Der Name des angeforderten Datashares oder ein Teil des Namens, der mit Platzhalterzeichen übereinstimmt.

## Beispiele
<a name="r_SHOW_DATASHARES-examples"></a>

Im folgenden Beispiel werden die eingehenden und ausgehenden Datashares in einem Cluster angezeigt. 

```
SHOW DATASHARES;
SHOW DATASHARES LIKE 'sales%';

share_name   | share_owner | source_database | consumer_database | share_type | createdate          | is_publicaccessible | share_acl | producer_account |           producer_namespace
-------------+-------------+-----------------+-------------------+------------+---------------------+---------------------+-----------+------------------+---------------------------------------
'salesshare' | 100         | dev             |                   | outbound   | 2020-12-09 01:22:54.| False               |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
```

# PARAMETER ANZEIGEN
<a name="r_SHOW_PARAMETERS"></a>

Zeigt eine Liste von Parametern für eine Funktion/Prozedur zusammen mit einigen Informationen zu den Parametern an.

Jede Ausgabezeile enthält die Spalten database\$1name, schema\$1name, procedure\$1name oder function\$1name, parameter\$1name, ordinal\$1position, parameter\$1type (IN/OUT), data\$1type, character\$1maximum\$1length, numeric\$1precision, numeric\$1scale und Anmerkungen.

## Erforderliche Berechtigungen
<a name="r_SHOW_PARAMETERS-required-permissions"></a>

Um function/procedure a in einem Redshift-Schema anzuzeigen, muss der aktuelle Benutzer eines der folgenden Kriterien erfüllen:
+ Seien Sie ein Superuser
+ Sei der Besitzer der Funktion
+ Es wurde das USAGE-Privileg für das übergeordnete Schema und das EXECUTE-Recht für die Funktion erteilt

## Syntax
<a name="r_SHOW_PARAMETERS-synopsis"></a>

```
SHOW PARAMETERS OF {FUNCTION| PROCEDURE}
[database_name.]schema_name.function_name(argtype [, ...] )
[LIKE 'filter_pattern'];
```

## Parameters
<a name="r_SHOW_PARAMETERS-parameters"></a>

*database\$1name*  
Der Name der Datenbank, die die aufzulistende Funktion enthält.

*schema\$1name*  
Der Name des Schemas, das die aufzulistende Funktion enthält.

*filter\$1pattern*  
Ein gültiger UTF-8-Zeichenfolgenausdruck mit einem Muster zum Abgleich der Tabellennamen. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_PARAMETERS.html)

## Beispiele
<a name="r_SHOW_PARAMETERS-examples"></a>

Das folgende Beispiel zeigt Parameter der Prozedur demo\$1db.demo\$1schema.f1:

```
SHOW PARAMETERS OF PROCEDURE demo_db.demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL);
 database_name | schema_name | procedure_name |  parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+------------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | operation        |                1 | IN             | character varying           |                       10 |                   |              
 demo_db       | demo_schema | f1             | value1           |                2 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2           |                3 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | result           |                4 | INOUT          | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | operation_status |                5 | OUT            | character varying           |                       50 |                   |              
 demo_db       | demo_schema | f1             | calculation_time |                6 | OUT            | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f1             | is_successful    |                7 | OUT            | boolean                     |                          |                   |
```

Das folgende Beispiel zeigt Parameter der Prozedur demo\$1schema.f1, deren Namen mit 'val' beginnen:

```
SHOW PARAMETERS OF PROCEDURE demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL) like 'val%';
 database_name | schema_name | procedure_name | parameter_name | ordinal_position | parameter_type | data_type | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+----------------+------------------+----------------+-----------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | value1         |                2 | IN             | numeric   |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2         |                3 | IN             | numeric   |                          |                18 |             0
```

Das folgende Beispiel zeigt Parameter der Funktion demo\$1schema.f2:

```
SHOW PARAMETERS OF FUNCTION demo_schema.f2(INT, VARCHAR, DECIMAL, DATE, TIMESTAMP, BOOLEAN);
 database_name | schema_name | function_name | parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+---------------+-----------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f2            |                 |                0 | RETURN         | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | int_param       |                1 | IN             | integer                     |                          |                32 |             0
 demo_db       | demo_schema | f2            | varchar_param   |                2 | IN             | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | decimal_param   |                3 | IN             | numeric                     |                          |                   |              
 demo_db       | demo_schema | f2            | date_param      |                4 | IN             | date                        |                          |                   |              
 demo_db       | demo_schema | f2            | timestamp_param |                5 | IN             | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f2            | boolean_param   |                6 | IN             | boolean                     |                          |                   |
```

# RICHTLINIEN ANZEIGEN
<a name="r_SHOW_POLICIES"></a>

Zeigt die in einer Datenbank definierten Sicherheitsrichtlinien (RLS) und DDM-Richtlinien (Dynamic Data Masking) sowie die auf bestimmte Beziehungen angewendeten RLS- und DDM-Richtlinien an. Nur ein Superuser oder ein Benutzer mit der `sys:secadmin` Rolle in der Datenbank kann die Ergebnisse dieser Richtlinien einsehen.

## Syntax
<a name="r_SHOW_POLICIES-synopsis"></a>

```
SHOW { RLS | MASKING } POLICIES
[
    ON { database_name.schema_name.relation_name
       | schema_name.relation_name
       }
    [ FOR { user_name | ROLE role_name | PUBLIC } ]
  |
    FROM DATABASE database_name
]
[ LIMIT row_limit ];
```

## Parameters
<a name="r_SHOW_POLICIES-parameters"></a>

*database\$1name*  
Der Name der Datenbank, aus der Richtlinien angezeigt werden sollen.

*schema\$1name*  
Schemaname der Beziehung, für die angehängte Richtlinien angezeigt werden sollen.

*relation\$1name*  
Der Name der Beziehung, für die angehängte Richtlinien angezeigt werden sollen.

*user\$1name*  
Der Name des Benutzers, für den die Richtlinie an die Beziehung angehängt ist.

*role\$1name*  
Der Name der Rolle, für die die Richtlinie an eine Beziehung angehängt ist.

*row\$1limit*  
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen.

**Anmerkung**  
Richtlinien aus einer anderen Datenbank als der verbundenen Datenbank anzeigen wird im Amazon Redshift Federated Permissions Catalog unterstützt. Der Befehl SHOW POLICIES unterstützt datenbankübergreifende Abfragen für alle Datenbanken in Warehouses mit Amazon Redshift Redshift-Verbundberechtigungen

## Beispiele
<a name="r_SHOW_POLICIES-examples"></a>

Der folgende Befehl zeigt RLS-Richtlinien aus der verbundenen Datenbank.

```
SHOW RLS POLICIES;

  policy_name   | policy_alias |                           policy_atts                            |                                                                  policy_qual                                                                         | policy_enabled | policy_modified_by |    policy_modified_time    
----------------+--------------+------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+--------------------+----------------------------
 policy_america | rls_table    | [{"colname":"region","type":"character varying(10)"}]            | (("rls_table"."region" = CAST('USA' AS TEXT)) OR ("rls_table"."region" = CAST('CANADA' AS TEXT)) OR ("rls_table"."region" = CAST('Mexico' AS TEXT))) | t              | admin              | 2025-11-07 14:57:27
```

Der folgende Befehl zeigt Maskierungsrichtlinien aus der Datenbank „sales\$1db.finance-catalog“;

```
SHOW MASKING POLICIES FROM DATABASE "sales_db@finance-catalog";

  policy_name  |                          input_columns                           |                                                  policy_expression                                                  | policy_modified_by |    policy_modified_time    
---------------+------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+--------------------+----------------------------
 hash_credit   | [{"colname":"credit_card","type":"character varying(256)"}]      | [{"expr":"SHA2((\"masked_table\".\"credit_card\" + CAST('testSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}]   | admin              | 2025-11-07 16:05:54
 hash_username | [{"colname":"username","type":"character varying(256)"}]         | [{"expr":"SHA2((\"masked_table\".\"username\" + CAST('otherTestSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}] | admin              | 2025-11-07 16:07:08
(2 rows)
```

Der folgende Befehl zeigt die RLS-Richtlinien, die an die Relation sales\$1table angehängt sind;

```
SHOW RLS POLICIES ON sales_schema.sales_table;

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |          grantee          | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+---------------------------+--------------+--------------+-----------+----------------------
 policy_global  | sales_schema | sales_table   | table         | admin    | sales_analyst_role_global | role         | t            | t         | and
 policy_america | sales_schema | sales_table   | table         | admin    | sales_analyst_usa         | user         | t            | t         | and
```

Der folgende Befehl zeigt Maskierungsrichtlinien, die an die Relation transaction\$1table aus der Datenbank „sales\$1db.finance-catalog“ angehängt sind.

```
SHOW MASKING POLICIES ON "sales_db@finance-catalog".sales_schema.transaction_table LIMIT 1;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority |   input_columns   |   output_columns   
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+-------------------+-------------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"]     | ["user_name"]
```

Der folgende Befehl zeigt RLS-Richtlinien, die an die Relation sales\$1table aus der Datenbank „sales\$1db.finance-catalog“ für den Benutzer „iamr:Sales\$1Analyst\$1USA“ angehängt sind.

```
SHOW RLS POLICIES ON "sales_db@finance-catalog".sales_schema.sales_table FOR "IAMR:sales_analyst_usa";

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |      grantee           | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+------------------------+--------------+--------------+-----------+----------------------
 policy_america | sales_schema | sales_table   | table         | admin    | IAMR:sales_analyst_usa | user         | t            | t         | and
```

Der folgende Befehl zeigt die RLS-Richtlinien, die an die Relation transaction\$1table aus der Datenbank „sales\$1db.finance-catalog“ für die Rolle transaction\$1analyst\$1role angehängt sind.

```
SHOW MASKING POLICIES ON sales_schema.transaction_table FOR ROLE transaction_analyst_role;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority | input_columns | output_columns 
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+---------------+----------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"] | ["user_name"]
```

# SHOW PROCEDURE
<a name="r_SHOW_PROCEDURE"></a>

Zeigt die Definition einer bestimmten gespeicherten Prozedur, einschließlich ihrer Signatur. Sie können die Ausgabe von SHOW PROCEDURE verwenden, um die gespeicherte Prozedur neu zu erstellen. 

## Syntax
<a name="r_SHOW_PROCEDURE-synopsis"></a>

```
SHOW PROCEDURE sp_name [( [ [ argname ] [ argmode ] argtype [, ...] ] )]
```

## Parameters
<a name="r_SHOW_PROCEDURE-parameters"></a>

 *sp\$1name*   
Der Name der Prozedur, die angezeigt werden soll. 

*[argname] [ argmode] argtype*   
Eingabeargumenttypen zum Identifizieren der gespeicherten Prozedur. Optional können Sie alle Argumentdatentypen angeben, auch die der OUT-Argumente. Dieser Teil ist optional, wenn der Name der gespeicherten Prozedur eindeutig (also nicht überladen) ist.

## Beispiele
<a name="r_SHOW_PROCEDURE-examples"></a>

Das folgende Beispiel zeigt die Definition der Prozedur `test_spl2`.

```
show procedure test_sp2(int, varchar);
                                        Stored Procedure Definition
------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE public.test_sp2(f1 integer, INOUT f2 character varying, OUT character varying)
LANGUAGE plpgsql
AS $_$
DECLARE
out_var alias for $3;
loop_var int;
BEGIN
IF f1 is null OR f2 is null THEN
RAISE EXCEPTION 'input cannot be null';
END IF;
CREATE TEMP TABLE etl(a int, b varchar);
FOR loop_var IN 1..f1 LOOP
insert into etl values (loop_var, f2);
f2 := f2 || '+' || f2;
END LOOP;
SELECT INTO out_var count(*) from etl;
END;
$_$

(1 row)
```

# ZEIGT PROZEDUREN
<a name="r_SHOW_PROCEDURES"></a>

Zeigt eine Liste der Prozeduren in einem Schema zusammen mit Informationen zu den aufgelisteten Objekten an.

Jede Ausgabezeile enthält Spalten `database_name``schema_name`,`procedure_name`,`number_of_arguments`,`argument_list`,`return_type`, Anmerkungen.

Wenn sich aus SHOW PROCEDURES mehr als 10.000 Zeilen ergeben würden, löst der Befehl einen Fehler aus.

## Erforderliche Berechtigungen
<a name="r_SHOW_PROCEDURES-required-permissions"></a>

Um eine Prozedur in einem Redshift-Schema anzuzeigen, muss der aktuelle Benutzer eines der folgenden Kriterien erfüllen:
+ Seien Sie ein Superuser
+ Seien Sie der Eigentümer des Verfahrens
+ Es wurde das USAGE-Privileg für das übergeordnete Schema und das EXECUTE-Recht für die Prozedur erteilt

## Syntax
<a name="r_SHOW_PROCEDURES-synopsis"></a>

```
SHOW PROCEDURES FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_PROCEDURES-parameters"></a>

database\$1name  
Der Name der Datenbank, die die aufzulistenden Prozeduren enthält.

schema\$1name  
Der Name des Schemas, das die aufzulistenden Prozeduren enthält.

filter\$1pattern  
Ein gültiger UTF-8-Zeichenausdruck mit einem Muster, das den Prozedurnamen entspricht. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_PROCEDURES.html)
Beachten Sie, dass das filter\$1pattern nur dem Prozedurnamen entspricht.

row\$1limit  
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen.

## Beispiele
<a name="r_SHOW_PROCEDURES-examples"></a>

Das folgende Beispiel zeigt Prozeduren aus dem Schema demo\$1db.demo\$1schema:

```
SHOW PROCEDURES FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |  procedure_name   | number_of_arguments |                argument_list                 |                           return_type                            | remarks 
---------------+-------------+-------------------+---------------------+----------------------------------------------+------------------------------------------------------------------+---------
 demo_db       | demo_schema | f1                |                   4 | character varying, numeric, numeric, numeric | numeric, character varying, timestamp without time zone, boolean | 
 demo_db       | demo_schema | sp_get_result_set |                   2 | integer, refcursor                           | refcursor                                                        | 
 demo_db       | demo_schema | sp_process_data   |                   2 | numeric, numeric                             | numeric, character varying                                       |
```

Das folgende Beispiel zeigt Prozeduren aus dem Schema demo\$1schema, deren Namen auf 'data' enden:

```
SHOW PROCEDURES FROM SCHEMA demo_schema like '%data';
 database_name | schema_name | procedure_name  | number_of_arguments |  argument_list   |        return_type         | remarks 
---------------+-------------+-----------------+---------------------+------------------+----------------------------+---------
 demo_db       | demo_schema | sp_process_data |                   2 | numeric, numeric | numeric, character varying |
```

# SHOW SCHEMAS
<a name="r_SHOW_SCHEMAS"></a>

Zeigt eine Liste von Schemata in einer Datenbank zusammen mit einigen Schemaattributen an.

Jede Ausgabezeile besteht aus dem Datenbanknamen, dem Schemanamen, dem Schemabesitzer, dem Schematyp, der Schema-ACL, der Quelldatenbank und der Schemaoption. Weitere Informationen zu diesen Attributen finden Sie unter [SVV\$1ALL\$1SCHEMAS](r_SVV_ALL_SCHEMAS.md).

Wenn der Befehl SHOW SCHEMAS mehr als 10 000 Schemas ergeben würde, wird ein Fehler zurückgegeben.

## Erforderliche Berechtigungen
<a name="r_SHOW_SCHEMAS-privileges"></a>

Um ein Schema in einer Amazon-Redshift-Tabelle anzuzeigen, müssen die aktuellen Benutzer eines der folgenden Kriterien erfüllen:
+ Sie müssen Superuser sein.
+ Sie müssen der Besitzer des Schemas sein.
+ Ihnen muss die Berechtigung USAGE für das Schema erteilt worden sein.

## Syntax
<a name="r_SHOW_SCHEMAS-synopsis"></a>

```
SHOW SCHEMAS FROM DATABASE database_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_SCHEMAS-parameters"></a>

 *database\$1name*   
Der Name der Datenbanktabelle, welche die aufzulistenden Tabellen enthält.   
Um Tabellen in einer anzuzeigen AWS Glue Data Catalog, geben Sie (`awsdatacatalog`) als Datenbanknamen an und stellen Sie sicher, dass die Systemkonfiguration auf eingestellt `data_catalog_auto_mount` ist. `true` Weitere Informationen finden Sie unter [ALTER SYSTEM](r_ALTER_SYSTEM.md).

 *filter\$1pattern*   
Ein gültiger UTF-8-Zeichenfolgenausdruck mit einem Muster zum Abgleich von Schemanamen. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_SCHEMAS.html)
Wenn *filter-pattern* keine Metazeichen enthält, repräsentiert das Muster die Zeichenfolge selbst. In diesem Fall liefert LIKE dasselbe Ergebnis wie der Gleichheitsoperator. 

 *row\$1limit*   
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen. 

## Beispiele
<a name="r_SHOW_SCHEMAS-examples"></a>

Das folgende Beispiel zeigt die Schemata aus der Amazon-Redshift-Datenbank mit dem Namen `dev`.

```
SHOW SCHEMAS FROM DATABASE dev;

 database_name |     schema_name      | schema_owner | schema_type |         schema_acl          | source_database | schema_option 
---------------+----------------------+--------------+-------------+-----------------------------+-----------------+---------------
 dev           | pg_automv            |            1 | local       |                             |                 | 
 dev           | pg_catalog           |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | public               |            1 | local       | jpuser=UC/jpuser~=UC/jpuser |                 | 
 dev           | information_schema   |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | schemad79cd6d93bf043 |            1 | local       |                             |                 |
```

Das folgende Beispiel zeigt die Schemas in der AWS Glue Data Catalog Datenbank mit dem Namen`awsdatacatalog`. Die maximale Anzahl von Ausgabezeilen ist `5`.

```
SHOW SCHEMAS FROM DATABASE awsdatacatalog LIMIT 5;

 database_name  |     schema_name      | schema_owner | schema_type | schema_acl | source_database | schema_option 
----------------+----------------------+--------------+-------------+------------+-----------------+---------------
 awsdatacatalog | 000_too_many_glue_db |              | EXTERNAL    |            |                 | 
 awsdatacatalog | 123_default          |              | EXTERNAL    |            |                 | 
 awsdatacatalog | adhoc                |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_10mb      |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_1g        |              | EXTERNAL    |            |                 |
```

# SHOW TABLE
<a name="r_SHOW_TABLE"></a>

Zeigt die Definition einer Tabelle, einschließlich Tabellenattributen, Tabelleneinschränkungen, Spaltenattributen, Spaltensortierung und Spalteneinschränkungen. Sie können die Ausgabe der SHOW TABLE-Anweisung verwenden, um die Tabelle neu zu erstellen. 

Weitere Informationen zum Erstellen einer Tabelle finden Sie unter [CREATE TABLE](r_CREATE_TABLE_NEW.md). 

## Syntax
<a name="r_SHOW_TABLE-synopsis"></a>

```
SHOW TABLE [schema_name.]table_name 
```

## Parameters
<a name="r_SHOW_TABLE-parameters"></a>

 *schema\$1name*   
(Optional) Der Name des zugehörigen Schemas. 

 *table\$1name*   
Der Name der Tabelle, die angezeigt werden soll. 

## Beispiele
<a name="r_SHOW_TABLE-examples"></a>

Es folgt ein Beispiel für die Ausgabe von SHOW TABLE für die Tabelle `sales`.

```
show table sales;
```

```
CREATE TABLE public.sales (
salesid integer NOT NULL ENCODE az64,
listid integer NOT NULL ENCODE az64 distkey,
sellerid integer NOT NULL ENCODE az64,
buyerid integer NOT NULL ENCODE az64,
eventid integer NOT NULL ENCODE az64,
dateid smallint NOT NULL,
qtysold smallint NOT NULL ENCODE az64,
pricepaid numeric(8,2) ENCODE az64,
commission numeric(8,2) ENCODE az64,
saletime timestamp without time zone ENCODE az64
)
DISTSTYLE KEY SORTKEY ( dateid );
```

Es folgt ein Beispiel für die Ausgabe von SHOW TABLE für die Tabelle `category` im Schema `public`. Die Sortierung der Datenbank ist CASE\$1SENSITIVE.

```
show table public.category;
```

```
CREATE TABLE public.category (
catid smallint NOT NULL distkey,
catgroup character varying(10) ENCODE lzo COLLATE case_sensitive,
catname character varying(10) ENCODE lzo COLLATE case_sensitive,
catdesc character varying(50) ENCODE lzo COLLATE case_sensitive
) 
DISTSTYLE KEY SORTKEY ( catid );
```

Im folgenden Beispiel wird die Tabelle `foo` mit einem Primärschlüssel erstellt.

```
create table foo(a int PRIMARY KEY, b int);
```

Die SHOW TABLE-Ergebnisse zeigen die create-Anweisung mit allen Eigenschaften der `foo`-Tabelle.

```
show table foo;
```

```
CREATE TABLE public.foo ( 
a integer NOT NULL ENCODE az64, 
b integer ENCODE az64, PRIMARY KEY (a) 
) 
DISTSTYLE AUTO;
```

In diesem Beispiel erstellen wir eine Tabelle, in der die Spalte die Standardkollation CASE\$1SENSITIVE der Datenbank `a` erbt, während `b` die Sortierung explizit auf CASE\$1INSENSITIVE gesetzt ist. `c`

```
CREATE TABLE public.foo (
a CHAR, 
b VARCHAR(10) COLLATE CASE_INSENSITIVE, 
c SUPER COLLATE CASE_INSENSITIVE
);
```

Die SHOW TABLE-Ergebnisse zeigen die create-Anweisung mit allen Eigenschaften der `foo`-Tabelle.

```
show table public.foo;
```

```
CREATE TABLE public.foo (
a character(1) ENCODE lzo COLLATE case_sensitive,
b character varying(10) ENCODE lzo COLLATE case_insensitive,
c super COLLATE case_insensitive
)
DISTSTYLE AUTO;
```

# SHOW TABLES
<a name="r_SHOW_TABLES"></a>

Zeigt eine Liste von Tabellen in einem Schema zusammen mit einigen Tabellenattributen an.

Jede Ausgabezeile besteht aus Datenbankname, Schemaname, Tabellenname, Tabellentyp, Tabellen-ACL, Anmerkungen, Tabellenbesitzer, Uhrzeit der letzten Änderung, Uhrzeit der letzten Änderung, dist\$1style und Tabellenuntertyp. Weitere Informationen zu diesen Attributen finden Sie unter [SVV\$1ALL\$1TABLES](r_SVV_ALL_TABLES.md).

Die Zeitstempel für Änderungen und Änderungen können etwa 20 Minuten hinter den Tabellenaktualisierungen zurückbleiben.

Wenn der Befehl SHOW TABLES mehr als 10 000 Spalten ergeben würde, wird ein Fehler zurückgegeben.

## Erforderliche Berechtigungen
<a name="r_SHOW_TABLES-privileges"></a>

Um eine Tabelle in einem Amazon-Redshift-Schema anzuzeigen, müssen die aktuellen Benutzer eines der folgenden Kriterien erfüllen:
+ Sie müssen Superuser sein.
+ Sie müssen die Besitzer der Tabelle sein.
+ Ihnen müssen die Berechtigung USAGE für das übergeordnete Schema und die Berechtigung SELECT für die Tabelle oder die Berechtigung SELECT für eine Spalte in der Tabelle erteilt worden sein.

## Syntax
<a name="r_SHOW_TABLES-synopsis"></a>

```
SHOW TABLES FROM SCHEMA database_name.schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_TABLES-parameters"></a>

 *database\$1name*   
Der Name der Datenbanktabelle, welche die aufzulistenden Tabellen enthält.   
Um Tabellen in einer anzuzeigen AWS Glue Data Catalog, geben Sie (`awsdatacatalog`) als Datenbanknamen an und stellen Sie sicher, dass die Systemkonfiguration auf eingestellt `data_catalog_auto_mount` ist. `true` Weitere Informationen finden Sie unter [ALTER SYSTEM](r_ALTER_SYSTEM.md).

 *schema\$1name*   
Der Name des Schemas, das die aufzulistenden Tabellen enthält.   
Um AWS Glue Data Catalog Tabellen anzuzeigen, geben Sie den AWS Glue Datenbanknamen als Schemanamen an.

 *filter\$1pattern*   
Ein gültiger UTF-8-Zeichenfolgenausdruck mit einem Muster zum Abgleich der Tabellennamen. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_TABLES.html)
Wenn *filter-pattern* keine Metazeichen enthält, repräsentiert das Muster die Zeichenfolge selbst. In diesem Fall liefert LIKE dasselbe Ergebnis wie der Gleichheitsoperator. 

 *row\$1limit*   
Die maximale Anzahl der zurückzugebenden Zeilen. Der Wert *row\$1limit* kann 0–10 000 betragen. 

## Beispiele
<a name="r_SHOW_TABLES-examples"></a>

```
SHOW TABLES FROM SCHEMA s1;

 database_name | schema_name |    table_name     | table_type |              table_acl              | remarks | owner |     last_altered_time      |     last_modified_time     | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+-------------------------------------+---------+-------+----------------------------+----------------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | alice=arwdRxtDPA/alice~bob=d/alice  |         | alice |                            |                            |            | LATE BINDING VIEW
 dev           | s1          | manual_mv         | VIEW       | alice=arwdRxtDPA/alice~bob=P/alice  |         | alice |                            |                            |            | MATERIALIZED VIEW
 dev           | s1          | regular_view      | VIEW       | alice=arwdRxtDPA/alice~bob=r/alice  |         | alice |                            |                            |            | REGULAR VIEW
 dev           | s1          | test_table        | TABLE      | alice=arwdRxtDPA/alice~bob=rw/alice |         | alice | 2025-11-18 15:52:00.010452 | 2025-11-18 15:44:34.856073 | AUTO (ALL) | REGULAR TABLE
```

```
SHOW TABLES FROM SCHEMA dev.s1 LIKE '%view' LIMIT 1;

 database_name | schema_name |    table_name     | table_type |              table_acl               | remarks | owner | last_altered_time | last_modified_time | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+--------------------------------------+---------+-------+-------------------+--------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | {alice=arwdRxtDPA/alice,bob=d/alice} |         | alice |                   |                    |            | LATE BINDING VIEW
```

# VORLAGE ANZEIGEN
<a name="r_SHOW_TEMPLATE"></a>

Zeigt die vollständige Definition einer Vorlage an, einschließlich des vollständig qualifizierten Namens (Datenbank, Schema und Vorlagenname) und aller Parameter. Die Ausgabe ist eine gültige CREATE TEMPLATE-Anweisung, mit der Sie die Vorlage neu erstellen oder eine ähnliche Vorlage mit Änderungen erstellen können. 

Weitere Informationen zur Erstellung von Vorlagen finden Sie unter[VORLAGE ERSTELLEN](r_CREATE_TEMPLATE.md). 

## Erforderliche Berechtigungen
<a name="r_SHOW_TEMPLATE-privileges"></a>

Um eine Vorlagendefinition anzeigen zu können, benötigen Sie eine der folgenden Voraussetzungen:
+ Superuser-Rechte
+ USAGE-Privileg für die Vorlage und USAGE-Privileg für das Schema, das die Vorlage enthält

## Syntax
<a name="r_SHOW_TEMPLATE-synopsis"></a>

```
SHOW TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameters
<a name="r_SHOW_TEMPLATE-parameters"></a>

 *database\$1name*   
(Optional) Der Name der Datenbank, in der die Vorlage erstellt wird. Wenn nicht angegeben, wird die aktuelle Datenbank verwendet. 

 *schema\$1name*   
(Optional) Der Name des Schemas, in dem die Vorlage erstellt wird. Wenn nicht angegeben, wird im aktuellen Suchpfad nach der Vorlage gesucht. 

 *Vorlagenname*   
Der Name der Vorlage. 

## Beispiele
<a name="r_SHOW_TEMPLATE-examples"></a>

Im Folgenden finden Sie ein Beispiel für die SHOW TEMPLATE-Ausgabe für die Vorlage: `test_template`

```
CREATE TEMPLATE test_template FOR COPY AS NOLOAD DELIMITER ',' ENCODING UTF16 ENCRYPTED;
```

```
SHOW TEMPLATE test_template;

CREATE OR REPLACE TEMPLATE dev.public.test_template FOR COPY AS ENCRYPTED NOLOAD ENCODING UTF16 DELIMITER ',';
```

Das folgende Beispiel erstellt eine Vorlage `demo_template` im Schema`demo_schema`.

```
CREATE OR REPLACE TEMPLATE demo_schema.demo_template FOR COPY AS
ACCEPTANYDATE ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY' EXPLICIT_IDS ROUNDEC
TIMEFORMAT  AS 'DD.MM.YYYY HH:MI:SS' TRUNCATECOLUMNS NULL  AS 'null_string';
```

```
SHOW TEMPLATE demo_schema.demo_template;

CREATE OR REPLACE TEMPLATE dev.demo_schema.demo_template FOR COPY AS TRUNCATECOLUMNS NULL 'null_string' EXPLICIT_IDS TIMEFORMAT 'DD.MM.YYYY HH:MI:SS' ACCEPTANYDATE ROUNDEC ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY';
```

# VORLAGEN ANZEIGEN
<a name="r_SHOW_TEMPLATES"></a>

Zeigt eine Liste der Vorlagen in einem Schema zusammen mit ihren Attributen an.

Jede Ausgabezeile besteht aus Vorlagenname, Vorlagen-ID, Vorlagentyp, Vorlagenbesitzer, Datenbankname, Schemaname, Erstellungszeit, Uhrzeit der letzten Änderung und Letzte Änderung von. 

Vollständige Vorlagendetails, einschließlich Vorlagenparameter, finden Sie unter[SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md).

## Erforderliche Berechtigungen
<a name="r_SHOW_TEMPLATES-privileges"></a>

Um Vorlagen in einem Amazon Redshift Redshift-Schema anzuzeigen, benötigen Sie eine der folgenden Voraussetzungen:
+ Superuser-Rechte
+ USAGE-Privileg für das Schema, das die Vorlagen enthält

## Syntax
<a name="r_SHOW_TEMPLATES-synopsis"></a>

```
SHOW TEMPLATES FROM SCHEMA [database_name.]schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ];
```

## Parameters
<a name="r_SHOW_TEMPLATES-parameters"></a>

 *database\$1name*   
(Optional) Der Name der Datenbank, die die aufzulistenden Vorlagen enthält. Falls nicht angegeben, wird die aktuelle Datenbank verwendet.

 *schema\$1name*   
Der Name des Schemas, das die aufzulistenden Vorlagen enthält. 

 *filter\$1pattern*   
(Optional) Ein gültiger UTF-8-Zeichenausdruck mit einem Muster, das den Vorlagennamen entspricht. Die Option LIKE führt eine Suche durch, bei der zwischen Groß- und Kleinschreibung unterschieden wird und welche die folgenden Metazeichen für den Mustervergleich unterstützt:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/redshift/latest/dg/r_SHOW_TEMPLATES.html)
Wenn *filter-pattern* keine Metazeichen enthält, repräsentiert das Muster die Zeichenfolge selbst. In diesem Fall liefert LIKE dasselbe Ergebnis wie der Gleichheitsoperator. 

 *row\$1limit*   
Die maximale Anzahl der zurückzugebenden Zeilen. Der gültige Bereich liegt zwischen 0 und dem Template-Limit für den Cluster (Standard ist 1000).

## Beispiele
<a name="r_SHOW_TEMPLATES-examples"></a>

```
SHOW TEMPLATES FROM SCHEMA s1;

 template_name          | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by
------------------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 template_maxerror      |      107685 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:10.514076 | 2025-12-16 19:31:10.514076 |              100
 json_template          |      107687 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:33.229566 | 2025-12-16 19:31:33.229567 |              100
 noload_template        |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
 csv_delimiter_template |      107688 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:42.354044 | 2025-12-16 19:31:42.354045 |              100
```

```
SHOW TEMPLATES FROM SCHEMA dev.s1 LIKE '%template' LIMIT 1;

 template_name  | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by 
-----------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 noload_template |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
```

# SHOW VIEW
<a name="r_SHOW_VIEW"></a>

Zeigt die Definition einer Ansicht, auch für materialisierte Ansichten und Ansichten mit später Bindung. Sie können die Ausgabe der SHOW VIEW-Anweisung verwenden, um die Tabelle neu zu erstellen. 

## Syntax
<a name="r_SHOW_VIEW-synopsis"></a>

```
SHOW VIEW [schema_name.]view_name 
```

## Parameters
<a name="r_SHOW_VIEW-parameters"></a>

 *schema\$1name*   
(Optional) Der Name des zugehörigen Schemas. 

 *view\$1name*   
Der Name der Ansicht, die angezeigt werden soll. 

## Beispiele
<a name="r_SHOW_VIEW-examples"></a>

 Nachfolgend sehen Sie die Ansichtsdefinition für `LA_Venues_v`.

```
create view LA_Venues_v as select * from venue where venuecity='Los Angeles';
```

Es folgt ein Beispiel für den Befehl SHOW VIEW und die Ausgabe für die zuvor definierte Ansicht.

```
show view LA_Venues_v;
```

```
SELECT venue.venueid,
venue.venuename,
venue.venuecity,
venue.venuestate,
venue.venueseats
FROM venue WHERE ((venue.venuecity)::text = 'Los Angeles'::text);
```

Nachfolgend sehen Sie die Ansichtsdefinition für die Ansicht `public.Sports_v` im Schema `public`.

```
create view public.Sports_v as select * from category where catgroup='Sports';
```

Es folgt ein Beispiel für den Befehl SHOW VIEW und die Ausgabe für die zuvor definierte Ansicht.

```
show view public.Sports_v;
```

```
SELECT category.catid,
category.catgroup,
category.catname,
category.catdesc
FROM category WHERE ((category.catgroup)::text = 'Sports'::text);
```

# START TRANSACTION
<a name="r_START_TRANSACTION"></a>

Synonym der Funktion BEGIN. 

Siehe [BEGIN](r_BEGIN.md). 

# TRUNCATE
<a name="r_TRUNCATE"></a>

Löscht alle Zeilen aus einer Tabelle, ohne die Tabelle zu scannen: Dieser Vorgang stellt eine schnellere Alternative zu einer nicht qualifizierten DELETE-Operation dar. Um einen TRUNCATE-Befehl auszuführen, muss Ihnen die Berechtigung TRUNCATE für die Tabelle erteilt worden sein, Sie müssen der Besitzer der Tabelle sein oder Sie müssen ein Superuser sein. Mit dem [GRANT](r_GRANT.md)-Befehl können Sie Berechtigungen zum Kürzen einer Tabelle erteilen.

TRUNCATE ist sehr viel effizienter als DELETE und erfordert weder VACUUM noch ANALYZE. Denken Sie jedoch daran, dass TRUNCATE ein Commit für die Transaktion ausführt, in der er ausgeführt wird.

## Syntax
<a name="r_TRUNCATE-synopsis"></a>

```
TRUNCATE [ TABLE ] table_name
```

Der Befehl funktioniert auch in einer materialisierten Ansicht.

```
TRUNCATE materialized_view_name
```

## Parameters
<a name="r_TRUNCATE-parameters"></a>

TABLE   
Optionales Schlüsselwort. 

 *table\$1name*   
Eine temporäre oder persistente Tabelle. Nur der Besitzer der Tabelle oder ein Superuser können sie verkürzen.   
Sie können jede Tabelle abschneiden, auch Tabellen, die in Fremdschlüsseleinschränkungen referenziert werden.   
Sie müssen eine Tabelle nicht bereinigen, nachdem Sie sie abgeschnitten haben. 

 *materialized\$1view\$1name*   
Eine materialisierte Ansicht.  
Sie können eine materialisierte Ansicht, die für [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md) verwendet wird, kürzen. 

## Nutzungshinweise
<a name="r_TRUNCATE_usage_notes"></a>
+  Der Befehl TRUNCATE führt ein Commit für die Transaktion aus, in der er ausgeführt wird. Daher können Sie für eine TRUNCATE-Operation kein Rollback ausführen. Ein TRUNCATE-Befehl kann ein Commit für andere Operationen ausführen, wenn er ein Commit für sich selbst ausführt. 
+ TRUNCATE-Operationen enthalten exklusive Sperren, wenn sie in materialisierten Ansichten für das Streaming in Amazon Redshift ausgeführt werden, die mit einem der folgenden Streams verbunden sind:
  +  Einem Amazon-Kinesis-Datenstrom 
  +  Einem Thema in Amazon Managed Streaming für Apache Kafka 
  +  Einem unterstützten externen Stream, z. B. einem Thema in Confluent Cloud Kafka 

  Weitere Informationen finden Sie unter [Streaming-Aufnahme in eine materialisierte Ansicht](materialized-view-streaming-ingestion.md).

## Beispiele
<a name="r_TRUNCATE-examples"></a>

Verwenden Sie den Befehl TRUNCATE, um alle Zeilen aus der Tabelle CATEGORY zu löschen: 

```
truncate category;
```

Im folgenden Beispiel wird versucht, ein Rollback für eine TRUNCATE-Operation auszuführen: 

```
begin;

truncate date;

rollback;

select count(*) from date;
count
-------
0
(1 row)
```

Die Tabelle DATE bleibt nach dem ROLLBACK-Befehl leer, da der TRUNCATE-Befehl automatisch ein Commit ausgeführt hat. 

Im folgenden Beispiel wird der Befehl TRUNCATE verwendet, um alle Zeilen einer materialisierten Ansicht zu löschen. 

```
truncate my_materialized_view;
```

Er löscht alle Datensätze in der materialisierten Ansicht und lässt die materialisierte Ansicht und ihr Schema unverändert. In der Abfrage ist der Name der materialisierten Ansicht ein Beispiel.

# UNLOAD
<a name="r_UNLOAD"></a>


|  | 
| --- |
| Die clientseitige Verschlüsselung für die Befehle COPY und UNLOAD steht Neukunden ab dem 30. April 2025 nicht mehr zur Verfügung. Wenn Sie in den 12 Monaten vor dem 30. April 2025 die clientseitige Verschlüsselung für die Befehle COPY und UNLOAD verwendet haben, können Sie die clientseitige Verschlüsselung für die Befehle COPY oder UNLOAD bis zum 30. April 2026 weiter verwenden. Nach dem 30. April 2026 können Sie die clientseitige Verschlüsselung für COPY und UNLOAD nicht mehr verwenden. Wir empfehlen, so schnell wie möglich zur serverseitigen Verschlüsselung für COPY und UNLOAD zu wechseln. Wenn Sie die serverseitige Verschlüsselung für COPY und UNLOAD bereits verwenden, ändert sich nichts und Sie können sie weiterhin verwenden, ohne Ihre Abfragen zu ändern. Weitere Informationen zur Verschlüsselung für COPY und UNLOAD finden Sie unten im Abschnitt zum Parameter ENCRYPTED.  | 

Entlädt das Ergebnis einer Abfrage in eine oder mehrere Textdateien, JSON-Dateien oder in Apache-Parquet-Dateien in Amazon S3 unter Verwendung der serverseitigen Amazon-S3-Verschlüsselung (SSE-S3). Sie können auch eine serverseitige Verschlüsselung mit einem AWS Key Management Service -Schlüssel angeben (SSE-KMS).

Standardmäßig ist das Format der entladenen Datei ein mit senkrechten Strichen (Pipeoperator) getrennter Text (`|`).

Sie können die Größe von Dateien in Amazon S3 und damit auch die Anzahl von Dateien verwalten, indem Sie den Parameter MAXFILESIZE festlegen. Stellen Sie sicher, dass die S3-IP-Bereiche zu Ihrer Zulassungsliste hinzugefügt werden. Weitere Informationen zu den erforderlichen S3-IP-Bereichen finden Sie unter [Netzwerkisolierung](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation).

Sie können das Ergebnis einer Abfrage in Amazon Redshift in Ihr Amazon S3-Data Lake in Apache Parquet entladen, einem effizienten offenen spaltenbasierten Speicherformat für Analysen. Das Parquet-Format ist bis zu 2x schneller zu entladen und belegt in Amazon S3 bis zu 6x weniger Speicherplatz als Textformate. Auf diese Weise können Sie die Datentransformation und -anreicherung, die Sie in Amazon S3 vorgenommen haben, in Ihrem Amazon S3-Data Lake in einem offenen Format speichern. Anschließend können Sie Ihre Daten mit Redshift Spectrum und anderen AWS Diensten wie Amazon Athena, Amazon EMR und Amazon AI analysieren. SageMaker 

Weitere Informationen und Beispielszenarien zur Verwendung des Befehls UNLOAD finden Sie unter [Entladen von Daten in Amazon Redshift](c_unloading_data.md).

## Erforderliche Rechte und Berechtigungen
<a name="r_UNLOAD-permissions"></a>

Damit der UNLOAD-Befehl erfolgreich ausgeführt werden kann, sind mindestens das SELECT-Recht für die Daten in der Datenbank sowie die Berechtigung zum Schreiben in den Amazon-S3-Speicherort erforderlich. Informationen zu den Zugriffsberechtigungen für den Befehl UNLOAD auf AWS Ressourcen finden Sie unter. [Berechtigungen AWS für den Zugriff auf andere Ressourcen](copy-usage_notes-access-permissions.md)

Um Berechtigungen mit den geringsten Rechten anzuwenden, folgen Sie diesen Empfehlungen, um nur dem Benutzer, der den Befehl ausführt, die erforderlichen Berechtigungen zu erteilen.
+ Der Benutzer muss über die Berechtigung SELECT für die Daten verfügen. Informationen dazu, wie Sie Datenbankberechtigungen einschränken können, finden Sie unter [GRANT](r_GRANT.md).
+ Der Benutzer benötigt die Berechtigung für die Annahme der IAM-Rolle, um zum Amazon-S3-Bucket in Ihrem AWS-Konto zu schreiben. Informationen zum Einschränken des Zugriffs für einen Datenbankbenutzer, um eine Rolle anzunehmen, finden Sie unter [Einschränken des Zugriffs auf IAM-Rollen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service-database-users.html) im *Amazon-Redshift-Administrationshandbuch*.
+ Der Benutzer benötigt Zugriff auf den Amazon-S3-Bucket. Informationen zum Einschränken von Berechtigungen mithilfe einer Richtlinie für Amazon-S3-Buckets finden Sie unter [Bucket-Richtlinien für Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) im *Benutzerhandbuch für Amazon Simple Storage Service*.

## Syntax
<a name="r_UNLOAD-synopsis"></a>

```
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
authorization
[ option, ...] 

where authorization is
IAM_ROLE { default | 'arn:aws:iam::<AWS-Konto-id-1>:role/<role-name>[,arn:aws:iam::<AWS-Konto-id-2>:role/<role-name>][,...]' }
            
where option is
| [ FORMAT [ AS ] ] CSV | PARQUET | JSON
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| ROWGROUPSIZE [AS] size [ MB | GB ]
| REGION [AS] 'aws-region' }
| EXTENSION 'extension-name'
```

## Parameters
<a name="unload-parameters"></a>

('*select-statement*')   
Eine SELECT-Abfrage. Die Ergebnisse der Abfrage werden entladen. In den meisten Fällen lohnt es sich, Daten in sortierter Reihenfolge zu entladen, indem in der Abfrage eine ORDER BY-Klausel angegeben wird. Dieser Ansatz spart die für das Sortieren der Daten beim erneuten Laden benötigte Zeit.   
Die Abfrage muss in einfache Anführungszeichen gesetzt werden, wie im Folgenden gezeigt:   

```
('select * from venue order by venueid')
```
Wenn Ihre Abfrage Anführungszeichen enthält (z. B. um Literalwerte einzuschließen), setzen Sie das Literal zwischen zwei Sätze einfacher Anführungszeichen. Sie müssen auch die Abfrage in einfache Anführungszeichen einschließen:   

```
('select * from venue where venuestate=''NV''')
```

TO 's3://*object-path/name-prefix*'   
Der vollständige Pfad, einschließlich des Bucket-Namens, zum Speicherort in Amazon S3, an dem Amazon Redshift die ausgegebenen Dateiobjekte schreibt, einschließlich der Manifest-Datei, wenn MANIFEST angegeben ist. Den Objektnamen wird *name-prefix* vorangestellt. Wenn Sie `PARTITION BY` verwenden, wird bei Bedarf automatisch ein Schrägstrich (/) am Ende des *Namens-Präfix*-Wertes eingefügt. Um zusätzliche Sicherheit bereitzustellen, stellt UNLOAD eine Verbindung zu Amazon S3 über HTTPS her. Standardmäßig schreibt UNLOAD eine oder mehrere Dateien pro Slice. UNLOAD fügt eine Slice-Nummer und Teilenummer an das angegebene Namenspräfix wie im Folgenden gezeigt an:  
`<object-path>/<name-prefix><slice-number>_part_<part-number>`.   
Wenn MANIFEST angegeben ist, wird die Manifestdatei wie folgt geschrieben:  
`<object_path>/<name_prefix>manifest`.   
Wenn PARALLEL auf OFF festgelegt ist, werden die Datendateien wie folgt geschrieben:  
`<object_path>/<name_prefix><part-number>`.   
UNLOAD erstellt automatisch mithilfe der serverseitigen Amazon-S3-Verschlüsselung (SSE) verschlüsselte Dateien, einschließlich der Manifestdatei, wenn MANIFEST verwendet wird. Der Befehl COPY liest automatisch serverseitig verschlüsselte Daten während der Ladeoperationen. Sie können serverseitig verschlüsselte Dateien über die Amazon-S3-Managementkonsole oder die API transparent aus Ihrem Bucket herunterladen. Weitere Informationen finden Sie unter [Schutz von Daten mittels serverseitiger Verschlüsselung](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).   
REGION ist erforderlich, wenn sich der Amazon-S3-Bucket nicht in derselben AWS-Region  wie die Amazon-Redshift-Datenbank befindet. 

*Autorisierung*  
Der Befehl UNLOAD benötigt eine Autorisierung, um Daten zu Amazon S3 zu schreiben. Der Befehl UNLOAD verwendet für die Autorisierung dieselben Parameter wie der Befehl COPY. Weitere Informationen finden Sie unter [Autorisierungsparameter](copy-parameters-authorization.md) in der COPY-Befehlssyntaxreferenz.

IAM\$1ROLE \$1Standard \$1 'arn:aws:iam: :role/ '*<AWS-Konto-id-1>**<role-name>*   <a name="unload-iam"></a>
Verwenden Sie das Standardstichwort, damit Amazon Redshift die IAM-Rolle verwendet, die als Standard festgelegt und mit dem Cluster verknüpft ist, wenn der UNLOAD-Befehl ausgeführt wird.  
Verwenden Sie den Amazon-Ressourcennamen (ARN) für eine IAM-Rolle, die von Ihrem Cluster für Authentifizierung und Autorisierung verwendet wird. Wenn Sie IAM\$1ROLE angeben, können Sie ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN oder CREDENTIALS nicht verwenden. IAM\$1ROLE kann verkettet werden. Weitere Informationen finden Sie unter [Verketten von IAM-Rollen](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles) im *Amazon-Redshift-Verwaltungshandbuch*.

[ FORMAT [AS] ] CSV \$1 PARQUET \$1 JSON  <a name="unload-csv"></a>
Schlüsselwörter zur Angabe des Entladeformats, die das Standardformat außer Kraft setzen.   
Bei CSV wird eine Entladung in eine Textdatei im CSV-Format durchgeführt, bei der ein Kommazeichen (,) als Standard-Trennzeichen verwendet wird. Wenn ein Feld Trennzeichen, doppelte Anführungszeichen, Zeilenvorschubzeichen oder Zeilenumbrüche enthält, wird das Feld in der entladenen Datei in doppelte Anführungszeichen eingeschlossen. Einem doppelten Anführungszeichen innerhalb eines Datenfeldes wird ein zusätzliches doppeltes Anführungszeichen vorangestellt. Wenn null Zeilen entladen werden, schreibt Amazon Redshift möglicherweise leere Amazon-S3-Objekte.  
Im Falle von PARQUET wird in eine Datei im Apache-Parquet-Version-1.0-Format entladen. Standardmäßig wird jede Zeilengruppe mittels SNAPPY-Komprimierung komprimiert. Weitere Informationen zum Apache-Parquet-Format finden Sie unter [Parquet](https://parquet.apache.org/).   
Im Fall von JSON erfolgt eine Entladung in eine JSON-Datei, wobei jede Zeile ein JSON-Objekt enthält, das einen vollständigen Datensatz im Abfrageergebnis darstellt. Amazon Redshift unterstützt das Schreiben von verschachteltem JSON, wenn das Abfrageergebnis SUPER-Spalten enthält. Um ein gültiges JSON-Objekt zu erstellen, muss der Name jeder Spalte in der Abfrage eindeutig sein. In der JSON-Datei werden boolesche Werte als `t` oder `f` und NULL-Werte als `null` entladen. Wenn null Zeilen entladen werden, schreibt Amazon Redshift keine Amazon-S3-Objekte.  
Die Schlüsselwörter FORMAT und AS sind optional. Sie können CSV nicht mit ESCAPE, FIXEDWIDTH oder ADDQUOTES verwenden. Sie können PARQUET nicht mit DELIMITER, FIXEDWIDTH, ADDQUOTES, ESCAPE, NULL AS, HEADER, GZIP oder ZSTD verwenden. BZIP2 PARQUET with ENCRYPTED wird nur bei serverseitiger Verschlüsselung mit einem Schlüssel (SSE-KMS) unterstützt. AWS Key Management Service Sie können JSON nicht mit DELIMITER, HEADER, FIXEDWIDTH, ADDQUOTES, ESCAPE oder NULL AS verwenden.

PARTITION BY (*column\$1name* [, ... ]) [INCLUDE]  <a name="unload-partitionby"></a>
Gibt die Partitionsschlüssel für die Entladeoperation an. Über UNLOAD werden die Ausgabedateien entsprechend der Apache-Hive-Konvention automatisch in Partitionsordner basierend auf den Partitionsschlüsselwerten partitioniert. Beispielsweise verfügt eine Parquet-Datei, die zum Partitionsjahr 2019 und dem Monat September gehört, über das folgende Präfix: `s3://amzn-s3-demo-bucket/my_prefix/year=2019/month=September/000.parquet`.   
Der Wert für *column\$1name* muss eine Spalte in den Abfrageergebnissen sein, die entladen werden.   
Wenn Sie PARTITION BY mit der Option INCLUDE angeben, werden Partitionsspalten nicht aus den entladenen Dateien entfernt.   
Amazon Redshift unterstützt keine Zeichenfolgeliterale in PARTITION-BY-Klauseln.

MANIFEST [ VERBOSE ]  
Erstellt eine Manifestdatei, die explizit Details der Datendateien auflistet, die durch den UNLOAD-Prozess erstellt werden. Das Manifest ist eine Textdatei im JSON-Format, die die URL jeder einzelnen Datei auflistet, die auf Amazon S3 geschrieben wurde.   
Bei Angabe von MANIFEST mit der Option VERBOSE enthält das Manifest die folgenden Details:   
+ Die Spaltennamen und Datentypen und für die Datentypen CHAR, VARCHAR oder NUMERIC Dimension für die einzelnen Spalten. Im Fall der Datentypen CHAR und VARCHAR entspricht die Dimension der Länge. Im Fall der Datentypen DECIMAL oder NUMERIC data type, sind die Dimensionen Genauigkeit und Skalierung. 
+ Die Anzahl der in die einzelnen Dateien entladenen Zeilen. Bei Angabe der Option HEADER schließt die Zeilenanzahl die Kopfzeile ein. 
+ Die gesamte Dateigröße aller entladenen Dateien und die Gesamtzahl der in alle Dateien entladenen Zeilen. Bei Angabe der Option HEADER schließt die Zeilenanzahl die Kopfzeilen ein. 
+ Den Autor. Der Autor ist immer „Amazon Redshift“.
Sie können VERBOSE nur auf MANIFEST folgend angeben.   
Die Manifestdatei wird im gleichen Amazon-S3-Pfadpräfix wie die entladenen Dateien im Format geschrieben `<object_path_prefix>manifest`. Wenn UNLOAD beispielsweise das Amazon-S3-Pfadpräfix '`s3://amzn-s3-demo-bucket/venue_`' angibt, ist der Speicherort der Manifestdatei '`s3://amzn-s3-demo-bucket/venue_manifest`'.

HEADER  
Fügt eine Kopfzeile mit den Spaltennamen oben in jeder Ausgabedatei hinzu. Texttransformationsoptionen wie CSV, DELIMITER, ADDQUOTES und ESCAPE gelten auch für die Kopfzeile. Sie können HEADER nicht mit FIXEDWIDTH verwenden.

DELIMITER AS '*delimiter\$1character*'   
Gibt ein einzelnes ASCII-Zeichen an, das verwendet wird, um Felder in der Ausgabedatei zu trennen, beispielsweise ein Pipe-Zeichen ( \$1 ), ein Komma ( , ) oder ein Tabulatorzeichen ( \$1t ). Das Standardtrennzeichen für Textdateien ist ein Pipe-Zeichen. Das Standardtrennzeichen für CSV-Dateien ist ein Kommazeichen. Das Schlüsselwort AS ist optional. Sie können DELIMITER nicht mit FIXEDWIDTH verwenden. Wenn die Daten das Trennzeichen enthalten, müssen Sie die ESCAPE-Option angeben, um ein Escape-Zeichen für das Trennzeichen zu verwenden, oder ADDQUOTES verwenden, um die Daten in doppelte Anführungszeichen einzuschließen. Alternativ können Sie ein Trennzeichen angeben, das nicht in den Daten enthalten ist.

FIXEDWIDTH '*fixedwidth\$1spec*'   
Entlädt die Daten in eine Datei, in der jede Spalte eine feste Breite hat, statt durch ein Trennzeichen abgetrennt zu werden. *fixedwidth\$1spec* ist eine Zeichenfolge, die die Anzahl der Spalten und die Breite der Spalten angibt. Das Schlüsselwort AS ist optional. Da FIXEDWIDTH keine Daten abschneidet, muss die Spezifikation für jede Spalte in der UNLOAD-Anweisung mindestens so lang wie die Länge des längsten Eintrags für die Spalte sein. Das Format für *fixedwidth\$1spec* wird im Folgenden gezeigt:   

```
'colID1:colWidth1,colID2:colWidth2, ...'
```
Sie können FIXEDWIDTH nicht mit DELIMITER oder HEADER verwenden.

VERSCHLÜSSELT [AUTO]  <a name="unload-parameters-encrypted"></a>
Gibt an, dass die Ausgabedateien in Amazon S3 mit der serverseitigen Verschlüsselung von Amazon S3 verschlüsselt werden. Wenn MANIFEST angegeben ist, wird die Manifestdatei ebenfalls verschlüsselt. Weitere Informationen finden Sie unter [Entladen verschlüsselter Datendateien](t_unloading_encrypted_files.md). Wenn Sie den ENCRYPTED-Parameter nicht angeben, erstellt UNLOAD automatisch verschlüsselte Dateien mithilfe der serverseitigen Amazon S3 S3-Verschlüsselung mit AWS verwalteten Verschlüsselungsschlüsseln (SSE-S3).   
Für ENCRYPTED möchten Sie möglicherweise mithilfe einer serverseitigen Verschlüsselung mit einem AWS KMS Schlüssel (SSE-KMS) nach Amazon S3 entladen. Wenn dies der Fall ist, verwenden Sie den [KMS_KEY_ID](#unload-parameters-kms-key-id)-Parameter, um die Schlüssel-ID anzugeben. Sie können den Parameter [Verwenden des Parameters CREDENTIALS](copy-parameters-authorization.md#copy-credentials) nicht mit dem Parameter KMS\$1KEY\$1ID verwenden. Wenn Sie einen UNLOAD-Befehl für Daten mit KMS\$1KEY\$1ID ausführen, können Sie dann einen COPY-Vorgang für dieselben Daten ausführen, ohne einen Schlüssel anzugeben.   
Wenn ENCRYPTED AUTO verwendet wird, ruft der Befehl UNLOAD den AWS KMS Standardverschlüsselungsschlüssel für die Amazon S3-Ziel-Bucket-Eigenschaft ab und verschlüsselt die in Amazon S3 geschriebenen Dateien mit dem Schlüssel. AWS KMS Wenn der Bucket nicht über den AWS KMS Standard-Verschlüsselungsschlüssel verfügt, erstellt UNLOAD automatisch verschlüsselte Dateien mithilfe der serverseitigen Amazon Redshift Redshift-Verschlüsselung mit AWS verwalteten Verschlüsselungsschlüsseln (SSE-S3). Sie können diese Option nicht mit KMS\$1KEY\$1ID, MASTER\$1SYMMETRIC\$1KEY oder CREDENTIALS verwenden, in denen master\$1symmetric\$1key enthalten ist. 

KMS\$1KEY\$1ID '*key-id*'  <a name="unload-parameters-kms-key-id"></a>
Gibt die Schlüssel-ID für einen AWS Key Management Service (AWS KMS) -Schlüssel an, der zum Verschlüsseln von Datendateien auf Amazon S3 verwendet werden soll. Weitere Informationen finden Sie unter [Was ist AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) Wenn Sie KMS\$1KEY\$1ID angeben, müssen Sie auch den Parameter [ENCRYPTED](#unload-parameters-encrypted) angeben. Wenn Sie KMS\$1KEY\$1ID angeben, können Sie keine Authentifizierungen mittels des Parameters CREDENTIALS ausführen. Verwenden Sie stattdessen [Verwenden des Parameters IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role) oder [Verwenden der Parameter ACCESS\$1KEY\$1ID und SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id). 

BZIP2   
Entlädt Daten zu einer oder mehreren bzip2-komprimierten Dateien pro Slice. Jeder resultierenden Datei wird die Erweiterung `.bz2` angefügt. 

GZIP   
Entlädt Daten in eine oder mehrere gzip-komprimierte Dateien pro Slice. Jeder resultierenden Datei wird die Erweiterung `.gz` angefügt. 

ZSTD   
Entlädt Daten zu einer oder mehreren Zstandard-komprimierten Dateien pro Slice. Jeder resultierenden Datei wird die Erweiterung `.zst` angefügt. 

ADDQUOTES   
Platziert Anführungszeichen um jedes entladene Datenfeld, sodass Amazon Redshift Datenwerte entladen kann, die das Trennzeichen selbst enthalten. Wenn beispielsweise das Trennzeichen ein Komma ist, könnten Sie die folgenden Daten erfolgreich entladen und neu laden:   

```
 "1","Hello, World" 
```
Ohne die hinzugefügten Anführungszeichen würde die Zeichenfolge `Hello, World` als zwei getrennte Felder analysiert werden.  
Einige Ausgabeformate unterstützen ADDQUOTES nicht.  
Wenn Sie ADDQUOTES verwenden, müssen Sie REMOVEQUOTES in der COPY-Operation angeben, wenn Sie die Daten neu laden.

NULL AS '*null-string*'   
Gibt eine Zeichenfolge zurück, die einen Null-Wert in entladenen Dateien darstellt. Wenn diese Option verwendet wird, enthalten alle Ausgabedateien die angegebene Zeichenfolge statt Null-Werten, die in den ausgewählten Daten gefunden werden. Wenn diese Option nicht angegeben ist, werden Null-Werte wie folgt entladen:   
+ Zeichenfolgen mit null Länge für Ausgaben mit Trennzeichen 
+ Leerzeichen-Zeichenfolgen für Ausgaben mit festen Spaltenbreiten
Wenn eine Null-Zeichenfolge angegeben ist, um eine Ausgabe mit fester Spaltenbreite zu entladen, und die Breite einer Ausgabespalte kleiner als die Breite der Null-Zeichenfolge ist, tritt das folgende Verhalten auf:   
+ Ein leeres Feld als Ausgabe für Spalten, die keine Zeichen enthalten 
+ Ein Fehler für Spalten, die Zeichen enthalten 
Im Gegensatz zu anderen Datentypen, bei denen eine benutzerdefinierte Zeichenfolge einen Nullwert darstellt, exportiert Amazon Redshift die SUPER-Datenspalten im JSON-Format und stellt sie als null dar, wie durch das JSON-Format bestimmt. Daher ignorieren SUPER-Datenspalten die Option NULL [AS], die in UNLOAD-Befehlen verwendet wird.

ESCAPE   
In CHAR- und VARCHAR-Spalten in entladenen Dateien mit Trennzeichen wird ein Escape-Zeichen (`\`) vor jedes Auftreten der folgenden Zeichen platziert:  
+ Zeilenvorschub: `\n`
+ Zeilenumschaltung: `\r`
+ Das Trennzeichen, das für die entladenen Daten angegeben ist. 
+ Das Escape-Zeichen: `\`
+ Ein Anführungszeichen: `"` oder `'` (wenn sowohl ESCAPE als auch ADDQUOTES im Befehl UNLOAD angegeben sind)
Wenn Sie Ihre Daten mittels einer COPY-Operation mit der ESCAPE-Option geladen haben, müssen Sie die ESCAPE-Option auch für Ihren UNLOAD-Befehl angeben, um die reziproke Ausgabedatei zu generieren. Wenn Sie UNLOAD unter Verwendung der Option ESCAPE ausführen, müssen Sie ESCAPE verwenden, wenn Sie eine COPY-Operation für dieselben Daten ausführen.

ALLOWOVERWRITE   <a name="allowoverwrite"></a>
Standardmäßig schlägt UNLOAD fehl, wenn die Operation auf Dateien trifft, die sie möglicherweise überschreiben könnte. Bei Angabe von ALLOWOVERWRITE überschreibt UNLOAD vorhandene Dateien einschließlich der Manifestdatei. 

CLEANPATH  <a name="cleanpath"></a>
Die Option CLEANPATH entfernt vorhandene Dateien, die sich in dem in der TO-Klausel angegebenen Amazon-S3-Pfad befinden, bevor Dateien an den angegebenen Speicherort entladen werden.   
Wenn Sie die PARTITION BY-Klausel einschließen, werden vorhandene Dateien nur aus den Partitionsordnern entfernt, die neue, durch die UNLOAD-Operation erzeugte Dateien aufnehmen sollen.  
Sie müssen über `s3:DeleteObject`-Leseberechtigung für den Amazon-S3-Bucket verfügen. Weitere Informationen finden Sie unter [Richtlinien und Berechtigungen in Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) im *Amazon-Simple-Storage-Service-Benutzerhandbuch*. Dateien, die Sie mithilfe der CLEANPATH-Option entfernen, werden dauerhaft gelöscht und können nicht wiederhergestellt werden. Wenn für den Ziel-Bucket in Amazon S3 die Versionsverwaltung aktiviert ist, entfernt UNLOAD mit der Option CLEANPATH keine früheren Versionen der Dateien.  
Sie können die Option CLEANPATH nicht angeben, wenn Sie die Option ALLOVOVERWRITE verwenden.

PARALLEL   <a name="unload-parallel"></a>
Standardmäßig schreibt UNLOAD die Daten parallel in mehrere Dateien, je nach der Anzahl der Slices in dem Cluster. Die Standardoption ist ON oder TRUE. Wenn PARALLEL OFF oder FALSE ist, schreibt UNLOAD seriell zu einer oder mehreren Datendateien und ist absolut entsprechend der ORDER BY-Klausel sortiert, wenn eine solche Klausel verwendet wird. Die maximale Größe für eine Datendatei ist 6,2 GB. Wenn Sie beispielsweise 13,4 GB Daten entladen, erstellt UNLOAD die folgenden drei Dateien.  

```
s3://amzn-s3-demo-bucket/key000    6.2 GB
s3://amzn-s3-demo-bucket/key001    6.2 GB
s3://amzn-s3-demo-bucket/key002    1.0 GB
```
Der UNLOAD-Befehl ist zur Verwendung der parallelen Verarbeitung gedacht. Wir empfehlen, in den meisten Fällen PARALLEL aktiviert zu lassen, besonders, wenn die Dateien zum Laden von Tabellen mit einem COPY-Befehl verwendet werden sollen.

MAXFILESIZE [AS] max-size [ MB \$1 GB ]   <a name="unload-maxfilesize"></a>
Gibt die maximale Größe von Dateien an, die UNLOAD in Amazon S3 erstellt. Geben Sie einen Dezimalwert zwischen 5 MB und 6,2 GB an. Das Schlüsselwort AS ist optional. Die Standardeinheit ist MB. Wenn MAXFILESIZE nicht angegeben wird, ist die standardmäßig zulässige Dateigröße 6,2 GB. Die Größe der Manifestdatei, falls verwendet, ist von MAXFILESIZE nicht betroffen.

ROWGROUPSIZE [AS] size [ MB \$1 GB ]   <a name="unload-rowgroupsize"></a>
Gibt die Größe von Zeilengruppen an. Die Auswahl einer größeren Größe kann die Anzahl der Zeilengruppen und somit den Umfang der Netzwerkkommunikation verringern. Geben Sie einen Ganzzahlwert zwischen 32 MB und 128 MB an. Das Schlüsselwort AS ist optional. Die Standardeinheit ist MB.  
Wenn ROWGROUPSIZE nicht angegeben ist, beträgt die Standardgröße 32 MB. Um diesen Parameter verwenden zu können, muss das Speicherformat Parquet und der Knotentyp muss ra3.4xlarge, ra3.16xlarge oder dc2.8xlarge sein.

REGION [AS] '*aws-region*'  <a name="unload-region"></a>
Gibt an AWS-Region , wo sich der Amazon S3 S3-Ziel-Bucket befindet. REGION ist für UNLOAD in einen Amazon S3 S3-Bucket erforderlich, der sich nicht in derselben AWS-Region Amazon Redshift Redshift-Datenbank befindet.   
Der Wert für *aws\$1region muss mit einer AWS Region* übereinstimmen, die in der [Amazon Redshift Redshift-Tabelle für Regionen und Endpunkte](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region) in der aufgeführt ist. *Allgemeine AWS-Referenz*  
Standardmäßig geht UNLOAD davon aus, dass sich der Amazon S3 S3-Ziel-Bucket in derselben AWS-Region Amazon Redshift Redshift-Datenbank befindet.

EXTENSION '*extension-name*'  <a name="unload-extension"></a>
Gibt die Dateierweiterung an, die an die Namen der entladenen Dateien angehängt werden soll. Amazon Redshift führt keine Validierung durch, daher müssen Sie selbst überprüfen, ob die angegebene Dateierweiterung korrekt ist. Wenn Sie eine Komprimierungsmethode angeben, ohne eine Erweiterung anzugeben, fügt Amazon Redshift dem Dateinamen nur die Erweiterung der Komprimierungsmethode hinzu. Wenn Sie keine Erweiterung und keine Komprimierungsmethode angeben, fügt Amazon Redshift dem Dateinamen nichts hinzu. 

## Nutzungshinweise
<a name="unload-usage-notes"></a>

### Verwendung von ESCAPE für alle UNLOAD-Textoperationen mit Trennzeichen
<a name="unload-usage-escape"></a>

Wenn Sie eine UNLOAD-Operation mit Trennzeichen ausführen, können Ihre Daten dieses Trennzeichen oder eines der Zeichen enthalten, die in der Beschreibung der ESCAPE-Option aufgelistet werden. In diesem Fall müssen Sie die ESCAPE-Option mit der UNLOAD-Anweisung verwenden. Wenn Sie die ESCAPE-Option nicht mit der UNLOAD-Anweisung verwenden, schlagen nachfolgende COPY-Operationen, die die entladenen Daten verwenden, möglicherweise fehl.

**Wichtig**  
Wir empfehlen nachdrücklich, ESCAPE immer mit den Anweisungen UNLOAD und COPY zu verwenden. Eine Ausnahme liegt vor, wenn Sie sich sicher sind, dass Ihre Daten keine Trennzeichen oder andere Zeichen enthalten, für die möglicherweise ein Escape-Zeichen verwendet werden muss. 

### Verlust der Gleitkommawert-Präzision
<a name="unload-usage-floating-point-precision"></a>

Möglicherweise stellen Sie einen Präzisionsverlust bei Gleitkommawerten fest, die in Folge entladen und neu geladen werden. 

### Limit-Klausel
<a name="unload-usage-limit-clause"></a>

Die SELECT-Abfrage kann als umschließende SELECT-Abfrage keine LIMIT-Klausel verwenden. Beispielweise schlägt die folgende UNLOAD-Anweisung fehl.

```
unload ('select * from venue limit 10')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Verwenden Sie stattdessen eine verschachtelte LIMIT-Klausel, wie im folgenden Beispiel dargestellt.

```
unload ('select * from venue where venueid in
(select venueid from venue order by venueid desc limit 10)')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Sie können eine Tabelle außerdem mit SELECT...INTO oder CREATE TABLE AS über eine LIMIT-Klausel füllen und dann aus dieser Tabelle entladen.

### Entladen einer Spalte vom Datentyp GEOMETRY
<a name="unload-usage-geometry"></a>

Sie können GEOMETRY-Spalten nur im Text- oder CSV-Format entladen. Sie können GEOMETRY-Daten nicht mit der `FIXEDWIDTH`-Option entladen. Die Daten werden in hexadezimaler Form des EWKB-Formats entladen. Wenn die Größe der EWKB-Daten mehr als 4 MB beträgt, erfolgt eine Warnung, da die Daten später nicht mehr in eine Tabelle geladen werden können. 

### Entladen des Datentyps HLLSKETCH
<a name="unload-usage-hll"></a>

Sie können HLLSKETCH-Spalten nur im Text- oder CSV-Format entladen. Sie können HLLSKETCH-Daten nicht mit der `FIXEDWIDTH`-Option entladen. Die Daten werden im Base64-Format für dichte HyperLogLog Skizzen oder im JSON-Format für dünn besetzte Skizzen entladen. HyperLogLog Weitere Informationen finden Sie unter [HyperLogLog Funktionen](hyperloglog-functions.md).

Im folgenden Beispiel wird eine Tabelle mit HLLSKETCH-Spalten in eine Datei exportiert.

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

UNLOAD ('select * from hll_table') TO 's3://amzn-s3-demo-bucket/unload/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' ALLOWOVERWRITE CSV;
```

### Entladen einer Spalte des Datentyps VARBYTE
<a name="unload-usage-varbyte"></a>

Sie können VARBYTE-Spalten nur im Text- oder CSV-Format entladen. Die Daten werden in hexadezimaler Form entladen. Sie können keine VARBYTE-Daten mit der `FIXEDWIDTH`-Option entladen. Die `ADDQUOTES`-Option von UNLOAD in das CSV-Format wird nicht unterstützt. VARBYTE-Spalten können keine PARTITIONED BY-Spalten sein. 

### Klausel FORMAT AS PARQUET
<a name="unload-parquet-usage"></a>

Beachten Sie bei der Verwendung von FORMAT AS PARQUET Folgendes:
+ Für das Entladen nach Parquet kommt keine Komprimierung auf Dateieben zur Anwendung. Jede Zeilengruppe wird mit SNAPPY komprimiert.
+ Wenn MAXFILESIZE nicht angegeben wird, ist die standardmäßig zulässige Dateigröße 6,2 GB. Sie können MAXFILESIZE verwenden, um eine Dateigröße von 5 MB bis 6,2 GB anzugeben. Die tatsächliche Dateigröße wird beim Schreiben der Datei annähernd beziffert, sodass sie möglicherweise nicht genau der von Ihnen angegebenen Zahl entspricht.

  Um die Scan-Leistung zu maximieren, versucht Amazon Redshift, Parquet-Dateien zu erstellen, die gleich große Zeilengruppen von 32 MB enthalten. Der von Ihnen angegebene MAXFILESIZE -Wert wird automatisch auf das nächste Vielfache von 32 MB abgerundet. Wenn Sie beispielsweise als MAXFILESIZE 200 MB angeben, beträgt jede entladene Parquet-Datei etwa 192 MB (Zeilengruppe von 32 MB x 6 = 192 MB).
+ Wenn eine Spalte das Datenformat TIMESTAMPTZ verwendet, werden nur die Zeitstempelwerte entladen. Die Zeitzoneninformationen werden nicht entladen.
+ Geben Sie keine Dateinamenpräfixe an, die mit Unterstrich (\$1) oder Punkt (.) beginnen. Redshift Spectrum behandelt Dateien, die mit diesen Zeichen beginnen, als versteckte Dateien und ignoriert sie.

### Klausel PARTITION BY
<a name="unload-partitionby-usage"></a>

Beachten Sie bei der Verwendung von PARTITION BY Folgendes:
+ Partitionsspalten sind nicht in der Ausgabedatei enthalten.
+ Stellen Sie sicher, dass die Partitionsspalten in der SELECT-Abfrage, die in der UNLOAD-Anweisung verwendet wird, enthalten sind. Sie können beliebig viele Partitionsspalten im UNLOAD-Befehl angeben. Allerdings gibt es eine Einschränkung, nämlich dass mindestens eine Nicht-Partitionsspalte vorhanden sein sollte, die Teil der Datei sein sollte.
+ Wenn der Wert des Partitionsschlüssels null ist, entlädt Amazon Redshift diese Daten automatisch in eine Standardpartition namens `partition_column=__HIVE_DEFAULT_PARTITION__`. 
+ Der Befehl UNLOAD führt keine Aufrufe an einen externen Katalog durch. Um Ihre neuen Partitionen als Teil Ihrer vorhandenen externen Tabelle zu registrieren, verwenden Sie einen separaten Befehl ALTER TABLE... ADD PARTITION... Alternativ können Sie einen Befehl CREATE EXTERNAL TABLE ausführen, um die entladenen Daten als neue externe Tabelle zu registrieren. Sie können Ihren Datenkatalog auch mit einem AWS Glue Crawler auffüllen. Weitere Informationen finden Sie unter [Definieren von Crawlern](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) im *AWS Glue -Entwicklerhandbuch*. 
+ Wenn Sie die MANIFEST-Option verwenden, generiert Amazon Redshift nur eine Manifestdatei im Amazon-S3-Stammordner.
+ Die Spaltendatentypen, die Sie als Partitionsschlüssel verwenden können, sind SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, BOOLEAN, CHAR, VARCHAR, DATE und TIMESTAMP. 

### Verwenden der ASSUMEROLE-Berechtigung, um einer IAM-Rolle Zugriff auf UNLOAD-Vorgänge zu gewähren
<a name="unload-assumerole-privilege-usage"></a>

Um bestimmten Benutzern und Gruppen den Zugriff auf eine IAM-Rolle für UNLOAD-Vorgänge zu ermöglichen, kann ein Superuser Benutzern und Gruppen das ASSUMEROLE-Recht für eine IAM-Rolle gewähren. Weitere Informationen finden Sie unter [GRANT](r_GRANT.md). 

### UNLOAD unterstützt keine Amazon-S3-Zugriffspunkt-Aliase
<a name="unload-usage-s3-access-point-alias"></a>

Sie können keine Amazon-S3-Zugriffspunkt-Aliase mit dem UNLOAD-Befehl verwenden. 

## Beispiele
<a name="r_UNLOAD-examples"></a>

Beispiele zur Verwendung des UNLOAD-Befehls finden Sie unter [UNLOAD-Beispiele](r_UNLOAD_command_examples.md).

# UNLOAD-Beispiele
<a name="r_UNLOAD_command_examples"></a>

Diese Beispiele veranschaulichen verschiedene Parameter des UNLOAD-Befehls. Der TICKIT-Beispieldatensatz wird in vielen Beispielen verwendet. Weitere Informationen finden Sie unter [Beispieldatenbank](c_sampledb.md).

**Anmerkung**  
In den folgenden Beispielen werden aus Gründen der Lesbarkeit Zeilenumbrüche verwendet. Verwenden Sie in Ihrer Zeichenfolge *credentials-args* keine Zeilenumbrüche oder Leerzeichen.

## Entladen von VENUE in eine Datei, die das Pipe-Zeichen als Trennzeichen enthält (Standardtrennzeichen)
<a name="unload-examples-venue"></a>

Im folgenden Beispiel werden die Tabelle VENUE entladen und die Daten in geschrieben `s3://amzn-s3-demo-bucket/unload/`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Standardmäßig schreibt UNLOAD eine oder mehrere Dateien pro Slice. Unter Annahme eines Clusters mit zwei Knoten und zwei Slices pro Knoten werden im vorherigen Beispiel in die folgenden Dateien erstellt `amzn-s3-demo-bucket`:

```
unload/0000_part_00
unload/0001_part_00
unload/0002_part_00
unload/0003_part_00
```

Um die Ausgabedateien besser zu differenzieren, können Sie für den Speicherort ein Präfix verwenden. Im folgenden Beispiel werden die Tabelle VENUE entladen und die Daten in `s3://amzn-s3-demo-bucket/unload/venue_pipe_` geschrieben: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Das Ergebnis dieser vier Dateien ist der Ordner `unload`, erneut unter Annahme von vier Slices.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## Tabelle LINEITEM in partitionierte Parquet-Dateien entladen
<a name="unload-examples-partitioned-parquet"></a>

Im folgenden Beispiel wird die Tabelle LINEITEM im Parquet-Format entladen, das durch die `l_shipdate`-Spalte unterteilt wird. 

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate);
```

Unter der Annahme von vier Slices werden die resultierenden Parquet-Dateien dynamisch in verschiedene Ordner aufgeteilt. 

```
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
...
```

**Anmerkung**  
In einigen Fällen verwendet der UNLOAD-Befehl die INCLUDE-Option, wie in der folgenden SQL-Anweisung gezeigt.   

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate) INCLUDE;
```
In diesen Fällen befindet sich die `l_shipdate`-Spalte auch in den Daten in den Parquet-Dateien. Andernfalls befinden sich die `l_shipdate`-Spaltendaten nicht in den Parquet-Dateien.

## Entladen der VENUE-Tabelle in eine JSON-Datei
<a name="unload-examples-json"></a>

Im folgenden Beispiel wird die VENUE-Tabelle entladen und die Daten im JSON-Format in `s3://amzn-s3-demo-bucket/unload/` geschrieben.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON;
```

Im Folgenden sind die Beispielzeilen der VENUE-Tabelle aufgeführt.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Nach dem Entladen in JSON sieht das Format der Datei in etwa wie folgt aus.

```
{"venueid":1,"venuename":"Pinewood Racetrack","venuecity":"Akron","venuestate":"OH","venueseats":0}
{"venueid":2,"venuename":"Columbus \"Crew\" Stadium ","venuecity":"Columbus","venuestate":"OH","venueseats":0}
{"venueid":4,"venuename":"Community, Ballpark, Arena","venuecity":"Kansas City","venuestate":"KS","venueseats":0}
```

## Entladen von VENUE in eine CSV-Datei
<a name="unload-examples-csv"></a>

Im folgenden Beispiel wird die VENUE-Tabelle entladen und die Daten im CSV-Format in geschrieben `s3://amzn-s3-demo-bucket/unload/`.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV;
```

Angenommen, die Tabelle VENUE enthält die folgenden Zeilen.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Die Entladedatei sieht ähnlich wie folgt aus.

```
1,Pinewood Racetrack,Akron,OH,0
2,"Columbus ""Crew"" Stadium",Columbus,OH,0
4,"Community, Ballpark, Arena",Kansas City,KS,0
```

## Entladen von VENUE in eine CSV-Datei mit einem Trennzeichen
<a name="unload-examples-csv-delimiter"></a>

Im folgenden Beispiel wird die VENUE-Tabelle entladen und die Daten im CSV-Format mit dem Pipe-Zeichen (\$1) als Trennzeichen geschrieben. Die entladene Datei wird in `s3://amzn-s3-demo-bucket/unload/` geschrieben. Die VENUE-Tabelle in diesem Beispiel enthält das Pipe-Zeichen im Wert der ersten Zeile (`Pinewood Race|track`). Es tut dies, um zu zeigen, dass der Wert im Ergebnis in doppelte Anführungszeichen eingeschlossen ist. Ein doppeltes Anführungszeichen wird durch ein doppeltes Anführungszeichen maskiert, und das gesamte Feld ist in doppelte Anführungszeichen eingeschlossen. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV DELIMITER AS '|';
```

Angenommen, die Tabelle VENUE enthält die folgenden Zeilen.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-------------
      1 | Pinewood Race|track        | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Die Entladedatei sieht ähnlich wie folgt aus.

```
1|"Pinewood Race|track"|Akron|OH|0
2|"Columbus ""Crew"" Stadium"|Columbus|OH|0
4|Community, Ballpark, Arena|Kansas City|KS|0
```

## Entladen von VENUE mit einer Manifestdatei
<a name="unload-examples-manifest"></a>

Um eine Manifestdatei zu erstellen, schließen Sie die Option MANIFEST ein. Im folgenden Beispiel werden die Tabelle VENUE entladen und eine Manifestdatei zusammen mit den Datendateien zu s3://amzn-s3-demo-bucket/venue\$1pipe\$1 geschrieben: 

**Wichtig**  
Wenn Sie Dateien mithilfe der Option MANIFEST entladen, sollten Sie die Option MANIFEST mit dem Befehl COPY verwenden, wenn Sie die Dateien laden. Wenn Sie dasselbe Präfix verwenden, um die Dateien zu laden, und die Option MANIFEST nicht angeben, schlägt der Befehl COPY fehl, da er annimmt, dass es sich bei der Manifestdatei um eine Datendatei handelt.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

Das Ergebnis sind diese fünf Dateien:

```
s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00
s3://amzn-s3-demo-bucket/venue_pipe_manifest
```

Im Folgenden wird der Inhalt der Manifestdatei gezeigt. 

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"}
  ]
}
```

## Entladen von VENUE mit MANIFEST VERBOSE
<a name="unload-examples-manifest-verbose"></a>

Bei Angabe der Option MANIFEST VERBOSE enthält die Manifestdatei die folgenden Abschnitte: 
+ Im Abschnitt `entries` werden der Amazon S3-Pfad, die Dateigröße und die Zeilenanzahl für die einzelnen Dateien aufgeführt. 
+ Im Abschnitt `schema` werden die Spaltennamen, Datentypen und die Dimension für die einzelnen Spalten aufgeführt. 
+ Im Abschnitt `meta` wird die gesamte Dateigröße und die Zeilenanzahl für alle Dateien aufgeführt. 

Im folgenden Beispiel wird die Tabelle VENUE mithilfe der Option MANIFEST VERBOSE entladen. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload_venue_folder/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest verbose;
```

Im Folgenden wird der Inhalt der Manifestdatei gezeigt.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00", "meta": { "content_length": 32295, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00", "meta": { "content_length": 32771, "record_count": 20 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00", "meta": { "content_length": 32302, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00", "meta": { "content_length": 31810, "record_count": 15 }}
  ],
  "schema": {
    "elements": [
      {"name": "venueid", "type": { "base": "integer" }},
      {"name": "venuename", "type": { "base": "character varying", 25 }},
      {"name": "venuecity", "type": { "base": "character varying", 25 }},
      {"name": "venuestate", "type": { "base": "character varying", 25 }},
      {"name": "venueseats", "type": { "base": "character varying", 25 }}
    ]
  },
  "meta": {
    "content_length": 129178,
    "record_count": 55
  },
  "author": {
    "name": "Amazon Redshift",
    "version": "1.0.0"
  }
}
```

## Entladen von VENUE mit einer Kopfzeile
<a name="unload-examples-header"></a>

Das folgende Beispiel entlädt VENUE mit einer Kopfzeile.

```
unload ('select * from venue where venueseats > 75000')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
header
parallel off;
```

Nachfolgend sehen Sie den Inhalt der Ausgabedatei mit einer Kopfzeile.

```
venueid|venuename|venuecity|venuestate|venueseats
6|New York Giants Stadium|East Rutherford|NJ|80242
78|INVESCO Field|Denver|CO|76125
83|FedExField|Landover|MD|91704
79|Arrowhead Stadium|Kansas City|MO|79451
```

## Entladen von VENUE zu kleineren Dateien
<a name="unload-examples-maxfilesize"></a>

Die maximal zulässige Dateigröße ist standardmäßig 6,2 GB. Wenn die Größe der Datei mit den entladenen Daten 6,2 GB überschreitet, erstellt UNLOAD eine neue Datei für jedes Datensegment von 6,2 GB. Um kleinere Dateien zu erstellen, verwenden Sie den Parameter MAXFILESIZE. Wenn die Größe der Daten im vorherigen Beispiel ist 20 GB betragen würde, würde der folgende UNLOAD-Befehl 20 Dateien erstellen, jede mit einer Größe von 1 GB.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
maxfilesize 1 gb;
```

## Serielles Entladen von VENUE
<a name="unload-examples-serial"></a>

Um eine serielle Entladung auszuführen, geben Sie PARALLEL OFF an. UNLOAD schreibt anschließend in jeweils eine einzelne Datei bis zu maximal 6,2 GB pro Datei. 

Im folgenden Beispiel werden die Tabelle VENUE entladen und die Daten seriell in geschrieben `s3://amzn-s3-demo-bucket/unload/`. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off;
```

Das Ergebnis ist eine einzelne Datei namens venue\$1serial\$1000. 

Wenn die Größe der Datei mit den entladenen Daten 6,2 GB überschreitet, erstellt UNLOAD eine neue Datei für jedes Datensegment von 6,2 GB. Im folgenden Beispiel werden die Tabelle LINEORDER entladen und die Daten seriell in geschrieben `s3://amzn-s3-demo-bucket/unload/`. 

```
unload ('select * from lineorder')
to 's3://amzn-s3-demo-bucket/unload/lineorder_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off gzip;
```

Das Ergebnis ist die folgende Reihe von Dateien.

```
lineorder_serial_0000.gz
lineorder_serial_0001.gz
lineorder_serial_0002.gz
lineorder_serial_0003.gz
```

Um die Ausgabedateien besser zu differenzieren, können Sie für den Speicherort ein Präfix verwenden. Im folgenden Beispiel werden die Tabelle VENUE entladen und die Daten in `s3://amzn-s3-demo-bucket/venue_pipe_` geschrieben: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Das Ergebnis dieser vier Dateien ist der Ordner `unload`, erneut unter Annahme von vier Slices.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## Laden von VENUE aus entladenen Dateien
<a name="unload-examples-load"></a>

Um eine Tabelle aus einem Satz entladener Dateien zu laden, kehren Sie den Befehl einfach unter Verwendung eines COPY-Befehls um. Im folgenden Beispiel werden eine neue Tabelle namens LOADVENUE erstellt und diese Tabelle aus den im vorherigen Beispiel erstellten Datendateien geladen.

```
create table loadvenue (like venue);

copy loadvenue from 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Wenn Sie die Option MANIFEST verwendet haben, um mit den entladenen Dateien eine Manifestdatei zu erstellen, können Sie die Daten unter Verwendung derselben Manifestdatei laden. Führen Sie dazu einen COPY-Befehl mit der Option MANIFEST aus. Im folgenden Beispiel werden Daten unter Verwendung einer Manifestdatei geladen.

```
copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_pipe_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

## Entladen von VENUE zu verschlüsselten Dateien
<a name="unload-examples-unload-encrypted"></a>

Im folgenden Beispiel wird die VENUE-Tabelle mithilfe eines Schlüssels in eine Reihe verschlüsselter Dateien entladen. AWS KMS Wenn Sie eine Manifestdatei mit der Option ENCRYPTED angeben, wird die Manifestdatei ebenfalls verschlüsselt. Weitere Informationen finden Sie unter [Entladen verschlüsselter Datendateien](t_unloading_encrypted_files.md).

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_kms'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
kms_key_id '1234abcd-12ab-34cd-56ef-1234567890ab'
manifest
encrypted;
```

Im folgenden Beispiel wird die Tabelle VENUE zu einem Satz verschlüsselter Dateien unter Verwendung eines symmetrischen Root-Schlüssels entladen. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_cmk'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
encrypted;
```

## Laden von VENUE aus verschlüsselten Dateien
<a name="unload-examples-load-encrypted"></a>

Um Tabellen aus einem Satz von Dateien zu laden, die unter Verwendung von UNLOAD mit der Option ENCRYPT erstellt wurden, kehren Sie den Prozess einfach unter Verwendung eines COPY-Befehls um. Verwenden Sie die Option ENCRYPTED mit diesem Befehl und geben Sie denselben symmetrischen Root-Schlüssel an, der für den UNLOAD-Befehl verwendet wurde. Im folgenden Beispiel wird die Tabelle LOADVENUE aus den im vorherigen Beispiel erstellten verschlüsselten Datendateien geladen.

```
create table loadvenue (like venue);

copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_encrypt_manifest'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
manifest
encrypted;
```

## Entladen von VENUE zu einer Datei mit Tabulatoren als Trennzeichen
<a name="unload-examples-venue-tab"></a>

```
unload ('select venueid, venuename, venueseats from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

Die Ausgabedatendateien sehen wie folgt aus: 

```
1	Toyota Park	Bridgeview	IL	0
2	Columbus Crew Stadium	Columbus	OH	0
3	RFK Stadium	Washington	DC	0
4	CommunityAmerica Ballpark	Kansas City	KS	0
5	Gillette Stadium	Foxborough	MA	68756
...
```

## Entladen von VENUE zu einer Datei mit festen Spaltenbreiten
<a name="unload-venue-fixed-width"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_fw_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth as 'venueid:3,venuename:39,venuecity:16,venuestate:2,venueseats:6';
```

Die Ausgabedatendateien sehen wie folgt aus. 

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
...
```

## Entladen von VENUE zu einem Satz von GZIP-komprimierten Dateien mit Tabulatoren als Trennzeichen
<a name="unload-examples-venue-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t'
gzip;
```

## Entladen von VENUE in eine GZIP-komprimierte Textdatei
<a name="unload-examples-venue-extension-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
extension 'txt.gz'
gzip;
```

## Entladen von Daten, die ein Trennzeichen enthalten
<a name="unload-examples-delimiter"></a>

In diesem Beispiel wird die Option ADDQUOTES verwendet, um durch Komma getrennte Daten zu entladen, in denen einige der tatsächlichen Datenfelder ein Komma enthalten.

Erstellen Sie zunächst eine Tabelle, die Anführungszeichen enthält.

```
create table location (id int, location char(64));

insert into location values (1,'Phoenix, AZ'),(2,'San Diego, CA'),(3,'Chicago, IL');
```

Entladen Sie die Daten anschließend unter Verwendung der Option ADDQUOTES.

```
unload ('select id, location from location')
to 's3://amzn-s3-demo-bucket/location_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',' addquotes;
```

Die entladenen Daten sehen wie folgt aus: 

```
1,"Phoenix, AZ"
2,"San Diego, CA"
3,"Chicago, IL"
...
```

## Entladen der Ergebnisse einer Join-Abfrage
<a name="unload-examples-join"></a>

Im folgenden Beispiel werden die Ergebnisse einer Join-Abfrage entladen, die eine Fensterfunktion enthält. 

```
unload ('select venuecity, venuestate, caldate, pricepaid,
sum(pricepaid) over(partition by venuecity, venuestate
order by caldate rows between 3 preceding and 3 following) as winsum
from sales join date on sales.dateid=date.dateid
join event on event.eventid=sales.eventid
join venue on event.venueid=venue.venueid
order by 1,2')
to 's3://amzn-s3-demo-bucket/tickit/winsum'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Die Ausgabedateien sehen wie folgt aus: 

```
Atlanta|GA|2008-01-04|363.00|1362.00
Atlanta|GA|2008-01-05|233.00|2030.00
Atlanta|GA|2008-01-06|310.00|3135.00
Atlanta|GA|2008-01-08|166.00|8338.00
Atlanta|GA|2008-01-11|268.00|7630.00
...
```

## Entladen unter Verwendung von NULL AS
<a name="unload-examples-null-as"></a>

UNLOAD gibt Null-Werte standardmäßig als leere Zeichenfolgen zurück. Die folgenden Beispiele zeigen, wie NULL AS verwendet wird, um Null-Werte durch Textzeichenfolgen zu ersetzen.

Hierzu fügen wir der Tabelle VENUE einige Null-Werte hinzu.

```
update venue set venuestate = NULL
where venuecity = 'Cleveland';
```

Wählen Sie aus VENUE aus, wobei VENUESTATE null ist, um zu überprüfen, ob die Spalten NULL enthalten.

```
select * from venue where venuestate is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
```

Entladen Sie nun die Tabelle VENUE unter Verwendung der Option NULL AS, um Null-Werte durch die Zeichenfolge zu ersetzen. '`fred`'. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

Das folgende Beispiel aus der entladenen Datei zeigt, dass Null-Werte durch ersetzt wurden `fred`. Es stellt sich heraus, dass einige Werte für VENUESEATS ebenfalls null waren und durch ersetzt wurden `fred`. Auch wenn es sich beim Datentyp für VENUESEATS um Ganzzahl handelt, wandelt UNLOAD die Werte in den entladenen Dateien in Text um. Anschließend wandelt COPY sie wieder in Ganzzahlen um. Wenn Sie Daten zu einer Date mit festen Spaltenbreiten entladen, darf die NULL AS-Zeichenfolge nicht länger als die Feldbreite sein.

```
248|Charles Playhouse|Boston|MA|0
251|Paris Hotel|Las Vegas|NV|fred
258|Tropicana Hotel|Las Vegas|NV|fred
300|Kennedy Center Opera House|Washington|DC|0
306|Lyric Opera House|Baltimore|MD|0
308|Metropolitan Opera|New York City|NY|0
  5|Gillette Stadium|Foxborough|MA|5
 22|Quicken Loans Arena|Cleveland|fred|0
101|Progressive Field|Cleveland|fred|43345
...
```

Um eine Tabelle aus den entladenen Dateien zu laden, verwenden Sie einen COPY-Befehl mit derselben NULL AS-Option. 

**Anmerkung**  
Wenn Sie versuchen, Null-Werte in eine Spalte zu laden, die als NOT NULL definiert ist, schlägt der Befehl COPY fehl.

```
create table loadvenuenulls (like venue);

copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

Um zu überprüfen, ob die Spalten Null-Werte enthalten und nicht nur leere Zeichenfolgen, wählen Sie aus LOADVENUENULLS aus und filtern nach Null-Werten.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |

...
```

Sie können eine Tabelle entladen, die Null-Werte enthält, indem Sie das NULL AS-Standardverhalten verwenden und anschließend die Daten unter Verwendung des NULL AS-Standardverhaltens wieder in eine Tabelle kopieren. Alle nicht numerischen Felder in der Zieltabelle werden jedoch leere Zeichenfolgen und keine Null-Werte enthalten. Standardmäßig wandelt UNLOAD Null-Werte in leere Zeichenfolgen um (Leerzeichen oder Null-Länge). COPY wandelt leere Zeichenfolgen für numerische Spalten in NULL um, fügt in nichtnumerische Spalten jedoch leere Zeichenfolgen ein. Im folgenden Beispiel wird gezeigt, wie Sie eine UNLOAD-Operation gefolgt von einer COPY-Operation unter Verwendung des NULL AS-Standardverhaltens ausführen. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

In diesem Fall enthalten nur die Zeilen mit VENUESEATS Null-Werte, wenn Sie nach Null-Werten filtern. Wenn VENUESTATE in der Tabelle (VENUE) Null-Werte enthält, enthält VENUESTATE in der Zieltabelle (LOADVENUENULLS) leere Zeichenfolgen.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
     251 | Paris Hotel              | Las Vegas | NV         |
...
```

Um leere Zeichenfolgen in nichtnumerische Spalten als NULL zu laden, schließen Sie die Optionen EMPTYASNULL oder BLANKSASNULL ein. Sie können beide Optionen gleichzeitig verwenden.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' EMPTYASNULL;
```

Um zu überprüfen, ob die Spalten NULL enthalten und nicht nur Leerzeichen oder leere Zeichenfolgen, wählen Sie aus LOADVENUENULLS aus und filtern nach Null-Werten.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |
     ...
```

## Entladen mit dem Parameter ALLOWOVERWRITE
<a name="unload-examples-allowoverwrite"></a>

Standardmäßig überschreibt UNLOAD keine Dateien, die im Ziel-Bucket vorhanden sind. Wenn Sie beispielsweise dieselbe UNLOAD-Anweisung zweimal ausführen, ohne die Dateien im Ziel-Bucket zu ändern, schlägt die zweite UNLOAD-Anweisung fehl. Um die vorhandenen Dateien, einschließlich der Manifestdatei, zu überschreiben, geben Sie die Option ALLOWOVERWRITE an.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest allowoverwrite;
```

## Entladen der EVENT-Tabelle mithilfe der Parameter PARALLEL und MANIFEST
<a name="unload-examples-manifest-parallel"></a>

Sie können eine Tabelle mit UNLOAD parallel entladen und eine Manifestdatei anlegen. Die Amazon-S3-Datendateien werden alle auf derselben Ebene erstellt und Namen werden mit dem Suffix des Musters `0000_part_00` versehen. Die Manifestdatei befindet sich auf derselben Ordnerebene wie die Datendateien und ist mit dem Suffixtext `manifest` versehen. Die folgende SQL-Anweisung entlädt die EVENT-Tabelle und erstellt Dateien mit dem Basisnamen `parallel`.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/parallel'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel on
manifest;
```

Die Amazon-S3-Dateiliste sieht etwa wie folgt aus.

```
 Name                       Last modified                        Size                  
 parallel0000_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB  
 parallel0001_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0002_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB
 parallel0003_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 51.1 KB
 parallel0004_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.6 KB
 parallel0005_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0006_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.1 KB
 parallel0007_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 55.9 KB
 parallelmanifest       -   August 2, 2023, 14:54:39 (UTC-07:00) 886.0 B
```

Der Inhalt der Datei `parallelmanifest` ähnelt dem folgenden Beispiel.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/parallel0000_part_00", "meta": { "content_length": 53316 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0001_part_00", "meta": { "content_length": 54704 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0002_part_00", "meta": { "content_length": 53326 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0003_part_00", "meta": { "content_length": 52356 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0004_part_00", "meta": { "content_length": 55933 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0005_part_00", "meta": { "content_length": 54648 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0006_part_00", "meta": { "content_length": 55436 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0007_part_00", "meta": { "content_length": 57272 }}
  ]
}
```

## Entladen der EVENT-Tabelle mithilfe der Parameter PARALLEL OFF und MANIFEST
<a name="unload-examples-manifest-serial"></a>

Sie können eine Tabelle mit UNLOAD seriell entladen (PARALLEL OFF) und eine Manifestdatei anlegen. Die Amazon-S3-Datendateien werden alle auf derselben Ebene erstellt und Namen werden mit dem Suffix des Musters `0000` versehen. Die Manifestdatei befindet sich auf derselben Ordnerebene wie die Datendateien und ist mit dem Suffixtext `manifest` versehen.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/serial'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel off
manifest;
```

Die Amazon-S3-Dateiliste sieht etwa wie folgt aus.

```
 Name                       Last modified                        Size                  
 serial0000             -   August 2, 2023, 15:54:39 (UTC-07:00) 426.7 KB  
 serialmanifest         -   August 2, 2023, 15:54:39 (UTC-07:00) 120.0 B
```

Der Inhalt der Datei `serialmanifest` ähnelt dem folgenden Beispiel.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/serial000", "meta": { "content_length": 436991 }}
  ]
}
```

## Entladen der EVENT-Tabelle mithilfe der Parameter PARTITION BY und MANIFEST
<a name="unload-examples-manifest-partition"></a>

Sie können eine Tabelle mit UNLOAD partitionsweise entladen und eine Manifestdatei anlegen. In Amazon S3 wird ein neuer Ordner mit untergeordneten Partitionsordnern erstellt und die Datendateien in den untergeordneten Ordnern haben ein Namensmuster ähnlich wie `0000_par_00`. Die Manifestdatei befindet sich auf derselben Ordnerebene wie die untergeordneten Ordner mit dem Namen `manifest`.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/partition'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
partition by (eventname)
manifest;
```

Die Amazon-S3-Dateiliste sieht etwa wie folgt aus.

```
 Name                   Type     Last modified                        Size                  
 partition           	Folder
```

Im Ordner `partition` befinden sich untergeordnete Ordner mit dem Partitionsnamen und der Manifestdatei. Im Folgenden sehen Sie das Ende der Liste der Ordner im Ordner `partition`, ähnlich wie folgt.

```
 Name                   Type      Last modified                        Size                  
 ...
 eventname=Zucchero/    Folder 
 eventname=Zumanity/    Folder 
 eventname=ZZ Top/      Folder  
 manifest          	    -	    August 2, 2023, 15:54:39 (UTC-07:00) 467.6 KB
```

Im Ordner `eventname=Zucchero/` befinden sich die Datendateien, ähnlich wie folgt.

```
 Name               Last modified                        Size                  
 0000_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 70.0 B
 0001_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 106.0 B
 0002_part_00	-   August 2, 2023, 15:59:15 (UTC-07:00) 70.0 B
 0004_part_00	-   August 2, 2023, 15:59:17 (UTC-07:00) 141.0 B
 0006_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 35.0 B
 0007_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 108.0 B
```

Das Ende der Datei `manifest` ähnelt dem folgenden Beispiel.

```
{
  "entries": [
    ...
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zucchero/007_part_00", "meta": { "content_length": 108 }},
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zumanity/007_part_00", "meta": { "content_length": 72 }}
  ]
}
```

## Entladen der EVENT-Tabelle mithilfe der Parameter MAXFILESIZE, ROWGROUPSIZE und MANIFEST
<a name="unload-examples-manifest-maxsize"></a>

Sie können eine Tabelle mit UNLOAD parallel entladen und eine Manifestdatei anlegen. Die Amazon-S3-Datendateien werden alle auf derselben Ebene erstellt und Namen werden mit dem Suffix des Musters `0000_part_00` versehen. Die generierten Parquet-Datendateien sind auf 256 MB und die Zeilengruppengröße ist auf 128 MB begrenzt. Die Manifestdatei befindet sich auf derselben Ordnerebene wie die Datendateien und ist mit dem Suffix `manifest` versehen.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/eventsize'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
maxfilesize 256 MB
rowgroupsize 128 MB
parallel on
parquet
manifest;
```

Die Amazon-S3-Dateiliste sieht etwa wie folgt aus.

```
 Name                            Type      Last modified                        Size 
 eventsize0000_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.5 KB
 eventsize0001_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0002_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.4 KB
 eventsize0003_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.0 KB
 eventsize0004_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.3 KB
 eventsize0005_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0006_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.0 KB
 eventsize0007_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.6 KB
 eventsizemanifest                 -       August 2, 2023, 17:35:21 (UTC-07:00) 958.0 B
```

Der Inhalt der Datei `eventsizemanifest` ähnelt dem folgenden Beispiel.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/eventsize0000_part_00.parquet", "meta": { "content_length": 25130 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0001_part_00.parquet", "meta": { "content_length": 25428 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0002_part_00.parquet", "meta": { "content_length": 25025 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0003_part_00.parquet", "meta": { "content_length": 24554 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0004_part_00.parquet", "meta": { "content_length": 25918 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0005_part_00.parquet", "meta": { "content_length": 25362 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0006_part_00.parquet", "meta": { "content_length": 25647 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0007_part_00.parquet", "meta": { "content_length": 26256 }}
  ]
}
```

# UPDATE
<a name="r_UPDATE"></a>

**Topics**
+ [Syntax](#r_UPDATE-synopsis)
+ [Parameters](#r_UPDATE-parameters)
+ [Nutzungshinweise](#r_UPDATE_usage_notes)
+ [Beispiele für UPDATE-Anweisungen](c_Examples_of_UPDATE_statements.md)

Aktualisiert Werte in einer oder mehreren Tabellenspalten, wenn eine Bedingung erfüllt wird. 

**Anmerkung**  
Die maximal zulässige Größe für eine einzelne SQL-Anweisung ist 16 MB.

## Syntax
<a name="r_UPDATE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
            UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...]

[ FROM fromlist ]
[ WHERE condition ]
```

## Parameters
<a name="r_UPDATE-parameters"></a>

WITH-Klausel  
Optionale Klausel, die eine oder mehrere Klausel angibt *common-table-expressions*. Siehe [WITH-Klausel](r_WITH_clause.md). 

 *table\$1name*   
Eine temporäre oder persistente Tabelle. Nur der Besitzer der Tabelle oder ein Benutzer mit dem Recht UPDATE für die Tabelle können Zeilen aktualisieren. Wenn Sie in einem Ausdruck oder einer Bedingung die FROM-Klausel verwenden oder aus Tabellen auswählen, müssen Sie das SELECT-Recht für diese Tabellen besitzen. Sie können der Tabelle hier keinen Aliasnamen geben. Sie können jedoch in der FROM-Klausel einen Alias angeben.   
Externe Tabellen von Amazon Redshift Spectrum sind schreibgeschützt. Sie können eine externe Tabelle nicht aktualisieren.

alias  
Der temporäre alternative Name für eine Zieltabelle. Aliase sind optional. Das Schlüsselwort AS ist stets optional. 

SET *column* =   
Eine oder mehrere Spalten, die Sie ändern möchten. Spalten, die nicht aufgelistet sind, behalten ihre aktuellen Werte bei. Schließen Sie den Tabellennamen nicht in der Spezifikation einer Zielspalte ein. Beispielsweise ist `UPDATE tab SET tab.col = 1` nicht gültig.

 *expression*   
Ein Ausdruck der den neuen Wert für die angegebene Spalte definiert. 

DEFAULT   
Aktualisiert die Spalte mit dem Standardwert, der der Spalte in der Anweisung CREATE TABLE zugewiesen wurde. 

FROM *tablelist*   
Sie können eine Tabelle aktualisieren, indem Sie Informationen in anderen Tabellen referenzieren. Listen Sie diese anderen Tabellen in der FROM-Klausel auf oder verwenden Sie eine Unterabfrage als Teil der WHERE-Bedingung. In der FROM-Klausel aufgelistete Tabellen können Aliase haben. Verwenden Sie einen Alias, wenn Sie die Zieltabelle der UPDATE-Anweisung in die Liste einschließen müssen. 

WHERE *condition*   
Optionale Klausel, die Aktualisierungen für Zeilen einschränkt, die einer Bedingung entsprechen. Wenn die Bedingung `true` zurückgibt, werden die angegebenen SET-Spalten aktualisiert. Bei der Bedingung kann es sich um ein einfaches Prädikat für eine Spalte oder eine Bedingung auf der Basis des Ergebnisses einer Unterabfrage handeln.   
Sie können jede Tabelle in der Unterabfrage nennen, einschließlich der Zieltabelle für UPDATE. 

## Nutzungshinweise
<a name="r_UPDATE_usage_notes"></a>

Nach dem Aktualisieren einer großen Zahl von Zeilen in einer Tabelle: 
+ Führen Sie eine Vacuum-Operation für die Tabelle durch, um Speicherplatz zurückzugewinnen und die Zeilen neu zu sortieren. 
+ Analysieren Sie die Tabelle, um Statistiken für den Abfrageplaner zu aktualisieren. 

Die FROM-Klausel einer UPDATE-Anweisung unterstützt keine Joins nach links oder rechts oder vollständige externe Joins. Diese geben den folgenden Fehler zurück: 

```
ERROR: Target table must be part of an equijoin predicate
```

 Wenn Sie einen externen Join angeben müssen, verwenden Sie eine Unterabfrage in der WHERE-Klausel der UPDATE-Anweisung. 

Wenn Ihre UPDATE-Anweisung einen Selbst-Join für die Zieltabelle erfordert, müssen Sie die Join-Bedingung und die Kriterien für die WHERE-Klausel angeben, die Zeilen für die Update-Operation qualifizieren. Wenn für die Zieltabelle ein Join mit sich selbst oder einer anderen Tabelle ausgeführt wird, stellt es im Allgemeinen eine bewährte Methode dar, eine Unterabfrage zu verwenden, die die Join-Bedingungen klar von den Kriterien trennt, die Zeilen für Aktualisierungen qualifizieren. 

UPDATE-Abfragen mit mehreren Übereinstimmungen pro Zeile führen zu einem Fehler, wenn der Konfigurationsparameter `error_on_nondeterministic_update` auf *true* gesetzt ist. Weitere Informationen finden Sie unter [error\$1on\$1nondeterministic\$1update](r_error_on_nondeterministic_update.md).

Sie können eine GENERATED BY DEFAULT AS IDENTITY-Spalte aktualisieren. Sie können als GENERATED BY DEFAULT AS IDENTITY-Spalten mit von Ihnen angegebenen Werten aktualisieren. Weitere Informationen finden Sie unter [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

# Beispiele für UPDATE-Anweisungen
<a name="c_Examples_of_UPDATE_statements"></a>

Weitere Hinweise zu den Tabellen, die in den folgenden Beispielen verwendet werden, finden Sie unter [Beispieldatenbank](c_sampledb.md).

Die Tabelle CATEGORY in der Datenbank TICKIT enthält die folgenden Zeilen: 

```
+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 5     | Sports   | MLS       | Major League Soccer                        |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 1     | Sports   | MLB       | Major League Baseball                      |
| 6     | Shows    | Musicals  | Musical theatre                            |
| 3     | Sports   | NFL       | National Football League                   |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 2     | Sports   | NHL       | National Hockey League                     |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 4     | Sports   | NBA       | National Basketball Association            |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
+-------+----------+-----------+--------------------------------------------+
```

 **Aktualisieren einer Tabelle auf der Basis eines Bereichs von Werten** 

Aktualisieren Sie die Spalte CATGROUP auf der Basis eines Bereichs von Werten in der Spalte CATID. 

```
UPDATE category
SET catgroup='Theatre'
WHERE catid BETWEEN 6 AND 8;

SELECT * FROM category
WHERE catid BETWEEN 6 AND 8;

+-------+----------+----------+---------------------------+
| catid | catgroup | catname  |          catdesc          |
+-------+----------+----------+---------------------------+
| 6     | Theatre  | Musicals | Musical theatre           |
| 7     | Theatre  | Plays    | All non-musical theatre   |
| 8     | Theatre  | Opera    | All opera and light opera |
+-------+----------+----------+---------------------------+
```

 **Aktualisieren einer Tabelle auf der Basis eines aktuellen Werts** 

Aktualisieren Sie die Spalten CATNAME und CATDESC auf der Basis ihres aktuellen CATGROUP-Werts: 

```
UPDATE category
SET catdesc=default, catname='Shows'
WHERE catgroup='Theatre';

SELECT * FROM category
WHERE catname='Shows';

+-------+----------+---------+---------+
| catid | catgroup | catname | catdesc |
+-------+----------+---------+---------+
| 6     | Theatre  | Shows   | NULL    |
| 7     | Theatre  | Shows   | NULL    |
| 8     | Theatre  | Shows   | NULL    |
+-------+----------+---------+---------+)
```

In diesem Fall wurde die Spalte CATDESC auf null festgelegt, da zum Zeitpunkt der Erstellung der Tabelle kein Standardwert definiert wurde.

Führen Sie die folgenden Befehle aus, um die Daten der Tabelle CATEGORY auf die ursprünglichen Werte zurückzusetzen:

```
TRUNCATE category;

COPY category
FROM 's3://redshift-downloads/tickit/category_pipe.txt' 
DELIMITER '|' 
IGNOREHEADER 1 
REGION 'us-east-1'
IAM_ROLE default;
```

 **Aktualisieren einer Tabelle auf der Basis des Ergebnisses einer Unterabfrage in der WHERE-Klausel** 

Aktualisieren Sie die Tabelle CATEGORY auf der Basis des Ergebnisses einer Unterabfrage in der WHERE-Klausel: 

```
UPDATE category
SET catdesc='Broadway Musical'
WHERE category.catid IN
(SELECT category.catid FROM category
JOIN event ON category.catid = event.catid
JOIN venue ON venue.venueid = event.venueid
JOIN sales ON sales.eventid = event.eventid
WHERE venuecity='New York City' AND catname='Musicals');
```

Zeigen Sie die aktualisierte Tabelle an: 

```
SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 6     | Shows    | Musicals  | Broadway Musical                           |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
+-------+----------+-----------+--------------------------------------------+
```

 **Aktualisieren einer Tabelle auf der Basis des Ergebnisses einer Unterabfrage in der WITH-Klausel** 

Verwenden Sie das folgende Beispiel, um die CATEGORY-Tabelle mithilfe der WITH-Klausel zu aktualisieren.

```
WITH u1 as (SELECT catid FROM event ORDER BY catid DESC LIMIT 1) 
UPDATE category SET catid='200' FROM u1 WHERE u1.catid=category.catid;

SELECT * FROM category ORDER BY catid DESC LIMIT 1;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 200   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

## Aktualisieren einer Tabelle auf der Basis des Ergebnisses einer Join-Bedingung
<a name="c_Examples_of_UPDATE_statements-updating-a-table-based-on-the-result-of-a-join-condition"></a>

Aktualisieren Sie die ursprünglichen 11 Zeilen in der Tabelle CATEGORY auf der Basis der entsprechenden CATID-Zeilen in der Tabelle EVENT: 

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid;

SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 100   | Concerts | Pop       | All rock and pop music concerts            |
| 100   | Shows    | Plays     | All non-musical theatre                    |
| 100   | Shows    | Opera     | All opera and light opera                  |
| 100   | Shows    | Musicals  | Broadway Musical                           |
+-------+----------+-----------+--------------------------------------------+
```

 Beachten Sie, dass die Tabelle EVENT in der FROM-Klausel aufgelistet wird und die Join-Bedingung für die Zieltabelle in der WHERE-Klausel definiert ist. Für die Aktualisierung wurden nur vier Zeilen qualifiziert. Dies sind die vier Zeilen, deren CATID-Werte ursprünglich 6, 7, 8 und 9 waren. Nur diese vier Kategorien werden in der Tabelle EVENT repräsentiert: 

```
SELECT DISTINCT catid FROM event;

+-------+
| catid |
+-------+
| 6     |
| 7     |
| 8     |
| 9     |
+-------+
```

Aktualisieren Sie die ursprünglichen 11 Zeilen in der Tabelle CATEGORY, indem Sie das vorherige Beispiel erweitern und der WHERE-Klausel eine andere Bedingung hinzufügen. Aufgrund der Einschränkung für die Spalte CATGROUP ist nur eine Zeile für die Aktualisierung qualifiziert (auch wenn vier Zeilen für den Join qualifiziert sind). 

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid
AND catgroup='Concerts';

SELECT * FROM category WHERE catid=100;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 100   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

Eine alternative Möglichkeit, dieses Beispiel zu schreiben, ist: 

```
UPDATE category SET catid=100
FROM event JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
```

Der Vorteil dieses Ansatzes besteht darin, dass die Join-Kriterien klar von allen anderen Kriterien getrennt sind, die Zeilen für die Aktualisierung qualifizieren. Beachten Sie die Verwendung des Alias CAT für die Tabelle CATEGORY in der FROM-Klausel.

## Aktualisierungen mit externen Joins in der FROM-Klausel
<a name="c_Examples_of_UPDATE_statements-updates-with-outer-joins-in-the-from-clause"></a>

Im vorherigen Beispiel wurde ein interner Join gezeigt, der in der FROM-Klausel einer UPDATE-Anweisung angegeben ist. Das folgende Beispiel gibt einen Fehler zurück da die FROM-Klausel keine externen Joins für die Zieltabelle unterstützt: 

```
UPDATE category SET catid=100
FROM event LEFT JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
ERROR:  Target table must be part of an equijoin predicate
```

Wenn Sie für die UPDATE-Anweisung einen externen Join angeben müssen, können Sie die Syntax für externe Joins in eine Unterabfrage verschieben: 

```
UPDATE category SET catid=100
FROM
(SELECT event.catid FROM event LEFT JOIN category cat ON event.catid=cat.catid) eventcat
WHERE category.catid=eventcat.catid
AND catgroup='Concerts';
```

## Updates mit Spalten aus einer anderen Tabelle in der SET-Klausel
<a name="c_Examples_of_UPDATE_statements-set-with-column-from-another-table"></a>

Verwenden Sie das folgende Beispiel, um die listing-Tabelle in der TICKIT-Beispieldatenbank mit Werten aus der sales-Tabelle zu aktualisieren.

```
SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 4          |
| 108334 | 24         |
| 117150 | 4          |
| 135915 | 20         |
| 205927 | 6          |
+--------+------------+

UPDATE listing
SET numtickets = sales.sellerid
FROM sales
WHERE sales.sellerid = 1 AND listing.sellerid = sales.sellerid;

SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 1          |
| 108334 | 1          |
| 117150 | 1          |
| 135915 | 1          |
| 205927 | 1          |
+--------+------------+
```

# USE
<a name="r_USE_command"></a>

Ändert die Datenbank, in der Abfragen ausgeführt werden. SHOW USE verweist auf die Datenbank, die zuletzt mit dem Befehl USE verwendet wurde. RESET USE setzt die verwendete Datenbank zurück. Das bedeutet, dass die Objekte in der aktuellen Datenbank gesucht werden, wenn die Datenbank nicht in der SQL-Abfrage angegeben ist.

## Syntax
<a name="r_USE-synopsis"></a>

```
USE database
```

## Beispiele
<a name="r_USE_command-examples"></a>

Angenommen, es gibt drei Datenbanken, `dev`, `pdb` und `pdb2`. Es gibt zwei Tabellen mit dem Namen `t` in den öffentlichen Schemata jeder der beiden Datenbanken. Fügen Sie zunächst Daten in Tabellen über verschiedene Datenbanken hinweg ein:

```
dev=# insert into dev.public.t values (1);
INSERT 0 1
dev=# insert into pdb.public.t values (2);
INSERT 0 1
```

Ohne eine Datenbank explizit festzulegen, verwendet das System die jeweils verbundene Datenbank. Überprüfen Sie den aktuellen Datenbankkontext:

```
dev=# show use;
Use Database

(1 row)
dev=> show search_path;
search_path
$user, public
(1 row)
```

Wenn Sie eine Tabelle `t` abfragen, ohne eine Datenbank anzugeben, verwendet das System die Tabelle in der aktuellen Datenbank:

```
dev=# select * from t;
c
----
1
(1 row)
```

Verwenden Sie den Befehl `use`, um zwischen den Datenbanken zu wechseln, ohne die Verbindung zu ändern:

```
dev=# use pdb;
USE
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# select * from t;
id
----
2
(1 row)
```

Sie können außerdem das Schema explizit angeben.

```
dev=# select * from public.t;
id
----
2
(1 row)
```

Sie können jetzt Tabellen in verschiedenen Schemata in der aktuellen Datenbank erstellen:

```
dev=# create table s1.t(id int);
CREATE TABLE
dev=# insert into pdb.s1.t values (3);
INSERT 0 1
```

Der Suchpfad bestimmt das Schema, auf dessen Objekte zugegriffen wird, wenn Sie kein Schema angeben:

```
dev=# set search_path to public, s1;
SET
dev=# select * from t;
 id
----
  2
(1 row)
```

Ändern Sie die Reihenfolge der Schemata, um auf verschiedene Tabellen zuzugreifen:

```
dev=# set search_path to s1, public;
SET
dev=# show search_path;
 search_path
-------------
 s1, public
(1 row)
dev=# select * from t;
 id
----
  3
(1 row)
```

Wechseln Sie zu einer anderen Datenbank. während Sie dabei die ursprüngliche Verbindung beibehalten:

```
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# use pdb2;
USE
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)
```

Beim Wechsel von Datenbanken wird der Suchpfad auf die Standardeinstellung zurückgesetzt:

```
dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

Erstellen Sie eine Tabelle und fügen Sie Daten in die aktuelle Datenbank ein:

```
dev=# create table pdb2.public.t(id int);
CREATE TABLE
dev=# insert into pdb2.public.t values (4);
INSERT 0 1
dev=# select * from t;
 id
----
  4
(1 row)
```

Bei Transaktionen können Sie zur aktuellen Datenbank schreiben und aus jeder Datenbank lesen, wobei eine dreiteilige Notation verwendet wird. Dazu gehört auch die verbundene Datenbank:

```
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)

dev=# BEGIN;
BEGIN
dev=# select * from t;
 id
----
  4
(1 row)

dev=# insert into t values (5);
INSERT 0 1
dev=# select * from t;
 id
----
  4
  5
(2 rows)

dev=# select * from pdb.public.t;
 id
----
  2
(1 row)

dev=# select * from dev.public.t;
 id
----
  1
(1 row)
```

Führen Sie eine Zurücksetzung auf die verbundene Datenbank aus. Beachten Sie, dass nicht nur eine Zurücksetzung auf die zuvor verwendete Datenbank `pdb` erfolgt, sondern auch auf die verbundene Datenbank. Der Suchpfad wird in den Standardpfad geändert: 

```
dev=# RESET USE;
RESET
dev=# select * from t;
c
----
1
(1 row)
dev=# show use;
 Use Database
--------------

(1 row)

dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

Sie können Datenbanken zu Beginn einer Transaktion wechseln, jedoch nicht, nachdem Abfragen ausgeführt wurden:

```
dev=# BEGIN;
BEGIN
dev=# use pdb;
USE
dev=# use pdb2;
USE
dev=# use pdb;
USE
dev=# select * from t;
 id
----
  2
(1 row)
dev=# use pdb2;
ERROR:  USEd Database cannot be set or reset inside a transaction after another command.
dev=# rollback;
ROLLBACK
(1 row)
```

### Data-Catalog-Beispiel
<a name="use-redlake-example"></a>

Erstellen Sie zunächst Tabellen in verschiedenen Schemata und Katalogen, um katalogübergreifende Abfragen zu demonstrieren. Erstellen Sie zunächst Tabellen in der verbundenen Datenbank.

```
dev=# CREATE TABLE dev.public.t (col INT);
dev=# INSERT INTO dev.public.t VALUES (1);
dev=# CREATE SCHEMA write_schema;
dev=# CREATE TABLE dev.write_schema.t (state char (2));
dev=# INSERT INTO dev.write_schema.t VALUES ('WA');
```

Erstellen Sie dann ähnliche Tabellen in einem anderen Katalog. Dies zeigt das Arbeiten mit katalogübergreifenden Datenbanken.

```
dev=# CREATE TABLE my_db@my_catalog.public.t (col INT);
dev=# INSERT INTO my_db@my_catalog.public.t VALUES (100);
dev=# CREATE SCHEMA my_db@my_catalog.write_schema;
dev=# CREATE TABLE my_db@my_catalog.write_schema.t (state char (2));
dev=# INSERT INTO my_db@my_catalog.write_schema.t VALUES ('CA');
```

Überprüfen Sie den aktuellen Datenbankkontext. Ohne eine Datenbank explizit festzulegen, verwendet das System die jeweils verbundene Datenbank.

```
dev=# SHOW USE;
 Use Database
--------------

(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)

dev=# SELECT * FROM t;
 col
-----
   1
(1 row)
```

Stellen Sie die USEd Datenbank so ein, dass sie die Tabellen in einem anderen Katalog abfragt.

```
dev=# USE my_db@my_catalog;

dev=# SHOW USE;
            Use Database
-------------------------------------
 my_db@my_catalog
(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

Wenn Sie Tabelle t abfragen, stammen die Ergebnisse aus der katalogübergreifenden Datenbank.

```
dev=# SELECT * FROM t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM my_db@my_catalog.public.t;
 col
-----
 100
(1 row)
```

Ändern Sie den Suchpfad, um auf Tabellen in verschiedenen Schemas innerhalb der USEd Datenbank zuzugreifen.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM my_db@my_catalog.write_schema.t;
 state
-------
 CA
(1 row)
```

Auch wenn USE auf eine katalogübergreifende Datenbank festgelegt ist, kann die ursprüngliche Datenbank explizit abgefragt werden.

```
dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

Setzen Sie die USEd Datenbank zurück, um erneut auf Objekte in der verbundenen Datenbank zu verweisen.

```
dev=# RESET USE;

dev=# SHOW USE;
 Use Database
--------------

(1 row)
```

Beachten Sie, dass search\$1path zurückgesetzt wird, wenn USE zurückgesetzt wird.

```
dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

Nach dem Zurücksetzen beziehen sich Abfragen nun auf die ursprünglich verbundene Datenbank.

```
dev=# SELECT * FROM t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM dev.public.t;
 col
-----
   1
(1 row)
```

Sie können den Suchpfad in der ursprünglichen Datenbank ändern, um auf verschiedene Schemata zuzugreifen.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

# VACUUM
<a name="r_VACUUM_command"></a>

Sortiert Zeilen neu und gewinnt Platz in einer bestimmten Tabelle oder in allen Tabellen der aktuellen Datenbank zurück.

**Anmerkung**  
Nur Benutzer mit den erforderlichen Tabellenberechtigungen können eine Tabelle effektiv bereinigen. Wenn VACUUM ohne die notwendigen Tabellenberechtigungen ausgeführt, wird die Operation zwar erfolgreich abgeschlossen, hat jedoch keine Wirkung. Eine Liste der gültigen Tabellenberechtigungen zum effektiven Ausführen von VACUUM finden Sie im folgenden Abschnitt zu erforderlichen Berechtigungen..

Amazon Redshift sortiert im Hintergrund automatisch die Daten und führt VACUUM DELETE aus. Dadurch entfällt die Notwendigkeit, den Befehl VACUUM auszuführen. Weitere Informationen finden Sie unter [Bereinigen von Tabellen](t_Reclaiming_storage_space202.md). 

Standardmäßig überspringt VACUUM die Sortierungsphase für alle Tabellen, in denen mehr als 95 Prozent der Tabellenzeilen bereits sortiert sind. Das Überspringen der Sortierungsphase kann die Leistung von VACUUM deutlich verbessern. Um den Standardschwellenwert für die Sortierung oder Löschung für eine einzelne Tabelle zu ändern, verwenden Sie den Tabellennamen und den Parameter TO *threshold* PERCENT, wenn Sie VACUUM ausführen. 

Benutzer können auf Tabellen zugreifen, während sie bereinigt werden. Sie können Abfragen und Schreiboperationen ausführen, während eine Tabelle bereinigt wird. Wenn jedoch Data Manipulation Language (DML)-Befehle und eine Bereinigung gleichzeitig ausgeführt werden, dauern beide Vorgänge möglicherweise länger. Wenn Sie während einer Bereinigung UPDATE- und DELETE-Anweisungen ausführen, wird die Systemleistung möglicherweise reduziert. VACUUM DELETE blockiert vorübergehend Aktualisierungs- und Löschoperationen. 

Amazon Redshift führt automatisch eine DELETE ONLY-Bereinigung im Hintergrund aus. Die automatische Bereinigungsoperation wird angehalten, wenn die Benutzer Data Definition Language (DDL)-Operationen ausführen, wie etwa ALTER TABLE.

**Anmerkung**  
Syntax und Verhalten des Amazon-Redshift-Befehls VACUUM unterscheiden sich wesentlich von Syntax und Verhalten der PostgreSQL-Operation VACUUM. Beispielsweise ist die standardmäßige VACUUM-Operation in Amazon Redshift VACUUM FULL, die Festplattenspeicher zurückgewinnt und alle Zeilen neu sortiert. Die VACUUM-Operation in PostgreSQL gewinnt hingegen nur Festplattenplatz zurück und stellt ihn zur Wiederverwendung bereit.

Weitere Informationen finden Sie unter [Bereinigen von Tabellen](t_Reclaiming_storage_space202.md).

## Erforderliche Berechtigungen
<a name="r_VACUUM_command-privileges"></a>

Für VACUUM sind folgende Berechtigungen erforderlich:
+ Superuser
+ Benutzer mit der Berechtigung VACUUM
+ Tabellenbesitzer
+ Datenbankbesitzer, für den die Tabelle freigegeben wird.

## Syntax
<a name="r_VACUUM_command-synopsis"></a>

```
VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ]
[ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]
```

## Parameters
<a name="r_VACUUM_command-parameters"></a>

FULL   <a name="vacuum-full"></a>
Sortiert die angegebene Tabelle (oder alle Tabellen in der aktuellen Datenbank) und gewinnt Festplattenplatz zurück, der von Zeilen besetzt wird, die von vorherigen UPDATE- und DELETE-Operationen zur Löschung markiert wurden. Der Standardwert ist VACUUM FULL.  
Eine vollständige Bereinigung führt keine Neuindizierung überlappender Tabellen aus. Um überlappende Tabellen neu zu indizieren und anschließend vollständig zu bereinigen, verwenden Sie die Option [VACUUM REINDEX](#vacuum-reindex).   
Standardmäßig überspringt VACUUM FULL die Sortierphase für alle Tabellen, die bereits zu mindestens 95 Prozent sortiert sind. Wenn VACUUM die Sortierphase überspringen kann, führt die Operation eine DELETE ONLY-Operation aus und gewinnt während der Löschphase Festplattenplatz zurück, wenn mindestens 95 Prozent der verbleibenden Zeilen nicht zur Löschung markiert sind.    
Wenn der Schwellenwert für die Sortierung nicht erreicht wird (wenn beispielsweise 90 Prozent der Zeilen sortiert sind) und VACUUM eine vollständige Sortierung ausführt, wird auch eine vollständige Löschoperation ausgeführt, so dass der Festplattenplatz von 100 Prozent der gelöschten Zeilen zurückgewonnen wird.   
Sie können den Standardschwellenwert für die Bereinigung nur für einzelne Tabellen ändern. Um den Standardschwellenwert für eine Bereinigung für eine einzelne Tabelle zu ändern, verwenden Sie den Tabellennamen und den Parameter TO *threshold* PERCENT. 

SORT ONLY   <a name="vacuum-sort-only"></a>
Sortiert die angegebene Tabelle (oder alle Tabellen in der aktuellen Datenbank), ohne den Festplattenplatz zurückzugewinnen, der von gelöschten Zeilen freigegeben wird. Diese Option ist nützlich, wenn das Wiederherstellen von Speicherplatz nicht wichtig ist, aber das erneute Sortieren neuer Zeilen von Bedeutung ist. Eine Bereinigung mit SORT ONLY reduziert die Zeit, die für Bereinigungsoperationen benötigt wird, wenn der nicht sortierte Bereich keine große Zahl gelöschter Zeilen enthält und nicht den gesamten sortierten Bereich umfasst. Für Anwendungen, für die es keine Einschränkungen in Bezug auf den Festplattenplatz gibt, die aber von Abfrageoptimierungen abhängig sind, für die sortierte Tabellenzeilen Voraussetzung sind, kann diese Art von Bereinigung nützlich sein.  
Standardmäßig überspringt VACUUM SORT ONLY alle Tabellen, die bereits zu mindestens 95 Prozent sortiert sind. Um den Standardschwellenwert für die Sortierung für eine einzelne Tabelle zu ändern, verwenden Sie den Tabellennamen und den Parameter TO *threshold* PERCENT, wenn Sie VACUUM ausführen. 

DELETE ONLY   <a name="vacuum-delete-only"></a>
Amazon Redshift führt automatisch eine DELETE ONLY-Bereinigung im Hintergrund aus, sodass Sie nur selten (wenn überhaupt) eine DELETE ONLY-Bereinigung ausführen müssen.  
VACUUM DELETE gewinnt Festplattenplatz zurück, der von Zeilen besetzt wird, die von vorherigen UPDATE- und DELETE-Operationen zur Löschung markiert wurden, und macht die Tabelle kompakter, um den verbrauchten Festplattenplatz freizugeben. Eine Bereinigungsoperation mit DELETE ONLY sortiert die Tabellendaten nicht.   
Diese Option reduziert den Zeitaufwand für Vacuum-Operationen, wenn das Wiederherstellen von Festplattenspeicher wichtig ist, aber das Neusortieren neuer Zeilen nicht wichtig ist. Diese Option kann auch nützlich sein, wenn Ihre Abfrageleistung bereits optimal ist. Eine Neusortierung von Zeilen zur Optimierung der Abfrageleistung ist nicht erforderlich.  
Standardmäßig gewinnt VACUUM DELETE ONLY Festplattenplatz zurück, wenn mindestens 95 Prozent der verbleibenden Zeilen nicht zur Löschung markiert sind. Um den Standardschwellenwert für die Löschung für eine einzelne Tabelle zu ändern, verwenden Sie den Tabellennamen und den Parameter TO *threshold* PERCENT, wenn Sie VACUUM ausführen.    
Einige Operationen, wie `ALTER TABLE APPEND`, können dazu führen, dass Tabellen fragmentiert werden. Wenn Sie die `DELETE ONLY`-Klausel verwenden, gibt die Bereinigungsoperation Speicherplatz von fragmentierten Tabellen frei. Derselbe Schwellenwert von 95 Prozent gilt für die Defragmentierungsoperation. 

REINDEX  <a name="vacuum-reindex"></a>
Analysiert die Verteilung der Werte in überlappenden Sortierschlüsselspalten und führt anschließend eine vollständige VACUUM-Operation aus. Wenn REINDEX verwendet wird, ist ein Tabellenname erforderlich.  
VACUUM REINDEX benötigt deutlich mehr Zeit als VACUUM FULL, da ein zusätzlicher Schritt zur Analyse der überlappenden Sortierschlüssel ausgeführt wird. Die Sortier- und Zusammenführungsoperationen für überlappende Tabellen kann länger dauern, weil die überlappende Sortierung möglicherweise mehr Zeilen als eine zusammengesetzte Sortierung neu anordnen muss.  
Wenn eine VACUUM REINDEX-Operation beendet wird, bevor sie abgeschlossen ist, setzt die nächste VACUUM-Operation die Neuindizierungsoperation fort, bevor eine vollständige Bereinigung ausgeführt wird.  
VACUUM REINDEX wird bei Verwendung von TO *threshold* PERCENT nicht unterstützt.  

RECLUSTER  <a name="vacuum-recluster"></a>
Sortiert die Teile der Tabelle, die nicht sortiert sind. Teile der Tabelle, die bereits nach automatischer Tabellensortierung sortiert sind, bleiben intakt. Mit diesem Befehl werden die neu sortierten Daten nicht mit dem sortierten Bereich zusammengeführt. Es wird auch nicht der gesamte Speicherplatz zurückgewonnen, der zum Löschen markiert ist. Nach Beendigung dieses Befehls wird die Tabelle möglicherweise nicht vollständig sortiert angezeigt, was durch das Feld `unsorted` in SVV\$1TABLE\$1INFO angezeigt wird.   
 Wir empfehlen die Verwendung von VACUUM RECLUSTER für große Tabellen mit häufigen Zugriffen und Abfragen, die nur auf die neuesten Daten zugreifen.   
 VACUUM RECLUSTER wird bei Verwendung von TO threshold PERCENT nicht unterstützt. Wenn RECLUSTER verwendet wird, ist ein Tabellenname erforderlich.  
VACUUM RECLUSTER wird bei Tabellen mit verschachtelten Sortierschlüsseln und Tabellen mit dem Verteilungsstil ALL nicht unterstützt.

 *table\$1name*   
Der Name der zu bereinigenden Tabelle. Wenn Sie keinen Tabellennamen angeben, wird die Bereinigungsoperation auf alle Tabellen in der aktuellen Datenbank angewendet. Sie können jede permanente oder temporäre Tabelle angeben, die von Benutzern erstellt wurde. Der Befehl gilt nicht für andere Objekte wie Ansichten und Systemtabellen.  
 Wenn Sie den Parameter TO *threshold* PERCENT einschließen, ist ein Tabellenname erforderlich.

 TO *threshold* PERCENT   
Eine Klausel, die den Schwellenwert, oberhalb dessen VACUUM die Sortierphase überspringt, und den Zielschwellenwert für die Rückgewinnung von Festplattenplatz während der Löschphase angibt. Der *Sortierschwellenwert* ist der Prozentsatz der Gesamtzahl der Zeilen, die sich bereits in der richtigen Sortierreihenfolge für die angegebene Tabelle befinden, bevor die Bereinigung gestartet wird.  Der *Löschschwellenwert* ist der Mindestprozentsatz der Gesamtzahl der Zeilen, die nach der Bereinigung nicht zur Löschung markiert sind.   
Da VACUUM die Zeilen nur dann neu sortiert, wenn der Prozentsatz der sortierten Zeilen in einer Tabelle kleiner als der Sortierschwellenwert ist, kann Amazon Redshift die VACUUM-Zeiten oft deutlich reduzieren. Wenn VACUUM nicht der Einschränkung unterliegt, den Festplattenplatz von 100 Prozent der zur Löschung markierten Zeilen zurückzugewinnen, kann die Operation häufig das Neuschreiben von Blöcken überspringen, die nur einige wenige zur Löschung markierte Zeilen enthalten.  
Wenn Sie beispielsweise 75 für den *Schwellenwert* angeben, überspringt VACUUM die Sortierphase, wenn sich mindestens 75 % der Tabellenzeilen bereits in der richtigen Sortierreihenfolge befinden. In Bezug auf die Löschphase gewinnt VACUUM Festplattenplatz zurück, wenn nach der Bereinigung mindestens 75 Prozent der Tabellenzeilen nicht zur Löschung markiert sind. Der *Schwellenwert* muss eine Ganzzahl zwischen 0 und 100 sein. Der Standardwert ist 95. Wenn Sie den Wert als 100 angeben, sortiert VACUUM die Tabelle immer, wenn sie nicht bereits vollständig sortiert ist, und gewinnt Festplattenplatz für alle Zeilen zurück, die zur Löschung markiert sind. Wenn Sie den Wert als 0 angeben, sortiert VACUUM die Tabelle niemals und gewinnt niemals Festplattenplatz zurück.  
Wenn Sie den Parameter TO *threshold* PERCENT einschließen, müssen Sie auch einen Tabellennamen angeben. Wenn kein Tabellenname angegeben wird, ist VACUUM erfolglos.   
Sie können den Parameter TO *threshold* PERCENT nicht mit REINDEX verwenden. 

BOOST  
Führt den Befehl VACUUM mit zusätzlichen Ressourcen wie Arbeitsspeicher und Festplattenspeicher aus, sobald diese verfügbar sind. Mit der Option BOOST arbeitet VACUUM in einem Fenster und blockiert gleichzeitige Lösch- und Aktualisierungsvorgänge für die Dauer der VACUUM-Operation. Wenn Sie die BOOST-Option nutzen, werden Systemressourcen gesucht, die die Abfrageleistung beeinträchtigen können. Führen Sie VACUUM BOOST aus, wenn die Last des Systems gering ist, z. B. bei Wartungsarbeiten.   
Beachten Sie Folgendes, wenn Sie die Option BOOST verwenden:  
+ Wenn BOOST angegeben wird, wird der Wert *table\$1name* benötigt. 
+ BOOST wird von REINDEX nicht unterstützt. 
+ BOOST wird bei DELETE ONLY ignoriert. 

## Nutzungshinweise
<a name="r_VACUUM_usage_notes"></a>

Für die Mehrzahl der Amazon-Redshift-Anwendungen wird eine vollständige Bereinigung empfohlen. Weitere Informationen finden Sie unter [Bereinigen von Tabellen](t_Reclaiming_storage_space202.md).

Beachten Sie das folgende Verhalten, bevor Sie eine Bereinigungsoperation ausführen: 
+ Sie können VACUUM nicht innerhalb eines Transaktionsblocks ausführen (BEGIN ... END). Weitere Informationen Transaktionen finden Sie unter [Isolierungsstufen in Amazon Redshift](c_serial_isolation.md). 
+ Es kann vorkommen, dass die Größe von Tabellen zunimmt, wenn sie bereinigt werden. Dieses Verhalten ist erwartet, wenn es keine gelöschten Zeilen gibt, für die Festplattenplatz zurückgewonnen werden könnte, oder wenn die neue Sortierreihenfolge der Tabelle zu einem niedrigeren Datenkompressionsverhältnis führt.
+ Während Bereinigungsoperationen ist eine gewisse Abnahme der Abfrageleistung ein erwartetes Verhalten. Die normale Leistung wird wiederhergestellt, sobald die Bereinigungsoperation abgeschlossen ist.
+ Gleichzeitig ausgeführte Schreiboperationen werden während Bereinigungsoperationen fortgesetzt. Es wird jedoch davon abgeraten, während Bereinigungsoperationen Schreiboperationen auszuführen. Es ist effizienter, Schreiboperationen abzuschließen, bevor die Bereinigung ausgeführt wird. Außerdem können Daten, die nach dem Starten einer Bereinigungsoperation geschrieben werden, von dieser Operation nicht bereinigt werden. In diesem Fall ist eine zweite Bereinigungsoperation erforderlich.
+ Eine Bereinigungsoperation kann möglicherweise nicht gestartet werden, wenn bereits eine Lade- oder Einfügeoperation ausgeführt werden. Bereinigungsoperationen erfordern vorübergehend exklusiven Zugriff auf Tabellen, um gestartet werden zu können. Dieser exklusive Zugriff ist nur kurz erforderlich. Bereinigungsoperationen blockieren daher keine gleichzeitig ausgeführten Lade- und Einfügeoperationen über einen wesentlichen Zeitraum.
+ Bereinigungsoperationen werden übersprungen, wenn es für eine bestimmte Tabelle keinen Handlungsbedarf gibt. Mit der Feststellung, dass die Operation übersprungen werden kann, ist jedoch ein gewisser Overhead verbunden. Wenn Ihnen bekannt ist, dass eine Tabelle optimiert ist oder den Schwellenwert für die Bereinigung nicht erfüllt, führen Sie keine Bereinigungsoperation für sie aus.
+ Eine Bereinigungsoperation mit DELETE ONLY für eine kleine Tabelle reduziert möglicherweise die Zahl der Blöcke nicht, die für das Speichern der Daten verwendet werden, besonders, wenn die Tabelle eine große Zahl von Spalten besitzt oder der Cluster eine große Zahl von Slices pro Knoten verwendet. Diese Bereinigungsoperationen fügen einen Block pro Spalte und Slice hinzu, um gleichzeitig ausgeführte Einfügungen in die Tabelle zu berücksichtigen. Es ist möglich, dass dieser Overhead die Reduzierung der Blockzahl aufgrund der Rückgewinnung von Festplattenplatz aufwiegt. Wenn beispielsweise eine Tabelle mit 10 Spalten in einem Cluster mit 8 Knoten vor einer Bereinigung 1000 Blöcke besetzt, reduziert die Bereinigung die tatsächliche Blockzahl nicht, es sei denn, aufgrund der Löschung von Zeilen werden mehr als 80 Blöcke Festplattenplatz zurückgewonnen. (Jeder Datenblock nimmt 1 MB in Anspruch.)

Automatische Bereinigungsvorgänge werden angehalten, wenn eine der folgenden Bedingungen erfüllt ist: 
+ Ein Benutzer führt eine Data Definition Language (DDL)-Operation wie etwa ALTER TABLE aus, die eine exklusive Sperre für eine Tabelle erforderlich macht, an der die automatische Bereinigung aktuell arbeitet. 
+ Ein Zeitraum hoher Cluster-Auslastung.

### Unterstützung für gleichzeitige VACUUM-Operationen
<a name="r_VACUUM_usage_notes_concurrent"></a>

Amazon Redshift unterstützt die gleichzeitige Ausführung mehrerer Vakuumtransaktionen in verschiedenen Sitzungen in einem Cluster oder einer Arbeitsgruppe. Das bedeutet, dass Sie verschiedene und mehrere Instances aller Vakuummodi gleichzeitig ausgeben können, wobei jede Vakuumtransaktion für eine eindeutige Tabelle ausgeführt wird. Für dieselbe Tabelle können nicht zwei Vakuumoperationen gleichzeitig ausgeführt werden.

**Richtlinien für die gleichzeitige Ausführung von Vakuumoperationen**
+ Wenn Sie gleichzeitige Vakuumtransaktionen über verschiedene Sitzungen hinweg ausführen, sollten Sie die Systemressourcen überwachen und die gleichzeitige Ausführung zu vieler Vakuumoperationen vermeiden.
+ Die empfohlene Zahl der gleichzeitigen Operationen ist vom Speicherplatz, der zurückgewonnen werden soll, von Anzahl und Breite der Zeilen, die sortiert werden sollen, von der Größe des Warehouse sowie von der Größe des Workloads abhängig, der parallel zu den VACUUM-Operationen ausgeführt wird.
+ Beginnen Sie abhängig vom Modus der Vakuumtransaktion mit zwei gleichzeitigen Vakuumoperationen und fügen Sie abhängig von Laufzeit und Systemauslastung weitere hinzu. Wie bei anderen umfangreichen, von Benutzern ausgegebenen Abfragen können Vakuumoperationen in Warteschlangen eingereiht werden, wenn zu viele Vakuumoperationen gleichzeitig ausgeführt werden, wenn Amazon Redshift die Systemressourcenlimits erreicht. 
+ Seien Sie bei der Ausführung mehrerer VACUUM BOOST-Operationen vorsichtig. Die Ausführung von VACUUM-Operationen mit BOOST-Option führt zum Wettbewerb um Systemressourcen, was die Abfrageleistung beeinträchtigen kann. Führen Sie VACUUM BOOST aus, wenn die Last des Systems gering ist, z. B. bei Wartungsarbeiten.
+ Wenn Sie keinen Tabellennamen angeben, wird die Bereinigungsoperation auf alle Tabellen in der aktuellen Datenbank angewendet. Diese Vakuumoperationen werden weiter nacheinander ausgeführt.

## Beispiele
<a name="r_VACUUM_command-examples"></a>

Stellen Sie Platz und Datenbankplatz wieder her und sortieren Sie die Zeilen in allen Tabellen neu (basierend auf dem standardmäßigen Vacuum-Schwellenwert von 95 %).

```
vacuum;
```

Stellen Sie Platz und Datenbankplatz in der SALES-Tabelle wieder her und sortieren Sie die Zeilen in allen Tabellen neu (basierend auf dem standardmäßigen Vacuum-Schwellenwert von 95 %). 

```
vacuum sales;
```

Rufen Sie immer verfügbaren Platz in der Tabelle SALES ab und sortieren Sie die Zeilen neu. 

```
vacuum sales to 100 percent;
```

Sortieren Sie Zeilen in der Tabelle SALES nur dann neu, wenn weniger als 75 % der Zeilen bereits sortiert sind. 

```
 vacuum sort only sales to 75 percent;
```

Gewinnt Festplattenplatz in der Tabelle SALES zurück, wenn mindestens 75 Prozent der verbleibenden Zeilen nach der Bereinigung nicht zur Löschung markiert sind. 

```
vacuum delete only sales to 75 percent;
```

Indiziert die Tabelle LISTING neu und bereinigt sie anschließend. 

```
vacuum reindex listing;
```

Der folgende Befehl gibt einen Fehler zurück. 

```
vacuum reindex listing to 75 percent;
```

Ordnet die Cluster neu an und bereinigt die LISTING-Tabelle anschließend. 

```
vacuum recluster listing;
```

Ordnet die Cluster neu an und bereinigt die LISTING-Tabelle anschließend mit der BOOST-Option. 

```
vacuum recluster listing boost;
```