

Nach reiflicher Überlegung haben wir uns entschieden, Amazon Kinesis Data Analytics für SQL-Anwendungen einzustellen:

1. Ab dem **1. September 2025** werden wir keine Bugfixes für Amazon Kinesis Data Analytics for SQL-Anwendungen bereitstellen, da wir aufgrund der bevorstehenden Einstellung nur eingeschränkten Support dafür haben werden.

2. Ab dem **15. Oktober 2025** können Sie keine neuen Kinesis Data Analytics for SQL-Anwendungen mehr erstellen.

3. Wir werden Ihre Anwendungen ab dem **27. Januar 2026** löschen. Sie können Ihre Amazon Kinesis Data Analytics for SQL-Anwendungen nicht starten oder betreiben. Ab diesem Zeitpunkt ist kein Support mehr für Amazon Kinesis Data Analytics for SQL verfügbar. Weitere Informationen finden Sie unter [Einstellung von Amazon Kinesis Data Analytics für SQL-Anwendungen](discontinuation.md).

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.

# Konfigurieren der Anwendungseingabe
Input

Ihre Amazon-Kinesis-Data-Analytics-Anwendung kann Eingaben aus einer einzelnen Streaming-Quelle erhalten und optional eine einzelne Referenzdatenquelle verwenden. Weitere Informationen finden Sie unter [Amazon-Kinesis-Data-Analytics for SQL-Anwendungen: So funktioniert's](how-it-works.md). Die Abschnitte in diesem Thema beschreiben die Quellen von Anwendungseingaben.

**Topics**
+ [

## Konfigurieren einer Streaming-Quelle
](#source-streaming)
+ [

## Konfigurieren einer Referenzquelle
](#source-reference)
+ [

# Arbeiten mit JSONPath
](about-json-path.md)
+ [

# Zuweisung von Streaming-Quellenelementen zu SQL-Eingabespalten
](sch-mapping.md)
+ [

# Verwenden der Funktion der Schemaerkennung für Streaming-Daten
](sch-dis.md)
+ [

# Verwenden der Funktion der Schemaerkennung für statische Daten
](sch-dis-ref.md)
+ [

# Vorverarbeitung von Daten mithilfe einer Lambda-Funktion
](lambda-preprocessing.md)
+ [

# Parallelisieren von Eingabe-Streams zur Steigerung des Durchsatzes
](input-parallelism.md)

## Konfigurieren einer Streaming-Quelle


Wenn Sie eine Anwendung erstellen, geben Sie eine Streaming-Quelle an. Sie können auch eine Eingabe ändern, nachdem Sie die Anwendung erstellt haben. Amazon-Kinesis-Data-Analytics unterstützt die folgenden Streaming-Quellen für Ihre Anwendung:
+ Einen Kinesis-Datenstrom 
+ Ein Firehose-Lieferstream

**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Bestandskunden, die Kinesis-Data-Analytics-for-SQL-Anwendungen mit `KinesisFirehoseInput` verwenden, können weiterhin Kinesis Data Analytics einsetzen, um Anwendungen mit `KinesisFirehoseInput` innerhalb eines bestehenden Kontos hinzuzufügen. Wenn Sie bereits Kunde sind und mit Kinesis-Data-Analytics-for-SQL-Anwendungen ein neues Konto mit `KinesisFirehoseInput` erstellen möchten, können Sie über das Formular zur Erhöhung des Service-Limits einen Fall erstellen. Weitere Informationen erhalten Sie im [AWS Support -Sicherheitszentrum](https://console.aws.amazon.com/support/home#/). Wir empfehlen, neue Anwendungen immer zu testen, bevor Sie sie in die Produktionsumgebung überführen.

**Anmerkung**  
Wenn der Kinesis-Datenstrom verschlüsselt ist, greift Kinesis Data Analytics nahtlos auf die Daten im verschlüsselten Stream zu. Weitere Konfigurationsschritte sind nicht erforderlich. Kinesis Data Analytics speichert keine unverschlüsselten Daten, die aus Kinesis-Datenströmen gelesen wurden. Weitere Informationen finden Sie unter [Was bedeutet eine serverseitige Verschlüsselung in Kinesis-Daten-Streams?](https://docs.aws.amazon.com/streams/latest/dev/what-is-sse.html)

Kinesis Data Analytics fragt die Streaming-Quelle kontinuierlich nach neuen Daten ab und übernimmt diese in In-Application-Streams, je nach Eingabekonfiguration. 

**Anmerkung**  
Das Hinzufügen eines Kinesis-Streams als Eingabe Ihrer Anwendung wirkt sich nicht auf die Daten im Stream aus. Wenn eine andere Ressource, z. B. ein Firehose-Lieferstream, ebenfalls auf denselben Kinesis-Stream zugreifen würde, würden sowohl Firehose Firehose-Lieferstream als auch die Kinesis Data Analytics-Anwendung dieselben Daten erhalten. Der Durchsatz und die Drosselung könnten jedoch beeinträchtigt sein.

Ihr Anwendungscode kann den In-Application-Stream abfragen. Im Rahmen der Eingabekonfiguration stellen Sie Folgendes bereit:
+ **Streaming-Quelle** – Sie stellen den Amazon-Ressourcennamen (ARN) des Streams und eine IAM-Rolle bereit, die Kinesis Data Analytics annehmen kann, um in Ihrem Namen auf den Stream zuzugreifen. 
+ **Namenspräfix des In-Application-Streams** – Wenn Sie die Anwendung starten, erstellt Kinesis Data Analytics den angegebenen In-Application-Stream. In Ihrem Anwendungscode greifen Sie mittels dieses Namens auf den In-Application-Stream zu. 

  Sie können eine Streaming-Quelle optional mehreren In-Application-Streams zuordnen. Weitere Informationen finden Sie unter [Einschränkungen](limits.md). In diesem Fall erstellt Amazon Kinesis Data Analytics die angegebene Anzahl von In-Application-Streams mit folgenden Namen: *prefix* `_001` *prefix*`_002`, und. *prefix* `_003` Standardmäßig ordnet Kinesis Data Analytics die Streaming-Quelle einem anwendungsinternen Stream mit dem Namen zu. *prefix* `_001`

  Es gibt eine Einschränkung in Bezug auf die Rate, mit der Sie Zeilen in einen In-Application-Stream einfügen können. Daher unterstützt Kinesis Data Analytics mehrere solcher In-Application-Streams, damit Sie wesentlich schneller Datensätze in Ihre Anwendung importieren können. Wenn Ihre Anwendung mit den Daten in der Streaming-Quelle nicht Schritt halten kann, können Sie Parallelitätseinheiten hinzufügen, um die Leistung zu verbessern. 
+ **Zuweisungsschema** – Sie beschreiben das Datensatzformat (JSON, CSV) für die Streaming-Quelle. Außerdem beschreiben Sie, wie jeder Datensatz im Stream den Spalten im erstellten In-Application-Stream zugeordnet wird. An dieser Stelle stellen Sie Spaltennamen und Datentypen bereit. 

**Anmerkung**  
Kinesis Data Analytics fügt den Kennungen (Stream-Name und Spaltennamen) bei der Erstellung des Eingabe-In-Application-Streams Anführungszeichen hinzu. Bei der Abfrage dieses Streams und der Spalten müssen Sie diese Bezeichner in Anführungszeichen mit übereinstimmender Groß- und Kleinschreibung (exakt übereinstimmende Groß- und Kleinbuchstaben) angeben. Weitere Informationen zu Kennungen finden Sie unter [Kennungen](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-identifiers.html) in der *Amazon-Managed-Service für Apache Flink-SQL-Referenz*.

Sie können in der Amazon-Kinesis-Data-Analytics-Konsole eine Anwendung erstellen und Eingaben konfigurieren. Die Konsole führt anschließend die erforderlichen API-Aufrufe aus. Sie können Anwendungseingaben konfigurieren, wenn Sie eine neue Anwendungs-API erstellen oder einer vorhandenen Anwendung eine Eingabekonfiguration hinzufügen. Weitere Informationen erhalten Sie unter [CreateApplication](API_CreateApplication.md) und [AddApplicationInput](API_AddApplicationInput.md). Im Folgenden sehen Sie den Eingabekonfigurationsteil des `Createapplication`-API-Anforderungstexts:

```
 "Inputs": [
        {
            "InputSchema": {
                "RecordColumns": [
                    {
                        "Mapping": "string",
                        "Name": "string",
                        "SqlType": "string"
                    }
                ],
                "RecordEncoding": "string",
                "RecordFormat": {
                    "MappingParameters": {
                        "CSVMappingParameters": {
                            "RecordColumnDelimiter": "string",
                            "RecordRowDelimiter": "string"
                        },
                        "JSONMappingParameters": {
                            "RecordRowPath": "string"
                        }
                    },
                    "RecordFormatType": "string"
                }
            },
            "KinesisFirehoseInput": {
                "ResourceARN": "string",
                "RoleARN": "string"
            },
            "KinesisStreamsInput": {
                "ResourceARN": "string",
                "RoleARN": "string"
            },
            "Name": "string"
        }
    ]
```

## Konfigurieren einer Referenzquelle


Optional können Sie einer vorhandenen Anwendung auch eine Referenzdatenquelle hinzufügen, um die Daten aus Streaming-Quellen anzureichern. Sie müssen Referenzdaten als Objekt in Ihrem Amazon-S3-Bucket speichern. Wenn die Anwendung gestartet wird, liest Amazon-Kinesis-Data-Analytics das Amazon-S3-Objekt und erstellt eine In-Application-Referenztabelle. Ihr Anwendungscode kann die Tabelle dann mit einem In-Application-Stream verknüpfen. 

Sie speichern Referenzdaten im Amazon-S3-Objekt unter Verwendung der unterstützten Formate (CSV, JSON). Angenommen, Ihre Anwendung führt Analysen von Börsenbestellungen aus. Nehmen Sie das folgende Datensatzformat für die Streaming-Quelle an:

```
Ticker, SalePrice, OrderId

AMZN     $700        1003
XYZ      $250        1004
...
```

In diesem Fall könnten Sie eine Referenzdatenquelle in Betracht ziehen, um Details zu den einzelnen Börsentickern bereitzustellen, wie den Firmennamen.

```
Ticker, Company
AMZN, Amazon
XYZ, SomeCompany
...
```

Sie können eine Referenzdatenquelle der Anwendung entweder mit der API oder mit der Konsole hinzufügen. Amazon-Kinesis-Data-Analytics stellt die folgenden API-Aktionen zur Verwaltung von Referenz-Datenquellen bereit:
+  [AddApplicationReferenceDataSource](API_AddApplicationReferenceDataSource.md)
+ [UpdateApplication](API_UpdateApplication.md)

Informationen zum Hinzufügen von Referenzdaten mithilfe der Konsole finden Sie unter [Beispiel: Hinzufügen von Referenzdaten zu einer Kinesis Data Analytics-Anwendung](app-add-reference-data.md).

Beachten Sie Folgendes:
+ Wenn die Anwendung ausgeführt wird, erstellt Kinesis Data Analytics eine In-Application-Referenztabelle und lädt anschließend sofort die Referenzdaten.
+ Wenn die Anwendung nicht ausgeführt wird (wenn sie z. B. im Bereitschaftsstatus ist), speichert Kinesis Data Analytics nur die aktualisierte Eingabekonfiguration. Wenn die Ausführung der Anwendung gestartet wird, lädt Kinesis Data Analytics die Referenzdaten als Tabelle in Ihrer Anwendung.

Gehen wir davon aus, dass Sie die Daten aktualisieren möchten, nachdem Kinesis Data Analytics die In-Application-Referenztabelle erstellt hat. Vielleicht haben Sie das Amazon-S3-Objekt aktualisiert oder Sie möchten ein anderes Amazon-S3-Objekt verwenden. In diesem Fall können Sie entweder [UpdateApplication](API_UpdateApplication.md) explizit aufrufen oder in der Konsole **Aktionen**, **Referenzdatentabelle synchronisieren** wählen. Kinesis Data Analytics aktualisiert die In-Application-Referenztabelle nicht automatisch. 

Es gibt eine Einschränkung in Bezug auf die Größe des Amazon-S3-Objekts, das Sie als Referenzdatenquelle erstellen können. Weitere Informationen finden Sie unter [Einschränkungen](limits.md). Wenn die Größe des Objekts den Grenzwert überschreitet, kann Kinesis Data Analytics die Daten nicht laden. Der Anwendungsstatus wird als „ausgeführt“ angezeigt, die Daten werden jedoch nicht gelesen.

Wenn Sie eine Referenzdatenquelle hinzufügen, müssen Sie folgende Informationen bereitstellen: 
+ **Name von S3-Bucket und Objektschlüssel** – Zusätzlich zum Bucket-Namen und Objektschlüssel stellen Sie auch eine IAM-Rolle bereit, die Kinesis Data Analytics annehmen kann, um das Objekt in Ihrem Namen zu lesen. 
+ **Name der In-Application-Referenztabelle** – Kinesis Data Analytics erstellt diese In-Application-Tabelle und füllt sie durch Lesen des Amazon-S3-Objekts aus. Dies ist der Tabellenname, den Sie in Ihrem Anwendungscode angeben.
+ **Zuweisungsschema** – Sie beschreiben das Datensatzformat (JSON, CSV) und die Kodierung der im Amazon-S3-Objekt gespeicherten Daten. Sie beschreiben außerdem die Zuordnung der einzelnen Datenelemente zu den Spalten in der In-Application-Referenztabelle. 

Im Folgenden wird der Anforderungstext in der `AddApplicationReferenceDataSource`-API-Anforderung gezeigt.

```
{
    "applicationName": "string",
    "CurrentapplicationVersionId": number,
    "ReferenceDataSource": {
        "ReferenceSchema": {
            "RecordColumns": [
                {
                    "IsDropped": boolean,
                    "Mapping": "string",
                    "Name": "string",
                    "SqlType": "string"
                }
            ],
            "RecordEncoding": "string",
            "RecordFormat": {
                "MappingParameters": {
                    "CSVMappingParameters": {
                        "RecordColumnDelimiter": "string",
                        "RecordRowDelimiter": "string"
                    },
                    "JSONMappingParameters": {
                        "RecordRowPath": "string"
                    }
                },
                "RecordFormatType": "string"
            }
        },
        "S3ReferenceDataSource": {
            "BucketARN": "string",
            "FileKey": "string",
            "ReferenceRoleARN": "string"
        },
        "TableName": "string"
    }
}
```

# Arbeiten mit JSONPath


**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html).

JSONPath ist eine standardisierte Methode, um Elemente eines JSON-Objekts abzufragen. JSONPath verwendet Pfadausdrücke, um durch Elemente, verschachtelte Elemente und Arrays in einem JSON-Dokument zu navigieren. Weitere Informationen über JSON finden Sie auf der Website [Introducing JSON](http://www.json.org/).

Amazon Kinesis Data Analytics verwendet JSONPath Ausdrücke im Quellschema der Anwendung, um Datenelemente in einer Streaming-Quelle zu identifizieren, die Daten im JSON-Format enthält.

Weitere Informationen dazu, wie Sie Streaming-Daten dem Eingabestream Ihrer Anwendung zuordnen, finden Sie unter [Zuweisung von Streaming-Quellenelementen zu SQL-Eingabespalten](sch-mapping.md).

## Zugreifen auf JSON-Elemente mit JSONPath


Im Folgenden erfahren Sie, wie Sie mithilfe von JSONPath Ausdrücken auf verschiedene Elemente in JSON-formatierten Daten zugreifen können. Die Beispiele in diesem Abschnitt gehen davon aus, dass der Quell-Stream den folgenden JSON-Datensatz enthält:

```
{
  "customerName":"John Doe",
  "address":
  {
    "streetAddress":
    [
      "number":"123",
      "street":"AnyStreet"
    ],
    "city":"Anytown"
  }
  "orders":
  [
    { "orderId":"23284", "itemName":"Widget", "itemPrice":"33.99" },
    { "orderId":"63122", "itemName":"Gadget", "itemPrice":"22.50" },
    { "orderId":"77284", "itemName":"Sprocket", "itemPrice":"12.00" }
  ]
}
```

### Zugriff auf JSON-Elemente


Verwenden Sie die folgende Syntax, um ein Element in JSON-Daten mit JSONPath abzufragen. Hier stellt `$` das Stammverzeichnis der Datenhierarchie dar und `elementName` ist der Name des Elementknoten, der abgefragt werden soll.

```
$.elementName
```

Der folgende Ausdruck fragt das `customerName`-Element aus dem vorherigen JSON-Beispiel ab.

```
$.customerName
```

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück.

```
John Doe
```

**Anmerkung**  
Pfadausdrücke beachten die Groß- und Kleinschreibung. Der Ausdruck `$.customername` gibt `null` aus dem vorherigen JSON-Beispiel zurück.

**Anmerkung**  
Wenn an der Stelle, die der Pfadausdruck angibt, kein Element angezeigt wird, gibt der Ausdruck `null` zurück. Der folgende Ausdruck gibt `null` aus dem vorherigen Beispiel zurück, weil es kein übereinstimmendes JSON-Element gibt.  

```
$.customerId
```

### Zugriff auf verschachtelte JSON-Elemente


Um ein verschachteltes JSON-Element abzufragen, verwenden Sie die folgende Syntax.

```
$.parentElement.element
```

Der folgende Ausdruck fragt das `city`-Element aus dem vorherigen JSON-Beispiel ab.

```
$.address.city
```

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück.

```
Anytown
```

Sie können mithilfe der folgenden Syntax weitere Ebenen mit Unterelementen abfragen.

```
$.parentElement.element.subElement
```

Der folgende Ausdruck fragt das `street`-Element aus dem vorherigen JSON-Beispiel ab.

```
$.address.streetAddress.street
```

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück.

```
AnyStreet
```

### Zugriff auf Arrays


Sie können auf die Daten in einem JSON-Array wie folgt zugreifen:
+ Abrufen aller Elemente im Array als einzelne Zeile.
+ Abrufen eines jeden Elements im Array als eigene Zeile.

#### Abrufen aller Elemente in einem Array in einer einzelnen Zeile


Um den gesamten Inhalt eines Arrays als einzelne Zeile abzufragen, verwenden Sie die folgende Syntax.

```
$.arrayObject[0:]
```

Der folgende Ausdruck fragt den gesamten Inhalt des `orders`-Elements im vorherigen JSON-Beispiel ab, das in diesem Abschnitt verwendet wird. Es gibt den Array-Inhalt in einer einzelnen Spalte in einer einzigen Zeile zurück.

```
$.orders[0:]
```

Der vorherige Ausdruck gibt Folgendes aus dem JSON-Beispiel-Datensatz zurück, der in diesem Abschnitt verwendet wird.

```
[{"orderId":"23284","itemName":"Widget","itemPrice":"33.99"},{"orderId":"61322","itemName":"Gadget","itemPrice":"22.50"},{"orderId":"77284","itemName":"Sprocket","itemPrice":"12.00"}]
```

#### Abrufen aller Elemente in einem Array in separaten Zeilen


Um die einzelnen Elemente in einem Array als eigene Zeilen abzufragen, verwenden Sie die folgende Syntax.

```
$.arrayObject[0:].element
```

Der folgende Ausdruck fragt die `orderId`-Elemente im vorhergehenden JSON-Beispiel ab und gibt jedes Arrayelement als eigene Zeile zurück.

```
$.orders[0:].orderId
```

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück, wobei jedes Datenelement als eigene Zeile zurückgegeben wird.


****  

|  | 
| --- |
|  23284  | 
|  63122  | 
|  77284  | 

**Anmerkung**  
Wenn Ausdrücke, die andere Elemente als Array-Elemente abfragen, in einem Schema enthalten sind, das einzelne Array-Elemente abfragt, werden die Elemente, die keine Array-Elemente sind, für jedes Element im Array wiederholt. Angenommen, ein Schema für das vorherige JSON-Beispiel enthält die folgenden Ausdrücke:  
\$1.customerName
\$1.orders[0:].orderId
In diesem Fall sehen die zurückgegebenen Daten aus dem Beispiel-Eingabe-Stream-Element wie folgt aus, wobei das `name`-Element für jedes `orderId`-Element wiederholt wird.  


****  

|  |  | 
| --- |--- |
|  Hans Muster  |  23284  | 
|  Hans Muster  |  63122  | 
|  Hans Muster  |  77284  | 

**Anmerkung**  
Für Array-Ausdrücke in Amazon-Kinesis-Data-Analytics gelten folgende Einschränkungen:  
In einem Array-Ausdruck wird nur eine Dereferenzierungsebene unterstützt. Das folgende Ausdrucksformat wird nicht unterstützt.  

  ```
  $.arrayObject[0:].element[0:].subElement
  ```
In einem Schema kann nur ein Array auf eine Ebene gebracht werden. Es können mehrere Arrays referenziert werden – sie werden als einzelne Zeile zurückgegeben, die alle Elemente im Array enthält. Es können jedoch nur für ein Array alle Elemente als einzelne Zeilen zurückgegeben werden.  
Ein Schema, das Elemente im folgenden Format enthält, ist gültig. Dieses Format gibt den Inhalt des zweiten Arrays als einzelne Spalte wider, was für jedes Element im ersten Array wiederholt wird.  

  ```
  $.arrayObjectOne[0:].element
  $.arrayObjectTwo[0:]
  ```
Ein Schema, das Elemente im folgenden Format enthält, ist nicht gültig.  

  ```
  $.arrayObjectOne[0:].element
  $.arrayObjectTwo[0:].element
  ```

## Weitere Überlegungen


Bei der Arbeit mit sollten JSONPath Sie zusätzlich Folgendes beachten:
+ Wenn ein einzelnes Element in den JSONPath Ausdrücken im Anwendungsschema auf keine Arrays zugreift, wird für jeden verarbeiteten JSON-Datensatz eine einzelne Zeile im Eingabestream der Anwendung erstellt. 
+ Wenn ein Array auf eine Ebene gebracht wird (d. h. seine Elemente werden als einzelne Zeilen zurückgegeben), führen fehlende Elemente dazu, dass im In-Application-Stream ein Nullwert erstellt wird. 
+ Ein Array wird stets in Form mindestens einer Zeile auf eine Ebene gebracht. Wenn keine Werte zurückgegeben würden (d. h., wenn das Array leer ist oder keines seiner Elemente abgefragt wird), wird eine einzelne Zeile mit ausschließlich Nullwerten zurückgegeben.

  Der folgende Ausdruck gibt aus dem vorherigen JSON-Beispiel Datensätze mit Nullwerten zurück, da es im angegebenen Pfad kein übereinstimmendes Element gibt.

  ```
  $.orders[0:].itemId
  ```

  Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Beispieldatensatz zurück.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/about-json-path.html)

## Verwandte Themen
Verwandte Themen
+ [Einführung von JSON](http://www.json.org/)

# Zuweisung von Streaming-Quellenelementen zu SQL-Eingabespalten


**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html).

Mit Amazon-Kinesis-Data-Analytics können Sie mithilfe von Standard-SQL Streaming-Daten im JSON- oder CSV-Format verarbeiten und analysieren. 
+ Um Streaming-CSV-Daten zu verarbeiten und zu analysieren, weisen Sie den Spalten im Eingabe-Stream Spaltennamen und Datentypen zu. Ihre Anwendung importiert pro Spaltendefinition der Reihe nach eine einzelne Spalte aus dem Eingabe-Stream. 

  Sie müssen nicht alle Spalten im Anwendungs-Eingabe-Stream einschließen. Sie können jedoch keine Spalten aus dem Quell-Stream überspringen. Sie können beispielsweise die ersten drei Spaltenaus einem Eingabe-Stream mit fünf Elemente importieren. Sie können jedoch nicht nur die Spalten 1, 2 und 4 importieren.
+ Um Streaming-JSON-Daten zu verarbeiten und zu analysieren, verwenden Sie JSONPath Ausdrücke, um JSON-Elemente aus einer Streaming-Quelle SQL-Spalten in einem Eingabestream zuzuordnen. Weitere Informationen zur Verwendung JSONPath mit Amazon Kinesis Data Analytics finden Sie unter[Arbeiten mit JSONPath](about-json-path.md). Die Spalten in der SQL-Tabelle haben Datentypen, die von JSON-Typen zugeordnet wurden. Weitere Informationen zu unterstützten Datentypen finden Sie unter [Datentypen](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-data-types.html). Weitere Informationen zum Umwandeln von JSON-Daten in SQL-Daten finden Sie unter [Zuweisung von JSON-Datentypen zu SQL-Datentypen](#sch-mapping-datatypes).

Weitere Informationen zum Konfigurieren von Eingabe-Streams finden Sie unter [Konfigurieren der Anwendungseingabe](how-it-works-input.md).

## Zuweisung von JSON-Daten zu SQL-Spalten


 Sie können JSON-Elemente mithilfe der AWS-Managementkonsole oder der Kinesis Data Analytics Analytics-API den Eingabespalten zuordnen. 
+ Informationen zum Zuordnen von Elementen zu Spalten mithilfe der Konsole finden Sie unter [Arbeiten mit dem Schema-Editor](console-summary-edit-schema.md).
+ Informationen zum Zuordnen von Elementen zu Spalten mithilfe der Kinesis Data Analytics-API finden Sie im folgenden Abschnitt.

Um JSON-Elemente zu Spalten im In-Application-Eingabe-Stream zuzuordnen, benötigen Sie ein Schema die folgenden Informationen für jede Spalte:
+ **Quellausdruck:** Der JSONPath Ausdruck, der die Position der Daten für die Spalte identifiziert.
+ **Spaltenname:** Der Name, den Ihre SQL-Abfragen verwenden, um die Daten zu referenzieren.
+ **Datentyp: **Der SQL-Datentyp der Spalte.

## Verwenden der API


Um Elemente aus einer Streaming-Quelle zu Eingabespalten zuzuordnen, können Sie die Kinesis Data Analytics-API-Aktion [CreateApplication](API_CreateApplication.md) verwenden. Um den In-Application-Stream zu erstellen, geben Sie ein Schema für die Umwandlung Ihrer Daten in eine schematisierte Version an, die in SQL verwendet wird. Die Aktion [CreateApplication](API_CreateApplication.md) konfiguriert Ihre Anwendung für den Empfang von Eingaben aus einer einzelnen Streaming-Quelle. Um JSON-Elemente oder CSV-Spalten zu SQL-Spalten zuzuordnen, erstellen Sie ein [RecordColumn](API_RecordColumn.md)-Objekt im [SourceSchema](API_SourceSchema.md) `RecordColumns`-Array. Das [RecordColumn](API_RecordColumn.md)-Objekt hat das folgende Schema:

```
{ 
    "Mapping": "String",
    "Name": "String",
    "SqlType": "String"
}
```

Die Felder im [RecordColumn](API_RecordColumn.md)-Objekt haben die folgenden Werte:
+ `Mapping`: Der JSONPath Ausdruck, der die Position der Daten im Eingabestream-Datensatz identifiziert. Dieser Wert ist für ein Eingabeschema für einen Quell-Stream im CSV-Format nicht vorhanden.
+ `Name`: der Spaltenname im In-Application-SQL-Daten-Stream.
+ `SqlType`: der Datentyp der Daten im In-Application-SQL-Daten-Stream.

### Beispiel für ein JSON-Eingabeschema


Das folgende Beispiel zeigt das Format des `InputSchema`-Werts für ein JSON-Schema.

```
"InputSchema": {
    "RecordColumns": [
        {
            "SqlType": "VARCHAR(4)",
            "Name": "TICKER_SYMBOL",
            "Mapping": "$.TICKER_SYMBOL"
        },
        {
            "SqlType": "VARCHAR(16)",
            "Name": "SECTOR",
            "Mapping": "$.SECTOR"
        },
        {
            "SqlType": "TINYINT",
            "Name": "CHANGE",
            "Mapping": "$.CHANGE"
        },
        {
            "SqlType": "DECIMAL(5,2)",
            "Name": "PRICE",
            "Mapping": "$.PRICE"
        }
    ],
    "RecordFormat": {
        "MappingParameters": {
            "JSONMappingParameters": {
                "RecordRowPath": "$"
            }
        },
        "RecordFormatType": "JSON"
    },
    "RecordEncoding": "UTF-8"
}
```

### Beispiel für ein CSV-Eingabeschema


Das folgende Beispiel zeigt das Format des `InputSchema`-Werts für ein Schema im CSV-Format (durch Komma getrennte Werte).

```
"InputSchema": {
    "RecordColumns": [
        {
            "SqlType": "VARCHAR(16)",
            "Name": "LastName"
        },
        {
            "SqlType": "VARCHAR(16)",
            "Name": "FirstName"
        },
        {
            "SqlType": "INTEGER",
             "Name": "CustomerId"
        }
    ],
    "RecordFormat": {
        "MappingParameters": {
            "CSVMappingParameters": {
                "RecordColumnDelimiter": ",",
                "RecordRowDelimiter": "\n"
            }
        },
        "RecordFormatType": "CSV"
    },
    "RecordEncoding": "UTF-8"
}
```

## Zuweisung von JSON-Datentypen zu SQL-Datentypen


JSON-Datentypen werden entsprechend dem Eingabeschema der Anwendung in die entsprechenden SQL-Datentypen umgewandelt. Weitere Informationen zu unterstützten SQL-Datentypen finden Sie unter [Datentypen](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-data-types.html). Amazon-Kinesis-Data-Analytics wandelt JSON-Datentypen entsprechend den folgenden Regeln in SQL-Datentypen um.

### Null-Literal


Ein Null-Literal im JSON-Eingabe-Stream (d. h. `"City":null`) wird unabhängig vom Zieldatentyp in einen SQL-Nullwert umgewandelt.

### Boolesches Literal


Ein boolesches Literal im JSON-Eingabe-Stream (d. h. `"Contacted":true`) wird wie folgt in SQL-Daten umgewandelt:
+ Numerisch (DECIMAL, INT usw.): `true` wird in 1, `false` wird in 0 umgewandelt.
+ Binär (BINARY oder VARBINARY): 
  + `true`: Ergebnis hat den niedrigsten Bitsatz und die verbleibenden Bits sind gelöscht.
  + `false`: Alle Bits im Ergebnis sind gelöscht.

  Die Umwandlung in VARBINARY führt zum Längenwert 1 Byte.
+ BOOLEAN: wird in den entsprechenden SQL BOOLEAN-Wert umgewandelt.
+ Zeichen (CHAR oder VARCHAR): wird in den entsprechenden Zeichenfolgenwert (`true` oder `false`) umgewandelt. Der Wert wird abgeschnitten, um an die Feldlänge angepasst zu werden.
+ Datum/Uhrzeit (DATE, TIME oder TIMESTAMP): Die Umwandlung schlägt fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.

### Zahl


Ein numerisches Literal im JSON-Eingabe-Stream (d. h. `"CustomerId":67321`) wird wie folgt in SQL-Daten umgewandelt:
+ Numerisch (DECIMAL, INT usw.): wird direkt umgewandelt. Wenn der umgewandelte Wert die Größe oder Genauigkeit des Zieldatentyps überschreitet (d. h. `123.4` wird in INT umgewandelt), schlägt die Umwandlung fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben. 
+ Binär (BINARY oder VARBINARY): Die Umwandlung schlägt fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.
+ BOOLESCH: 
  + `0`: wird in `false` umgewandelt.
  + Alle anderen Zahlen: werden in `true` umgewandelt.
+ Zeichen (CHAR oder VARCHAR): wird in eine Zeichenfolgendarstellung der Zahl umgewandelt.
+ Datum/Uhrzeit (DATE, TIME oder TIMESTAMP): Die Umwandlung schlägt fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.

### Zeichenfolge


Ein Zeichenfolgenwert im JSON-Eingabe-Stream (d. h. `"CustomerName":"John Doe"`) wird wie folgt in SQL-Daten umgewandelt:
+ Numerisch (DECIMAL, INT usw.): Amazon-Kinesis-Data-Analytics versucht, den Wert in den Zieldatentyp umzuwandeln. Wenn der Wert nicht umgewandelt werden kann, schlägt die Umwandlung fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.
+ Binär (BINARY oder VARBINARY): Wenn die Quellzeichenfolge ein gültiges binäres Literal ist (d. h. `X'3F67A23A'` mit einer geraden Anzahl von f), wird der Wert in den Zieldatentyp umgewandelt. Andernfalls schlägt die Umwandlung fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.
+ BOOLEAN: Wenn die Quellzeichenfolge `"true"` ist, wird sie in `true` umgewandelt. Bei diesem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. Andernfalls wird sie in `false` umgewandelt.
+ Zeichen (CHAR oder VARCHAR): wird in den Zeichenfolgenwert in der Eingabe umgewandelt. Wenn der Wert länger als der Zieldatentyp ist, wird er abgeschnitten und es wird kein Fehler in den Fehler-Stream geschrieben.
+ Datum/Uhrzeit (DATE, TIME oder TIMESTAMP): Wenn die Quellzeichenfolge in einem Format erstellt wurde, das in den Zielwert umgewandelt werden kann, wird der Wert umgewandelt. Andernfalls schlägt die Umwandlung fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.

  Gültige datetime-Formate sind:
  + „1992-02-14“
  + „1992-02-14 18:35:44.0“

### Array oder Object


Ein Array oder Objekt im JSON-Eingabe-Stream wird wie folgt in SQL-Daten umgewandelt:
+ Zeichen (CHAR oder VARCHAR): wandelt den Quelltext des Arrays oder Objekts um. Siehe [Zugriff auf Arrays](about-json-path.md#about-json-path-arrays).
+ Alle anderen Datentypen: Die Umwandlung schlägt fehl und es wird ein Erzwingungsfehler in den Fehler-Stream geschrieben.

Ein Beispiel für ein JSON-Array finden Sie unter [Arbeiten mit JSONPath](about-json-path.md).

## Verwandte Themen
Verwandte Themen
+ [Konfigurieren der Anwendungseingabe](how-it-works-input.md)
+ [Datentypen](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-data-types.html)
+ [Arbeiten mit dem Schema-Editor](console-summary-edit-schema.md)
+ [CreateApplication](API_CreateApplication.md)
+ [RecordColumn](API_RecordColumn.md)
+ [SourceSchema](API_SourceSchema.md)

# Verwenden der Funktion der Schemaerkennung für Streaming-Daten


**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html).

Die Bereitstellung eines Eingabeschemas, das beschreibt, wie Datensätze im Streaming-Eingabestream einem anwendungsinternen Stream zugeordnet werden, kann umständlich und fehleranfällig sein. Sie können die [DiscoverInputSchema](API_DiscoverInputSchema.md)-API (*Erkennungs-API* genannt), um ein Schema abzuleiten. Aus Zufallsstichproben von Datensätzen in der Streaming-Quelle kann die API ein Schema ableiten (d. h. Spaltennamen, Datentypen und Position des Datenelements in den eingehenden Daten). 

**Anmerkung**  
Informationen zum Verwenden der Discovery-API zum Erstellen eines Schemas aus einer in Amazon-S3 gespeicherten Datei finden Sie unter [Verwenden der Funktion der Schemaerkennung für statische Daten](sch-dis-ref.md). 

Die Konsole verwendet die Discovery-API, um ein Schema für eine angegebene Streaming-Quelle zu generieren. Mithilfe der Konsole können Sie das Schema auch aktualisieren, z. B. Spalten hinzufügen oder entfernen, Spaltennamen oder Datentypen ändern usw. Gehen Sie bei den Änderungen jedoch sorgfältig vor, um sicherzustellen, dass Sie kein ungültiges Schema erstellen. 

Nachdem Sie ein Schema für Ihren In-Application-Stream fertiggestellt haben, gibt es Funktionen, die Sie zur Bearbeitung von Zeichenfolgen- und Datums-/Uhrzeitwerten verwenden können. Sie können diese Funktionen in Ihrem Anwendungscode verwenden, wenn Sie im resultierenden In-Application-Stream mit Zeilen arbeiten. Weitere Informationen finden Sie unter [Beispiel: Werte transformieren DateTime](app-string-datetime-manipulation.md).

## Benennung von Spalten während der Schemaerkennung


Während der Schemaerkennung versucht Amazon-Kinesis-Data-Analytics einen möglichst großen Teil des ursprünglichen Spaltennamens aus der Streaming-Eingabequelle beizubehalten, außer in folgenden Fällen:
+ Der Spaltenname der Quelle ist ein reserviertes SQL-Schlüsselwort wie `TIMESTAMP`, `USER`, `VALUES` oder `YEAR`. 
+ Der Spaltenname des Quell-Streams enthält nicht unterstützte Zeichen. Es werden nur Buchstaben, Ziffern und Unterstriche (\$1) unterstützt.
+ Die Spaltenname des Quell-Streams beginnt mit einer Zahl.
+ Der Spaltenname des Quell-Streams enthält mehr als 100 Zeichen.

Wenn eine Spalte umbenannt wird, beginnt der umbenannte Spaltenname mit `COL_`. In einigen Fällen können keine der ursprünglichen Spaltennamen beibehalten werden, beispielsweise wenn der gesamte Name aus nicht unterstützten Zeichen besteht. In einem solchen Fall wird die Spalte mit `COL_#` benannt, wobei \$1 eine Zahl ist, die den Platz der Spalte in der Spaltenreihenfolge angibt.

Nach dem Abschluss der Erkennung können Sie das Schema über die Konsole aktualisieren, um Spalten hinzuzufügen oder zu entfernen oder um Spaltennamen, Datentypen oder Datengröße zu ändern. 

### Beispiele für während der Erkennung vorgeschlagene Spaltennamen



****  

| Spaltenname im Quell-Stream | Während der Erkennung vorgeschlagener Spaltenname | 
| --- | --- | 
|  USER  |  COL\$1USER  | 
|  USER@DOMAIN  |  COL\$1USERDOMAIN  | 
|  @@  |  COL\$10  | 

## Probleme bei der Schemaerkennung


Was geschieht, wenn Kinesis Data Analytics kein Schema für eine bestimmte Streaming-Quelle ableitet? 

Kinesis Data Analytics leitet Ihr Schema für gängige Formate wie CSV und JSON ab, die UTF-8 kodiert sind. Kinesis Data Analytics unterstützt alle mit UTF-8 kodierten Datensätze (einschließlich Rohtexte wie Anwendungsprotokolle und Datensätze) mit einem benutzerdefinierten Spalten- und Zeilentrennzeichen. Wenn Kinesis Data Analytics kein Schema ableitet, können Sie ein Schema manuell mittels des Schema-Editors in der Konsole (oder über die API) definieren.

 Wenn Ihre Daten keinem Muster folgen (das Sie mittels des Schema-Editors angeben können), können Sie ein Schema als einzelne Spalte vom Typ VARCHAR(N) definieren, wobei N die größte Anzahl von Zeichen ist, die Ihr Datensatz voraussichtlich enthalten wird. Anschließend können Sie die Zeichenfolgen- und Datum-/Uhrzeitbearbeitung verwenden, um Ihre Daten zu strukturieren, wenn sie sich in einem In-Application-Stream befinden. Beispiele finden Sie unter [Beispiel: Werte transformieren DateTime](app-string-datetime-manipulation.md).

# Verwenden der Funktion der Schemaerkennung für statische Daten


**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html).

Mit der Funktion der Schemaerkennung können Sie ein Schema aus den Daten in einem Stream oder den Daten in einer statischen Datei erstellen, die in einem Amazon-S3-Bucket gespeichert wird. Gehen wir davon aus, dass Sie ein Schema für eine Kinesis Data Analytics-Anwendung, als Referenz oder bei Nichtverfügbarkeit von Live-Streaming-Daten, erstellen möchten. Sie können die Funktion Schema-Erkennung bei einer statischen Datei verwenden, die ein Beispiel der Daten im erwarteten Format Ihrer Streaming- oder Referenzdaten enthält. Kinesis Data Analytics kann die Schemaerkennung für Beispieldaten aus einer JSON- oder CSV-Datei ausführen, die in einem Amazon-S3-Bucket gespeichert ist. Wenn die Schemaerkennung auf eine Datendatei angewandt wird, wird dazu entweder die Konsole oder die [DiscoverInputSchema](API_DiscoverInputSchema.md)-API mit dem festgelegten Parameter `S3Configuration` verwendet.

## Ausführen der Schemaerkennung mithilfe der Konsole


Um die Erkennung für eine statische Datei mithilfe der Konsole auszuführen, gehen Sie wie folgt vor:

1. Fügen Sie ein Referenzdatenobjekt zu einem S3-Bucket hinzu.

1. Wählen Sie auf der Hauptseite der Anwendung in der Kinesis Data Analytics-Konsole **Referenzdaten verbinden** aus.

1. Geben Sie den Bucket, den Pfad und die IAM-Rolle für den Zugriff auf das Amazon-S3-Objekt mit den Referenzdaten ein.

1. Klicken Sie auf **Discover schema (Schema erkennen)**.

Weitere Informationen zum Hinzufügen von Referenzdaten und zum Erkennen des Schemas in der Konsole finden Sie unter [Beispiel: Hinzufügen von Referenzdaten zu einer Kinesis Data Analytics-Anwendung](app-add-reference-data.md).

## Ausführen der Schemaerkennung mithilfe der API


Um die Erkennung für eine statische Datei mithilfe der API auszuführen, geben Sie die API mit einer `S3Configuration`-Struktur mit den folgenden Informationen an:
+ `BucketARN`: der Amazon-Ressourcenname (ARN) des Amazon-S3-Buckets, der die Datei enthält. Das Format eines Amazon S3-Bucket-ARN finden Sie unter [Amazon Resource Names (ARNs) und Amazon Service Namespaces: Amazon Simple Storage Service (Amazon](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-s3) S3).
+ `RoleARN`: der ARN einer IAM-Rolle mit der `AmazonS3ReadOnlyAccess`-Richtlinie. Informationen zum Hinzufügen einer Richtlinie zu einer Rolle finden Sie unter [Ändern einer Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html).
+ `FileKey`: der Dateiname des Objekts.

**Um ein Schema aus einem Amazon-S3-Objekt mithilfe der `DiscoverInputSchema`-API zu generieren**

1. Stellen Sie sicher, dass Sie die AWS CLI Einrichtung haben. Weitere Informationen finden Sie unter [Schritt 2: Richten Sie das AWS Command Line Interface ()AWS CLI ein](setup-awscli.md) im Abschnitt „Erste Schritte“.

1. Erstellen Sie eine Datei `data.csv` mit dem folgenden Inhalt:

   ```
   year,month,state,producer_type,energy_source,units,consumption
   2001,1,AK,TotalElectricPowerIndustry,Coal,ShortTons,47615
   2001,1,AK,ElectricGeneratorsElectricUtilities,Coal,ShortTons,16535
   2001,1,AK,CombinedHeatandPowerElectricPower,Coal,ShortTons,22890
   2001,1,AL,TotalElectricPowerIndustry,Coal,ShortTons,3020601
   2001,1,AL,ElectricGeneratorsElectricUtilities,Coal,ShortTons,2987681
   ```

1. Melden Sie sich bei der Amazon S3 S3-Konsole unter an [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Erstellen Sie einen Amazon-S3-Bucket und laden Sie die von Ihnen erstellte `data.csv`-Datei hoch. Merken Sie sich den ARN des erstellten Buckets. Informationen zum Erstellen eines Amazon-S3-Buckets und zum Hochladen einer Datei finden Sie unter [Erste Schritte mit Amazon-Simple-Storage-Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html). 

1. Öffnen Sie unter [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) die IAM-Konsole. Erstellen Sie eine Rolle mit der `AmazonS3ReadOnlyAccess`-Richtlinie. Merken Sie sich den ARN der neuen Rolle. Informationen zum Erstellen einer Rolle finden Sie unter [Erstellen einer Rolle zum Delegieren von Berechtigungen an einen Amazon-Service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). Informationen zum Hinzufügen einer Richtlinie zu einer Rolle finden Sie unter [Ändern einer Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html).

1. Führen Sie den folgenden `DiscoverInputSchema` Befehl in der aus AWS CLI und ersetzen Sie dabei Ihren Amazon S3 S3-Bucket und Ihre IAM-Rolle: ARNs 

   ```
   $aws kinesisanalytics discover-input-schema --s3-configuration '{ "RoleARN": "arn:aws:iam::123456789012:role/service-role/your-IAM-role", "BucketARN": "arn:aws:s3:::your-bucket-name", "FileKey": "data.csv" }' 
   ```

1. Die Antwort sieht in etwa so aus:

   ```
   {
       "InputSchema": {
           "RecordEncoding": "UTF-8",
           "RecordColumns": [
               {
                   "SqlType": "INTEGER",
                   "Name": "COL_year"
               },
               {
                   "SqlType": "INTEGER",
                   "Name": "COL_month"
               },
               {
                   "SqlType": "VARCHAR(4)",
                   "Name": "state"
               },
               {
                   "SqlType": "VARCHAR(64)",
                   "Name": "producer_type"
               },
               {
                   "SqlType": "VARCHAR(4)",
                   "Name": "energy_source"
               },
               {
                   "SqlType": "VARCHAR(16)",
                   "Name": "units"
               },
               {
                   "SqlType": "INTEGER",
                   "Name": "consumption"
               }
           ],
           "RecordFormat": {
               "RecordFormatType": "CSV",
               "MappingParameters": {
                   "CSVMappingParameters": {
                       "RecordRowDelimiter": "\r\n",
                       "RecordColumnDelimiter": ","
                   }
               }
           }
       },
       "RawInputRecords": [
           "year,month,state,producer_type,energy_source,units,consumption\r\n2001,1,AK,TotalElectricPowerIndustry,Coal,ShortTons,47615\r\n2001,1,AK,ElectricGeneratorsElectricUtilities,Coal,ShortTons,16535\r\n2001,1,AK,CombinedHeatandPowerElectricPower,Coal,ShortTons,22890\r\n2001,1,AL,TotalElectricPowerIndustry,Coal,ShortTons,3020601\r\n2001,1,AL,ElectricGeneratorsElectricUtilities,Coal,ShortTons,2987681"
       ],
       "ParsedInputRecords": [
           [
               null,
               null,
               "state",
               "producer_type",
               "energy_source",
               "units",
               null
           ],
           [
               "2001",
               "1",
               "AK",
               "TotalElectricPowerIndustry",
               "Coal",
               "ShortTons",
               "47615"
           ],
           [
               "2001",
               "1",
               "AK",
               "ElectricGeneratorsElectricUtilities",
               "Coal",
               "ShortTons",
               "16535"
           ],
           [
               "2001",
               "1",
               "AK",
               "CombinedHeatandPowerElectricPower",
               "Coal",
               "ShortTons",
               "22890"
           ],
           [
               "2001",
               "1",
               "AL",
               "TotalElectricPowerIndustry",
               "Coal",
               "ShortTons",
               "3020601"
           ],
           [
               "2001",
               "1",
               "AL",
               "ElectricGeneratorsElectricUtilities",
               "Coal",
               "ShortTons",
               "2987681"
           ]
       ]
   }
   ```

# Vorverarbeitung von Daten mithilfe einer Lambda-Funktion


**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html).

Wenn die Daten in Ihrem Stream eine Formatkonvertierung, Transformation, Anreicherung oder Filterung benötigen, können Sie die Daten mithilfe einer Funktion vorverarbeiten. AWS Lambda Sie können dies vor der Ausführung von SQL-Code in der Anwendung tun, oder bevor die Anwendung ein Schema aus Ihrem Datenstrom erstellt. 

Die Verwendung einer Lambda-Funktion für die Vorverarbeitung von Datensätzen ist in den folgenden Fällen nützlich:
+ Umwandeln von Datensätzen aus anderen Formaten (z. B. KPL oder GZIP) in Formate, die Kinesis Data Analytics analysieren kann. Kinesis Data Analytics unterstützt derzeit JSON- oder CSV-Datenformate.
+ Erweitern von Daten in ein Format, das für Operationen wie beispielsweise Aggregation oder Entdeckung von Anomalien leichter zugänglich ist. Wenn z. B. mehrere Datenwerte zusammen in einer Zeichenfolge gespeichert werden, können Sie die Daten in separate Spalten erweitern.
+ Die Datenanreicherung mit anderen Amazon-Services, wie z. B. Extrapolation oder Fehlerkorrektur.
+ Anwenden einer komplexen Zeichenfolgentransformation auf Datensatzfelder.
+ Datenfilterung für die Bereinigung der Daten.

## Verwenden einer Lambda-Funktion für die Vorverarbeitung von Datensätzen


Wenn Sie Ihre Kinesis Data Analytics-Anwendung erstellen, aktivieren Sie die Lambda-Vorverarbeitung auf der Seite **Mit einer Quelle verbinden**.

**Verwendung einer Lambda-Funktion für die Vorverarbeitung von Datensätzen in einer Kinesis Data Analytics-Anwendung**

1. [Melden Sie sich bei der Managed Service for Apache Flink-Konsole unter /kinesisanalytics an AWS-Managementkonsole und öffnen Sie sie. https://console.aws.amazon.com](https://console.aws.amazon.com/kinesisanalytics)

1. Wählen Sie auf der Seite **Mit einer Quelle verbinden** für Ihre Anwendung die Option **Aktiviert** im Bereich **Datensatzvorverarbeitung mit AWS Lambda**.

1. Um eine bereits von Ihnen erstellte Lambda-Funktion zu verwenden, wählen Sie die Funktion aus der Dropdown-Liste **Lambda-Funktion** aus.

1. Um eine neue Lambda-Funktion aus einer der Lambda-Vorverarbeitungsvorlagen zu erstellen, wählen Sie die Vorlage aus der Dropdown-Liste aus. Klicken Sie dann auf **View <template name> in Lambda (<Vorlagenname> in Lambda anzeigen)**, um die Funktion zu bearbeiten.

1. Um eine neue Lambda-Funktion zu erstellen, wählen Sie **Neu erstellen**. Informationen zum Erstellen einer Lambda-Funktion finden Sie unter [Erstellen einer HelloWorld Lambda-Funktion und Erkunden Sie die Konsole](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) im *AWS Lambda Entwicklerhandbuch*.

1. Wählen Sie die Version der zu verwendenden Lambda-Funktion aus, die genutzt werden soll. Um die neueste Version zu verwenden, wählen Sie **\$1LATEST**.

Wenn Sie eine Lambda-Funktion für die Datensatz-Vorverarbeitung auswählen oder erstellen, werden die Datensätze vorverarbeitet, bevor der SQL-Code Ihrer Anwendung ausgeführt wird oder Ihre Anwendung ein Schema aus den Datensätzen erstellt.

## Lambda-Vorverarbeitungsberechtigungen


Zur Verwendung der Lambda-Vorverarbeitung benötigt die IAM-Rolle der Anwendung die folgende Berechtigungsrichtlinie:

```
     {
       "Sid": "UseLambdaFunction",
       "Effect": "Allow",
       "Action": [
           "lambda:InvokeFunction",
           "lambda:GetFunctionConfiguration"
       ],
       "Resource": "<FunctionARN>"
   }
```

## Lambda-Vorverarbeitungsmetriken


Sie können Amazon verwenden CloudWatch , um die Anzahl der Lambda-Aufrufe, die Anzahl der verarbeiteten Byte, Erfolge und Misserfolge usw. zu überwachen. Informationen zu CloudWatch Metriken, die von der Lambda-Vorverarbeitung von Kinesis Data Analytics ausgegeben werden, finden Sie unter [Amazon Kinesis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html) Analytics Analytics-Metriken.

## Verwendung AWS Lambda mit der Kinesis Producer Library


Die [Kinesis Producer Library](https://docs.aws.amazon.com/streams/latest/dev/developing-producers-with-kpl.html) (KPL) aggregiert kleine vom Benutzer formatierte Datensätze in größere Datensätze von bis zu 1 MB, um den Durchsatz von Amazon-Kinesis-Data-Streams zu optimieren. Die Kinesis Client Library (KCL) für Java unterstützt eine Disaggregation dieser Datensätze. Sie müssen jedoch ein spezielles Modul verwenden, um die Datensätze zu deaggregieren, wenn Sie sie AWS Lambda als Verbraucher Ihrer Streams verwenden. 

Den erforderlichen Projektcode und Anweisungen finden Sie in den [Deaggregationsmodulen der Kinesis Producer Library](https://github.com/awslabs/kinesis-deaggregation). AWS Lambda GitHub Sie können die Komponenten in diesem Projekt verwenden, um KPL-serialisierte Daten AWS Lambda in Java, Node.js und Python zu verarbeiten. Die Komponenten können auch als Teil einer [mehrsprachigen KCL-Anwendung](https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client-multilang/src/main/java/software/amazon/kinesis/multilang/package-info.java) verwendet werden.

## Datenvorverarbeitung, Ereigniseingabe, Datenantwortmodell Model/Record


Zur Vorverarbeitung von Datensätzen muss Ihre Lambda-Funktion mit den benötigten Ereignis-Eingabedaten und Datensatz-Antwortmodellen konform sein. 

### Ereignis-Eingabedatenmodell


Kinesis Data Analytics liest kontinuierlich Daten aus Ihrem Kinesis-Datenstream oder Firehose-Lieferstream. Für jeden abgerufenen Stapel von Datensätzen verwaltet der Service, wie jeder Stapel an Ihre Lambda-Funktion übergeben wird. Die Funktion empfängt eine Liste der Datensätze als Eingabe. Innerhalb Ihrer Funktion durchlaufen Sie die Liste und wenden Ihre Geschäftslogik an, um Ihre Vorverarbeitungsanforderungen (wie z. B. Datenformatkonvertierung oder Anreicherung) zu erfüllen. 

Das Eingabemodell für Ihre Vorverarbeitungsfunktion variiert geringfügig, je nachdem, ob die Daten von einem Kinesis-Datenstream oder einem Firehose-Lieferstream empfangen wurden. 

Wenn es sich bei der Quelle um einen Firehose-Lieferstream handelt, sieht das Eingabedatenmodell für Ereignisse wie folgt aus:

**Kinesis Data Firehose-Anforderungsdatenmodell**


| Feld | Description | 
| --- | --- | 
| Feld | Description | 
| --- | --- | 
| Feld | Description | 
| --- | --- | 
| invocationId | Die Lambda-Aufrufs-ID (zufällige GUID). | 
| applicationArn | Der Amazon-Ressourcenname (ARN) der Kinesis Data Analytics-Anwendung | 
| streamArn | ARN des Bereitstellungs-Streams | 
| Datensätze [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/lambda-preprocessing.html)  | 
| recordId | Datensatz-ID (zufällige GUID) | 
| kinesisFirehoseRecordMetadata |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/lambda-preprocessing.html)  | 
| data | Base64-kodierte Quell-Datensatz-Nutzlast | 
| approximateArrivalTimestamp | Ungefähre Ankunftszeit des Datensatzes des Bereitstellungs-Streams | 

Das folgende Beispiel zeigt die Eingabe aus einem Firehose-Bereitstellungs-Stream:

```
{
   "invocationId":"00540a87-5050-496a-84e4-e7d92bbaf5e2",
   "applicationArn":"arn:aws:kinesisanalytics:us-east-1:12345678911:application/lambda-test",
   "streamArn":"arn:aws:firehose:us-east-1:AAAAAAAAAAAA:deliverystream/lambda-test",
   "records":[
      {
         "recordId":"49572672223665514422805246926656954630972486059535892482",
         "data":"aGVsbG8gd29ybGQ=",
         "kinesisFirehoseRecordMetadata":{
            "approximateArrivalTimestamp":1520280173
         }
      }
   ]
}
```

Wenn die Quelle ein Kinesis-Datenstrom ist, ist dies das Ereignis-Eingabemodell:

**Kinesis-Streams-Anforderungsdatenmodell**


| Feld | Description | 
| --- | --- | 
| Feld | Description | 
| --- | --- | 
| Feld | Description | 
| --- | --- | 
| invocationId | Die Lambda-Aufrufs-ID (zufällige GUID). | 
| applicationArn | ARN der Kinesis-Data-Analytics-Anwendung | 
| streamArn | ARN des Bereitstellungs-Streams | 
| Datensätze [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/lambda-preprocessing.html)  | 
| recordId | Datensatz-ID basierend auf Kinesis-Datensatz-Sequenznummer | 
| kinesisStreamRecordMetadata |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/lambda-preprocessing.html)  | 
| data | Base64-kodierte Quell-Datensatz-Nutzlast | 
| sequenceNumber | Sequenznummern aus dem Kinesis-Stream-Datensatz | 
| partitionKey | Partitionsschlüssel aus dem Kinesis-Stream-Datensatz | 
| shardId | ShardId aus dem Kinesis-Stream-Datensatz | 
| approximateArrivalTimestamp | Ungefähre Ankunftszeit des Datensatzes des Bereitstellungs-Streams | 

Das folgende Beispiel zeigt die Eingabe aus einem Kinesis-Daten-Stream:

```
{
  "invocationId": "00540a87-5050-496a-84e4-e7d92bbaf5e2",
  "applicationArn": "arn:aws:kinesisanalytics:us-east-1:12345678911:application/lambda-test",
  "streamArn": "arn:aws:kinesis:us-east-1:AAAAAAAAAAAA:stream/lambda-test",
  "records": [
    {
      "recordId": "49572672223665514422805246926656954630972486059535892482",
      "data": "aGVsbG8gd29ybGQ=",
      "kinesisStreamRecordMetadata":{
            "shardId" :"shardId-000000000003",
            "partitionKey":"7400791606",
            "sequenceNumber":"49572672223665514422805246926656954630972486059535892482",
            "approximateArrivalTimestamp":1520280173
         }
    }
  ]
}
```

### Datensatz-Antwortmodell


Alle von Ihrer Lambda-Vorverarbeitungsfunktion (mit Datensatz IDs) zurückgegebenen Datensätze, die an die Lambda-Funktion gesendet werden, müssen zurückgegeben werden. Sie müssen die folgenden Parameter enthalten. Andernfalls weist Kinesis Data Analytics sie zurück und behandelt sie wie Vorverarbeitungsfehler. Die Datennutzlast des Datensatzes kann entsprechend den Vorverarbeitungsanforderungen umgewandelt werden.

**Antwortdatenmodell**


| Feld | Description | 
| --- | --- | 
| Datensätze [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/lambda-preprocessing.html)  | 
| recordId | Die Datensatz-ID wird während des Aufrufs von Kinesis Data Analytics an Lambda übertragen. Der transformierte Datensatz muss dieselbe Datensatz-ID enthalten. Jede fehlende Übereinstimmung zwischen der ID des ursprünglichen Datensatzes und der ID des transformierten Datensatzes wird als Datenvorverarbeitungsfehler behandelt. | 
| result | Der Status der Datentransformation des Datensatzes. Die möglichen Werte sind: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/lambda-preprocessing.html)  | 
| data | Die transformierte Datennutzlast nach der base64-Kodierung. Jede Datennutzlast kann mehrere JSON-Dokumente enthalten, wenn die Anwendung das JSON-Upload-Datenformat verwendet. Oder es können mehrere CSV-Zeilen (mit einem Zeilentrennzeichen in jede Zeile) enthalten sein, wenn die Anwendung das CSV-Upload-Datenformat verwendet. Der Kinesis Data Analytics-Service analysiert und verarbeitet Daten, die entweder aus mehreren JSON-Dokumenten bestehen oder mehrere CSV-Zeilen enthalten, innerhalb derselben Datennutzlast erfolgreich.  | 

Das folgende Beispiel zeigt die Ausgabe einer Lambda-Funktion:

```
{
  "records": [
    {
      "recordId": "49572672223665514422805246926656954630972486059535892482",
      "result": "Ok",
      "data": "SEVMTE8gV09STEQ="
    }
  ]
}
```

## Geläufige Datenverarbeitungsfehler


Dies sind die häufigsten Gründe, weshalb eine Vorverarbeitung fehlschlagen kann.
+ Nicht alle Datensätze (mit Datensatz IDs) in einem Batch, die an die Lambda-Funktion gesendet werden, werden an den Kinesis Data Analytics Analytics-Dienst zurückgegeben. 
+ In der Antwort fehlt entweder die Datensatz-ID, der Status oder das Feld der Datennutzlast. Das Feld der Datennutzlast ist für einen `Dropped`- oder `ProcessingFailed`-Datensatz optional.
+ Die Zeitüberschreitungen der Lambda-Funktion reichen nicht zur Vorverarbeitung der Daten aus.
+ Die Antwort der Lambda-Funktion überschreitet die durch den AWS Lambda -Service auferlegten Antwort-Limits.

Im Falle von Fehlern bei der Datenvorverarbeitung führt Kinesis Data Analytics Lambda-Aufrufe auf derselben Gruppe von Datensätzen erneut durch, bis der Aufruf erfolgreich ist. Sie können die folgenden CloudWatch Metriken überwachen, um Einblicke in Fehler zu erhalten.
+ Kinesis Data Analytics-Anwendung `MillisBehindLatest`: Gibt an, mit welcher zeitlichen Differenz eine Anwendung aus der Streaming-Quelle liest. 
+ Kinesis Data Analytics `InputPreprocessing` CloudWatch Analytics-Anwendungsmetriken: Zeigt unter anderem die Anzahl der Erfolge und Misserfolge an. Weitere Informationen finden Sie unter [Amazon-Kinesis-Analytics-Metriken](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aka-metricscollected.html).
+ AWS Lambda CloudWatch Funktionsmetriken und Protokolle.

# Erstellen von Lambda-Funktionen für die Vorverarbeitung


Ihre Amazon-Kinesis-Data-Analytics-Anwendung kann Lambda-Funktionen zur Vorverarbeitung von Datensätzen bei der Aufnahme in die Anwendung verwenden. Kinesis Data Analytics bietet in der Konsole die folgenden Vorlagen als Startpunkt für die Vorverarbeitung Ihrer Daten an.

**Topics**
+ [

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in Node.js
](#lambda-preprocessing-functions-nodejs)
+ [

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in Python
](#lambda-preprocessing-functions-python)
+ [

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in Java
](#lambda-preprocessing-functions-java)
+ [

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in .NET
](#lambda-preprocessing-functions-net)

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in Node.js


Die folgenden Vorlagen zum Erstellen einer Lambda-Funktion zur Vorverarbeitung in Node.js finden Sie in der Kinesis Data Analytics-Konsole:


| Lambda-Vorlage | Sprache und Version | Description | 
| --- | --- | --- | 
| Allgemeine Kinesis Analytics-Eingabeverarbeitung  | Node.js 6.10 |  Ein Kinesis Data Analytics-Datensatzvorprozessor, der JSON- oder CSV-Datensätze als Eingabe empfängt und diese dann mit einem Verarbeitungsstatus zurückgibt. Verwenden Sie diesen Prozessor als Startpunkt für benutzerdefinierte Transformationslogik.  | 
| Komprimierte Eingabeverarbeitung | Node.js 6.10 | Ein Kinesis Data Analytics-Datensatzprozessor der komprimierte JSON- oder CSV-Datensätze (GZIP- oder Deflate-komprimiert) als Eingabe empfängt und dekomprimierte Datensätze mit einem Verarbeitungsstatus zurückgibt. | 

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in Python


Die folgenden Vorlagen zum Erstellen einer Lambda-Funktion zur Vorverarbeitung in Python finden Sie in der Konsole:


| Lambda-Vorlage | Sprache und Version | Description | 
| --- | --- | --- | 
| Allgemeine Kinesis Analytics-Eingabeverarbeitung  | Python 2.7 |  Ein Kinesis Data Analytics-Datensatzvorprozessor, der JSON- oder CSV-Datensätze als Eingabe empfängt und diese dann mit einem Verarbeitungsstatus zurückgibt. Verwenden Sie diesen Prozessor als Startpunkt für benutzerdefinierte Transformationslogik.  | 
| KPL-Eingabeverarbeitung | Python 2.7 | Ein Kinesis Data Analytics-Datensatzprozessor der Kinesis Producer Library-(KPL)-Aggregate von JSON- oder CSV-Datensätzen als Eingabe empfängt und disaggregierte Datensätze mit einem Verarbeitungsstatus zurückgibt.  | 

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in Java


Zum Erstellen einer Lambda-Funktion zur Vorverarbeitung von Datensätzen in Java verwenden Sie die [Java-Events](https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events)-Klassen.

Der folgende Code zeigt das Beispiel einer Lambda-Funktion zur Vorverarbeitung mit Java:

```
public class LambdaFunctionHandler implements
        RequestHandler<KinesisAnalyticsStreamsInputPreprocessingEvent, KinesisAnalyticsInputPreprocessingResponse> {

    @Override
    public KinesisAnalyticsInputPreprocessingResponse handleRequest(
            KinesisAnalyticsStreamsInputPreprocessingEvent event, Context context) {
        context.getLogger().log("InvocatonId is : " + event.invocationId);
        context.getLogger().log("StreamArn is : " + event.streamArn);
        context.getLogger().log("ApplicationArn is : " + event.applicationArn);

        List<KinesisAnalyticsInputPreprocessingResponse.Record> records = new ArrayList<KinesisAnalyticsInputPreprocessingResponse.Record>();
        KinesisAnalyticsInputPreprocessingResponse response = new KinesisAnalyticsInputPreprocessingResponse(records);

        event.records.stream().forEach(record -> {
            context.getLogger().log("recordId is : " + record.recordId);
            context.getLogger().log("record aat is :" + record.kinesisStreamRecordMetadata.approximateArrivalTimestamp);
             // Add your record.data pre-processing logic here.                               
            // response.records.add(new Record(record.recordId, KinesisAnalyticsInputPreprocessingResult.Ok, <preprocessedrecordData>));
        });
        return response;
    }

}
```

## Erstellen einer Lambda-Funktion zur Vorverarbeitung in .NET


Zum Erstellen einer Lambda-Funktion zur Vorverarbeitung in .NET verwenden Sie die [.NET-Events](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents)-Klassen.

Der folgende Code zeigt das Beispiel einer Lambda-Funktion zur Vorverarbeitung von Datensätzen mit C\$1:

```
public class Function
    {
        public KinesisAnalyticsInputPreprocessingResponse FunctionHandler(KinesisAnalyticsStreamsInputPreprocessingEvent evnt, ILambdaContext context)
        {
            context.Logger.LogLine($"InvocationId: {evnt.InvocationId}");
            context.Logger.LogLine($"StreamArn: {evnt.StreamArn}");
            context.Logger.LogLine($"ApplicationArn: {evnt.ApplicationArn}");

            var response = new KinesisAnalyticsInputPreprocessingResponse
            {
                Records = new List<KinesisAnalyticsInputPreprocessingResponse.Record>()
            };

            foreach (var record in evnt.Records)
            {
                context.Logger.LogLine($"\tRecordId: {record.RecordId}");
                context.Logger.LogLine($"\tShardId: {record.RecordMetadata.ShardId}");
                context.Logger.LogLine($"\tPartitionKey: {record.RecordMetadata.PartitionKey}");
                context.Logger.LogLine($"\tRecord ApproximateArrivalTime: {record.RecordMetadata.ApproximateArrivalTimestamp}");
                context.Logger.LogLine($"\tData: {record.DecodeData()}");

                // Add your record preprocessig logic here.

                var preprocessedRecord = new KinesisAnalyticsInputPreprocessingResponse.Record
                {
                    RecordId = record.RecordId,
                    Result = KinesisAnalyticsInputPreprocessingResponse.OK
                };
                preprocessedRecord.EncodeData(record.DecodeData().ToUpperInvariant());
                response.Records.Add(preprocessedRecord);
            }
            return response;
        }
    }
```

Weitere Informationen zum Erstellen von Lambda-Funktionen für die Vorverarbeitung und Ziele in .NET finden Sie unter [https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents](https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.KinesisAnalyticsEvents).

# Parallelisieren von Eingabe-Streams zur Steigerung des Durchsatzes


**Anmerkung**  
Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie nicht bereits Kinesis Data Analytics for SQL. Weitere Informationen finden Sie unter [Limits](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html).

Amazon-Kinesis-Data-Analytics-Anwendungen können mehrere In-Application-Streams unterstützen, um eine Anwendung über den Durchsatz eines einzelnen In-Application-Eingabe-Streams hinaus zu skalieren. Weitere Informationen zu In-Application-Eingabe-Streams finden Sie unter [Amazon-Kinesis-Data-Analytics for SQL-Anwendungen: So funktioniert's](how-it-works.md).

In fast allen Fällen skaliert Amazon Kinesis Data Analytics Ihre Anwendung, um die Kapazität der Kinesis-Streams oder Firehose-Quellstreams zu bewältigen, die in Ihre Anwendung eingespeist werden. Wenn der Durchsatz Ihres Quell-Streams jedoch den Durchsatz eines einzelnen In-Application-Eingabe-Streams überschreitet, können Sie die Zahl der von Ihrer Anwendung verwendeten In-Application-Eingabe-Streams explizit erhöhen. Sie führen dies mithilfe des Parameters `InputParallelism` aus.

Wenn der Parameter `InputParallelism` größer als eins ist, teilt Amazon-Kinesis-Data-Analytics die Partitionen Ihres Quell-Streams gleichmäßig auf die In-Application-Streams auf. Wenn Ihr Quell-Stream beispielsweise über 50 Shards verfügt und Sie `InputParallelism` auf `2` festgelegt haben, erhält jeder In-Application-Eingabe-Stream die Eingabe von 25 Quell-Stream-Shards. 

Wenn Sie die Zahl der In-Application-Streams erhöhen, muss Ihre Anwendung auf die Daten in jedem Stream explizit zugreifen. Weitere Informationen zum Zugriff auf mehrere In-Application-Streams in Ihrem Code finden Sie unter [Zugriff auf getrennte In-Application-Streams in Ihrer Amazon-Kinesis-Data-Analytics-Anwendung](#input-parallelism-code-example).

Kinesis Data Streams und Firehose-Stream-Shards sind zwar beide auf dieselbe Weise auf anwendungsinterne Streams aufgeteilt, unterscheiden sich jedoch darin, wie sie Ihrer Anwendung angezeigt werden:
+ Die Datensätze aus einem Kinesis-Datenstrom enthalten ein `shard_id`-Feld, über das der Quell-Shard des Datensatzes identifiziert werden kann.
+ Die Datensätze aus einem Firehose-Lieferstream enthalten kein Feld, das den Quell-Shard oder die Quellpartition des Datensatzes identifiziert. Dies liegt daran, dass Firehose diese Informationen aus Ihrer Anwendung abstrahiert.

## Testen, ob die Zahl der In-Application-Eingabe-Streams erhöht werden sollte


In der Mehrzahl der Fälle kann ein einzelner In-Application-Eingabe-Stream den Durchsatz eines einzelnen Quell-Streams verarbeiten, abhängig von Komplexität und Größe der Eingabe-Streams. Um festzustellen, ob Sie die Anzahl der In-Application-Input-Streams erhöhen müssen, können Sie die `InputBytes` und `MillisBehindLatest` -Metriken in Amazon CloudWatch überwachen. 

Wenn die `InputBytes` Kennzahl größer als 100 ist MB/sec (oder Sie erwarten, dass sie diese Rate übersteigen wird), kann dies zu einer Zunahme `MillisBehindLatest` und Erhöhung der Auswirkungen von Anwendungsproblemen führen. Um dies zu Adressieren, empfehlen wir die folgenden Sprachauswahl für Ihre Anwendung:
+ Verwenden Sie mehrere Streams und Kinesis-Data-Analytics-for-SQL-Anwendungen, wenn die Skalierungsanforderungen Ihrer Anwendung 100 MB/Sekunde überschreiten.
+ Verwenden Sie [Kinesis Data Analytics for Java-Anwendungen](/managed-flink/latest/java/what-is.html), wenn Sie einen einzelnen Stream und eine einzelne Anwendung verwenden möchten.

Wenn die `MillisBehindLatest`-Metrik eines der folgenden Merkmale aufweist, sollten Sie die `InputParallelism`-Einstellung Ihrer Anwendung erhöhen:
+ Die `MillisBehindLatest`-Metrik steigt schrittweise an. Das bedeutet, dass Ihre Anwendung hinter die neuesten Daten im Stream zurückfällt.
+ Die `MillisBehindLatest`-Metrik liegt konsistent über 1000 (eine Sekunde).

Sie müssen die `InputParallelism`-Einstellung Ihrer Anwendung nicht erhöhen, wenn Folgendes zutrifft:
+ Die `MillisBehindLatest`-Metrik nimmt schrittweise ab. Das bedeutet, dass Ihre Anwendung zu den neuesten Daten im Stream aufholt.
+ Die `MillisBehindLatest`-Metrik liegt unter 1000 (eine Sekunde).

Weitere Informationen zur Verwendung CloudWatch finden Sie im [CloudWatch Benutzerhandbuch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/).

## Implementieren mehrerer In-Application-Eingabe-Streams


Sie können beim Erstellen einer Anwendung die Anzahl der In-Application-Eingabe-Streams mittels [CreateApplication](API_CreateApplication.md) festlegen. Nach der Erstellung einer Anwendung legen Sie diese Zahl mittels [UpdateApplication](API_UpdateApplication.md) fest. 

**Anmerkung**  
Sie können die `InputParallelism`-Einstellung nur mithilfe der Amazon-Kinesis-Data-Analytics-API oder der AWS CLI festlegen. Sie können diese Einstellung nicht mit dem festlegen AWS-Managementkonsole. Informationen zur Einrichtung von finden Sie AWS CLI unter[Schritt 2: Richten Sie das AWS Command Line Interface ()AWS CLI ein](setup-awscli.md).

### Festlegen der Zahl der Eingabe-Streams für eine neue Anwendung


Im folgenden Beispiel wird gezeigt, wie Sie mit der API-Aktion `CreateApplication` die Zahl der Eingabe-Streams einer neuen Anwendung auf 2 festzulegen. 

Mehr über `CreateApplication` erfahren Sie unter [CreateApplication](API_CreateApplication.md).

```
{
   "ApplicationCode": "<The SQL code the new application will run on the input stream>",
   "ApplicationDescription": "<A friendly description for the new application>",
   "ApplicationName": "<The name for the new application>",
   "Inputs": [ 
    { 
      "InputId": "ID for the new input stream",
      "InputParallelism": { 
        "Count": 2
    }],
   "Outputs": [ ... ],
	}]
}
```

### Festlegen der Zahl der Eingabe-Streams für eine vorhandene Anwendung


Im folgenden Beispiel wird gezeigt, wie Sie mit der API-Aktion `UpdateApplication` die Zahl der Eingabe-Streams einer vorhandenen Anwendung auf 2 festzulegen.

Mehr über `Update_Application` erfahren Sie unter [UpdateApplication](API_UpdateApplication.md).

```
{
   "InputUpdates": [ 
      { 
         "InputId": "yourInputId",
         "InputParallelismUpdate": { 
            "CountUpdate": 2
         }
      }
   ],
}
```

## Zugriff auf getrennte In-Application-Streams in Ihrer Amazon-Kinesis-Data-Analytics-Anwendung


Um mehrere In-Application-Eingabe-Streams in Ihrer Anwendung zu verwenden, müssen Sie diese explizit aus den verschiedenen Streams auswählen. Das folgende Codebeispiel zeigt, wie Sie mehrere Eingabe-Streams in der Anwendung abfragen, die Sie in der Einführungsübung erstellt haben. 

Im folgenden Beispiel werden die einzelnen Quell-Streams zunächst mittels [COUNT](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-count.html) zusammengefasst, bevor sie zu einem einzelnen In-Application-Stream mit dem Namen `in_application_stream001` kombiniert werden. Die Zusammenfassung der Quell-Streams im Voraus hilft, sicherzustellen, dass der kombinierte In-Application-Stream den Datenverkehr aus mehreren Streams verarbeiten kann, ohne überlastet zu werden. 

**Anmerkung**  
Um dieses Beispiel auszuführen und Ergebnisse aus beiden In-Application-Eingabe-Streams zu erhalten, müssen Sie die Anzahl der Shards in Ihrem Quell-Stream und den Parameter `InputParallelism` in Ihrer Anwendung aktualisieren.

```
CREATE OR REPLACE STREAM in_application_stream_001 (
    ticker VARCHAR(64),
    ticker_count INTEGER
);

CREATE OR REPLACE PUMP pump001 AS 
INSERT INTO in_application_stream_001
SELECT STREAM ticker_symbol, COUNT(ticker_symbol)
FROM source_sql_stream_001
GROUP BY STEP(source_sql_stream_001.rowtime BY INTERVAL '60' SECOND),
    ticker_symbol; 
        
CREATE OR REPLACE PUMP pump002 AS 
INSERT INTO in_application_stream_001
SELECT STREAM ticker_symbol, COUNT(ticker_symbol)
FROM source_sql_stream_002
GROUP BY STEP(source_sql_stream_002.rowtime BY INTERVAL '60' SECOND),
    ticker_symbol;
```

Das vorherige Codebeispiel produziert im `in_application_stream001` eine Ausgabe ähnlich der folgenden:

![\[Table showing ROWTIME, TICKER, and TICKER_COUNT columns with sample data entries.\]](http://docs.aws.amazon.com/de_de/kinesisanalytics/latest/dev/images/input-parallelism-results.png)


## Weitere Überlegungen


Beachten Sie Folgendes, wenn Sie mehrere Eingabe-Streams verwenden:
+ Die maximale Anzahl der In-Application-Streams ist 64.
+ Die In-Application-Eingabe-Streams werden gleichmäßig auf die Shards des Eingabe-Streams der Anwendung aufgeteilt.
+ Die Leistung wird durch das Hinzufügen von In-Application-Streams nicht linear skaliert. Das bedeutet, dass eine Verdopplung der Anzahl der In-Application-Streams nicht den Durchsatz verdoppelt. Bei einer typischen Zeilengröße kann jeder In-Application-Stream einen Durchsatz von ungefähr 5.000 bis 15.000 Zeilen pro Sekunde erreichen. Durch die Erhöhung der Zahl der In-Application-Streams auf 10 können Sie einen Durchsatz von 20.000 bis 30.000 Zeilen pro Sekunde erreichen. Die Durchsatzgeschwindigkeit ist von der Zahl, den Datentypen und der Datengröße der Felder im Eingabe-Stream abhängig.
+ Einige Zusammenfassungsfunktionen (wie [AVG](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sql-reference-avg.html)) können zu unerwarteten Ergebnissen führen, wenn sie auf in verschiedene Shards aufgeteilte Eingabe-Streams angewendet werden. Da Sie die Zusammenfassungsoperation vor der Zusammenfassung zu einem einzelnen Stream auf einzelnen Shards ausführen müssen, werden die Ergebnisse möglicherweise in Richtung auf den Stream gewichtet, der eine größere Zahl von Datensätzen enthält.
+ Wenn Ihre Anwendung weiterhin eine schlechte Leistung aufweist (was sich in einer hohen `MillisBehindLatest` Metrik widerspiegelt), nachdem Sie die Anzahl der Eingabestreams erhöht haben, haben Sie möglicherweise Ihr Limit an Kinesis Processing Units (KPUs) erreicht. Weitere Informationen finden Sie unter [Automatisches Skalieren von Anwendungen zur Erhöhung des Durchsatzes](how-it-works-autoscaling.md).