Verbinding maken met datastreams
De volgende streamingservices worden ondersteund in Qlik Open Lakehouse projecten. Gegevens van gebeurtenissen worden continu opgenomen om bijna realtime beschikbaarheid te garanderen voor downstream-gegevensintegratie, -analyse en AI, waardoor pijplijnen met lage latentie mogelijk worden die de meest actuele operationele activiteit weerspiegelen.
Streamingservices zoals Apache Kafka en Amazon Kinesis bieden duurzame pijplijnen met hoge doorvoer voor het vastleggen van operationele gebeurtenissen zodra deze zich voordoen. In tegenstelling tot bestandsgebaseerde bronnen die afhankelijk zijn van batchopname, leveren streamingbronnen continu gegevens naarmate gebeurtenissen worden geproduceerd, waardoor bijna realtime verwerking mogelijk is zonder te wachten tot bestanden worden gegenereerd of gepland. Producenten publiceren gestructureerde of semi-gestructureerde berichten die hun schema behouden en partitionering ondersteunen. Alle updates en verwijderingen voor dezelfde record moeten dezelfde partitiesleutel gebruiken. Kafka en Kinesis garanderen de volgorde alleen binnen één partitie of shard, niet over het hele onderwerp of de hele stream, dus het gebruik van een consistente partitiesleutel zorgt ervoor dat wijzigingen voor een bepaalde record in de juiste volgorde worden verwerkt. Qlik ondersteunt ook Amazon S3 als een streamingbron voor het continu opnemen van gebeurtenisgegevens.
Streaming-opname versus batch-opname
Het verschil tussen streaming- en batchgegevensbronnen is als volgt:
-
Met beide bronnen worden gebeurtenissen elke minuut efficiënt opgenomen, wat verwerking met lage latentie en bijna-realtime analyses ondersteunt.
-
Bij niet-streamingbronnen vindt eerst een volledige lading van de bestaande gegevens plaats en worden daarna wijzigingen opgenomen. U kunt ook de volledige lading gegevens opnieuw laden vanuit de bron.
-
Bij streamingbronnen is er geen duidelijk onderscheid tussen de initiële lading en latere gebeurtenissen. Qlik kan retentie beheren en ondersteunt ook partities.
In een Qlik Open Lakehouse project kunnen streamingbronnen alleen worden gebruikt met de Streaming tussenopslagtaak en de Streaming transformatietaak:
-
Streaminggegevens worden opgenomen met behulp van een Streaming tussenopslagtaak en in plaats van discrete bestanden te verwerken, leest de Streaming tussenopslagtaak gebeurtenissen zodra deze binnenkomen, plaatst de gegevens in Amazon S3 en bewaart gebeurtenissen als Avro-bestanden. Deze aanpak behoudt schema-evolutie, ondersteunt complexe gegevenstypen zoals structs, en biedt efficiënte opslag met geoptimaliseerde queryprestaties, terwijl een continu opnamemodel wordt gehandhaafd.
-
Wanneer u gegevens van een streamingbron inlaadt, wordt automatisch een Streaming-transformatie taak toegevoegd voor elke dataset die in Iceberg-indeling wordt opgeslagen. Optioneel kan de Streaming-transformatie taak worden gebruikt om structuren te standaardiseren, event-payloads te verrijken of gegevens af te stemmen op downstream-consumptiemodellen.
-
Een Gegevensspiegeltaak maakt het mogelijk om datasets van streamingbronnen te spiegelen naar clouddatawarehouses, zodat downstream-systemen streaming-events kunnen verbruiken zonder gegevens te dupliceren.Ga voor meer informatie naar Gegevens spiegelen naar een clouddatawarehouse.
Toewijzingen van gegevenstypen
Het initiële bronschema is gebaseerd op een steekproef van de gegevens die vóór de PREPARE-fase is genomen bij het maken van uw pijplijnproject, en schema-evolutie wordt afgehandeld tijdens het lezen. Spiegeltaken en andere downstream-taken die STRUCT en ARRAY niet ondersteunen, gebruiken een JSON-type. Gegevens kunnen worden geparseerd met SQL.
De volgende toewijzingen van gegevenstypen zijn van toepassing op alle ondersteunde gegevensbronnen, maar variëren afhankelijk van het type bronbestand, en het volgende moet worden opgemerkt:
-
Gegevenstypen worden afgeleid uit een voorbeeld van de gegevens die worden ingeladen. Als een veld bijvoorbeeld alleen gehele getallen bevat in het voorbeeld, wordt het gemaakt als INT8 in de streaming tussenopslag- en transformatietaken. Als latere gegevens dubbele-precisie fractionele waarden bevatten, bevatten de tussenopslagbestanden die waarden; echter, in de Streaming transformatietaak, als de instelling Gegevenstype veld wijzigen is ingesteld op Negeren, blijft de kolom INT8 en worden de fractionele waarden afgekapt. Om onbedoelde afkapping te voorkomen, moet u ervoor zorgen dat de voorbeeldgegevens het volledige bereik van verwachte waarden bevatten voordat u ze onboardt, of configureer Gegevenstype veld wijzigen naar Taak stoppen tijdens de vroege stadia en pas de gegevenstypen indien nodig aan.
-
Als een veld wordt toegevoegd aan een struct in de bron, wordt het altijd toegevoegd aan de tussenopslagdoel. Voor streamingtransformatie wordt het gedrag toegepast volgens de optie die is gekozen in Instellingen streamingtransformatie > Schema-evolutie > Velden toevoegen aan struct (Toepassen op doel, Negeren, Taak stoppen).
-
Als een veld ontbreekt in een specifiek record, of een array leeg is, worden ze behandeld als null.
-
Als een dataset wordt afgevlakt door een array, en er komt een record binnen waarbij die array leeg of null is, maakt het systeem één rij aan en is het afgevlakte veld null. Het wordt niet automatisch uitgesloten. Als u deze rijen wilt uitsluiten, voegt u handmatig een filter toe, bijvoorbeeld, array_element IS NOT NULL.
-
De gegevenstypen die in de gebruikersinterface worden weergegeven, weerspiegelen de granulariteit van de geselecteerde gegevensverzameling. Voor platgemaakte reeksen wordt het gegevenstype van het afzonderlijke element getoond, in plaats van de reeksstructuur zelf.
-
Een nieuw kenmerk kan niet worden toegevoegd binnen een structuur in een genest JSON-veld, alleen op het hoofdniveau.
-
In streaming transformatietaken wordt afvlakking alleen ondersteund voor één niveau van een array. Wanneer afvlakken wordt toegepast op een array met meerdere niveaus, bijvoorbeeld ARRAY<ARRAY<STRUCT>>, wordt alleen de buitenste array afgevlakt, wat resulteert in ARRAY<STRUCT> in plaats van een volledig afgevlakte STRUCT. Bovendien kan de huidige gebruikersinterface afvlakking alleen op kolomniveau configureren. Als gevolg hiervan past het selecteren van een array met meerdere niveaus impliciet afvlakking toe op alleen het eerste arrayniveau.
JSON
In JSON-bestanden bepaalt de numerieke waarde in de bron het doelgegevenstype:
-
INT8 wordt gebruikt voor gehele getallen die binnen het ondersteunde gehele getallenbereik passen en geen fractioneel deel bevatten.
-
REAL8 (DOUBLE) wordt gebruikt wanneer de waarde een fractioneel deel (zwevendekommagetal) bevat.
-
STRING wordt gebruikt wanneer de numerieke waarde het maximaal ondersteunde gehele getallenbereik overschrijdt.
Gegevenstypen worden als volgt toegewezen:
| Brongegevenstypen | Qlik Talend Data Integration gegevenstypen |
|---|---|
| TEKENREEKS | TEKENREEKS |
| Getal | INT8 |
| Getal | REAL8 |
| Getal | TEKENREEKS |
| BOOLEAANSE WAARDE | BOOLEAANSE WAARDE |
| ARRAY | ARRAY |
| OBJECT | STRUCT |
CSV, TSV, REGEX en SPLIT
Standaard worden alle brondatatypen opgenomen als een tekenreeks. Gebruik de optie, Typen automatisch afleiden, om bron- en doeltypen als volgt toe te wijzen:
| Brongegevenstypen | Qlik gegevenstypen |
|---|---|
| NUMERIEK | INT8/REAL8 |
| True/TRUE/true/False/FALSE/false | BOOLEAANSE WAARDE |
| TIMESTAMP | Tijdstempels in de indeling yyyy-MM-dd HH:mm:ss of yyyy-MM-ddTHH:mm:ssz worden geparseerd naar een datum/tijd-type. Als een tijdzone is opgenomen, wordt de waarde geparseerd als een string. |
Parquet
Parquet-bestanden ondersteunen fysieke en logische gegevenstypen. Fysieke gegevenstypen definiëren hoe waarden op schijf worden opgeslagen, zoals INT32, DOUBLE of BYTE_ARRAY. Logische gegevenstypen bieden semantische betekenis bovenop de fysieke representatie, bijvoorbeeld door te identificeren of een geheel getal een datum vertegenwoordigt. Wanneer een logisch type is gekoppeld aan een Parquet-kolom en wordt ondersteund in Qlik Open Lakehouse (zoals hieronder vermeld), gebruikt de Streaming tussenopslagtaak het logische type bij het definiëren van het doelschema, in plaats van het onderliggende fysieke type. Dit zorgt ervoor dat gegevens correct worden geïnterpreteerd, de beoogde semantiek, zoals precisie, schaal en temporele betekenis, behoudt en resulteert in nauwkeurigere schema's wanneer gegevens naar downstream-indelingen worden geschreven.
Gegevens afkomstig uit Parquet-bestanden worden als volgt toegewezen:
| Brongegevenstypen | Logische typen | Qlik Talend Data Integration gegevenstypen |
|---|---|---|
| BOOLEAANSE WAARDE | BOOLEAANSE WAARDE | |
| INT32 | INT8 | |
| INT64 | INT8 | |
| INT96 | DATETIME | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTE_ARRAY | STRING (Gecodeerd als Base64) | |
| FIXED_LEN_BYTE_ARRAY | STRING (Gecodeerd als Base64) | |
| BYTE_ARRAY | TEKENREEKS | TEKENREEKS |
| BYTE_ARRAY | ENUM | TEKENREEKS |
| INT32 | DECIMAL | INT8 |
| INT64 | DECIMAL | INT8 |
| FIXED_LEN_BYTE_ARRAY | DECIMAL | INT8/REAL8 (Gecodeerd als Base64) |
| BYTE_ARRAY | DECIMAL | INT8/REAL8 (Gecodeerd als Base64) |
| INT32 | DATUM | DATUM |
| INT32 | TIME(MILLIS,true) | INT8 |
| INT64 | TIME(MICROS,true) | TIJD |
| INT64 | TIMESTAMP(MICROS,true) | DATETIME |
| INT64 | TIMESTAMP(MILLIS,true) | DATETIME |
| GENESTE TYPEN | STRUCT | |
| LIJST | ARRAY | |
| MAP | ARRAY<STRUCT>. Array van structs die sleutel-waardeparen vertegenwoordigen. |
Avro
De volgende toewijzingen gelden voor Avro-bestanden met schema registry.
| Brongegevenstypen | Logische typen | Qlik Talend Data Integration gegevenstypen |
|---|---|---|
| BOOLEAANSE WAARDE | BOOLEAANSE WAARDE | |
| INT | INT8 | |
| LONG | INT8 | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTES | TEKENREEKS | |
| TEKENREEKS | TEKENREEKS | |
| RECORD | STRUCT | |
| ENUM | TEKENREEKS | |
| ARRAY | ARRAY | |
| MAP | ARRAY<STRUCT> | |
| UNION | ||
| VAST | TEKENREEKS | |
| BYTES | DECIMAL | DECIMAL |
| VAST | DECIMAL | DECIMAL |
| INT | DATUM | DATUM |
| INT | TIME-MILLIS | INT8 |
| INT | TIME-MICROS | TIJD |
| LONG | TIMESTAMP-MILLIS | DATETIME |
| LONG | TIMESTAMP-MICROS | DATETIME |
ORC
De volgende toewijzingen zijn van toepassing op ORC-bestanden.
| Brongegevenstypen | Qlik Talend Data Integration gegevenstypen |
|---|---|
| BOOLEAANSE WAARDE | BOOLEAANSE WAARDE |
| BYTE | INT8 |
| SHORT | INT8 |
| INT | INT8 |
| LONG | INT8 |
| DATUM | DATUM |
| FLOAT | REAL8 |
| DOUBLE | REAL8 |
| TIMESTAMP | DATETIME |
| BINARY | TEKENREEKS |
| DECIMAL | REAL8 |
| TEKENREEKS | TEKENREEKS |
| VARCHAR | TEKENREEKS |
| CHAR | TEKENREEKS |
| LIJST | ARRAY |
| MAP | ARRAY<STRUCT>. Array van structs die sleutel-waardeparen vertegenwoordigen. |
| STRUCT | STRUCT |
| UNION |
Beperkingen
De volgende beperkingen zijn van toepassing op alle gegevensbronnen:
-
Als uw bestanden van verschillende typen zijn, wat kan gebeuren wanneer ze afkomstig zijn van meerdere bronnen of versies, houdt de transformatietaak die is gemaakt met behulp van één voorbeeldbestand (bijvoorbeeld tijdens onboarding) niet automatisch rekening met die verschillen.
-
Als u de gegevenstypen in de tussenopslagtaak wijzigt, bijvoorbeeld omdat u de gegevens moet hashen, zorg er dan voor dat de transformatiegegevenstypen overeenkomen met de nieuwe gegevenstypen.