구성
구성 (Configuration)
기본적으로 Table & SQL API는 허용 가능한 성능으로 정확한 결과를 생성하도록 사전 구성되어 있습니다.
테이블 프로그램의 요구 사항에 따라 최적화를 위해 특정 파라미터를 조정해야 할 수 있습니다. 예를 들어 무한 스트리밍 프로그램은 필요한 상태 크기가 상한을 갖도록 보장해야 할 수 있습니다(스트리밍 개념 참고).
출처: 문서
본문
개요 (Overview)
TableEnvironment를 인스턴스화할 때 EnvironmentSettings로 Configuration 객체를 전달해 현재 세션에 원하는 구성을 전달할 수 있습니다.
또한 모든 테이블 환경에서 TableConfig가 현재 세션을 구성하는 옵션을 제공합니다.
공통 또는 중요한 구성 옵션에 대해 TableConfig는 상세한 인라인 문서가 있는 getter와 setter 메서드를 제공합니다.
더 고급 구성의 경우 사용자는 기본 키-값 맵에 직접 접근할 수 있습니다. 다음 섹션들은 Flink Table & SQL API 프로그램을 조정하는 데 사용할 수 있는 모든 옵션을 나열합니다.
주의: 옵션은 연산 수행 시 서로 다른 시점에 읽히기 때문에, 테이블 환경을 인스턴스화한 직후 구성 옵션을 일찍 설정하는 것을 권장합니다.
Java
// instantiate table environment
Configuration configuration = new Configuration();
// set low-level key-value options
configuration.setString("table.exec.mini-batch.enabled", "true");
configuration.setString("table.exec.mini-batch.allow-latency", "5 s");
configuration.setString("table.exec.mini-batch.size", "5000");
EnvironmentSettings settings = EnvironmentSettings.newInstance()
.inStreamingMode().withConfiguration(configuration).build();
TableEnvironment tEnv = TableEnvironment.create(settings);
// access flink configuration after table environment instantiation
TableConfig tableConfig = tEnv.getConfig();
// set low-level key-value options
tableConfig.set("table.exec.mini-batch.enabled", "true");
tableConfig.set("table.exec.mini-batch.allow-latency", "5 s");
tableConfig.set("table.exec.mini-batch.size", "5000");
Scala
// instantiate table environment
val configuration = new Configuration;
// set low-level key-value options
configuration.setString("table.exec.mini-batch.enabled", "true")
configuration.setString("table.exec.mini-batch.allow-latency", "5 s")
configuration.setString("table.exec.mini-batch.size", "5000")
val settings = EnvironmentSettings.newInstance
.inStreamingMode.withConfiguration(configuration).build
val tEnv: TableEnvironment = TableEnvironment.create(settings)
// access flink configuration after table environment instantiation
val tableConfig = tEnv.getConfig()
// set low-level key-value options
tableConfig.set("table.exec.mini-batch.enabled", "true")
tableConfig.set("table.exec.mini-batch.allow-latency", "5 s")
tableConfig.set("table.exec.mini-batch.size", "5000")
Python
# instantiate table environment
configuration = Configuration()
configuration.set("table.exec.mini-batch.enabled", "true")
configuration.set("table.exec.mini-batch.allow-latency", "5 s")
configuration.set("table.exec.mini-batch.size", "5000")
settings = EnvironmentSettings.new_instance() \
... .in_streaming_mode() \
... .with_configuration(configuration) \
... .build()
t_env = TableEnvironment.create(settings)
# access flink configuration after table environment instantiation
table_config = t_env.get_config()
# set low-level key-value options
table_config.set("table.exec.mini-batch.enabled", "true")
table_config.set("table.exec.mini-batch.allow-latency", "5 s")
table_config.set("table.exec.mini-batch.size", "5000")
SQL CLI
Flink SQL> SET 'table.exec.mini-batch.enabled' = 'true';
Flink SQL> SET 'table.exec.mini-batch.allow-latency' = '5s';
Flink SQL> SET 'table.exec.mini-batch.size' = '5000';
참고: 다음의 모든 구성 옵션은 Flink 구성 파일에 전역으로 설정할 수도 있으며, 이후 애플리케이션에서
EnvironmentSettings를 통해(또는TableEnvironment인스턴스화 전에) 또는TableEnvironment의TableConfig를 통해 재정의할 수 있습니다.
실행 옵션 (Execution Options)
다음 옵션은 쿼리 실행의 성능을 튜닝하는 데 사용할 수 있습니다.
| 키 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| table.exec.async-lookup.buffer-capacity | 100 | Integer | Batch 스트리밍. 비동기 룩업 조인이 트리거할 수 있는 최대 비동기 I/O 연산 수. |
| table.exec.async-lookup.key-ordered-enabled | false | Boolean | Batch 스트리밍. true이면 비동기 룩업 조인이 CDC 스트림의 upsert 키 순서를 따릅니다. 정의된 upsert 키가 없으면 전체 레코드를 upsert 키로 간주합니다. insert-only 스트림의 레코드는 독립적이고 이전 레코드의 상태에 영향을 주지 않으므로 insert-only 스트림에 이 설정을 해도 효과가 없습니다. 이 옵션은 키 정렬을 활성화해도 순서 없이 처리됩니다. |
| table.exec.async-lookup.output-mode | ORDERED | Enum | 비동기 연산의 출력 모드. 기본값 ORDERED. ALLOW_UNORDERED로 설정하면 결과의 정확성에 영향을 주지 않을 때 AsyncDataStream.OutputMode.UNORDERED를 사용하려 시도하고, 그렇지 않으면 ORDERED를 여전히 사용합니다. 가능 값: "ORDERED", "ALLOW_UNORDERED". |
| table.exec.async-lookup.timeout | 3 min | Duration | 비동기 연산이 완료되는 비동기 시간 초과. |
| table.exec.async-ml-predict.max-concurrent-operations | 10 | Integer | Batch 스트리밍. 비동기 ML predict가 트리거할 수 있는 최대 비동기 I/O 연산 수. |
| table.exec.async-ml-predict.output-mode | ORDERED | Enum | 비동기 ML predict의 출력 모드. ALLOW_UNORDERED는 연산자가 실행이 끝날 때 결과를 내보냄을 의미합니다. 플래너는 결과의 정확성에 영향을 주지 않을 때 ALLOW_UNORDERED를 사용하려 시도합니다. ORDERED는 연산자가 데이터가 들어온 순서와 같은 순서로 결과를 내보냄을 보장하며 기본값입니다. 가능 값: "ORDERED", "ALLOW_UNORDERED". |
| table.exec.async-ml-predict.timeout | 3 min | Duration | 비동기 연산이 완료되는 비동기 시간 초과. 마감을 지키지 못하면 오류를 나타내는 시간 초과 예외가 던져집니다. |
| table.exec.async-scalar.max-attempts | 3 | Integer | Streaming. 태스크 실행이 실패하기 전의 최대 비동기 재시도 시도 횟수. |
| table.exec.async-scalar.max-concurrent-operations | 10 | Integer | Streaming. 비동기 스칼라 함수가 트리거할 수 있는 최대 비동기 I/O 연산 수. |
| table.exec.async-scalar.retry-delay | 100 ms | Duration | 다시 시도하기 전에 기다리는 지연. |
| table.exec.async-scalar.retry-strategy | FIXED_DELAY | Enum | 사용될 재시작 전략, 기본값 FIXED_DELAY. 가능 값: "NO_RETRY", "FIXED_DELAY". |
| table.exec.async-scalar.timeout | 3 min | Duration | 비동기 연산이 완료되는 비동기 시간 초과. |
| table.exec.async-state.enabled | false | Boolean | Streaming. 비동기 상태 API에 기반한 SQL/Table 연산자를 사용할지 여부를 설정. 기본값 false. |
| table.exec.async-table.max-concurrent-operations | 10 | Integer | Streaming. 비동기 테이블 함수가 트리거할 수 있는 최대 동시 비동기 I/O 연산 수. |
| table.exec.async-table.max-retries | 3 | Integer | Streaming. 태스크 실행이 실패하기 전의 최대 비동기 재시도 시도 횟수. |
| table.exec.async-table.retry-delay | 100 ms | Duration | 다시 시도하기 전에 기다리는 지연. |
| table.exec.async-table.retry-strategy | FIXED_DELAY | Enum | 사용될 재시작 전략, 기본값 FIXED_DELAY. 가능 값: "NO_RETRY", "FIXED_DELAY". |
| table.exec.async-table.timeout | 3 min | Duration | 비동기 연산이 완료되는 비동기 시간 초과(발생할 수 있는 재시도 포함). |
| table.exec.async-vector-search.max-concurrent-operations | 10 | Integer | Batch 스트리밍. 비동기 벡터 검색이 트리거할 수 있는 최대 비동기 I/O 연산 수. |
| table.exec.async-vector-search.output-mode | ORDERED | Enum | 비동기 벡터 검색의 출력 모드. ALLOW_UNORDERED는 연산자가 실행이 끝날 때 결과를 내보냄을 의미합니다. 플래너는 결과의 정확성에 영향을 주지 않을 때 ALLOW_UNORDERED를 사용하려 시도합니다. ORDERED는 데이터가 들어온 순서와 같은 순서로 결과를 내보냄을 의미하며 기본값입니다. 가능 값: "ORDERED", "ALLOW_UNORDERED". |
| table.exec.async-vector-search.timeout | 3 min | Duration | 호출(재시도 포함)이 시간 초과로 간주되고 태스크 실행이 실패하기 전에 경과할 수 있는 총 시간. |
| table.exec.deduplicate.insert-update-after-sensitive-enabled | true | Boolean | Streaming. 작업(특히 싱크)이 INSERT 메시지와 UPDATE_AFTER 메시지에 민감한지 설정. false이면 Flink는 때로(예: 마지막 행 중복 제거) 첫 번째 행에 INSERT 대신 UPDATE_AFTER를 보낼 수 있습니다. true이면 Flink는 첫 번째 행에 INSERT를 보내도록 보장하며, 이 경우 추가 오버헤드가 있습니다. 기본값 true. |
| table.exec.deduplicate.mini-batch.compact-changes-enabled | false | Boolean | Streaming. row-time 미니배치에서 다운스트림으로 보내는 변경을 압축할지 설정. true이면 Flink가 변경을 압축해 최신 변경만 다운스트림으로 보냅니다. 다운스트림이 버전화된 데이터의 세부 사항을 필요로 하면 이 최적화를 적용할 수 없습니다. false이면 미니배치가 활성화되지 않았을 때처럼 Flink가 모든 변경을 다운스트림으로 보냅니다. |
| table.exec.delta-join.cache-enabled | true | Boolean | Streaming. 델타 조인의 캐시를 활성화할지 여부. 활성화되면 델타 조인이 원격 차원 테이블의 레코드를 캐시합니다. 기본값 true. |
| table.exec.delta-join.left.cache-size | 10000 | Long | Streaming. 델타 조인에서 왼쪽 테이블의 룩업 결과를 캐시하는 데 사용되는 캐시 크기. 캐시를 활성화할 때 이 값은 양수여야 합니다. 기본값 10000. |
| table.exec.delta-join.right.cache-size | 10000 | Long | Streaming. 델타 조인에서 오른쪽 테이블의 룩업 결과를 캐시하는 데 사용되는 캐시 크기. 캐시를 활성화할 때 이 값은 양수여야 합니다. 기본값 10000. |
| table.exec.disabled-operators | (none) | String | Batch. 주로 테스트용. 쉼표로 구분된 연산자 이름 목록으로, 각 이름은 비활성화된 연산자의 종류를 나타냅니다. 비활성화할 수 있는 연산자에는 "NestedLoopJoin", "ShuffleHashJoin", "BroadcastHashJoin", "SortMergeJoin", "HashAgg", "SortAgg"가 있습니다. 기본적으로 비활성화된 연산자는 없습니다. |
| table.exec.interval-join.min-cleanup-interval | 0 ms | Duration | Streaming. 구간 조인 연산자에서 일치하지 않는 레코드를 정리하는 최소 시간 간격 지정. Flink 1.18 이전에는 이 파라미터의 기본값이 구간 기간의 절반이었습니다. 참고: 이 값을 0보다 크게 설정하면 외부 조인의 일치하지 않는 레코드가 워터마크보다 늦게 출력되어, 윈도우 연산자 같은 다운스트림 워터마크 의존 연산자가 이 레코드를 버릴 수 있습니다. 기본값 0은 일치하지 않는 레코드를 즉시 정리함을 의미합니다. |
| table.exec.legacy-cast-behaviour | DISABLED | Enum | Batch 스트리밍. CAST가 레거시 동작을 따를지, 아니면 다양한 수정·개선을 도입하는 새 동작을 따를지 결정. 가능 값: "ENABLED"(CAST가 레거시 동작을 따름), "DISABLED"(CAST가 새 올바른 동작을 따름). |
| table.exec.local-hash-agg.adaptive.distinct-value-rate-threshold | 0.5 | Double | Batch. distinct 값 비율은 샘플링된 데이터의 로컬 집계 결과 수를 샘플링 임계값(표 table.exec.local-hash-agg.adaptive.sampling-threshold 참고)으로 나눈 것으로 정의됩니다. 계산된 결과가 주어진 구성 값보다 낮으면 나머지 입력 레코드가 로컬 집계를 진행하고, 그렇지 않으면 나머지 입력 레코드가 로컬 집계보다 계산 비용이 적은 단순 프로젝션을 거칩니다. 기본값 0.5. |
| table.exec.local-hash-agg.adaptive.enabled | true | Boolean | Batch. 적응형 로컬 해시 집계를 활성화할지 여부. 적응형 로컬 해시 집계는 로컬 해시 집계의 최적화로, 샘플링 데이터의 distinct 값 비율에 따라 로컬 해시 집계를 계속할지 적응적으로 결정합니다. 기본값 true. |
| table.exec.local-hash-agg.adaptive.sampling-threshold | 500000 | Long | Batch. 적응형 로컬 해시 집계가 활성화되면 이 값은 로컬 집계에 대한 distinct 값 비율(표 table.exec.local-hash-agg.adaptive.distinct-value-rate-threshold 참고)을 계산하는 데 사용할 샘플 데이터 레코드 수를 정의합니다. 기본값 500000. |
| table.exec.mini-batch.allow-latency | 0 ms | Duration | Streaming. MiniBatch가 입력 레코드를 버퍼링하는 데 사용할 수 있는 최대 지연. MiniBatch는 상태 접근을 줄이기 위해 입력 레코드를 버퍼링하는 최적화입니다. 허용된 지연 간격과 최대 버퍼링 레코드 수에 도달하면 MiniBatch가 트리거됩니다. 참고: table.exec.mini-batch.enabled가 true이면 이 값이 0보다 커야 합니다. |
| table.exec.mini-batch.enabled | false | Boolean | Streaming. MiniBatch 최적화를 활성화할지 지정. 상태 접근을 줄이기 위해 입력 레코드를 버퍼링하는 최적화입니다. 기본적으로 비활성화되어 있습니다. 활성화하려면 true로 설정하세요. 참고: 미니배치가 활성화되면 'table.exec.mini-batch.allow-latency'와 'table.exec.mini-batch.size'를 설정해야 합니다. |
| table.exec.mini-batch.size | -1 | Long | Streaming. MiniBatch에 대해 버퍼링할 수 있는 최대 입력 레코드 수. 상태 접근을 줄이기 위해 입력 레코드를 버퍼링하는 최적화입니다. 참고: MiniBatch는 현재 비윈도우 집계에서만 동작합니다. 값은 양수여야 합니다. |
| table.exec.operator-fusion-codegen.enabled | false | Boolean | Batch 스트리밍. true이면 플래너가 여러 물리적 연산자를 단일 연산자로 컴파일해 성능을 향상시킬 수 있습니다. |
| table.exec.rank.topn-cache-size | 10000 | Long | Streaming. Rank 연산자는 상태 접근을 줄이기 위해 부분 상태 내용을 캐시하는 캐시를 가집니다. 캐시 크기는 각 Rank 태스크의 레코드 수입니다. |
| table.exec.resource.default-parallelism | -1 | Integer | Batch 스트리밍. 모든 연산자(예: 집계, 조인, 필터)에 대해 병렬 인스턴스로 실행할 기본 병렬도를 설정. 이 구성은 StreamExecutionEnvironment의 병렬도보다 높은 우선순위를 가집니다(실제로 StreamExecutionEnvironment의 병렬도를 재정의합니다). -1 값은 기본 병렬도가 설정되지 않음을 나타내며, 그러면 StreamExecutionEnvironment의 병렬도를 사용하도록 폴백합니다. |
| table.exec.simplify-operator-name-enabled | true | Boolean | Batch 스트리밍. true이면 옵티마이저가 ExecNode의 id와 타입으로 연산자 이름을 단순화하고 세부 사항은 description에 유지합니다. 기본값 true. |
| table.exec.sink.keyed-shuffle | AUTO | Enum | Streaming. 기본 키를 가진 테이블에 데이터를 쓸 때 많은 사용자가 겪는 분산 비순서(disorder) 문제를 최소화하기 위해, 싱크 병렬도가 업스트림 연산자와 다르고 싱크 병렬도가 1이 아니면 FLINK가 기본적으로 keyed shuffle을 자동 추가합니다. 기본적으로 싱크의 병렬도가 업스트림 연산자와 다르면 keyed shuffle이 추가됩니다. NONE(셔플 없음) 또는 FORCE(강제 셔플)로 설정할 수 있습니다. 가능 값: "NONE", "AUTO", "FORCE". |
| table.exec.sink.nested-constraint-enforcer | IGNORE | Enum | Batch 스트리밍. 중첩 필드에 대해 제약 조건을 강제할지 결정. 중첩 필드에 대한 제약 강제는 특히 컬렉션을 반복할 때 계산 오버헤드를 추가하므로 주의하세요. 가능 값: "IGNORE"(ROWS/ARRAYS/MAPS의 중첩 타입 검사 안 함), "ROWS"(ROWS의 중첩 타입 검사), "ROWS_AND_COLLECTION"(ROWS와 컬렉션 모두 검사). |
| table.exec.sink.not-null-enforcer | ERROR | Enum | Batch 스트리밍. null 값을 삽입할 때 Flink가 NOT NULL 컬럼 제약을 어떻게 강제하는지 결정. 가능 값: "ERROR"(NOT NULL 컬럼에 null 값을 쓸 때 런타임 예외 발생), "DROP"(NOT NULL 컬럼에 null 값을 삽입해야 하면 레코드를 조용히 버림). |
| table.exec.sink.require-on-conflict | true | Boolean | Streaming. 활성화되면 쿼리의 upsert 키가 싱크 테이블의 기본 키와 다르고 ON CONFLICT 절이 지정되지 않으면 오류가 발생합니다. 이는 서로 다른 upsert 키를 가진 여러 레코드가 같은 기본 키에 매핑될 때 비결정적 결과를 초래할 수 있습니다. false로 설정하면 ON CONFLICT 절이 필요 없던 이전 동작으로 복원됩니다. 이 검사를 비활성화하면 특정 스트리밍 시나리오에서 비결정적 결과로 이어질 수 있음에 유의하세요. |
| table.exec.sink.rowtime-inserter | ENABLED | Enum | Streaming. 일부 싱크 구현은 기본 스트림 레코드에 삽입할 수 있는 단일 rowtime 속성을 입력에 요구합니다. 이 옵션은 타임스탬프 삽입을 비활성화하고 쿼리 스키마에 여러 시간 속성이 존재하는 오류를 피하게 합니다. 가능 값: "ENABLED"(가능하면 rowtime 속성을 기본 스트림 레코드에 삽입. 싱크 입력에 최대 하나의 시간 속성이 필요함), "DISABLED"(rowtime 속성을 기본 스트림 레코드에 삽입하지 않음). |
| table.exec.sink.type-length-enforcer | IGNORE | Enum | Batch 스트리밍. CHAR(<length>)/VARCHAR(<length>)/BINARY(<length>)/VARBINARY(<length>) 타입 컬럼의 값이 트리밍되거나 패딩(CHAR(<length>)/BINARY(<length>)만)되어 길이가 해당 컬럼 타입 길이와 일치하도록 할지 결정. 가능 값: "IGNORE"(트리밍·패딩 적용 안 함, 길이 지시문 무시), "TRIM_PAD"(문자열·이진 값을 트리밍·패딩해 CHAR/VARCHAR/BINARY/VARBINARY 길이와 일치시키기), "ERROR"(길이 제약과 일치하지 않는 데이터를 CHAR/VARCHAR/BINARY/VARBINARY 컬럼에 쓸 때 런타임 예외 발생). |
| table.exec.sink.upsert-materialize | AUTO | Enum | Streaming. 분산 시스템에서 Shuffle로 인한 ChangeLog 데이터의 비순서 때문에 싱크가 받는 데이터가 전역 upsert 순서가 아닐 수 있습니다. 그래서 upsert 싱크 전에 upsert materialize 연산자를 추가합니다. 기본적으로 고유 키에 분산 비순서가 발생하면 materialize 연산자를 추가합니다. NONE(물리화 없음) 또는 FORCE(강제 물리화)를 선택할 수도 있습니다. 가능 값: "NONE", "AUTO", "FORCE". |
| table.exec.sink.upsert-materialize-strategy.adaptive.threshold.high | (none) | Long | Streaming. strategy=ADAPTIVE를 사용할 때 구현이 VALUE에서 MAP로 변경되는 키당 항목 수를 정의. 지정하지 않으면 Flink는 상태 백엔드 특유의 기본값(해시맵 상태 백엔드는 400, RocksDB와 나머지는 50)을 사용합니다. |
| table.exec.sink.upsert-materialize-strategy.adaptive.threshold.low | (none) | Long | Streaming. strategy=ADAPTIVE를 사용할 때 구현이 MAP에서 VALUE로 변경되는 키당 항목 수를 정의. 지정하지 않으면 Flink는 상태 백엔드 특유의 기본값(해시맵 상태 백엔드는 300, RocksDB와 나머지는 40)을 사용합니다. |
| table.exec.sink.upsert-materialize-strategy.type | LEGACY | Enum | Streaming. 사용할 SinkUpsertMaterializer 전략. 지원 전략: LEGACY — ValueState<List> 기반의 단순 구현(원래 구현). MAP — 순서 유지와 빠른 룩업 속성을 가진 여러 MapState 조합에 기반한 SequencedMultiSetState 구현. VALUE — LEGACY와 유사하지만 MAP과 호환되어 ADAPTIVE로 전환 가능. ADAPTIVE — VALUE로 시작해 threshold.high 값에 도달하면 MAP으로, low에 도달하면 VALUE로 전환하며 주어진 키의 항목 수에 따라 MAP과 VALUE를 번갈아 사용. 가능 값: "LEGACY", "MAP", "VALUE", "ADAPTIVE". |
| table.exec.sort.async-merge-enabled | true | Boolean | Batch. 정렬 연산자를 위한 비동기 병합을 활성화할지. 로컬 디스크로부터의 I/O를 비동기화할 수 있으며, 매 작업자의 I/O 버스트 협력을 허용하며, 저비용의 하드웨어 스토리지(예: SATA, 외장 NVMe) 사이에서 정렬 최적화를 향상시킬 수 있습니다. |
| table.exec.sort.default-limit | -1 | Integer | Batch. LIMIT 절이 없을 때 사용할 기본 제한. -1이면 기본 제한이 없음을 의미합니다. |
| table.exec.sort.max-num-file-handles | 128 | Integer | Batch. 정렬을 위한 외부 파일 밸런스 방식에서 사용되는 파일 핸들의 최대 수. 이 옵션을 0으로 설정하면 한 파일 컴포넌트 내에서의 파일 핸들 수에 상한이 없음을 의미합니다. 다만 병렬 AsyncMergeReader 인스턴스의 수가 이 옵션 값에 제한된다는 점에 유의하세요. |
| table.exec.source.cdc-events-duplicate | false | Boolean | Streaming. 카탈로그 테이블에 PRIMARY KEY가 정의되어 있고 "connector" 옵션이 "values"와 같을 때 소스가 중복 이벤트를 방출하는 경우, 중복을 제거하도록 이 옵션을 활성화할 수 있습니다. 기본적으로 소스로 가는 쿼리에서는 중복 제거가 수행되지 않습니다. 이 옵션은 상태 사용을 늘릴 수 있습니다. |
| table.exec.source.idle-timeout | (none) | Duration | Batch 스트리밍. 소스가 여전히 활성이지만(예: 이전에 전송된 데이터가 없는) 일정 시간 동안 레코드를 받지 못하면 유휴로 간주됩니다. 유휴 소스는 워터마크가 더 이상 진행되지 않도록 합니다. 이 구성 옵션을 설정하면 소스가 유휴으로 간주되기 전에 대기하는 시간을 구성할 수 있습니다. 값이 마지막 레코드를 받은 후 이 옵션이 경과하면 하류로 워터마크를 보내 수동 진행을 하며, 소스가 활성이 아님을 나타냅니다. 단일 입력에서 이 옵션은 캐스케이딩 워터마크로 이어질 수 있어 진정한 이벤트 시간에 대해 잘못된 결과를 초래할 수 있으므로, 다중 입력 또는 이를 알고 있는 소스와 함께만 사용하는 것이 좋습니다. |
| table.exec.spill-compression.block-size | 64 kb | MemorySize | Batch. 스트리밍. 외부 파일의 압축 블록 크기. 외부 파일의 압축을 활성화하면 압축 블록의 기본 크기는 64kb입니다. |
| table.exec.spill-compression.enabled | true | Boolean | Batch. 스트리밍. 외부 파일의 압축을 활성화할지 여부. 외부 파일은 정렬·해시 조인·해시 집계의 중간 결과를 저장하는 데 사용되며, 이는 하드 디스크로의 한국 I/O 트래픽을 줄이기 위한 나머지 옵션입니다. 기본값 true. |
| table.exec.state.ttl | (none) | Duration | Batch 스트리밍. 상태가 보존되는 기간 지정. 이 옵션을 지정하지 않으면 state.ttl 구성 옵션에 설정된 값이 사용됩니다. 상태는 null 키로 남아 있는 한 이 옵션에 정의된 기간 동안 만료되지 않습니다. |
| table.exec.uid.format | (none) | String | 스트리밍. 생성된 UID에 대한 커스텀 포맷. %(type)은 Exec/Stream operator 유형의 자리표시자로 사용되고, %(id)는 ExecNode id의 자리표시자로 사용됩니다. 예를 들어 플랜 노드 유형과 id를 결합한 '%(type)_%(id)'와 같은 포맷입니다. 기본값 null(UID 포맷 생성 안 함)이며, UID 포맷이 null이면 table.exec.uid.generation의 PLAN_ONLY 동작이 사용됩니다. |
| table.exec.uid.generation | DISABLED | Enum | 스트리밍. 안정적인 UID에 영향을 주지 않고 생성된 UID를 스트리밍 변환에 설정하는 전략. 가능 값: "PLAN_ONLY" — 파이프라인 정의가 컴파일된 계획에서 온 경우에만 스트리밍 변환에 UID를 설정. 컴파일 단계 없이 API로 구성된 파이프라인은 여러 번변환에 걸쳐 안정적이지 않을 수 있으므로 명시적 UID를 설정하지 않음. "ALWAYS" — 항상 스트리밍 변환에 UID 설정. 전문가 전용! 컴파일 단계 없이 API로 구성된 파이프라인은 제대로 복원되지 못할 수 있습니다. UID 생성은 이전에 선언된 파이프라인에 의존하므로 안정적인 환경을 보장해야 합니다. "DISABLED" — 명시적 UID를 설정하지 않음. |
| table.exec.unbounded-over.version | 2 | Integer | Streaming. 사용할 무한 over 집계 버전: 1 — 레거시 버전, 2 — 성능이 개선된 버전. |
| table.exec.window-agg.buffer-size-limit | 100000 | Integer | Batch. 그룹 윈도우 집계 연산자에서 사용되는 윈도우 요소 버퍼 크기 제한 설정. |
옵티마이저 옵션 (Optimizer Options)
다음 옵션은 더 나은 실행 계획을 얻기 위해 쿼리 옵티마이저의 동작을 조정하는 데 사용할 수 있습니다.
| 키 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| table.optimizer.adaptive-broadcast-join.strategy | auto | Enum | Batch. 조인 연산자 한쪽의 런타임 통계가 임계값 table.optimizer.join.broadcast-threshold 미만일 때 Flink가 브로드캐스트 해시 조인 최적화를 수행합니다. AUTO — Flink가 최적화 시점을 자동 선택, RUNTIME_ONLY — 런타임에만 브로드캐스트 해시 조인 수행, NONE — 컴파일 타임에만 최적화 수행. 가능 값: "auto", "runtime_only", "none". |
| table.optimizer.agg-phase-strategy | AUTO | Enum | Batch 스트리밍. 집계 단계 전략. AUTO, TWO_PHASE, ONE_PHASE만 설정 가능. AUTO: 집계 단계에 특별한 강제가 없음, cost에 따라 결정. TWO_PHASE: localAggregate와 globalAggregate가 있는 2단계 집계 강제. ONE_PHASE: CompleteGlobalAggregate만 있는 1단계 집계 강제. 가능 값: "AUTO", "ONE_PHASE", "TWO_PHASE". |
| table.optimizer.bushy-join-reorder-threshold | 12 | Integer | Batch 스트리밍. 부시(Bushy) 조인 재정렬 알고리즘에서 허용되는 최대 조인 노드 수. 이를 초과하면 left-deep 조인 재정렬 알고리즘이 사용됩니다. 기본값 12. |
| table.optimizer.delta-join.strategy | AUTO | Enum | Streaming. delta-join 최적화 전략. AUTO, FORCE, NONE만 설정 가능. AUTO: 옵티마이저가 먼저 delta join을 사용하려 시도하고, 실패하면 일반 조인으로 폴백. FORCE: delta join 사용. 실패하면 예외 발생. NONE: delta join을 사용하지 않음. |
| table.optimizer.distinct-agg.split.bucket-num | 1024 | Integer | Streaming. distinct 집계 분할 시 버킷 수 구성. 값은 첫 수준 집계에서 추가 그룹 키로 사용되는 버킷 키 'hash_code(distinct_key) % BUCKET_NUM' 계산에 사용됩니다. |
| table.optimizer.distinct-agg.split.enabled | false | Boolean | Streaming. distinct 집계(예: COUNT(DISTINCT col), SUM(DISTINCT col))를 두 수준으로 분할할지 옵티마이저에 알려줍니다. 첫 집계는 distinct_key의 해시코드와 버킷 수로 계산된 추가 키로 셔플됩니다. 기본값 false. |
| table.optimizer.dynamic-filtering.enabled | true | Boolean | Batch 스트리밍. true이면 옵티마이저가 동적 필터링을 스캔 테이블 소스로 푸시하려 시도하고, 런타임에서 관련 없는 파티션이나 입력 데이터를 필터링해 스캔 I/O를 줄입니다. |
| table.optimizer.incremental-agg-enabled | true | Boolean | Streaming. 로컬 집계와 distinct 집계 분할이 모두 활성화되면 distinct 집계는 4개 집계로 최적화됩니다(즉 local-agg1, global-agg1, local-agg2, global-agg2). global-agg1과 local-agg2를 단일 연산자로 결합할 수 있습니다(증분 누적기를 받아 증분 결과를 출력하므로 incremental agg라고 부름). 기본값 활성화. |
| table.optimizer.join-reorder-enabled | false | Boolean | Batch 스트리밍. 옵티마이저에서 조인 재정렬 활성화. 기본값 비활성화. |
| table.optimizer.join.broadcast-threshold | 1048576 | Long | Batch. 조인 수행 시 모든 워커 노드에 브로드캐스트될 테이블의 최대 크기(바이트) 구성. -1로 설정해 브로드캐스팅을 비활성화. |
| table.optimizer.multi-join.enabled | false | Boolean | Streaming. 스트리밍 조인 체인을 위한 다중 웨이 조인 연산자 활성화. 이 연산자는 여러 입력을 한 번에 처리해 중간 결과를 피함으로써 상태 크기를 상당히 줄입니다. 일반 INNER와 LEFT 조인을 지원합니다. 참고: 실험 기능이며 아직 프로덕션을 권장하지 않습니다. |
| table.optimizer.multiple-input-enabled | true | Boolean | Batch. true이면 옵티마이저가 파이프라인 셔플링이 있는 연산자를 다중 입력 연산자로 병합해 셔플링을 줄이고 성능을 향상시킵니다. 기본값 true. |
| table.optimizer.non-deterministic-update.strategy | IGNORE | Enum | Streaming. TRY_RESOLVE일 때 옵티마이저는 changelog 파이프라인에서 'Non-Deterministic Updates'(NDU)로 인한 정확성 문제를 해결하려 시도합니다. 첫 단계로 옵티마이저는 필요하면 2번(LookupJoin)의 물리화를 자동 활성화하고, SQL 변경으로 비교적 해결하기 쉬운 1번(비결정적 함수)과 3번(메타데이터가 있는 CDC 소스)에 대해 상세 오류 메시지를 제공합니다. 기본값은 IGNORE로 옵티마이저는 변경하지 않습니다. 가능 값: "TRY_RESOLVE", "IGNORE". |
| table.optimizer.ptf.max-tables | 20 | Integer | Streaming. Process Table Function(PTF)의 최대 테이블 인자 수. 이론적으로 PTF는 임의 개수의 입력 테이블을 받을 수 있지만, 실제로 각 입력은 네트워크 버퍼를 예약해야 하므로 메모리 사용에 영향을 줍니다. 이 때문에 입력 테이블 수는 20으로 제한됩니다. |
| table.optimizer.reuse-optimize-block-with-digest-enabled | false | Boolean | Batch 스트리밍. true이면 옵티마이저가 digest로 중복된 하위 계획을 찾아 최적화 블록(공통 하위 그래프)을 만드려 시도합니다. 각 최적화 블록은 독립적으로 최적화됩니다. |
| table.optimizer.reuse-sink-enabled | true | Boolean | Batch 스트리밍. true이면 옵티마이저가 중복된 테이블 싱크를 찾아 재사용하려 시도합니다. table.optimizer.reuse-sub-plan-enabled가 true일 때만 동작합니다. |
| table.optimizer.reuse-source-enabled | true | Boolean | Batch 스트리밍. true이면 옵티마이저가 중복된 테이블 소스를 찾아 재사용하려 시도합니다. table.optimizer.reuse-sub-plan-enabled가 true일 때만 동작합니다. |
| table.optimizer.reuse-sub-plan-enabled | true | Boolean | Batch 스트리밍. true이면 옵티마이저가 중복된 하위 계획을 찾아 재사용하려 시도합니다. |
| table.optimizer.runtime-filter.enabled | false | Boolean | Batch. 런타임 필터를 활성화하거나 비활성화하는 플래그. true이면 옵티마이저가 적격한 조인에 런타임 필터를 주입하려 시도합니다. |
| table.optimizer.runtime-filter.max-build-data-size | 150 mb | MemorySize | Batch. 런타임 필터 빌드측의 최대 데이터 볼륨 임계값. 추정 데이터 볼륨이 이 값 미만이어야 런타임 필터 주입을 시도합니다. |
| table.optimizer.runtime-filter.min-filter-ratio | 0.5 | Double | Batch. 런타임 필터의 최소 필터 비율 임계값. 추정 필터 비율이 이 값을 초과해야 런타임 필터 주입을 시도합니다. |
| table.optimizer.runtime-filter.min-probe-data-size | 10 gb | MemorySize | Batch. 런타임 필터 프로브측의 최소 데이터 볼륨 임계값. 추정 데이터 볼륨이 이 값을 초과해야 런타임 필터 주입을 시도합니다. 이 값은 table.optimizer.runtime-filter.max-build-data-size보다 커야 합니다. |
| table.optimizer.skewed-join-optimization.skewed-factor | 4.0 | Double | Batch. 조인 연산자 인스턴스가 다른 동시 조인 연산자 인스턴스의 중앙값 크기의 N배를 초과하는 입력 데이터를 만나면 스큐로 간주됩니다(N은 이 skewed-factor). 데이터 볼륨이 스큐 임계값 미만이 아니면 Flink는 데이터 분포를 더 균형 있게 만들기 위해 스큐 데이터를 여러 부분으로 자동 분할할 수 있습니다. |
| table.optimizer.skewed-join-optimization.skewed-threshold | 256 mb | MemorySize | Batch. 조인 연산자 인스턴스가 다른 동시 조인 연산자 인스턴스의 중앙값 크기의 N배를 초과하는 입력 데이터를 만나면 스큐로 간주됩니다(N은 skewed-factor). 데이터 볼륨이 이 스큐 임계값 미만이 아니면 Flink는 스큐 데이터를 여러 부분으로 자동 분할해 더 균형 있는 데이터 분포를 만들 수 있습니다. |
| table.optimizer.skewed-join-optimization.strategy | auto | Enum | Batch. Flink가 스큐 조인 키에 따라 데이터를 분할해 셔플 조인(sort-merge와 hash)의 스큐를 런타임에 처리합니다. AUTO — Flink가 이 최적화를 자동 적용, FORCED — 추가 해시 셔플을 도입하더라도 강제 적용, NONE — 수행하지 않음. 가능 값: "auto", "forced", "none". |
| table.optimizer.source.report-statistics-enabled | true | Boolean | Batch 스트리밍. true이면 소스가 SupportsStatisticReport에서 확장되고 카탈로그의 통계가 UNKNOWN이면 옵티마이저가 소스 커넥터의 통계를 수집·사용합니다. 기본값 true. |
| table.optimizer.sql2rel.project-merge.enabled | false | Boolean | Batch 스트리밍. true로 설정하면 SqlNode를 RelNode로 변환할 때 프로젝션을 병합합니다. 가능한 부작용(예: 특정 비결정적 표현식의 출력이 기대와 다르게 됨, FLINK-20887 참고)을 인지하지 못하는 한 켜지 않는 것이 좋습니다. |
| table.optimizer.union-all-as-breakpoint-enabled | true | Boolean | Batch 스트리밍. true이면 옵티마이저가 breakpoint일 때 union-all 노드에서 그래프를 분해합니다. false이면 옵티마이저가 breakpoint여도 union-all 노드를 건너뛰고 그 입력에서 breakpoint를 찾으려 시도합니다. |
테이블 옵션 (Table Options)
다음 옵션은 테이블 플래너의 동작을 조정하는 데 사용할 수 있습니다.
| 키 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| table.builtin-catalog-name | "default_catalog" | String | Batch 스트리밍. TableEnvironment 인스턴스화 시 생성할 초기 카탈로그의 이름. |
| table.builtin-database-name | "default_database" | String | Batch 스트리밍. TableEnvironment 인스턴스화 시 생성할 초기 카탈로그의 기본 데이터베이스 이름. |
| table.catalog-modification.listeners | (none) | List<String> | Batch 스트리밍. 카탈로그 수정을 위한 리스너를 만드는 팩토리의 (세미콜론으로 구분된) 목록. 카탈로그 매니저가 데이터베이스·테이블 DDL 연산을 성공적으로 수행한 후 알림을 받습니다. |
| table.column-expansion-strategy | List<Enum> | Batch 스트리밍. 'SELECT *'의 기본 확장 동작 구성. 기본적으로 테이블 스키마의 모든 최상위 컬럼이 선택되고 중첩 필드는 유지됩니다. 가능 값: "EXCLUDE_ALIASED_VIRTUAL_METADATA_COLUMNS"(별칭을 통해 메타데이터 키를 참조하는 가상 메타데이터 컬럼 제외. 예: 'c METADATA VIRTUAL FROM k'로 선언된 컬럼은 전략이 적용되면 기본적으로 선택되지 않음), "EXCLUDE_DEFAULT_VIRTUAL_METADATA_COLUMNS"(메타데이터 키를 직접 참조하는 가상 메타데이터 컬럼 제외. 예: 'k METADATA VIRTUAL'로 선언된 컬럼). | |
| table.display.max-column-width | 30 | Integer | Batch 스트리밍. 쿼리 결과를 클라이언트 콘솔에 인쇄할 때 자르기 전에 화면에 표시되는 문자 수 결정. 스트리밍 모드에서 가변 길이 타입 컬럼(예: CHAR, VARCHAR, STRING)에만 적용됩니다. 고정 길이 타입은 배치 모드에서 결정적인 컬럼 너비로 인쇄됩니다. |
| table.dml-sync | false | Boolean | Batch 스트리밍. DML 작업(즉 insert 연산)이 비동기로 실행되는지 동기로 실행되는지 지정. 기본적으로 실행은 비동기라 여러 DML 작업을 동시에 제출할 수 있습니다. true로 설정하면 insert 연산이 작업 완료를 기다립니다. |
| table.dynamic-table-options.enabled | true | Boolean | Batch 스트리밍. 테이블 옵션을 동적으로 지정하는 데 사용되는 OPTIONS 힌트를 활성화하거나 비활성화. 비활성화되면 OPTIONS 힌트가 지정되면 예외가 발생합니다. |
| table.generated-code.max-length | 4000 | Integer | Batch 스트리밍. 생성 코드가 하위 함수 호출로 분할되는 임계값 지정. Java 메서드의 최대 길이는 64KB입니다. 필요하면 더 세밀한 세분성을 허용합니다. 기본값은 4000입니다(기본적으로 JIT가 8K 바이트 코드를 초과하는 메서드에서 동작을 거부하므로 64KB가 아닌 4000). |
| table.legacy-nested-row-nullability | false | Boolean | Batch 스트리밍. Flink 2.2 이전에는 SQL에서 정의된 행 타입(예: SELECT CAST(f AS ROW<i NOT NULL>))이 NOT NULL 제약을 무시했습니다. 새 동작은 nullability를 고려합니다. |
| table.local-time-zone | "default" | String | Batch 스트리밍. 로컬 시간대는 현재 세션 시간대 id를 정의합니다. <code>TIMESTAMP WITH LOCAL TIME ZONE</code> 변환에 사용됩니다. 내부적으로 로컬 시간대가 있는 타임스탬프는 항상 UTC 시간대로 표현됩니다. 옵션의 입력은 "America/Los_Angeles" 같은 전체 이름 또는 "GMT-08:00" 같은 커스텀 시간대 id입니다. |
| table.plan.compile.catalog-objects | ALL | Enum | Batch 스트리밍. 컴파일 중 테이블, 함수, 데이터 타입 같은 카탈로그 객체를 계획에 영속화하는 전략. 복원 중 카탈로그 메타데이터 존재 필요성에 영향을 주고 계획 크기에 영향을 줍니다. 가능 값: "ALL"(카탈로그 테이블·함수·데이터 타입에 대한 모든 메타데이터가 컴파일 중 계획에 영속화됨), "SCHEMA"(식별자 외에 카탈로그 테이블·함수·데이터 타입에 대한 스키마 정보가 계획에 영속화됨), "IDENTIFIER"(식별자만 영속화됨). |
| table.plan.force-recompile | false | Boolean | Streaming. false이면 출력 계획 파일이 이미 존재할 때 COMPILE PLAN 문이 실패합니다(IF NOT EXISTS 절을 사용하지 않는 한). true이면 COMPILE PLAN이 기존 출력 계획 파일을 덮어씁니다. 디버깅 목적으로만 이 플래그를 활성화하는 것을 강력히 권장합니다. |
| table.plan.restore.catalog-objects | ALL | Enum | Batch 스트리밍. 주어진 계획으로 카탈로그 객체를 복원하는 전략. 가능 값: "ALL"(계획에 영속화된 카탈로그 테이블·함수·데이터 타입의 모든 메타데이터를 읽음), "ALL_ENFORCED"(모든 메타데이터가 계획에 영속화되어야 함), "IDENTIFIER"(식별자만 사용하고 항상 카탈로그 룩업 수행). |
| table.resources.download-dir | System.getProperty("java.io.tmpdir") | String | Batch 스트리밍. 플래너가 다운로드된 리소스를 저장하는 데 사용하는 로컬 디렉터리. |
| table.rtas-ctas.atomicity-enabled | false | Boolean | Batch 스트리밍. CREATE TABLE/REPLACE TABLE/CREATE OR REPLACE AS SELECT 문이 원자적으로 실행되는지 지정. 기본적으로 비원자적입니다. 대상 테이블은 클라이언트 측에서 생성/교체되며, 작업이 실패하거나 취소되어도 롤백되지 않습니다. |
| table.sql-dialect | "default" | String | Batch 스트리밍. SQL 방언은 SQL 쿼리를 파싱하는 방법을 정의합니다. 다른 SQL 방언은 다른 SQL 문법을 지원할 수 있습니다. 현재 지원되는 방언: default와 hive. |
구체화 테이블 옵션 (Materialized Table Options)
다음 옵션은 구체화 테이블(materialized table)의 동작을 조정하는 데 사용할 수 있습니다.
| 키 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| materialized-table.default-freshness.continuous | 3 min | Duration | Batch 스트리밍. 구체화 테이블 정의에서 FRESHNESS 절이 생략될 때 연속 갱신 모드의 기본 신선도(freshness) 간격. |
| materialized-table.default-freshness.full | 1 h | Duration | Batch 스트리밍. 구체화 테이블 정의에서 FRESHNESS 절이 생략될 때 전체 갱신 모드의 기본 신선도 간격. |
| materialized-table.default-start-mode | FROM_BEGINNING | Enum | Batch 스트리밍. 구체화 테이블의 기본 시작 모드. 지원 값: FROM_BEGINNING, FROM_NOW, RESUME_OR_FROM_BEGINNING, RESUME_OR_FROM_NOW. 가능 값: "FROM_BEGINNING", "FROM_NOW", "FROM_TIMESTAMP", "RESUME_OR_FROM_BEGINNING", "RESUME_OR_FROM_NOW", "RESUME_OR_FROM_TIMESTAMP". |
| materialized-table.refresh-mode.freshness-threshold | 30 min | Duration | Batch 스트리밍. 구체화 테이블 갱신 모드를 결정하는 시간 임계값 지정. 구체화 테이블이 정의한 FRESHNESS가 이 임계값보다 낮으면 연속 모드로 실행되고, 그렇지 않으면 전체 갱신 모드로 전환됩니다. |
| partition.fields.#.date-formatter | (none) | String | Batch 스트리밍. 파티션 구체화 테이블의 시간 파티션 포맷터 지정. '#'은 문자열 기반 파티션 필드 이름을 나타냅니다. 전체 갱신 모드에서 어떤 파티션을 갱신할지에 대한 힌트 역할을 합니다. |
SQL Client 옵션 (SQL Client Options)
다음 옵션은 sql client의 동작을 조정하는 데 사용할 수 있습니다.
| 키 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| sql-client.display.color-schema | "DEFAULT" | String | Batch 스트리밍. SQL client에서 사용할 SQL 하이라이트 색상 스키마. 가능 값: 'default', 'dark', 'light', 'chester', 'vs2010', 'solarized', 'obsidian', 'geshi'. |
| sql-client.display.print-time-cost | true | Boolean | Batch. 쿼리의 시간 소비를 표시할지 결정. 기본적으로 쿼리 시간 비용은 표시되지 않습니다. |
| sql-client.display.show-line-numbers | false | Boolean | Batch 스트리밍. 멀티라인 SQL에 줄 번호를 표시할지 여부 결정. |
| sql-client.execution.max-table-result.rows | 1000000 | Integer | Batch 스트리밍. 테이블 모드일 때 캐시할 행 수. 행 수가 지정된 값을 초과하면 FIFO 스타일로 행을 재시도합니다. |
| sql-client.execution.result-mode | TABLE | Enum | Batch 스트리밍. 쿼리 결과가 어떻게 표시될지 결정. 가능 값: "TABLE"(메모리에서 결과를 물리화하고 일반적인 페이지 매김 테이블 표현으로 시각화), "CHANGELOG"(연속 쿼리가 생성한 결과 스트림 시각화), "TABLEAU"(tableau 포맷으로 화면에 직접 표시). |
| sql-client.verbose | false | Boolean | Batch 스트리밍. 콘솔에 자세한 출력을 출력할지 결정. true로 설정하면 예외 스택을 인쇄하고, 그렇지 않으면 원인만 출력합니다. |