QueryRecord
QueryRecord
FlowFile의 내용에 대해 하나 이상의 SQL 쿼리를 평가하고, 그 결과를 출력 FlowFile의 내용으로 만드는 프로세서예요. 필드별 필터링, 변환, 행 수준 필터링 등에 활용할 수 있어요.
출처: Snowflake 문서
본문
번들 (Bundle)
org.apache.nifi | nifi-standard-nar
설명 (Description)
FlowFile의 내용에 대해 하나 이상의 SQL 쿼리를 평가합니다. SQL 쿼리의 결과가 출력 FlowFile의 내용이 됩니다. 예를 들어 필드별 필터링, 변환, 행 수준 필터링에 사용할 수 있습니다. 열 이름을 바꾸거나 간단한 계산·집계를 수행하는 등의 작업도 가능합니다. 프로세서는 들어오고 나가는 데이터 형식에 유연성을 제공하기 위해 Record Reader Controller Service와 Record Writer 서비스로 구성됩니다. 프로세서에는 최소한 하나의 사용자 정의 속성이 구성되어야 합니다. 속성의 이름은 데이터를 라우팅할 관계(Relationship)이고, 속성의 값은 입력 데이터를 어떻게 변환/필터링할지를 지정하는 SQL SELECT 문입니다. SQL 문은 유효한 ANSI SQL이어야 하며 Apache Calcite에 의해 처리됩니다. 변환이 실패하면 원본 FlowFile은 'failure' 관계로 라우팅됩니다. 그 외에는 선택된 데이터가 해당 관계로 라우팅됩니다. Record Writer가 Record에서 스키마를 상속하도록 선택했다면, 상속되는 스키마는 입력 Record가 아니라 ResultSet에서 온다는 점에 유의하세요. 이렇게 하면 QueryRecord 프로세서의 단일 인스턴스가 각각 다른 열과 집계 집합을 반환하는 여러 쿼리를 가질 수 있습니다. 그러나 그 결과로 파생된 스키마에는 스키마 이름이 없으므로, Record에서 스키마를 상속할 때 구성된 Record Writer가 Schema Name을 속성으로 쓰려고 시도하지 않도록 하는 것이 중요합니다. 자세한 내용은 Processor Usage 문서를 참조하세요.
태그 (Tags)
aggregate, avro, calcite, csv, etl, filter, json, logs, modify, query, record, route, select, sql, text, transform, update
입력 요구사항 (Input Requirement)
REQUIRED
민감 동적 속성 지원 (Supports Sensitive Dynamic Properties)
false
속성 (Properties)
| 속성 (Property) | 설명 (Description) |
|---|---|
| Default Decimal Precision | DECIMAL/NUMBER 값을 'decimal' Avro 논리 타입으로 쓸 때 사용 가능한 자릿수를 나타내는 특정 'precision'이 필요합니다. 일반적으로 precision은 열 데이터 타입 정의나 데이터베이스 엔진의 기본값으로 결정됩니다. 그러나 일부 데이터베이스 엔진에서는 정의되지 않은 precision(0)이 반환될 수 있습니다. 이러한 정의되지 않은 precision 숫자를 쓸 때 'Default Decimal Precision'이 사용됩니다. |
| Default Decimal Scale | DECIMAL/NUMBER 값을 'decimal' Avro 논리 타입으로 쓸 때 사용 가능한 소수 자릿수를 나타내는 특정 'scale'이 필요합니다. 일반적으로 scale은 열 데이터 타입 정의나 데이터베이스 엔진의 기본값으로 결정됩니다. 그러나 정의되지 않은 precision(0)이 반환되면 일부 데이터베이스 엔진에서는 scale도 불확실할 수 있습니다. 이러한 정의되지 않은 숫자를 쓸 때 'Default Decimal Scale'이 사용됩니다. 값이 지정한 scale보다 소수 자릿수가 더 많으면 반올림됩니다(예: 1.53은 scale 0에서는 2가 되고, scale 1에서는 1.5가 됩니다). |
| include-zero-record-flowfiles | 들어오는 FlowFile에 대해 SQL 문을 실행할 때 결과에 데이터가 없으면 해당 관계로 FlowFile을 보낼지 여부를 지정하는 속성입니다. |
| record-reader | 들어오는 데이터를 파싱하고 데이터의 스키마를 결정하는 데 사용할 Controller Service를 지정합니다. |
| record-writer | 결과를 FlowFile에 쓰는 데 사용할 Controller Service를 지정합니다. |
관계 (Relationships)
| 이름 (Name) | 설명 (Description) |
|---|---|
| failure | 어떤 이유로든 FlowFile 처리가 실패하면(예: SQL 문에 입력 데이터에 없는 열이 포함된 경우) 원본 FlowFile이 이 관계로 라우팅됩니다. |
| original | 원본 FlowFile이 이 관계로 라우팅됩니다. |
쓰는 속성 (Writes attributes)
| 이름 (Name) | 설명 (Description) |
|---|---|
| mime.type | Record Writer가 지정한 MIME Type으로 mime.type 속성을 설정합니다. |
| record.count | 쿼리가 선택한 레코드 수입니다. |
| QueryRecord.Route | FlowFile이 라우팅된 관계입니다. |
사용 사례 (Use cases)
- 레코드 필드의 값을 기준으로 레코드를 필터링합니다.
- 특정 레코드만 유지합니다.
- 유지할 필드 이름이 알려진 Record에서 특정 필드만 유지합니다.
- 내용에 따라 처리할 레코드 지향 데이터를 라우팅합니다.