Datensatzarchitektur in einem Qlik Open Lakehouse
Streaming-Quellen haben ihre eigene Architektur in Qlik Open Lakehouse, da sie nicht das Data Movement Gateway benötigen, um Daten in den Bereitstellungs-Bucket zu laden, sondern vom Lakehouse-Cluster betrieben werden.
Wenn Sie Daten aus Dateien einlesen, die ein Datenmuster im Dateinamen enthalten, ermöglicht dies dem Lakehouse-Cluster, gezielte Listenoperationen in S3 durchzuführen, was die Zeit zum Lesen der Dateiliste drastisch beschleunigt. Darüber hinaus kann Qlik Open Lakehouse ankommende Dateien basierend auf dem Datumsmuster vorhersagen. Die Streaming-Bereitstellungsaufgabe muss nicht jedes Mal den gesamten Bucket auflisten, sondern kann stattdessen die Dateien von S3 innerhalb eines bestimmten Datumsbereichs anfordern. Eine kleinere Dateiliste führt zu einer besseren Leistung. Die optionale Einstellung Nach dem Laden löschen kann verwendet werden, um eine geringe Dateianzahl beizubehalten. Es wird kein vollständiges Laden durchgeführt und die ersten Datensätze werden als eingefügte Änderungen betrachtet.
In einem Qlik Open Lakehouse ersetzt die Streaming-Umwandlungsaufgabe die Speicheraufgabe. Diese Aufgabe wird verwendet, um bereitgestellte Daten umzuwandeln und als Iceberg-Tabellen zu speichern. Eine Streaming-Umwandlungsaufgabe kann nur nach einer Streaming-Bereitstellungsaufgabe hinzugefügt werden. Die Streaming-Umwandlungsaufgabe unterstützt zwei Modi zum Aktualisieren von Datensätzen:
- Nur anhängen: Fügt neue Datensätze hinzu, ohne vorhandene Daten zu ändern, und Schlüsselbeschränkungen werden nicht erzwungen, wenn doppelte Datensätze eintreffen.
-
Änderungen anwenden (Zusammenführen): Aktualisiert vorhandene Datensätze und fügt neue Datensätze basierend auf Schlüsselfeldern ein. Dieser Modus bietet Ihnen die Option, vorläufiges Löschen zu verwenden oder Verlaufsdaten (Typ 2) beizubehalten.
Die Streaming-Umwandlungsaufgabe ist eine zielbasierte Aufgabe, die zwischen Quelle und Ziel zuordnet und Schemaentwicklungsfunktionen umfasst. Sie bietet erweiterte Umwandlungsfunktionen, einschließlich des Entschachtelns verschachtelter Strukturen und des Reduzierens von Arrays. Weitere Informationen zu den Funktionen, die Sie in der Streaming-Umwandlungsaufgabe verwenden können, finden Sie unter Umwandlungsfunktionen.
Wenn Sie Daten aus einer Streaming-Quelle einlesen, können Sie die Iceberg-Partitionierung, das Beibehaltungsmanagement, die Spaltensortierung und die Schnappschuss-Ablaufzeit konfigurieren, um Speicherkosten zu kontrollieren und die Abfrageleistung zu optimieren.
Architektur für eine Qlik Open Lakehouse-Streaming-Datenpipeline im „Nur anhängen“-Modus

Architektur für eine Qlik Open Lakehouse-Streaming-Datenpipeline im „Zusammenführen“-Modus

