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 >> >>>>>>>> >> >>>>>>> >> >>>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >> >> >> >> >>