Hi Timo, Thanks for the suggestion. I updated the FLIP with `ObjectIdentifier` taking only objectName and made it clear that the system connection uses only a simple identifier instead of compound identifier.
Thanks, Hao On Thu, Jul 31, 2025 at 6:12 AM Timo Walther <twal...@apache.org> wrote: > Thanks for updating the FLIP and starting a VOTE thread. I have two last > minute questions before I cast my vote: > > It seems the definition of TEMPORARY SYSTEM CONNECTION is not precise > enough. In my point of view, system connections are single part > identifiers (similar to functions). And catalog connections are 3-part > identifiers. > > So will we support the following DDL: > > CREATE TEMPORARY SYSTEM CONNECTION global_connection WITH (...); > > CREATE TABLE t (...) USING CONNECTION global_connection > > I think we should. But then we need to update the > `CatalogTable.getConnection(): Optional<ObjectIdentifier>` interface, > because ObjectIdentifier currently only supports 3 part identifiers. > > I suggest we modify ObjectIdentifier and let it have either 3 or 1 part. > Then we can also remove the need for FunctionIdentifier which exists for > exactly this purpose. > > What do you think? > > Cheers, > Timo > > > On 30.07.25 05:36, Leonard Xu wrote: > > 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 > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>> > >>>>>> > >>>> > >>>> > > > >