Datensatzarchitektur in einem Qlik Open Lakehouse
Wenn Sie Datensätze in einem Qlik Open Lakehouse generieren, werden Speichertabellen, Änderungstabellen und Ansichten automatisch von Qlik Talend Data Integration generiert. Sie können diese Ansichten abfragen, um auf aktuelle und historische Daten zuzugreifen, die im offenen Iceberg-Tabellenformat gespeichert sind.
Eine intuitive und geführte Benutzeroberfläche unterstützt Sie bei der Erstellung, Modellierung und Ausführung von Daten-Pipelines. Sie können automatisch Schemas für Operational Data Stores (ODS) und Historical Data Stores (HDS) ohne manuelle Codierung generieren.
Architektur für eine Qlik Open Lakehouse-Daten-Pipeline unter Verwendung von Qlik Data Gateway – Datenbewegung. Die Daten werden in S3 bereitgestellt und in einem Iceberg Open Lakehouse gespeichert. Optional können die Tabellen, wie unten gezeigt, in einem Data Warehouse gespiegelt werden.

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, 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.
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 in die Partition „Current“ übernommen wurden.
Dies ermöglicht einen vollständigen Einblick in die Synchronisierungs-Pipeline und hilft bei der Überwachung oder Fehlerbehebung bei Verzögerungen.
-
-
Partition „Current“ (ODS): Neuestes Replikat der Quelle
Änderungen aus der Partition „Changes“ werden regelmäßig in die Partition „Current“ übernommen, 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 „Aktuell“ entfernt wurde, z. B. aufgrund einer neueren Version. |