스트리밍 데이터
온보딩 프로세스는 소스에서 데이터를 전송하여 Iceberg 테이블에 저장합니다. 스트리밍 데이터 소스의 변경 내용은 거의 실시간으로 저장 테이블에 지속적으로 적용됩니다.
데이터 온보딩
데이터는 파이프라인 프로젝트 내에서 온보딩되며, 데이터 세트는 프로젝트 설정에 정의된 S3 위치에 저장됩니다.
-
프로젝트에서 만들기를 클릭한 다음 데이터 온보딩을 클릭합니다.
-
온보딩에 대한 작업 이름과 선택적 설명을 추가합니다.
다음을 클릭합니다.
-
소스 연결을 선택합니다.
기존 스트리밍 소스 연결을 선택하거나 소스에 대한 새 연결을 만들 수 있습니다.
자세한 내용은 데이터 스트림에 연결를 참조하십시오.
다음을 클릭하고 데이터 소스에 대한 아래 지침을 따르십시오.
데이터 선택
Apache Kafka
목록에 소스 연결에 정의된 클러스터에서 사용 가능한 Kafka 토픽이 표시됩니다.
토픽을 선택할 때 특정 데이터 집합을 선택할 수 있습니다. 선택 규칙을 사용하여 데이터 집합 그룹을 포함하거나 제외할 수도 있습니다.
-
데이터 세트에 대한 선택 기준을 정의하기 위해 %를 와일드카드로 사용합니다.
선택 규칙을 사용하여 토픽을 선택하는 경우, 모든 데이터 세트를 동일한 대상 테이블에 로드할지 또는 각 원본 토픽에 대해 별도의 대상 테이블을 생성할지 선택할 수 있습니다.
-
기본적으로 대상 Iceberg 테이블 이름은 토픽 이름에서 파생되며, 소문자, 공백 제거, 대시를 밑줄로 대체하는 등 명명 규칙을 준수하도록 서식이 지정됩니다. 대상 데이터 세트 이름 정의에서 대상 테이블의 이름을 편집할 수 있습니다.
-
여러 토픽을 단일 테이블로 로드하기 위해 선택 규칙을 사용하는 경우 대상 이름을 제공해야 합니다.
-
선택 규칙을 사용하고 데이터가 별도의 테이블(토픽당 하나의 데이터 집합)로 로드되는 경우 기본 대상 이름은 토픽 이름입니다. 이 단계에서는 마법사에서 이름을 편집할 수 없지만, 랜딩 작업에서 나중에 수행할 수 있습니다.
-
수집할 토픽을 선택하도록 규칙이 구성된 경우, 랜딩 작업 설정의 스키마 진화 아래에 있는 새 토픽 > 대상에 추가 옵션이 선택되어 있으면 규칙 기준을 충족하는 모든 새 토픽도 랜딩됩니다.
하나 이상의 데이터 집합을 선택하거나 선택 규칙을 사용한 다음 추가를 클릭합니다. 다음을 클릭합니다.
Amazon Kinesis
목록에 소스 연결에 정의된 사용 가능한 Kinesis 스트림이 표시됩니다.
하나 이상의 데이터 집합을 선택하고 추가를 클릭합니다. 선택된 스트림에서 추가된 데이터 집합을 볼 수 있습니다. 다음을 클릭합니다.
Amazon S3
디렉터리 브라우저에 원본 연결의 S3 버킷에 있는 모든 디렉터리 목록이 표시됩니다.
-
데이터 랜딩 시 포함할 디렉터리를 선택합니다:
-
각 디렉터리에 대해 경로 추가에서 경로 및 파일 이름 패턴을 입력합니다:
-
모든 문자와 일치하는 *를 와일드카드로 사용합니다.
-
날짜 패턴을 입력하려면 <yyyy>를 4자리 연도 자리 표시자로, <MM>을 2자리 월 자리 표시자로, <dd>를 2자리 일 자리 표시자로, <HH>를 2자리 시간 자리 표시자로 사용합니다. 예:
-
MyDir3/<yyyy>_<MM>_<dd>_<HH>_orders.csv
-
MyDir3/<yyyy>/<MM>/<dd>/<HH>_orders.csv
-
-
-
-
미리 보기를 클릭하여 데이터 미리 보기 대화 상자를 엽니다. 포함된 파일과 제외된 파일 목록이 표시됩니다.
-
경로 및 파일 이름 패턴이 올바르고 작동하는지 확인하려면 유효성 검사를 클릭합니다.
-
대상 데이터 세트 이름 정의에서 토픽을 대상 Iceberg 테이블에 맵핑할 이름을 제공합니다. 다음을 클릭합니다.
콘텐츠 유형 선택
소스 이벤트 콘텐츠 유형을 선택합니다.
-
데이터 이벤트 유형 선택에서 수집할 이벤트 유형을 선택합니다.
-
자세한 내용은 데이터 스트림에 연결을 참조하십시오.
선택한 콘텐츠 유형은 모든 토픽, 데이터 세트 또는 데이터 이벤트에 적용됩니다. 수집하려는 각 콘텐츠 유형에 대해 새 작업을 생성해야 합니다.
-
이벤트가 올바르게 로드되었는지 확인을(를) 확장하여 데이터를 구문 분석할 수 있는지 확인합니다. 이 단계에서 데이터가 올바른지 확인하는 것이 좋습니다. 그렇지 않으면 파이프라인을 다시 만들고 데이터를 다시 로드해야 합니다. 데이터 세트 선택을 사용하여 특정 데이터 세트를 검사하고 데이터 로드에 영향을 줄 수 있는 경고를 확인합니다. 데이터를 보려면 구조체 열 옆에 있는 눈 아이콘을 클릭합니다.
-
다음을 클릭합니다.
수집 속성 설정
파이프라인 설정을 구성합니다.
-
데이터 읽기 대상
-
가장 이른 이벤트부터 시작: 모든 기록 데이터를 수집합니다.
-
지금부터 시작: 파이프라인이 시작되는 시점부터 도착하는 새 데이터를 수집합니다.
-
-
열 중첩 해제
-
중첩된 열 유지: 변환이 적용되지 않습니다.
-
별도의 열로 분리: 데이터가 별도의 열로 분할됩니다.
-
-
새 데이터 집합에 대한 로드 설정
-
추가 전용: 일반적으로 이벤트 데이터에 가장 적합한 옵션입니다. 이벤트 데이터는 일반적으로 수명이 짧고 업데이트되지 않기 때문입니다. 예를 들어, 주문이 있습니다.
-
변경 사항 적용: 이 옵션은 시간이 지남에 따라 업데이트되는 데이터(예: 고객)에 가장 적합합니다. 기존 레코드를 업데이트하고 키 필드를 기반으로 새 레코드를 삽입합니다. 나중에 작업을 정의할 때 키 필드를 지정해야 합니다.
-
-
대상 테이블 파티션
대상 테이블 파티션 옵션은 파이프라인의 모든 테이블에 적용됩니다. 이 설정은 나중에 테이블 수준에서 사용자 지정 파티셔닝을 정의하도록 재정의할 수 있습니다.
정보 메모이 옵션은 추가 전용이 로드 설정에서 선택된 경우에만 사용할 수 있습니다.-
파티션 없음: 테이블은 파티션 없이 만들어집니다.
-
이벤트 수집 날짜별 파티션: 테이블은 이벤트가 수집된 날짜를 기준으로 분할됩니다.
-
-
데이터 변경 처리
정보 메모이 옵션은 변경 사항 적용이 로드 설정에서 선택된 경우에만 사용할 수 있습니다.-
소프트 삭제 포함: 삭제할 레코드를 표시할 식을 입력합니다.
-
기록 데이터 저장소 생성(유형 2): 이렇게 하면 변경된 레코드의 이전 버전이 유지됩니다.
-
-
다음을 클릭합니다.
요약
요약 화면에서 파이프라인을 시각적으로 표시합니다.
-
선택 사항으로, 스트리밍 랜딩 및 스트리밍 변환 작업의 경우 이름 및 설명 편집을 클릭하여 새 값을 제공할 수 있습니다.
-
파이프라인이 생성된 후 수행할 작업에 대한 옵션을 선택합니다.
-
모든 설정을 구성했으면 생성을 클릭하여 스트리밍 파이프라인을 생성합니다.
-
프로젝트가 표시되면 각 작업을 준비하고 실행하여 데이터 수집을 시작할 수 있습니다.
-
스트리밍 랜딩 작업을 준비하고 실행합니다.
자세한 내용은 Qlik 오픈 레이크하우스에 스트리밍 데이터 랜딩을 참조하십시오.
-
스트리밍 변환 작업을 준비하고 실행합니다.
자세한 내용은 스트림 데이터 집합 저장을 참조하십시오.
-
데이터 유형 매핑
초기 소스 스키마는 파이프라인 프로젝트를 생성할 때 PREPARE 단계 이전에 가져온 데이터 샘플을 기반으로 하며, 스키마 진화는 읽기 시점에 처리됩니다. STRUCT 및 ARRAY를 지원하지 않는 미러 작업 및 기타 다운스트림 작업은 JSON 유형을 사용합니다. 데이터는 SQL을 사용하여 구문 분석할 수 있습니다.
다음 데이터 유형 매핑은 지원되는 모든 데이터 소스에 적용되지만, 소스 파일 유형에 따라 달라지므로 다음 사항에 유의해야 합니다.
-
데이터 유형은 온보딩되는 데이터 샘플에서 추론됩니다. 예를 들어, 필드에 샘플에서 정수 값만 포함된 경우 스트리밍 랜딩 및 변환 작업에서 INT8로 생성됩니다. 후속 데이터에 이중 정밀도 소수 값이 포함된 경우 랜딩 파일에 해당 값이 포함됩니다. 그러나 스트리밍 변환 작업에서 필드 데이터 유형 변경 설정이 무시로 설정된 경우 열은 INT8로 유지되고 소수 값은 잘립니다. 의도치 않은 잘림을 방지하려면 온보딩 전에 샘플 데이터에 예상 값의 전체 범위가 포함되어 있는지 확인하거나, 초기 단계에서 필드 데이터 유형 변경을 작업 중지로 구성하고 필요에 따라 데이터 유형을 조정하십시오.
-
소스의 구조체에 필드가 추가되면 항상 랜딩 대상에 추가됩니다. 스트리밍 변환의 경우, 스트리밍 변환 작업 설정 > 스키마 진화 > 구조체에 필드 추가 (대상에 적용, 무시, 작업 중지)에서 선택한 옵션에 따라 동작이 적용됩니다.
-
특정 레코드에 필드가 없거나 배열이 비어 있으면 null로 처리됩니다.
-
데이터 세트가 배열에 의해 평면화되고 해당 배열이 비어 있거나 null인 레코드가 도착하면 시스템은 하나의 행을 생성하고 평면화된 필드는 null이 됩니다. 자동으로 제외되지 않습니다. 이러한 행을 제외하려면 필터를 수동으로 추가하십시오. 예를 들어, array_element IS NOT NULL.
-
UI에 표시되는 데이터 유형은 선택된 데이터 집합의 세분성을 반영합니다. 평면화된 배열의 경우, 배열 구조 자체보다는 개별 요소의 데이터 유형이 표시됩니다.
-
중첩된 JSON 필드 내의 구조체 안에는 새 특성을 추가할 수 없으며, 루트 수준에서만 추가할 수 있습니다.
-
스트리밍 변환 작업에서 플랫화는 배열의 단일 수준에 대해서만 지원됩니다. 플랫화가 다단계 배열(예: ARRAY<ARRAY<STRUCT>>)에 적용되면 외부 배열만 플랫화되어 완전히 플랫화된 STRUCT 대신 ARRAY<STRUCT>가 생성됩니다. 또한 현재 UI에서는 열 수준에서만 플랫화를 구성할 수 있습니다. 결과적으로 다단계 배열을 선택하면 첫 번째 배열 수준에만 플랫화가 암시적으로 적용됩니다.
-
기본형 배열을 참조할 때, 세분성이 배열인 경우 요소의 데이터 유형이 사용됩니다. 그렇지 않으면 배열 데이터 유형이 사용됩니다.
이 예시에서 OrderDetails에는 데이터 유형 INT의 CustomerID 배열이 있습니다. OrderDetails.CustomerID는 세분성이 OrderDetails.CustomerID인 경우 INT를 의미하고, 세분성이 OrderDetails인 경우 ARRAY<INT>를 의미합니다.
JSON
JSON 파일에서 소스의 숫자 값은 대상 데이터 유형을 결정합니다.
-
INT8은 지원되는 정수 범위 내에 있고 소수 부분이 없는 정수 값에 사용됩니다.
-
REAL8 (DOUBLE)은 값에 소수 부분(부동 소수점 숫자)이 포함된 경우에 사용됩니다.
-
STRING은 숫자 값이 지원되는 최대 정수 범위를 초과할 때 사용됩니다.
데이터 유형은 다음과 같이 맵핑됩니다:
| 원본 데이터 유형 | Qlik Talend Data Integration개의 데이터 유형 |
|---|---|
| STRING | STRING |
| NUMBER | INT8 |
| NUMBER | REAL8 |
| NUMBER | STRING |
| BOOLEAN | BOOLEAN |
| ARRAY | ARRAY |
| OBJECT | STRUCT |
CSV, TSV, REGEX, 및 SPLIT
기본적으로 모든 원본 데이터 유형은 문자열로 수집됩니다. 옵션 유형 자동 유추를 사용하여 원본 및 대상 유형을 다음과 같이 맵핑합니다.
| 원본 데이터 유형 | Qlik개의 데이터 유형 |
|---|---|
| NUMERIC | INT8/REAL8 |
| 참/TRUE/참/거짓/FALSE/거짓 | BOOLEAN |
| TIMESTAMP | yyyy-MM-dd HH:mm:ss 또는 yyyy-MM-ddTHH:mm:ssz 형식의 타임스탬프는 datetime 유형으로 구문 분석됩니다. 시간대가 포함된 경우 값은 문자열로 구문 분석됩니다. |
Parquet
Parquet 파일은 물리적 및 논리적 데이터 유형을 지원합니다. 물리적 데이터 유형은 INT32, DOUBLE 또는 BYTE_ARRAY와 같이 값이 디스크에 저장되는 방식을 정의합니다. 논리적 데이터 유형은 물리적 표현 위에 의미론적 의미를 제공합니다(예: 정수 값이 날짜를 나타내는지 식별). Parquet 열에 논리적 유형이 연결되어 있고 Qlik 오픈 레이크하우스에서 지원되는 경우(아래에 나열된 대로), 스트리밍 랜딩 작업은 기본 물리적 유형 대신 논리적 유형을 사용하여 대상 스키마를 정의합니다. 이렇게 하면 데이터가 올바르게 해석되고, 정밀도, 스케일 및 시간적 의미와 같은 의도된 의미가 보존되며, 데이터가 다운스트림 형식으로 기록될 때 더 정확한 스키마가 생성됩니다.
Parquet 파일에서 가져온 데이터는 다음과 같이 매핑됩니다.
| 원본 데이터 유형 | 논리적 유형 | Qlik Talend Data Integration개의 데이터 유형 |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT32 | INT8 | |
| INT64 | INT8 | |
| INT96 | DATETIME | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| 바이트 배열 | 문자열 (Base64로 인코딩됨) | |
| FIXED_LEN_BYTE_ARRAY | 문자열 (Base64로 인코딩됨) | |
| 바이트 배열 | STRING | STRING |
| 바이트 배열 | ENUM | STRING |
| INT32 | DECIMAL | INT8 |
| INT64 | DECIMAL | INT8 |
| FIXED_LEN_BYTE_ARRAY | DECIMAL | INT8/REAL8 (Base64로 인코딩됨) |
| 바이트 배열 | DECIMAL | INT8/REAL8 (Base64로 인코딩됨) |
| INT32 | DATE | DATE |
| INT32 | TIME(밀리초, 참) | INT8 |
| INT64 | TIME(마이크로초, 참) | TIME |
| INT64 | TIMESTAMP(마이크로초, 참) | DATETIME |
| INT64 | TIMESTAMP(밀리초, 참) | DATETIME |
| NESTED TYPES | STRUCT | |
| LIST | ARRAY | |
| 맵 | 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 | |
| 맵 | ARRAY<STRUCT> | |
| UNION | ||
| FIXED | STRING | |
| BYTES | DECIMAL | DECIMAL |
| 고정 | DECIMAL | DECIMAL |
| INT | DATE | DATE |
| INT | TIME-MILLIS | INT8 |
| INT | TIME-MICROS | TIME |
| LONG | TIMESTAMP-MILLIS | DATETIME |
| LONG | TIMESTAMP-MICROS | DATETIME |
ORC
다음 매핑이 ORC 파일에 적용됩니다.
| 원본 데이터 유형 | Qlik Talend Data Integration개의 데이터 유형 |
|---|---|
| BOOLEAN | BOOLEAN |
| 바이트 | INT8 |
| 짧은 | 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 |
| 맵 | ARRAY<STRUCT>. 키-값 쌍을 나타내는 구조체 배열. |
| STRUCT | STRUCT |
| UNION |
제한 사항 및 고려 사항
-
랜딩에서 자동 스키마 진화에 의해 구조 또는 배열이 수정되는 경우, Qlik Talend Cloud 스트리밍 작업으로 생성되지 않은 다운스트림 뷰는 오래되지 않도록 업데이트해야 할 수 있습니다.
-
작업에 구문 분석 오류가 있는 경우 오류 상태가 되지 않으며 주의 필요로 표시되지 않습니다. 구문 분석 오류는 항상 증가하는 지표이므로 오류 상태에 대한 종료 기준이 없습니다.
-
클러스터 기능을 제거하는 것은 해당 기능을 사용하는 작업이 없는 경우에만 허용됩니다.
-
동일한 기본 키를 가진 레코드에 대한 업데이트 및 삭제는 파티션 경계를 넘어서는 안 됩니다. 즉, 동일한 파티션에 맵되어야 합니다.
-
소스에 많은 수의 열이 포함된 경우 빈도순으로 상위 500개 열만 작업 및 카탈로그에 표시됩니다. 모든 열은 S3 랜딩의 Avro 파일에 저장되지만, 상위 500개 열만 Iceberg 테이블에 저장됩니다. 스키마 진화에서 새 열이 추가되면 자주 사용되더라도 상위 열에 추가되지 않습니다.