Bereitstellungstabellen
Die folgenden Kopfzeilenfelder werden zu den Bereitstellungstabellen hinzugefügt. Diese Felder existieren immer in Bereitstellungsdaten, aber standardmäßig nicht in der nachgelagerten Umwandlung. Sie können die Felder mithilfe einer Formel zur Umwandlung hinzufügen.
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__kafka_partition | Lang | Kafka-Partition |
| hdr__kafka_topic | String | Kafka-Thema |
| hdr__kafka_offset | Lang | Laufender Wert in Partition |
| hdr__kafka_key | String | Base64-codierter Schlüssel. Auf NULL-String setzen, falls nicht verfügbar. |
| hdr__kafka_headers | String |
JSON mit allen Nachrichtenkopfzeilen. Auf NULL-String setzen, falls nicht verfügbar. |
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__kinesis_stream | String | Amazon Kinesis-Stream |
| hdr__kinesis_shard | String | Amazon Kinesis-Shard |
| hdr__kinesis_offset | String | Amazon Kinesis-Versatz |
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__file_name | String | Dateiname |
| hdr__file_size | Lang | Dateigröße in Byte. |
Schemas
Artefakte werden in einem internen Schema und einem Datenaufgabenschema generiert.
-
Das interne Schema enthält eine physische Tabelle mit mehreren Partitionen.
-
Das Datenaufgabenschema enthält die Ansichten, die Sie für die Nutzung der Daten verwenden können.
Wenn ein Schema mit mehr als einer Datenaufgabe verknüpft ist, muss jede Datenaufgabe ein eindeutiges Präfix für Tabellen und Ansichten verwenden. Sie können das Präfix in den Datenaufgabeneinstellungen festlegen.
Es werden nur interne Schemas für Benennungskonflikte geprüft. Bei anderen Schemas müssen Sie sicherstellen, dass keine Benennungskonflikte in den Tabellennamen bestehen. Die optimale Vorgehensweise ist die Benennung des internen Schemas mit dem gleichen Namen wie das Datenaufgabenschema, aber mit dem Namenszusatz _internal. Dadurch wird sichergestellt, dass jede Schema-Präfix-Kombination eindeutig ist.
Tabellen
Für jede Quelltabelle wird eine Tabelle im internen Schema mit dem Suffix _internal erstellt, wobei das folgende Format verwendet wird:
<INTERNAL_SCHEMA>.<TABLE_NAME>_internal
Diese Tabelle enthält fünf Partitionen in Änderungen anwenden (Zusammenführen), die jeweils einen bestimmten Zweck bei der Verarbeitung und Speicherung der Daten erfüllen. Jede Partition nutzt eine Teilmenge der Tabellenspalten entsprechend ihrer Rolle im Lebenszyklus der Daten. Im Nur anhängen-Modus hat die Tabelle keine Partitionen und verhält sich wie die Current-Partition (ODS).
Der interne Datensatz ist so strukturiert, dass eingehende Daten aus Ihrem Quellsystem effizient verwaltet werden können. Er unterstützt das Einlesen in Echtzeit und eine Verlaufsverfolgung. Der Datenfluss wird über mehrere spezialisierte Partitionen verwaltet, die im Folgenden beschrieben werden:
-
Partition Changes: Einlesen in Echtzeit
Alle Änderungen aus dem Quellsystem – Einfügungen, Aktualisierungen und Löschungen – werden zunächst an die Partition Changes angehängt.
-
Die Partition fungiert als unbearbeitetes Änderungsprotokoll und liefert einen vollständigen Überblick über die Quellaktivität, bevor irgendwelche Umwandlungen stattfinden.
-
Jede Änderung ist mit einem Typ (I, U oder D) gekennzeichnet, der angibt, wie sie verarbeitet wird.
-
Ereignisse werden in der Quelle erfasst, sobald sie auftreten. Die Partition wird nahezu in Echtzeit aktualisiert.
-
Die Partition Changes ist verfügbar, wenn die folgenden Einstellungen auf die Lake-Bereitstellungsdatenaufgabe angewendet wurden.
-
Auf der Registerkarte Allgemein ist die Aktualisierungsmethode auf CDC festgelegt.
-
Vollständiges Laden ist aktiviert.
-
-
-
Partition Asset_state: Verfolgen des Fortschritts
Wenn Änderungen eingelesen werden, protokolliert die Partition Asset_state zwei wichtige Zeitstempel:
-
Wann die Änderungen zuletzt an die Partition Changes angehängt wurden.
-
Wann die Änderungen zuletzt auf die Partition Current angewendet wurden.
Dies ermöglicht einen vollständigen Einblick in die Synchronisierungs-Pipeline und hilft bei der Überwachung oder Fehlerbehebung bei Verzögerungen.
-
-
Partition Current: Neuestes Replikat der Quelle
Änderungen aus der Partition Changes werden regelmäßig auf die Partition Current angewendet, um eine aktuelle, für Abfragen optimierte Kopie der Quelldaten zu erhalten.
-
Eine Hintergrundaufgabe wird automatisch ausgeführt, um diese Aktualisierungen zu übernehmen. Dieser Vorgang basiert auf dem Volumen der kumulierten Änderungen und nicht auf einem festen Zeitplan.
-
Der anfängliche vollständige Ladevorgang wird direkt in die Partition Current geschrieben.
-
Diese Partition spiegelt den aktuellen Zustand der Daten wider und ist für effiziente Abfragen konzipiert.
-
-
Partition Prior (HDS): Verlaufsdaten
Wenn ein Datensatz in der Partition Current aktualisiert oder gelöscht wird, wird eine Kopie der vorherigen Version in die Partition Prior geschrieben.
-
Datensätze enthalten Metadaten, einschließlich des Änderungsverlaufs und des Datumsbereichs, in dem die Daten gültig sind.
-
Sich langsam ändernde Dimensionen des Typs 2 (SCD2) werden unterstützt.
-
Die Partition Prior ist verfügbar, wenn die Option Verlaufsdatensätze und Änderungsdatensatzarchiv aufbewahren auf der Registerkarte Allgemein in den Einstellungen der Speicherdatenaufgabe aktiviert ist.
-
Wenn eine aktualisierte Version eines Datensatzes in die Partition Current aufgenommen wird, wird der vorherige Datensatz zur Nachverfolgung in die Partition Prior verschoben.
-
-
Partition Reload
Die Partition Reload dient als temporärer Bereitstellungsbereich bei manuellen oder geplanten vollständigen Ladevorgängen:
-
Neue Daten werden zuerst in die Partition Reload geschrieben.
-
Regelmäßige Wartungsaufgaben löschen alle ausstehenden Änderungen, bevor sie pausiert werden.
-
Die Daten werden mit der Partition Current verglichen, und nur die Unterschiede werden in die Partition Current verschoben.
-
Die Partition Reload wird gelöscht, wenn der Vorgang abgeschlossen ist.
Dieser Prozess gewährleistet eine minimale Unterbrechung des Hauptdatensatzes während des vollständigen Ladevorgangs.
-
Partition Current
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | Hash aller primären Schlüssel des Datensatzes. Das Hash-Format ist SHA1. Spalten werden durch ein Rücktastenzeichen getrennt. |
| hdr__from_timestamp | TIMESTAMP |
Zeitstempel in UTC:
|
| hdr__operation | VARCHAR (1) |
Neuester Vorgang dieses Datensatzes.
|
| hdr__inserted_timestamp | TIMESTAMP | UTC-Zeitstempel des ersten Zeitpunkts, zu dem der Schlüssel hinzugefügt wurde. Bei Verwendung des vollständigen Ladens ist dies die Startzeit des vollständigen Ladens. |
| hdr__modified_timestamp | TIMESTAMP | UTC-Zeitstempel, wann die letzte Aktualisierung vorgenommen wurde. |
Partition Prior
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__key_hash | VARBINARY (20) | Hash aller primären Schlüssel des Datensatzes. |
| hdr__from_timestamp | TIMESTAMP | Zeitstempel in UTC. |
| hdr__to_timestamp | TIMESTAMP | Zeitstempel in UTC. |
| hdr__operation | STRING (1) |
Neuester Vorgang dieses Datensatzes.
|
| hdr__was_current_from_timestamp | TIMESTAMP | Zeitstempel in UTC für den ersten Zeitpunkt, zu dem der Datensatz aktuell war. |
| hdr__was_current_to_timestamp | TIMESTAMP | Zeitstempel in UTC für den letzten Zeitpunkt, zu dem der Datensatz aktuell war. |
Partition Changes
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__change_identifier | VARCHAR (50) |
Die Änderungskennung ist eine Zeichenkette mit zwei Teilen:
|
| hdr__operation | VARCHAR (1) |
Neuester Vorgang dieses Datensatzes.
|
| hdr__timestamp | TIMESTAMP | Zeitstempel in UTC. |
| hdr__key_hash | BINARY (20) | Hash aller primären Schlüssel des Datensatzes. |
| hdr__inserted_timestamp | TIMESTAMP | UTC-Zeitstempel des Zeitpunkts, zu dem die Änderung von Qlik verarbeitet wurde. |
Partition Asset_state
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__apply_change_identifier | VARCHAR (50) | Der Änderungsbezeichner der letzten Änderung, die auf die Partition Current angewendet wurde. |
| hdr__copy_change_identifier | VARCHAR (50) | Der Änderungsbezeichner der letzten Änderung, die an die Partition Changes angehängt wurde. |
Partition Reload
Die von der Partition Reload verwendeten Spalten sind identisch mit denen der Partition Current.
Aufrufe
Alle erstellten Ansichten werden nahezu in Echtzeit aktualisiert. Die folgenden Ansichten sind verfügbar, um Abfragen und Berichte zu vereinfachen:
Aktuell
Die Ansicht „Aktuell“ spiegelt den letzten Stand der Daten wider. Diese Ansicht stellt ein Replikat der Quelltabelle dar, das nahezu in Echtzeit aktualisiert wird. Sie führt die Daten aus den Partitionen Current und Changes zusammen.
Name: <EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>
Es werden keine Kopfzeilenspalten zur Tabellenstruktur hinzugefügt.
Verlauf
Eine Ansicht „Verlauf“ wird im Datenobjektschema für jede ausgewählte Quelltabelle generiert, wenn Verlauf in den Datenaufgabeneinstellungen aktiviert ist. Die Ansicht „Verlauf“ führt die Daten aus den Partitionen Prior und Changes zusammen. Sie bietet einen vollständigen zeitlichen Verlauf der Änderungen, ideal für Audits oder Verlaufsanalysen.
Name: <EXTERNAL_SCHEMA>.[<PREFIX>]<TABLE_NAME>_<Suffix for history views>
Die folgenden Kopfzeilenfelder werden zur Ansicht „Verlauf“ hinzugefügt.
| Feld | Typ | Beschreibung |
|---|---|---|
| hdr__key_hash | BINARY (20) | Hash aller primären Schlüssel des Datensatzes. |
| hdr__from_timestamp | TIMESTAMP | Der Zeitstempel, an dem die Änderung im Quellsystem vorgenommen wurde. Dies zeigt an, wann der Benutzer die Änderung ursprünglich vorgenommen hat. |
| hdr__to_timestamp | TIMESTAMP | Der Zeitstempel, an dem die Änderung im Quellsystem rückgängig gemacht oder aktualisiert wurde. |
| hdr__store | VARCHAR (10) |
Hier wird angegeben, wo sich der Datensatz befindet:
|
| hdr__operation | STRING (1) |
Neuester Vorgang dieses Datensatzes.
|
| hdr__deleted | BIT | Hier wird auf der Grundlage, ob hdr__operation auf D oder d steht, angegeben, ob der Datensatz vorläufig gelöscht wird. |
| hdr__was_current_from_timestamp | TIMESTAMP | Die Uhrzeit (UTC), zu der diese Zeile in die Partition Current aufgenommen wurde. Dies ist in der Regel der Zeitpunkt, an dem der Speicherauftrag ausgeführt und die Änderung übernommen wurde. |
| hdr__was_current_to_timestamp | TIMESTAMP | Die Uhrzeit (UTC), zu der die Zeile aus der Tabelle Current entfernt wurde, z. B. aufgrund einer neueren Version. |