Thanks Hao for the effort to push the FLIP forward, I believe current design 
would satisfy most user cases.

+1 to start a vote.  

Best,
Leonard

> 2025 7月 30 02:27,Hao Li <h...@confluent.io.INVALID> 写道:
> 
> Sorry, I forgot to mention I also updated the FLIP to include table apis
> for connection. It was originally in examples but not in the public api
> section.
> 
> On Tue, Jul 29, 2025 at 10:12 AM Hao Li <h...@confluent.io> wrote:
> 
>> Hi Leonard,
>> 
>> Thanks for the feedback and offline sync yesterday.
>> 
>>> I think connection is a very common need for most catalogs like
>> MySQLCatalog、KafkaCatalog、HiveCatalog and so on, all of these catalogs need
>> a connection.
>> I added `TEMPORARY SYSTEM` connection so it's a global level connection
>> which can be used for Catalog creation. After syncing with Timo, we propose
>> to store it first in memory like `TEMPORARY SYSTEM FUNCTION` since this
>> FLIP is already introducing lots of concepts and interfaces. We can provide
>> `SYSTEM` connection and related interfaces to persist it in following up
>> FLIPs.
>> 
>>> In this case, I think reducing connector development cost is more
>> important than making is explicit, the connector knows which options is
>> sensitive or not.
>> Sure. I updated the FLIP to merge connection options with table options so
>> it's easier for current connectors.
>> 
>>> I hope the BasicConnectionFactory can be a common one that can feed most
>> common users case, otherwise encrypt all options is a good idea.
>> I updated to `DefaultConnectionFactory` which handles most of the secret
>> keys.
>> 
>> Thanks,
>> Hao
>> 
>> On Mon, Jul 28, 2025 at 6:13 AM Leonard Xu <xbjt...@gmail.com> wrote:
>> 
>>> Hey, Hao
>>> 
>>> Please see my comments as follows:
>>> 
>>>>> 2. I think we can also modify the create catalog ddl syntax.
>>>> 
>>>> ```
>>>> CREATE CATALOG cat USING CONNECTION mycat.mydb.mysql_prod
>>>> WITH (
>>>>   'type' = 'jdbc'
>>>> );
>>>> ```
>>>> 
>>>> Does `mycat.mydb.mysql_prod` exist in another catalog? This feels like a
>>>> chicken-egg problem. I think for connections to be used for catalog
>>>> creation, it needs to be system connection similar to system function
>>> which
>>>> exist outside of CatalogManager. Maybe we can defer this to later
>>>> functionality?
>>> 
>>> I think connection is a very common need for most catalogs like
>>> MySQLCatalog、KafkaCatalog、HiveCatalog and so on, all of these catalogs need
>>> a connection.
>>> 
>>> 
>>>>> 3. It seems the connector factory should merge the with options and
>>>> connection options together and then create the source/sink. It's
>>>> better that framework can merge all these options and connectors don't
>>> need
>>>> any codes.
>>>> 
>>>> I think it's better to separate connections with table options and make
>>> it
>>>> explicit. Reasons is: the connection here should be a decrypted one.
>>> It's
>>>> sensitive and should be handled carefully regarding logging, usage etc.
>>>> Mixing with original table options makes it hard to do. But the Flip
>>> used
>>>> `CatalogConnection` which is an encrypted one. I'll update it to
>>>> `SensitveConnection`.
>>>>> (4)Framework-level Resolution : +1 to Shengkai's point about having the
>>>> framework (DynamicTableFactory) return complete options to reduce
>>> connector
>>>> adaptation cost.
>>>> 
>>>> Please see my explanation for Shengkai's similar question.
>>> 
>>> In this case, I think reducing connector development cost is more
>>> important than making is explicit, the connector knows which options is
>>> sensitive or not.
>>> 
>>> 
>>>>> 4. Why we need to introduce ConnectionFactory? I think connection is
>>> like
>>>> CatalogTable. It should hold the basic information and all information
>>> in
>>>> the connection should be stored into secret store.
>>>> 
>>>> The main reason is to enable user defined connection handling for
>>> different
>>>> types. For example, if connection type is `basic`, the corresponding
>>>> factory can handle basic type secrets (e.g. extract username/password
>>> from
>>>> connection options and do encryption).
>>>> 
>>>>> (2) Configurability of SECRET_FIELDS : Could the hardcoded
>>> SECRET_FIELDS
>>>> in BasicConnectionFactory be made configurable (e.g., 'token' vs
>>>> 'accessKey') for better connector compatibility?
>>>> 
>>>> This depends on `ConnectionFactory` implementation and can be self
>>> defined
>>>> by user.
>>> 
>>> I hope the BasicConnectionFactory can be a common one that can feed most
>>> common users case, otherwise encrypt all options is a good idea.
>>> 
>>> Btw, I also want to push the FLIP forward and start a vote ASAP, thus a
>>> meeting is welcome if you think it can help finalizing the discussion
>>> thread.
>>> 
>>> 
>>> Best,
>>> Leonard
>>> 
>>> 
>>> 
>>>> 
>>>>> Hi friends
>>>>> 
>>>>> I like the updated FLIP goals, that’s what I want. I’ve some feedback:
>>>>> 
>>>>> (1) Minor: Interface Hierarchy : Why doesn't WritableSecretStore extend
>>>>> SecretStore?
>>>>> (2) Configurability of SECRET_FIELDS : Could the hardcoded
>>> SECRET_FIELDS
>>>>> in BasicConnectionFactory be made configurable (e.g., 'token' vs
>>>>> 'accessKey') for better connector compatibility?
>>>>> (3)Inconsistent Return Types : ConnectionFactory#resolveConnection
>>> returns
>>>>> SensitiveConnection, while BasicConnectionFactory#resolveConnection
>>> returns
>>>>> Map<String, String>. Should these be aligned?
>>>>> (4)Framework-level Resolution : +1 to Shengkai's point about having the
>>>>> framework (DynamicTableFactory) return complete options to reduce
>>> connector
>>>>> adaptation cost.
>>>>> (5)Secret ID Handling : When no encryption is needed, secretId is null
>>>>> (from secrets.isEmpty() ? null : secretStore.storeSecret(secrets)).
>>> This
>>>>> behavior should be explicitly documented in the interfaces.
>>>>> 
>>>>> Best,
>>>>> Leonard
>>>>> 
>>>>>> 2025 7月 24 11:44,Shengkai Fang <fskm...@gmail.com> 写道:
>>>>>> 
>>>>>> hi.
>>>>>> 
>>>>>> Sorry for the late reply. I just have some questions:
>>>>>> 
>>>>>> 1. Why SecretStoreFactory#open throws a CatalogException? I think the
>>>>>> exteranl system can not handle this exception.
>>>>>> 
>>>>>> 2. I think we can also modify the create catalog ddl syntax.
>>>>>> 
>>>>>> ```
>>>>>> CREATE CATALOG cat USING CONNECTION mycat.mydb.mysql_prod
>>>>>> WITH (
>>>>>>  'type' = 'jdbc'
>>>>>> );
>>>>>> ```
>>>>>> 
>>>>>> 3. It seems the connector factory should merge the with options and
>>>>>> connection options together and then create the source/sink. It's
>>>>>> better that framework can merge all these options and connectors don't
>>>>> need
>>>>>> any codes.
>>>>>> 
>>>>>> 4. Why we need to introduce ConnectionFactory? I think connection is
>>> like
>>>>>> CatalogTable. It should hold the basic information and all
>>> information in
>>>>>> the connection should be stored into secret store.
>>>>>> 
>>>>>> 
>>>>>> Best,
>>>>>> Shengkai
>>>>>> 
>>>>>> 
>>>>>> Timo Walther <twal...@apache.org> 于2025年7月22日周二 22:04写道:
>>>>>> 
>>>>>>> Hi Mayank,
>>>>>>> 
>>>>>>> Thanks for updating the FLIP and clearly documenting our discussion.
>>>>>>> 
>>>>>>> +1 for moving forward with the vote, unless there are objections from
>>>>>>> others.
>>>>>>> 
>>>>>>> Cheers,
>>>>>>> Timo
>>>>>>> 
>>>>>>> On 22.07.25 02:14, Mayank Juneja wrote:
>>>>>>>> Hi Ryan and Austin,
>>>>>>>> 
>>>>>>>> Thanks for your suggestions. I've updated the FLIP with the
>>> following
>>>>>>>> additional info -
>>>>>>>> 
>>>>>>>> 1. *table.secret-store.kind* key to register the SecretStore in a
>>> yaml
>>>>>>> file
>>>>>>>> 2. *updateSecret* method in WritableSecretStore interface
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Mayank
>>>>>>>> 
>>>>>>>> On Thu, Jul 17, 2025 at 5:42 PM Austin Cawley-Edwards <
>>>>>>>> austin.caw...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> Hey all,
>>>>>>>>> 
>>>>>>>>> Thanks for the nice flip all! I’m just reading through – had one
>>>>>>> question
>>>>>>>>> on the ALTER CONNECTION implementation flow. Would it make sense
>>> for
>>>>> the
>>>>>>>>> WritableSecretStore to expose a method for updating a secret by
>>> ID, so
>>>>>>> it
>>>>>>>>> can be done atomically? Else, would we need to call delete and
>>> create
>>>>>>>>> again, potentially introducing concurrent resolution errors?
>>>>>>>>> 
>>>>>>>>> Best,
>>>>>>>>> Austin
>>>>>>>>> 
>>>>>>>>> On Thu, Jul 17, 2025 at 13:07 Ryan van Huuksloot
>>>>>>>>> <ryan.vanhuuksl...@shopify.com.invalid> wrote:
>>>>>>>>> 
>>>>>>>>>> Hi Mayank,
>>>>>>>>>> 
>>>>>>>>>> Thanks for updating the FLIP. Overall it looks good to me.
>>>>>>>>>> 
>>>>>>>>>> One question I had related to how someone could choose the
>>>>> SecretStore
>>>>>>>>> they
>>>>>>>>>> want to use if they use something like the SQL Gateway as the
>>>>>>> entrypoint
>>>>>>>>> on
>>>>>>>>>> top of a remote Session cluster. I don't see an explicit way to
>>> set
>>>>> the
>>>>>>>>>> SecretStore in the FLIP.
>>>>>>>>>> I assume we'll do it similar to the CatalogStore but I wanted to
>>> call
>>>>>>>>> this
>>>>>>>>>> out.
>>>>>>>>>> 
>>>>>>>>>> table.catalog-store.kind: filetable.catalog-store.file.path:
>>>>>>>>>> file:///path/to/catalog/store/
>>>>>>>>>> 
>>>>>>>>>> Ryan van Huuksloot
>>>>>>>>>> Staff Engineer, Infrastructure | Streaming Platform
>>>>>>>>>> [image: Shopify]
>>>>>>>>>> <
>>>>>>> 
>>> https://www.shopify.com/?utm_medium=salessignatures&utm_source=hs_email
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Wed, Jul 16, 2025 at 2:22 PM Mayank Juneja <
>>>>>>> mayankjunej...@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Hi everyone,
>>>>>>>>>>> 
>>>>>>>>>>> Thanks for your valuable inputs. I have updated the FLIP with the
>>>>>>> ideas
>>>>>>>>>>> proposed earlier in the thread. Looking forward to your feedback.
>>>>>>>>>>> https://cwiki.apache.org/confluence/x/cYroF
>>>>>>>>>>> 
>>>>>>>>>>> Best,
>>>>>>>>>>> Mayank
>>>>>>>>>>> 
>>>>>>>>>>> On Fri, Jun 27, 2025 at 2:59 AM Leonard Xu <xbjt...@gmail.com>
>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Quick response, thanks Mayank, Hao and Timo for the effort.  The
>>>>> new
>>>>>>>>>>>> proposal looks well, +1 from my side.
>>>>>>>>>>>> 
>>>>>>>>>>>> Could you draft(update) current FLIP docs thus we can have some
>>>>>>>>>> specific
>>>>>>>>>>>> discussions later?
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Best,
>>>>>>>>>>>> Leonard
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> 2025 6月 26 15:06,Timo Walther <twal...@apache.org> 写道:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi everyone,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> sorry for the late reply, feature freeze kept me busy. Mayank,
>>> Hao
>>>>>>>>>> and
>>>>>>>>>>> I
>>>>>>>>>>>> synced offline and came up we an improved proposal. Before we
>>>>> update
>>>>>>>>>> the
>>>>>>>>>>>> FLIP let me summarize the most important key facts that
>>> hopefully
>>>>>>>>>> address
>>>>>>>>>>>> most concerns:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 1) SecretStore
>>>>>>>>>>>>> - Similar to CatalogStore, we introduce a SecretStore as the
>>>>>>>>> highest
>>>>>>>>>>>> level in TableEnvironment.
>>>>>>>>>>>>> - SecretStore is initialized with options and potentially
>>>>>>>>> environment
>>>>>>>>>>>> variables. Including
>>>>>>>>> EnvironmentSettings.withSecretStore(SecretStore).
>>>>>>>>>>>>> - The SecretStore is pluggable and discovered using the regular
>>>>>>>>>>>> factory-approach.
>>>>>>>>>>>>> - For example, it could implement Azure Key Vault or other
>>> cloud
>>>>>>>>>>>> provider secrets stores.
>>>>>>>>>>>>> - Goal: Flink and Flink catalogs do not have to deal with
>>>>> sensitive
>>>>>>>>>>> data.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 2) Connections
>>>>>>>>>>>>> - Connections are catalog objects identified with 3-part
>>>>>>>>> identifiers.
>>>>>>>>>>>> 3-part identifiers are crucial for managability of larger
>>> projects
>>>>>>>>> and
>>>>>>>>>>>> align with existing catalog objects.
>>>>>>>>>>>>> - They contain connection details, e.g. URL, query parameters,
>>> and
>>>>>>>>>>> other
>>>>>>>>>>>> configuration.
>>>>>>>>>>>>> - They do not contain secrets, but only pointers to secrets in
>>> the
>>>>>>>>>>>> SecretStore.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 3) Connection DDL
>>>>>>>>>>>>> 
>>>>>>>>>>>>> CREATE [TEMPORARY] CONNECTION mycat.mydb.OpenAPI WITH (
>>>>>>>>>>>>> 'type' = 'basic' | 'bearer' | 'jwt' | 'oauth' | ...,
>>>>>>>>>>>>> ...
>>>>>>>>>>>>> )
>>>>>>>>>>>>> 
>>>>>>>>>>>>> - Connection type is pluggable and discovered using the regular
>>>>>>>>>>>> factory-approach.
>>>>>>>>>>>>> - The factory extracts secrets and puts them into SecretStore.
>>>>>>>>>>>>> - The factory only leaves non-confidential options left that
>>> can
>>>>> be
>>>>>>>>>>>> stored in a catalog.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> When executing:
>>>>>>>>>>>>> CREATE [TEMPORARY] CONNECTION mycat.mydb.OpenAPI WITH (
>>>>>>>>>>>>> 'type' = 'basic',
>>>>>>>>>>>>> 'url' = 'api.example.com',
>>>>>>>>>>>>> 'username' = 'bob',
>>>>>>>>>>>>> 'password' = 'xyz'
>>>>>>>>>>>>> )
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The catalog will receive something similar to:
>>>>>>>>>>>>> CREATE [TEMPORARY] CONNECTION mycat.mydb.OpenAPI WITH (
>>>>>>>>>>>>> 'type' = 'basic',
>>>>>>>>>>>>> 'url' = 'api.example.com',
>>>>>>>>>>>>> 'secret.store' = 'azure-key-vault'
>>>>>>>>>>>>> 'secret.id' = 'secretId'
>>>>>>>>>>>>> )
>>>>>>>>>>>>> 
>>>>>>>>>>>>> - However, the exact property design is up to the connection
>>>>>>>>> factory.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 4) Connection Usage
>>>>>>>>>>>>> 
>>>>>>>>>>>>> CREATE TABLE t (...) USING CONNECTION mycat.mydb.OpenAPI;
>>>>>>>>>>>>> 
>>>>>>>>>>>>> - MODEL, FUNCTION, TABLE DDL will support USING CONNECTION
>>> keyword
>>>>>>>>>>>> similar to BigQuery.
>>>>>>>>>>>>> - The connection will be provided in a table/model
>>>>>>>>> provider/function
>>>>>>>>>>>> definition factory.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 5) CatalogStore / Catalog Initialization
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Catalog store or catalog can make use of SecretStore to
>>> retrieve
>>>>>>>>>>> initial
>>>>>>>>>>>> credentials for bootstrapping. All objects lower then catalog
>>>>>>>>>>> store/catalog
>>>>>>>>>>>> can then use connections. If you think we still need system
>>> level
>>>>>>>>>>>> connections, we can support CREATE SYSTEM CONNECTION GlobalName
>>>>> WITH
>>>>>>>>>> (..)
>>>>>>>>>>>> similar to SYSTEM functions directly store in a
>>> ConnectioManager in
>>>>>>>>>>>> TableEnvironment. But for now I would suggest to start simple
>>> with
>>>>>>>>>>>> per-catalog connections and later evolve the design.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Dealing with secrets is a very sensitive topic and I'm clearly
>>> not
>>>>>>>>> an
>>>>>>>>>>>> expert on it. This is why we should try to push the problem to
>>>>>>>>> existing
>>>>>>>>>>>> solutions and don't start storing secrets in Flink in any way.
>>>>> Thus,
>>>>>>>>>> the
>>>>>>>>>>>> interfaces will be defined very generic.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Looking forward to your feedback.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>> Timo
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 09.06.25 04:01, Leonard Xu wrote:
>>>>>>>>>>>>>> Thanks  Timo for joining this thread.
>>>>>>>>>>>>>> I agree that this feature is needed by the community; the
>>> current
>>>>>>>>>>>> disagreement is only about the implementation method or
>>> solution.
>>>>>>>>>>>>>> Your thoughts looks generally good to me, looking forward to
>>> your
>>>>>>>>>>>> proposal.
>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>> Leonard
>>>>>>>>>>>>>>> 2025 6月 6 22:46,Timo Walther <twal...@apache.org> 写道:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Hi everyone,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> thanks for this healthy discussion. Looking at high number of
>>>>>>>>>>>> participants, it looks like we definitely want this feature. We
>>>>> just
>>>>>>>>>> need
>>>>>>>>>>>> to figure out the "how".
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> This reminds me very much of the discussion we had for CREATE
>>>>>>>>>>>> FUNCTION. There, we discussed whether functions should be named
>>>>>>>>>> globally
>>>>>>>>>>> or
>>>>>>>>>>>> catalog-specific. In the end, we decided for both `CREATE SYSTEM
>>>>>>>>>>> FUNCTION`
>>>>>>>>>>>> and `CREATE FUNCTION`, satisfying both the data platform team
>>> of an
>>>>>>>>>>>> organization (which might provide system functions) and
>>> individual
>>>>>>>>> data
>>>>>>>>>>>> teams or use cases (scoped by catalog/database).
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Looking at other modern vendors like Snowflake there is
>>> SECRET
>>>>>>>>>>> (scoped
>>>>>>>>>>>> to schema) [1] and API INTEGRATION [2] (scoped to account). So
>>> also
>>>>>>>>>> other
>>>>>>>>>>>> vendors offer global and per-team / per-use case connections
>>>>> details.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> In general, I think fitting connections into the existing
>>>>>>>>> concepts
>>>>>>>>>>> for
>>>>>>>>>>>> catalog objects (with three-part identifier) makes managing them
>>>>>>>>>> easier.
>>>>>>>>>>>> But I also see the need for global defaults.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Btw keep in mind that a catalog implementation should only
>>> store
>>>>>>>>>>>> metadata. Similar how a CatalogTable doesn't store the actual
>>>>> data, a
>>>>>>>>>>>> CatalogConnection should not store the credentials. It should
>>> only
>>>>>>>>>> offer
>>>>>>>>>>> a
>>>>>>>>>>>> factory that allows for storing and retrieving them. In real
>>> world
>>>>>>>>>>>> scenarios a factory is most likely backed by a product like
>>> Azure
>>>>> Key
>>>>>>>>>>> Vault.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> So code-wise having a ConnectionManager that behaves similar
>>> to
>>>>>>>>>>>> FunctionManager sounds reasonable.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> +1 for having special syntax instead of using properties.
>>> This
>>>>>>>>>> allows
>>>>>>>>>>>> to access connections in tables, models, functions. And
>>> catalogs,
>>>>> if
>>>>>>>>> we
>>>>>>>>>>>> agree to have global ones as well.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> What do you think?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Let me spend some more thoughts on this and come back with a
>>>>>>>>>> concrete
>>>>>>>>>>>> proposal by early next week.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>> Timo
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> [1]
>>>>>>>>> https://docs.snowflake.com/en/sql-reference/sql/create-secret
>>>>>>>>>>>>>>> [2]
>>>>>>>>>>>> 
>>>>>>>>> 
>>>>> https://docs.snowflake.com/en/sql-reference/sql/create-api-integration
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 04.06.25 10:47, Leonard Xu wrote:
>>>>>>>>>>>>>>>> Hey,Mayank
>>>>>>>>>>>>>>>> Please see my feedback as following:
>>>>>>>>>>>>>>>> 1. One of the motivations of this FLIP is to improve
>>> security.
>>>>>>>>>>>> However, the current design stores all connection information in
>>>>> the
>>>>>>>>>>>> catalog,
>>>>>>>>>>>>>>>> and each Flink SQL job reads from the catalog during
>>>>>>>>> compilation.
>>>>>>>>>>> The
>>>>>>>>>>>> connection information is passed between SQL Gateway and the
>>>>>>>>>>>>>>>> catalog in plaintext, which actually introduces new security
>>>>>>>>>> risks.
>>>>>>>>>>>>>>>> 2. The name "Connection" should be changed to something like
>>>>>>>>>>>> ConnectionSpec to clearly indicate that it is a object
>>> containing
>>>>>>>>> only
>>>>>>>>>>>> static
>>>>>>>>>>>>>>>> properties without a lifecycle. Putting aside the naming
>>> issue,
>>>>>>>>> I
>>>>>>>>>>>> think the current model and hierarchy design is somewhat
>>> strange.
>>>>>>>>>> Storing
>>>>>>>>>>>>>>>> various kinds of connections (e.g., Kafka, MySQL) in the
>>> same
>>>>>>>>>>> Catalog
>>>>>>>>>>>> with hierarchical identifiers like
>>>>>>>>> catalog-name.db-name.connection-name
>>>>>>>>>>>>>>>> raises the following questions:
>>>>>>>>>>>>>>>> (1) What is the purpose of this hierarchical structure of
>>>>>>>>>> Connection
>>>>>>>>>>>> object ?
>>>>>>>>>>>>>>>> (2) If we can use a Connection to create a MySQL table, why
>>>>>>>>> can't
>>>>>>>>>> we
>>>>>>>>>>>> use a Connection to create a MySQL Catalog?
>>>>>>>>>>>>>>>> 3. Regarding the connector usage examples given in this
>>> FLIP:
>>>>>>>>>>>>>>>> ```sql
>>>>>>>>>>>>>>>> 1  -- Example 2: Using connection for jdbc tables
>>>>>>>>>>>>>>>> 2  CREATE OR REPLACE CONNECTION mysql_customer_db
>>>>>>>>>>>>>>>> 3  WITH (
>>>>>>>>>>>>>>>> 4    'type' = 'jdbc',
>>>>>>>>>>>>>>>> 5    'jdbc.url' = 'jdbc:mysql://
>>>>>>>>>>>> customer-db.example.com:3306/customerdb',
>>>>>>>>>>>>>>>> 6    'jdbc.connection.ssl.enabled' = 'true'
>>>>>>>>>>>>>>>> 7  );
>>>>>>>>>>>>>>>> 8
>>>>>>>>>>>>>>>> 9  CREATE TABLE customers (
>>>>>>>>>>>>>>>> 10   customer_id INT,
>>>>>>>>>>>>>>>> 11   PRIMARY KEY (customer_id) NOT ENFORCED
>>>>>>>>>>>>>>>> 12 ) WITH (
>>>>>>>>>>>>>>>> 13   'connector' = 'jdbc',
>>>>>>>>>>>>>>>> 14   'jdbc.connection' = 'mysql_customer_db',
>>>>>>>>>>>>>>>> 15   'jdbc.connection.ssl.enabled' = 'true',
>>>>>>>>>>>>>>>> 16   'jdbc.connection.max-retry-timeout' = '60s',
>>>>>>>>>>>>>>>> 17   'jdbc.table-name' = 'customers',
>>>>>>>>>>>>>>>> 18   'jdbc.lookup.cache' = 'PARTIAL'
>>>>>>>>>>>>>>>> 19 );
>>>>>>>>>>>>>>>> ```
>>>>>>>>>>>>>>>> I see three issues from SQL semantics and Connector
>>>>>>>>> compatibility
>>>>>>>>>>>> perspectives:
>>>>>>>>>>>>>>>> (1) Look at line 14: `mysql_customer_db` is an object
>>>>> identifier
>>>>>>>>>> of
>>>>>>>>>>> a
>>>>>>>>>>>> CONNECTION defined in SQL. However, this identifier is
>>> referenced
>>>>>>>>>>>>>>>>   via a string value inside the table’s WITH clause, which
>>>>>>>>> feel
>>>>>>>>>>>> hack for me.
>>>>>>>>>>>>>>>> (2) Look at lines 14–16: the use of the specific prefix
>>>>>>>>>>>> `jdbc.connection` will confuse users because `connection.xx`
>>> maybe
>>>>>>>>>>> already
>>>>>>>>>>>> used as
>>>>>>>>>>>>>>>> a prefix for existing configuration items.
>>>>>>>>>>>>>>>> (3) Look at lines 14–18: Why do all existing configuration
>>>>>>>>> options
>>>>>>>>>>>> need to be prefixed with `jdbc`, even they’re not related to
>>>>>>>>> Connection
>>>>>>>>>>>> properties?
>>>>>>>>>>>>>>>> This completely changes user habits — is it backward
>>>>> compatible?
>>>>>>>>>>>>>>>> In my opinion, Connection should be a model independent of
>>>>> both
>>>>>>>>>>>> Catalog and Table, and can be referenced by all
>>>>>>>>> catalog/table/udf/model
>>>>>>>>>>>> object.
>>>>>>>>>>>>>>>> It should be managed by a Component such as a
>>> ConnectionManager
>>>>>>>>> to
>>>>>>>>>>>> enable reuse. For security purposes, authentication mechanisms
>>>>> could
>>>>>>>>>>>>>>>> be supported within the ConnectionManager.
>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>> Leonard
>>>>>>>>>>>>>>>>> 2025 6月 4 02:04,Martijn Visser <martijnvis...@apache.org>
>>> 写道:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> First of all, I think having a Connection resource is
>>>>> something
>>>>>>>>>>> that
>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>> be beneficial for Apache Flink. I could see that being
>>>>> extended
>>>>>>>>>> in
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> future to allow for easier secret handling [1].
>>>>>>>>>>>>>>>>> In my mental mind, I'm comparing this proposal against
>>> SQL/MED
>>>>>>>>>> from
>>>>>>>>>>>> the ISO
>>>>>>>>>>>>>>>>> standard [2]. I do think that SQL/MED isn't a very user
>>>>>>>>> friendly
>>>>>>>>>>>> syntax
>>>>>>>>>>>>>>>>> though, looking at Postgres for example [3].
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I think it's a valid question if Connection should be
>>>>>>>>> considered
>>>>>>>>>>>> with a
>>>>>>>>>>>>>>>>> catalog or database-level scope. @Ryan can you share
>>> something
>>>>>>>>>>> more,
>>>>>>>>>>>> since
>>>>>>>>>>>>>>>>> you've mentioned "Note: I much prefer catalogs for this
>>> case.
>>>>>>>>>> Which
>>>>>>>>>>>> is what
>>>>>>>>>>>>>>>>> we use internally to manage connection properties". It
>>> looks
>>>>>>>>> like
>>>>>>>>>>>> there
>>>>>>>>>>>>>>>>> isn't a strong favourable approach looking at other vendors
>>>>>>>>>> (like,
>>>>>>>>>>>>>>>>> Databricks does scopes it on a Unity catalog, Snowflake on
>>> a
>>>>>>>>>>> database
>>>>>>>>>>>>>>>>> level).
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Also looking forward to Leonard's input.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Martijn
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> [1] https://issues.apache.org/jira/browse/FLINK-36818
>>>>>>>>>>>>>>>>> [2] https://www.iso.org/standard/84804.html
>>>>>>>>>>>>>>>>> [3]
>>>>>>>>>> https://www.postgresql.org/docs/current/sql-createserver.html
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Fri, May 30, 2025 at 5:07 AM Leonard Xu <
>>> xbjt...@gmail.com
>>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Hey Mayank.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thanks for the FLIP, I went through this FLIP quickly and
>>>>>>>>> found
>>>>>>>>>>> some
>>>>>>>>>>>>>>>>>> issues which I think we
>>>>>>>>>>>>>>>>>> need to deep discuss later. As we’re on a short Dragon
>>> boat
>>>>>>>>>>>> Festival,
>>>>>>>>>>>>>>>>>> could you kindly hold
>>>>>>>>>>>>>>>>>> on this thread? and we will back to continue the FLIP
>>>>> discuss.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>>>> Leonard
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 2025 4月 29 23:07,Mayank Juneja <mayankjunej...@gmail.com
>>>> 
>>>>>>>>> 写道:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> I would like to open up for discussion a new FLIP-529
>>> [1].
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Motivation:
>>>>>>>>>>>>>>>>>>> Currently, Flink SQL handles external connectivity by
>>>>>>>>> defining
>>>>>>>>>>>> endpoints
>>>>>>>>>>>>>>>>>>> and credentials in table configuration. This approach
>>>>>>>>> prevents
>>>>>>>>>>>>>>>>>> reusability
>>>>>>>>>>>>>>>>>>> of these connections and makes table definition less
>>> secure
>>>>>>>>> by
>>>>>>>>>>>> exposing
>>>>>>>>>>>>>>>>>>> sensitive information.
>>>>>>>>>>>>>>>>>>> We propose the introduction of a new "connection"
>>> resource
>>>>> in
>>>>>>>>>>>> Flink. This
>>>>>>>>>>>>>>>>>>> will be a pluggable resource configured with a remote
>>>>>>>>> endpoint
>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> associated access key. Once defined, connections can be
>>>>>>>>> reused
>>>>>>>>>>>> across
>>>>>>>>>>>>>>>>>> table
>>>>>>>>>>>>>>>>>>> definitions, and eventually for model definition (as
>>>>>>>>> discussed
>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> FLIP-437)
>>>>>>>>>>>>>>>>>>> for inference, enabling seamless and secure integration
>>> with
>>>>>>>>>>>> external
>>>>>>>>>>>>>>>>>>> systems.
>>>>>>>>>>>>>>>>>>> The connection resource will provide a new, optional way
>>> to
>>>>>>>>>>> manage
>>>>>>>>>>>>>>>>>> external
>>>>>>>>>>>>>>>>>>> connectivity in Flink. Existing methods for table
>>>>> definitions
>>>>>>>>>>> will
>>>>>>>>>>>> remain
>>>>>>>>>>>>>>>>>>> unchanged.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> [1] https://cwiki.apache.org/confluence/x/cYroF
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>>>> Mayank Juneja
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> *Mayank Juneja*
>>>>>>>>>>> Product Manager | Data Streaming and AI
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>> 
>>> 

Reply via email to