PutSQL 프로세서

PutSQL 프로세서

PutSQL은 SQL UPDATE 또는 INSERT 명령을 실행하는 OpenFlow 프로세서예요.

출처: Snowflake 문서

본문

이 프로세서는 일반 사용 가능(Generally Available) 상태예요. OpenFlow Snowflake 배포는 AWS, Azure, GCP 상용(Commercial) 리전의 모든 계정에서 사용할 수 있고, OpenFlow BYOC 배포는 AWS 상용 리전의 모든 계정에서 사용할 수 있어요. Bundle org.apache.nifi | nifi-standard-nar 설명 SQL UPDATE 또는 INSERT 명령을 실행해요. 들어오는 FlowFile의 내용은 실행할 SQL 명령이어야 해요. SQL 명령은 매개변수를 이스케이프하기 위해 ?를 사용할 수 있어요. 이 경우 사용할 매개변수는 sql.args.N.type과 sql.args.N.value라는 명명 규칙의 FlowFile 속성으로 존재해야 해요. 여기서 N은 양의 정수예요. sql.args.N.type은 JDBC Type을 나타내는 숫자여야 해요. FlowFile 내용은 UTF-8 형식이어야 해요. Tags database, insert, put, rdbms, relational, sql, update 입력 요구 사항 필수(REQUIRED) 민감 동적 속성 지원 아니요(false)

속성 (Properties)

속성 설명
Batch Size 단일 트랜잭션에서 데이터베이스에 넣을 선호하는 FlowFile 수예요.
JDBC Connection Pool JSON 메시지를 SQL 문으로 변환하기 위해 사용할 JDBC Connection Pool을 지정해요. 적절한 데이터베이스 컬럼 타입을 결정하려면 Connection Pool이 필요해요.
Obtain Generated Keys true면 데이터베이스가 자동 생성한 키가 sql.generate.key 속성을 사용해 생성한 FlowFile에 추가돼요. 이로 인해 성능이 약간 저하될 수 있고 모든 데이터베이스가 지원하지는 않아요.
Rollback On Failure 오류 처리 방법을 지정해요. 기본값(false)에서는 FlowFile 처리 중 오류가 발생하면 오류 타입에 따라 FlowFile이 'failure' 또는 'retry' 관계로 라우팅되고, 프로세서는 다음 FlowFile을 계속 처리할 수 있어요. 대신 현재 처리 중인 FlowFile을 롤백하고 즉시 추가 처리를 중지하려면 'Rollback On Failure' 속성을 활성화할 수 있어요. 활성화하면 실패한 FlowFile은 패널티 없이 input 관계에 남아 성공적으로 처리되거나 다른 방법으로 제거될 때까지 반복 처리돼요. 너무 빈번하게 재시도하지 않도록 적절한 'Yield Duration'을 설정하는 것이 중요해요.
Support Fragmented Transactions true면 이 프로세서가 FlowFile을 소비할 때 먼저 해당 FlowFile의 fragment.identifier와 fragment.count 속성을 확인해요. fragment.count 값이 1보다 크면 모든 fragment가 준비될 때까지 해당 fragment.identifier를 가진 FlowFile을 처리하지 않고, 준비되면 해당 fragment.identifier를 가진 모든 FlowFile을 FlowFile의 fragment.index 속성으로 지정된 순서대로 단일 트랜잭션으로 처리해요. 이는 SQL 문의 원자성을 제공해요. 이 트랜잭션의 어떤 문이든 실행 중 예외가 발생하면 트랜잭션은 롤백돼요. 트랜잭션 롤백이 발생하면 이 FlowFile 중 어떤 것도 'success'로 라우팅되지 않아요. 'Rollback On Failure'가 true면 이 FlowFile은 input 관계에 남아요. 'Rollback On Failure'가 false면 이 FlowFile 중 하나라도 'retry'로 라우팅되면 모두 'retry'로 라우팅되고, 그 외에는 'failure'로 라우팅돼요. 이 값이 false면 이 속성들은 무시되고 업데이트는 서로 독립적으로 발생해요.
Transaction Timeout 'Support Fragmented Transactions' 속성이 true로 설정된 경우, 특정 fragment.identifier 속성에 대한 모든 FlowFile이 도착할 때까지 기다린 뒤 해당 식별자를 가진 모든 FlowFile을 'failure' 관계로 전송할 시간을 지정해요.
database-session-autocommit 사용 중인 데이터베이스 연결에 설정할 autocommit 모드예요. false로 설정하면 연산이 명시적으로 커밋되거나 롤백되고(각각 성공/실패에 따라), true로 설정하면 드라이버/데이터베이스가 커밋/롤백을 처리해요.
putsql-sql-statement 실행할 SQL 문이에요. 문은 비어 있거나, 상수 값이거나, Expression Language를 사용해 속성에서 만들 수 있어요. 이 속성이 지정되면 들어오는 FlowFile의 내용과 무관하게 사용돼요. 이 속성이 비어 있으면 들어오는 FlowFile의 내용에 프로세서가 데이터베이스에 발행할 유효한 SQL 문이 포함되어 있어야 해요.

관계 (Relationships)

이름 설명
failure 데이터베이스를 업데이트할 수 없고 연산 재시도도 실패할 FlowFile(예: 잘못된 쿼리 또는 무결성 제약 위반)이 이 관계로 라우팅돼요.
retry 데이터베이스를 업데이트할 수 없지만 연산을 다시 시도하면 성공할 수 있는 FlowFile이 이 관계로 라우팅돼요.
success SQL 문이 성공적으로 실행된 FlowFile이 이 관계로 라우팅돼요.

기록되는 속성 (Writes attributes)

속성 설명
sql.generated.key 데이터베이스가 INSERT 문에 대해 키를 생성하고 Obtain Generated Keys 속성이 true로 설정된 경우, 가능하면 생성된 키를 나타내기 위해 이 속성이 추가돼요. 이 기능은 모든 데이터베이스 벤더가 지원하지는 않아요.

더 알아보기 (Learn more)