Skip to content

[FLINK-39764] Support dynamic table options in Table API#28266

Open
HundalTaran wants to merge 1 commit into
apache:masterfrom
coder1592084:issue39764
Open

[FLINK-39764] Support dynamic table options in Table API#28266
HundalTaran wants to merge 1 commit into
apache:masterfrom
coder1592084:issue39764

Conversation

@HundalTaran
Copy link
Copy Markdown
Contributor

What is the purpose of the change

Currently, dynamic table options (e.g., overriding scan.startup.mode at query time) are only available through the SQL API via OPTIONS hints:
sql: SELECT id, name FROM kafka_table1 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */;
Table API users who want to override table options dynamically have no equivalent mechanism. They are forced to drop into tEnv.executeSql() with raw SQL strings, which negates the purpose of using the type-safe Table API.

Brief change log

Add a new overloaded method from(String path, Map<String, String> dynamicOptions) to the TableEnvironment interface. This provides Table API users with the same dynamic option override capability that SQL users have via OPTIONS hints.

Verifying this change

Added 6 test methods: testFromWithDynamicOptions : Verifies dynamic options are merged with existing table options testFromWithDynamicOptionsOverridesExisting : Verifies dynamic options override static options on key conflict | testFromWithEmptyDynamicOptions : Verifies empty map is a no-op, original options preserved | testFromWithDynamicOptionsOnViewThrows : Verifies ValidationException when applied to a view testFromWithDynamicOptionsDisabledThrows : Verifies ValidationException when config is disabled testFromWithDynamicOptionsTableNotFound : Verifies ValidationException for non-existent table

Does this pull request potentially affect one of the following parts:

  • Dependencies (does it add or upgrade a dependency): (yes / no) - no
  • The public API, i.e., is any changed class annotated with @Public(Evolving): (yes / no) - no
  • The serializers: (yes / no / don't know) - no
  • The runtime per-record code paths (performance sensitive): (yes / no / don't know) - no
  • Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (yes / no / don't know) - no
  • The S3 file system connector: (yes / no / don't know) - no

Documentation

  • Does this pull request introduce a new feature? (yes / no) - no
  • If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented) - no

Was generative AI tooling used to co-author this PR?

Yes, had taken help from kiro.

@flinkbot
Copy link
Copy Markdown
Collaborator

flinkbot commented May 27, 2026

CI report:

Bot commands The @flinkbot bot supports the following commands:
  • @flinkbot run azure re-run the last Azure build

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants