QueryDatabaseTableRecord 2025.5.31.15¶
번들¶
org.apache.nifi | nifi-standard-nar
설명¶
SQL select 쿼리를 생성하거나 제공된 문을 사용하여 실행하여 지정된 최대값 열의 값이 이전에 표시된 최대값보다 큰 모든 행을 가져옵니다. 쿼리 결과는 Record Writer가 지정한 형식으로 변환됩니다. 식 언어는 여러 속성에 대해 지원되지만 수신 연결은 허용되지 않습니다. Environment/System 속성은 식 언어가 포함된 모든 속성의 값을 제공하는 데 사용할 수 있습니다. 이러한 쿼리를 수행하기 위해 플로우 파일 특성을 활용하려는 경우 GenerateTableFetch 및/또는 ExecuteSQL 프로세서를 이러한 목적으로 사용할 수 있습니다. 스트림이 사용되므로 임의로 큰 결과 세트가 지원됩니다. 이 프로세서는 표준 스케줄링 방법을 사용하여 타이머 또는 cron 식에 따라 실행되도록 예약할 수 있습니다. 이 프로세서는 기본 노드에서만 실행되도록 설계되었습니다. FlowFile 특성 ‘querydbtable.row.count’는 선택된 행의 수를 나타냅니다.
입력 요구 사항¶
FORBIDDEN
민감한 동적 속성 지원¶
false
속성¶
속성 |
설명 |
---|---|
반환할 열 |
쿼리에 사용할 열 이름의 쉼표로 구분된 목록입니다. 데이터베이스에서 이름에 특별한 처리(예: 인용 등)가 필요한 경우 각 이름에 이러한 처리를 포함해야 합니다. 열 이름을 제공하지 않으면 지정된 테이블의 모든 열이 반환됩니다. NOTE: 증분 가져오기가 제대로 작동하려면 지정된 테이블에 일관된 열 이름을 사용하는 것이 중요합니다. |
Database Connection Pooling Service |
데이터베이스에 대한 연결을 얻는 데 사용되는 컨트롤러 서비스입니다. |
데이터베이스 언어 서비스 |
특정 서비스 또는 공급업체와 관련된 문을 생성하기 위한 데이터베이스 언어 서비스입니다. |
Fetch Size |
결과 세트에서 한 번에 가져올 결과 행의 수입니다. 이는 데이터베이스 드라이버에 대한 힌트이며 정확하지 않을 수도 있습니다. 지정한 값이 0이면 힌트가 무시됩니다. PostgreSQL 을 사용하는 경우 ‘Set Auto Commit’이 ‘false’와 같아야 ‘Fetch Size’가 적용됩니다. |
최대 대기 시간 |
실행 중인SQL select 쿼리에 허용되는 최대 시간이며, 0은 제한이 없음을 의미합니다. 최대 시간이 1초 미만이면 0이 됩니다. |
최대값 열 |
쉼표로 구분된 열 이름 목록입니다. 프로세서는 프로세서 실행이 시작된 이후 반환된 각 열의 최대값을 추적합니다. 여러 열을 사용하면 열 목록에 순서가 지정되며 각 열의 값은 이전 열의 값보다 느리게 증가할 것으로 예상됩니다. 따라서 여러 열을 사용한다는 것은 일반적으로 테이블을 파티션하는 데 사용되는 열의 계층 구조를 의미합니다. 이 프로세서는 마지막 검색 이후 추가/업데이트된 행만 검색하는 데 사용할 수 있습니다. 비트/부울과 같은 일부 JDBC 유형은 최대값 유지에 도움이 되지 않으므로 이러한 유형의 열은 이 속성에 나열해서는 안 되며 처리 중에 오류가 발생할 수 있습니다. 열을 제공하지 않으면 테이블의 모든 행이 고려되므로 성능에 영향을 미칠 수 있습니다. NOTE: 증분 가져오기가 제대로 작동하려면 지정된 테이블에 일관된 최대값 열 이름을 사용하는 것이 중요합니다. |
자동 커밋 설정 |
DB 연결의 자동 커밋 기능을 활성화 또는 비활성화할 수 있습니다. 기본값은 ‘설정된 값 없음’입니다. ‘값 설정 없음’은 DB 연결의 자동 커밋 모드가 변경되지 않은 상태로 유지됩니다. PostgreSQL 드라이버와 같은 일부 JDBC 드라이버의 경우 ‘크기 가져오기’ 설정이 적용되도록 자동 커밋 기능을 비활성화해야 합니다. 자동 커밋이 활성화되면 PostgreSQL 드라이버는 ‘Fetch Size’ 설정을 무시하고 결과 세트의 모든 행을 한 번에 메모리에 로딩합니다. 이로 인해 대규모 데이터 세트를 가져오는 쿼리를 실행할 때 많은 양의 메모리를 사용할 수 있습니다. PostgreSQL 드라이버에서 이 동작에 대한 자세한 내용은 https://jdbc.postgresql.org//documentation/head/query.html에서 확인할 수 있습니다. |
테이블 이름 |
쿼리할 데이터베이스 테이블의 이름입니다. 사용자 지정 쿼리를 사용하는 경우 이 속성은 쿼리의 별칭을 지정하는 데 사용되며 FlowFile 에 특성으로 표시됩니다. |
db-fetch-db-type |
특정 서비스 또는 공급자와 관련된 문을 생성하기 위한 데이터베이스 유형으로, 일반 유형은 대부분의 경우를 지원하지만 특정 유형을 선택하면 프로세서의 추가 기능을 최적화할 수 있습니다. |
db-fetch-sql-query |
데이터를 검색하는 데 사용되는 사용자 지정 SQL 쿼리입니다. 다른 속성에서 SQL 쿼리를 작성하는 대신 이 쿼리는 하위 쿼리로 래핑됩니다. 쿼리에는 ORDER BY 문이 없어야 합니다. |
db-fetch-where-clause |
SQL 쿼리를 작성할 때 WHERE 조건에 추가할 사용자 정의 절입니다. |
dbf-default-precision |
DECIMAL/NUMBER 값이 ‘소수점’ Avro 논리 유형으로 작성된 경우 사용할 수 있는 자릿수를 나타내는 특정 ‘전체 자릿수’가 필요합니다. 일반적으로 전체 자릿수는 열 데이터 타입 정의 또는 데이터베이스 엔진 기본값에 의해 정의됩니다. 그러나 일부 데이터베이스 엔진에서는 정의되지 않은 전체 자릿수(0)가 반환될 수 있습니다. ‘Default Decimal Precision’은 정의되지 않은 전체 자릿수 숫자를 쓸 때 사용됩니다. |
dbf-default-scale |
DECIMAL/NUMBER 값을 ‘소수점’ Avro 논리 유형으로 작성하는 경우 가용성 있는 소수점 자릿수를 나타내는 특정 ‘스케일’이 필요합니다. 일반적으로 스케일은 열 데이터 타입 정의 또는 데이터베이스 엔진 기본값에 의해 정의됩니다. 그러나 정의되지 않은 전체 자릿수(0)가 반환되면 일부 데이터베이스 엔진에서는 스케일이 불확실할 수도 있습니다. 정의되지 않은 숫자를 쓸 때는 ‘Default Decimal Scale’이 사용됩니다. 값이 지정된 스케일보다 소수점이 많은 경우 값이 반올림됩니다(예: 1.53은 스케일 0으로 2가 되고 1.5는 스케일 1로 1.5가 됩니다). |
dbf-user-logical-types |
DECIMAL/NUMBER, DATE, TIME 및 TIMESTAMP 열에 Avro 논리 유형을 사용할지 여부. 비활성화하면 문자열로 작성됩니다. 활성화하면 논리 유형이 기본 유형으로 사용되며, 구체적으로 DECIMAL/NUMBER 는 논리 ‘decimal’: 추가 전체 자릿수 및 스케일 메타 데이터와 함께 바이트로 작성, DATE 는 논리 ‘date-millis’: Unix epoch(1970-01-01) 이후 날짜를 나타내는 int로 작성, TIME 은 논리 ‘time-millis’: Unix epoch 이후 밀리초를 나타내는 int로 작성, TIMESTAMP 는 논리 ‘timestamp-millis’: Unix epoch 이후 밀리초를 나타내는 long형으로 작성됩니다. 작성된 Avro 레코드의 리더가 이러한 논리 유형을 알고 있다면, 리더 구현에 따라 이러한 값을 더 많은 컨텍스트로 역직렬화할 수 있습니다. |
initial-load-strategy |
프로세서가 처음 시작되거나 상태가 지워졌을 때 데이터베이스 테이블의 기존 행을 처리하는 방법. ‘initial.maxvalue.*’ 동적 속성이 구성된 경우에도 이 속성은 무시됩니다. |
qdbt-max-frags |
최대 조각 수입니다. 지정한 값이 0이면 모든 조각이 반환됩니다. 이렇게 하면 이 프로세서가 대규모 테이블을 수집할 때 OutOfMemoryError 가 발생하지 않습니다. 참고: 이 속성을 설정하면 수신 결과가 정렬되지 않고 결과 세트에 행이 포함되지 않은 임의의 경계에서 조각이 끝날 수 있으므로 데이터가 손실될 수 있습니다. |
qdbt-max-rows |
단일 FlowFile 에 포함될 결과 행의 최대 개수입니다. 이렇게 하면 매우 큰 결과 세트를 여러 개의 FlowFiles 로 분할할 수 있습니다. 지정된 값이 0이면 모든 행이 1개의 FlowFile 로 반환됩니다. |
qdbt-output-batch-size |
프로세스 세션을 커밋하기 전에 큐에 넣을 출력 FlowFiles 의 개수입니다. 0으로 설정하면 모든 결과 세트 행이 처리되고 FlowFiles 출력이 다운스트림 관계로 전송할 준비가 되면 세션이 커밋됩니다. 결과 세트가 큰 경우 프로세서 실행이 끝날 때 FlowFiles 이 대량으로 전송될 수 있습니다. 이 속성을 설정하면 지정된 수의 FlowFiles 전송이 준비되면 세션이 커밋되어 FlowFiles 을 다운스트림 관계에 릴리스합니다. NOTE: 이 속성이 설정되면 FlowFiles 에 maxvalue.* 및 fragment.count 특성이 설정되지 않습니다. |
qdbtr-normalize |
출력 스키마를 생성할 때 열 이름의 문자를 변경할지 여부입니다. 예를 들어, 콜론과 기간은 밑줄로 변경됩니다. |
qdbtr-record-writer |
FlowFile 에 결과를 기록하는 데 사용할 컨트롤러 서비스를 지정합니다. Record Writer는 스키마 상속을 사용하여 추론된 스키마 동작을 에뮬레이션할 수 있습니다. 즉, 작성기에서 명시적 스키마를 정의할 필요가 없으며 열 유형에서 스키마를 추론하는 데 사용된 것과 동일한 로직이 제공될 것입니다. |
상태 관리¶
범위 |
설명 |
---|---|
CLUSTER |
지정된 테이블에서 쿼리 성능을 수행한 후 지정된 열의 최대값은 향후 쿼리 실행에 사용할 수 있도록 유지됩니다. 이렇게 하면 프로세서는 최대값이 보존된 값보다 큰 레코드만 가져올 수 있습니다. 증분 가져오기, 새로 추가된 행 가져오기 등에 사용할 수 있습니다. 최대 값을 지우려면 상태 관리 설명서에 따라 프로세서의 상태를 지우십시오 |
관계¶
이름 |
설명 |
---|---|
성공 |
SQL 쿼리 결과 세트에서 FlowFile 을 성공적으로 생성했습니다. |
Writes 특성¶
이름 |
설명 |
---|---|
tablename |
쿼리 중인 테이블의 이름 |
querydbtable.row.count |
쿼리에서 선택한 행 수입니다 |
fragment.identifier |
‘Max Rows Per Flow File’이 설정된 경우 동일한 쿼리 결과 세트의 모든 FlowFiles 은 fragment.identifier 특성에 대해 동일한 값을 갖습니다. 그런 다음 결과를 상호 연관시키는 데 사용할 수 있습니다. |
fragment.count |
‘Max Rows Per Flow File’이 설정된 경우 이는 단일 ResultSet 에서 생성되는 FlowFiles 의 총 개수입니다. 이는 동일한 수신 ResultSet 에 속하는 FlowFiles 의 수를 파악하기 위해 fragment.identifier 특성과 함께 사용할 수 있습니다. 출력 배치 크기가 설정되어 있으면 이 특성이 채워지지 않습니다. |
fragment.index |
‘Max Rows Per Flow File’이 설정된 경우, 동일한 결과 세트 FlowFile 에서 모두 파생된 발신 FlowFiles 목록에서 이 FlowFile 의 위치가 변경됩니다. 이것은 fragment.identifier 특성과 함께 사용하여 동일한 쿼리 결과 세트에서 어떤 FlowFiles 이 생성되었는지, 어떤 순서로 FlowFiles 이 생성되었는지 알 수 있습니다 |
최대값.* |
각 특성에는 지정된 ‘최대값 열’의 관측된 최대값이 포함됩니다. 특성의 접미사는 열의 이름입니다. 출력 배치 크기가 설정되어 있으면 이 특성이 채워지지 않습니다. |
mime.type |
Mime.type 특성을 Record Writer가 지정한 MIME 유형으로 설정합니다. |
record.count |
Record Writer가 출력한 레코드 수입니다. |
사용 사례¶
데이터베이스 테이블에서 모든 행을 검색합니다. |
단일 데이터베이스 테이블의 증분 로딩을 수행하여 테이블에 추가되는 새 행만 가져옵니다. |
다른 구성 요소가 포함된 사용 사례¶
여러 데이터베이스 테이블의 증분 로딩을 수행하여 테이블에 추가되는 새 행만 가져옵니다. |