Conectando a fluxos de dados
Os seguintes serviços de streaming são suportados em projetos do Qlik Open Lakehouse. Os dados de eventos são continuamente ingeridos para garantir a disponibilidade quase em tempo real para integração de dados downstream, análise e IA, permitindo pipelines de baixa latência que refletem a atividade operacional mais atual.
Serviços de streaming, como o Apache Kafka e o Amazon Kinesis, fornecem pipelines duráveis e de alta taxa de transferência para capturar eventos operacionais à medida que ocorrem. Ao contrário das fontes baseadas em arquivos que dependem da ingestão em lote, as fontes de streaming entregam dados continuamente à medida que os eventos são produzidos, permitindo o processamento quase em tempo real sem esperar que os arquivos sejam gerados ou agendados. Os produtores publicam mensagens estruturadas ou semiestruturadas que retêm seu esquema e suportam particionamento. Todas as atualizações e exclusões para o mesmo registro devem usar a mesma chave de partição. O Kafka e o Kinesis garantem a ordenação apenas dentro de uma única partição ou shard, não em todo o tópico ou fluxo, então usar uma chave de partição consistente garante que as alterações para um determinado registro sejam processadas na sequência correta. Qlik também oferece suporte ao Amazon S3 como uma fonte de streaming para ingestão contínua de dados de eventos.
Ingestão de streaming versus ingestão em lote
A diferença entre fontes de dados de streaming e em lote é a seguinte:
-
Com ambas as fontes, os eventos são ingeridos eficientemente a cada minuto, suportando processamento de baixa latência e análises quase em tempo real.
-
Com fontes sem streaming, há primeiro um carregamento total dos dados existentes e, em seguida, as alterações são ingeridas. Você também pode recarregar os dados de carregamento total da fonte.
-
Com fontes de streaming, não há nenhuma distinção clara entre o carregamento inicial e os eventos posteriores. O Qlik pode gerenciar a retenção e também suporta partições.
Em um projeto do Qlik Open Lakehouse, as fontes de streaming só podem ser usadas com a Tarefa de aterrisagem de streaming e a Tarefa de transformação de streaming.
-
Os dados de streaming são ingeridos usando uma Tarefa de aterrisagem de streaming e, em vez de processar arquivos discretos, a Tarefa de aterrisagem de streaming lê os eventos à medida que chegam, aterrissa os dados no Amazon S3 e persiste os eventos como arquivos Avro. Essa abordagem preserva a evolução do esquema, suporta tipos de dados complexos como structs e oferece armazenamento eficiente com desempenho de consulta otimizado, mantendo um modelo de ingestão contínua.
-
Ao integrar dados de uma fonte de fluxo, uma Tarefa de transformação de streaming é adicionada automaticamente para cada conjunto de dados que será armazenado no formato do Iceberg. Opcionalmente, a Tarefa de transformação de streaming pode ser usada para padronizar estruturas, enriquecer cargas de eventos ou alinhar dados com modelos de consumo downstream.
-
Uma Tarefa de espelhamento de dados permite que conjuntos de dados de fontes de streaming sejam espelhados para armazéns de dados na nuvem, permitindo que sistemas downstream consumam eventos de streaming sem duplicar dados. Para obter mais informações, consulte Espelhamento de dados em um armazém de dados na nuvem.
Mapeamentos de tipo de dados
O esquema de origem inicial é baseado em uma amostra dos dados coletados antes da fase PREPARE ao criar seu projeto de pipeline, e a evolução do esquema é tratada no momento da leitura. Tarefas de espelhamento e outras tarefas downstream que não suportam STRUCT e ARRAY usam um tipo JSON. Os dados podem ser analisados usando SQL.
Os seguintes mapeamentos de tipo de dados se aplicam a todas as fontes de dados suportadas, mas variam de acordo com o tipo de arquivo de origem, e o seguinte deve ser observado:
-
Tipos de dados são inferidos a partir de uma amostra dos dados que estão sendo integrados. Por exemplo, se um campo contém apenas valores inteiros na amostra, ele é criado como INT8 nas tarefas de aterrisagem de streaming e transformação. Se os dados subsequentes incluírem valores fracionários de precisão dupla, os arquivos de aterrisagem contêm esses valores; no entanto, na Tarefa de transformação de streaming, se a configuração Alterar tipo de dados do campo estiver definida como Ignorar, a coluna permanece INT8 e os valores fracionários são truncados. Para evitar truncamento não intencional, certifique-se de que os dados de amostra incluam o intervalo completo de valores esperados antes da integração, ou configure Alterar tipo de dados do campo para Parar tarefa durante os estágios iniciais e ajuste os tipos de dados conforme necessário.
-
Se um campo for adicionado a uma estrutura na origem, ele é sempre adicionado ao destino de aterrisagem. Para transformação de streaming, o comportamento é aplicado de acordo com a opção escolhida em Configurações da tarefa de transformação de streaming > Evolução do esquema > Adicionar campos à estrutura (Aplicar ao destino, Ignorar, Parar tarefa).
-
Se um campo estiver ausente em um registro específico, ou um array estiver vazio, eles serão tratados como nulos.
-
Se um conjunto de dados for nivelado por um array, e um registro chegar onde esse array estiver vazio ou nulo, o sistema criará uma linha e o campo nivelado será nulo. Não será excluído automaticamente. Se você quiser excluir essas linhas, adicione manualmente um filtro, por exemplo, array_element IS NOT NULL.
-
Os tipos de dados exibidos na interface do usuário refletem a granularidade do conjunto de dados selecionado. Em arrays nivelados, o tipo de dados de cada elemento individual é exibido em vez da estrutura do array em si.
-
Um novo atributo não pode ser adicionado dentro de uma estrutura em um campo JSON aninhado, apenas no nível raiz.
-
Em tarefas de transformação de fluxo, o nivelamento é suportado apenas para um único nível de um array. Quando o nivelamento é aplicado a um array multinível, por exemplo, ARRAY<ARRAY<STRUCT>>, apenas o array externo é nivelado, resultando em ARRAY<STRUCT> em vez de uma ESTRUTURA totalmente nivelada. Além disso, a IU atual permite que o nivelamento seja configurado apenas no nível da coluna. Como resultado, selecionar um array multinível aplica implicitamente o nivelamento apenas ao primeiro nível da matriz.
JSON
Em arquivos JSON, o valor numérico na origem determina o tipo de dados de destino:
-
INT8 é usado para valores inteiros que se encaixam dentro do intervalo de inteiros suportado e não incluem um componente fracionário.
-
REAL8 (DOUBLE) é usado quando o valor contém um componente fracionário (número de ponto flutuante).
-
STRING é usado quando o valor numérico excede o intervalo máximo de inteiros suportado.
Tipos de dados são mapeados da seguinte forma:
| Tipos de dados de origem | Qlik Talend Data Integration tipos de dados |
|---|---|
| STRING | STRING |
| NUMBER | INT8 |
| NUMBER | REAL8 |
| NUMBER | STRING |
| BOOLEAN | BOOLEAN |
| ARRAY | ARRAY |
| OBJECT | STRUCT |
CSV, TSV, REGEX e SPLIT
Por padrão, todos os tipos de dados de origem são ingeridos como uma string. Use a opção Inferir tipos automaticamente para mapear tipos de origem e de destino da seguinte forma:
| Tipos de dados de origem | Qlik tipos de dados |
|---|---|
| NUMERIC | INT8/REAL8 |
| True/TRUE/true/False/FALSE/false | BOOLEAN |
| TIMESTAMP | Carimbos de data/hora no formato yyyy-MM-dd HH:mm:ss ou yyyy-MM-ddTHH:mm:ssz são analisados para um tipo de data/hora. Se um fuso horário for incluído, o valor será analisado como uma string. |
Parquet
Arquivos Parquet suportam tipos de dados físicos e lógicos. Tipos de dados físicos definem como os valores são armazenados em disco, como INT32, DOUBLE ou BYTE_ARRAY. Tipos de dados lógicos fornecem significado semântico sobre a representação física, por exemplo, identificando se um valor inteiro representa uma data. Quando um tipo lógico é anexado a uma coluna Parquet e é compatível no Qlik Open Lakehouse (conforme listado abaixo), a tarefa de aterrisagem de streaming usa o tipo lógico ao definir o esquema de destino, em vez do tipo físico subjacente. Isso garante que os dados sejam interpretados corretamente, preserva a semântica pretendida, como precisão, escala e significado temporal, e resulta em esquemas mais precisos quando os dados são gravados em formatos downstream.
Os dados originados de arquivos Parquet são mapeados da seguinte forma:
| Tipos de dados de origem | Tipos lógicos | Qlik Talend Data Integration tipos de dados |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT32 | INT8 | |
| INT64 | INT8 | |
| INT96 | DATETIME | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTE_ARRAY | STRING (codificado como Base64) | |
| FIXED_LEN_BYTE_ARRAY | STRING (codificado como Base64) | |
| BYTE_ARRAY | STRING | STRING |
| BYTE_ARRAY | ENUM | STRING |
| INT32 | DECIMAL | INT8 |
| INT64 | DECIMAL | INT8 |
| FIXED_LEN_BYTE_ARRAY | DECIMAL | INT8/REAL8 (codificado como Base64) |
| BYTE_ARRAY | DECIMAL | INT8/REAL8 (codificado como Base64) |
| INT32 | DATE | DATE |
| INT32 | TIME(MILLIS,true) | INT8 |
| INT64 | TIME(MICROS,true) | TIME |
| INT64 | TIMESTAMP(MICROS,true) | DATETIME |
| INT64 | TIMESTAMP(MILLIS,true) | DATETIME |
| TIPOS ANINHADOS | STRUCT | |
| LIST | ARRAY | |
| MAP | ARRAY<STRUCT>. Matriz de estruturas representando pares chave-valor. |
Avro
Os seguintes mapeamentos se aplicam a arquivos Avro com o Schema Registry.
| Tipos de dados de origem | Tipos lógicos | Qlik Talend Data Integration tipos de dados |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT | INT8 | |
| LONG | INT8 | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTES | STRING | |
| STRING | STRING | |
| RECORD | STRUCT | |
| ENUM | STRING | |
| ARRAY | ARRAY | |
| MAP | ARRAY<STRUCT> | |
| UNION | ||
| FIXED | STRING | |
| BYTES | DECIMAL | DECIMAL |
| FIXED | DECIMAL | DECIMAL |
| INT | DATE | DATE |
| INT | TIME-MILLIS | INT8 |
| INT | TIME-MICROS | TIME |
| LONG | TIMESTAMP-MILLIS | DATETIME |
| LONG | TIMESTAMP-MICROS | DATETIME |
ORC
Os seguintes mapeamentos aplicam-se a arquivos ORC.
| Tipos de dados de origem | Qlik Talend Data Integration tipos de dados |
|---|---|
| BOOLEAN | BOOLEAN |
| BYTE | INT8 |
| SHORT | INT8 |
| INT | INT8 |
| LONG | INT8 |
| DATE | DATE |
| FLOAT | REAL8 |
| DOUBLE | REAL8 |
| TIMESTAMP | DATETIME |
| BINARY | STRING |
| DECIMAL | REAL8 |
| STRING | STRING |
| VARCHAR | STRING |
| CHAR | STRING |
| LIST | ARRAY |
| MAP | ARRAY<STRUCT>. Matriz de estruturas representando pares chave-valor. |
| STRUCT | STRUCT |
| UNION |
Limitações
As seguintes limitações aplicam-se a todas as fontes de dados:
-
Se seus arquivos forem de tipos diferentes, o que pode ocorrer quando eles se originam de várias fontes ou versões, a tarefa de transformação criada usando um único arquivo de amostra (por exemplo, durante o onboarding) não considera automaticamente essas diferenças.
-
Se você alterar os tipos de dados na tarefa de aterrisagem, por exemplo, porque precisa fazer hash dos dados, certifique-se de que os tipos de dados de transformação correspondam aos novos tipos de dados.