连接到数据流
在 Qlik Open Lakehouse 项目中支持以下数据流服务。事件数据持续摄取,以确保下游数据集成、分析和 AI 的近乎实时可用性,从而实现反映最新操作活动的低延迟管道。
Apache Kafka 和 Amazon Kinesis 等数据流服务提供持久、高吞吐量的管道,用于捕获实时操作事件。与依赖批处理摄取的文件源不同,数据流源在事件生成时持续传输数据,从而实现近乎实时的处理,无需等待文件生成或调度。生产者发布保留其架构并支持分区的结构化或半结构化消息。同一记录的所有更新和删除都必须使用相同的分区键。Kafka 和 Kinesis 仅在单个分区或分片内(而非整个主题或数据流中)保证排序,因此使用一致的分区键可确保给定记录的更改按正确顺序处理。Qlik 还支持将 Amazon S3 作为数据流源,用于持续摄取事件数据。
数据流式摄取与批量摄取
数据流和批处理数据源的区别如下:
-
对于这两种数据源,事件每分钟高效摄取,支持低延迟处理和近实时分析。
-
对于非数据流数据源,首先会进行现有数据的满负载,然后摄取更改。您还可以从数据源重新加载满负载数据。
-
对于数据流数据源,初始加载和后续事件之间没有明确的区别。Qlik 可以管理保留,并且还支持分区。
在 Qlik Open Lakehouse 项目中,流式源只能与 流式登陆任务 和 流式转换任务 一起使用:
-
流式数据使用 流式登陆任务 摄取,流式登陆任务不处理离散文件,而是读取到达的事件,将数据登陆到 Amazon S3 中,并将事件持久化为 Avro 文件。这种方法保留了架构演变,支持结构体等复杂数据类型,并提供高效存储和优化的查询性能,同时保持连续摄取模型。
-
当您从数据流源载入数据时,系统会自动为每个将以 Iceberg 格式存储的数据集添加一个数据流转换任务。您可以选择使用数据流转换任务来标准化结构、丰富事件负载或使数据与下游消费模型保持一致。
-
通过镜像数据任务,可以将数据流源中的数据集镜像到云数据仓库,从而使下游系统能够消费数据流事件而无需复制数据。有关更多信息,请参阅将数据镜像到云数据仓库。
数据类型映射
初始源架构基于在创建管道项目时 PREPARE 阶段之前获取的数据样本,并且架构演变在读取时处理。不支持 STRUCT 和 ARRAY 的镜像任务及其他下游任务使用 JSON 类型。数据可以使用 SQL 进行解析。
以下数据类型映射适用于所有受支持的数据源,但会根据源文件类型而异,并且应注意以下事项:
-
数据类型是从正在载入的数据样本中推断出来的。例如,如果字段在样本中仅包含整数值,则它在数据流登陆和转换任务中创建为 INT8。如果后续数据包含双精度小数,则登陆文件会包含这些值;但是,在数据流转换任务中,如果更改字段数据类型设置为忽略,则列仍为 INT8,并且小数部分将被截断。为避免意外截断,请确保样本数据在载入前包含所有预期的值范围,或者在早期阶段将更改字段数据类型配置为停止任务,并根据需要调整数据类型。
-
如果源中的结构体添加了字段,则该字段始终会添加到登陆目标。对于数据流转换,将根据在数据流转换任务设置 > 架构演变 > 向结构体添加字段中选择的选项应用行为(应用于目标、忽略、停止任务)。
-
如果特定记录中缺少字段,或者数组为空,则它们被视为 null。
-
如果数据集通过数组进行平展,并且到达的记录中该数组为空或 null,则系统会创建一行,并且平展字段为 null。它不会自动排除。如果您想排除这些行,请手动添加筛选器,例如 array_element IS NOT NULL。
-
UI 中显示的数据类型反映了所选数据集的粒度。对于扁平数组,显示的是单个元素的数据类型,而不是数组结构本身。
-
不能在嵌套 JSON 字段中的结构体内部添加新属性,只能在根级别添加。
-
在数据流转换任务中,仅支持对数组的单个级别进行展平。当展平应用于多级数组时,例如 ARRAY<ARRAY<STRUCT>>,只有外部数组会被展平,从而得到 ARRAY<STRUCT>,而不是完全展平的 STRUCT。此外,当前 UI 仅允许在列级别配置展平。因此,选择多级数组会隐式地将展平仅应用于第一个数组级别。
JSON
在 JSON 文件中,源中的数值决定了目标数据类型:
-
INT8 用于在支持的整数范围内且不包含小数部分的整数值。
-
REAL8 (DOUBLE) 用于值包含小数部分(浮点数)的情况。
-
STRING 用于数值超出支持的最大整数范围的情况。
数据类型映射如下:
| 源数据类型 | Qlik Talend Data Integration 个数据类型 |
|---|---|
| STRING | STRING |
| 数字 | INT8 |
| 数字 | REAL8 |
| 数字 | STRING |
| BOOLEAN | BOOLEAN |
| ARRAY | ARRAY |
| 'object' | STRUCT |
CSV、TSV、REGEX 和 SPLIT
默认情况下,所有源数据类型都将摄取为字符串。使用选项自动推断类型,将源类型和目标类型映射如下:
| 源数据类型 | Qlik 个数据类型 |
|---|---|
| NUMERIC | INT8/REAL8 |
| True/TRUE/true/False/FALSE/false | BOOLEAN |
| TIMESTAMP | 格式为yyyy-MM-dd HH:mm:ss或yyyy-MM-ddTHH:mm:ssz的时间戳将被解析为日期时间类型。如果包含时区,则该值将解析为字符串。 |
Parquet
Parquet 文件支持物理和逻辑数据类型。物理数据类型定义了值在磁盘上的存储方式,例如 INT32、DOUBLE 或 BYTE_ARRAY。逻辑数据类型在物理表示之上提供语义,例如,识别整数值是否表示日期。当逻辑类型附加到 Parquet 列并在 Qlik Open Lakehouse 中受支持(如下所列)时,Streaming 登陆任务在定义目标架构时使用逻辑类型,而不是底层物理类型。这确保数据得到正确解释,保留了预期的语义(如精确度、比例和时间含义),并在数据写入下游格式时生成更准确的架构。
从 Parquet 文件获取的数据映射如下:
| 源数据类型 | 逻辑类型 | Qlik Talend Data Integration 个数据类型 |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT32 | INT8 | |
| INT64 | INT8 | |
| INT96 | DATETIME | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTE_ARRAY | STRING(编码为 Base64) | |
| FIXED_LEN_BYTE_ARRAY | 字符串(Base64 编码) | |
| BYTE_ARRAY | STRING | STRING |
| BYTE_ARRAY | ENUM | STRING |
| INT32 | DECIMAL | INT8 |
| INT64 | DECIMAL | INT8 |
| FIXED_LEN_BYTE_ARRAY | DECIMAL | INT8/REAL8(Base64 编码) |
| BYTE_ARRAY | DECIMAL | INT8/REAL8(Base64 编码) |
| INT32 | DATE | DATE |
| INT32 | TIME(MILLIS,true) | INT8 |
| INT64 | TIME(MICROS,true) | TIME |
| INT64 | TIMESTAMP(MICROS,true) | DATETIME |
| INT64 | TIMESTAMP(MILLIS,true) | DATETIME |
| 嵌套类型 | STRUCT | |
| 列表 | ARRAY | |
| MAP | ARRAY<STRUCT>。表示键值对的结构体数组。 |
Avro
以下映射适用于带有架构注册表的 Avro 文件。
| 源数据类型 | 逻辑类型 | Qlik Talend Data Integration 个数据类型 |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT | INT8 | |
| LONG | INT8 | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTES | STRING | |
| STRING | STRING | |
| RECORD | STRUCT | |
| ENUM | STRING | |
| ARRAY | ARRAY | |
| MAP | 数组<结构体> | |
| 并集 | ||
| 固定 | STRING | |
| BYTES | DECIMAL | DECIMAL |
| 固定 | DECIMAL | DECIMAL |
| INT | DATE | DATE |
| INT | 时间-毫秒 | INT8 |
| INT | TIME-MICROS | TIME |
| LONG | TIMESTAMP-MILLIS | DATETIME |
| LONG | TIMESTAMP-MICROS | DATETIME |
ORC
以下映射适用于 ORC 文件。
| 源数据类型 | Qlik Talend Data Integration 个数据类型 |
|---|---|
| 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 |
| 列表 | ARRAY |
| MAP | ARRAY<STRUCT>. 表示键值对的结构体数组。 |
| STRUCT | STRUCT |
| UNION |
限制
以下限制适用于所有数据源:
-
如果您的文件类型不同,这可能发生在文件源自多个来源或版本时,则使用单个样本文件(例如,在入门期间)创建的转换任务不会自动考虑这些差异。
-
如果您更改登陆任务中的数据类型,例如因为您需要对数据进行哈希处理,请确保转换数据类型与新数据类型匹配。