Browse Source

fill additional properties

hcpp 1 year ago
parent
commit
f6f6c9b115

+ 29 - 17
ydb/core/fq/libs/control_plane_proxy/actors/query_utils.cpp

@@ -173,33 +173,48 @@ TString MakeCreateExternalDataSourceQuery(
     const TSigner::TPtr& signer) {
     using namespace fmt::literals;
 
-    TString sourceType;
-    TString locationValue;
-    TString locationKey;
+    TString properties;
     switch (connectionContent.setting().connection_case()) {
         case FederatedQuery::ConnectionSetting::CONNECTION_NOT_SET:
         case FederatedQuery::ConnectionSetting::kYdbDatabase:
         break;
         case FederatedQuery::ConnectionSetting::kClickhouseCluster:
-            locationKey = "MDB_CLUSTER_ID";
-            sourceType = "ClickHouse";
-            locationValue = EscapeString(connectionContent.setting().clickhouse_cluster().database_id(), '"');
+            properties = fmt::format(
+                R"(
+                    SOURCE_TYPE="ClickHouse",
+                    MDB_CLUSTER_ID="{mdb_cluster_id}",
+                    DATABASE_NAME="{database_name}",
+                    PROTOCOL="HTTP",
+                    USE_TLS="true"
+                )",
+                "mdb_cluster_id"_a = EscapeString(connectionContent.setting().clickhouse_cluster().database_id(), '"'),
+                "database_name"_a = EscapeString(connectionContent.setting().clickhouse_cluster().database_name(), '"'));
         break;
         case FederatedQuery::ConnectionSetting::kDataStreams:
         break;
         case FederatedQuery::ConnectionSetting::kObjectStorage: {
-            locationKey = "LOCATION";
             auto bucketName = connectionContent.setting().object_storage().bucket();
-            locationValue = objectStorageEndpoint + "/" + EscapeString(bucketName, '"') + "/";
-            sourceType = "ObjectStorage";
+            properties = fmt::format(
+                R"(
+                    SOURCE_TYPE="ObjectStorage",
+                    LOCATION="{location}"
+                )",
+                "location"_a = objectStorageEndpoint + "/" + EscapeString(bucketName, '"') + "/");
             break;
         }
         case FederatedQuery::ConnectionSetting::kMonitoring:
         break;
         case FederatedQuery::ConnectionSetting::kPostgresqlCluster:
-            locationKey = "MDB_CLUSTER_ID";
-            locationValue = EscapeString(connectionContent.setting().postgresql_cluster().database_id(), '"');
-            sourceType = "PostgreSQL";
+            properties = fmt::format(
+                R"(
+                    SOURCE_TYPE="PostgreSQL",
+                    MDB_CLUSTER_ID="{mdb_cluster_id}",
+                    DATABASE_NAME="{database_name}",
+                    PROTOCOL="NATIVE",
+                    USE_TLS="true"
+                )",
+                "mdb_cluster_id"_a = EscapeString(connectionContent.setting().clickhouse_cluster().database_id(), '"'),
+                "database_name"_a = EscapeString(connectionContent.setting().clickhouse_cluster().database_name(), '"'));
         break;
     }
 
@@ -207,15 +222,12 @@ TString MakeCreateExternalDataSourceQuery(
     return fmt::format(
         R"(
                 CREATE EXTERNAL DATA SOURCE {external_source} WITH (
-                    SOURCE_TYPE="{source_type}",
-                    {location_key}="{location_value}"
+                    {properties}
                     {auth_params}
                 );
             )",
-        "source_type"_a = sourceType,
         "external_source"_a = EncloseAndEscapeString(sourceName, '`'),
-        "location_key"_a = locationKey,
-        "location_value"_a = locationValue,
+        "properties"_a = properties,
         "auth_params"_a =
             CreateAuthParamsQuery(connectionContent.setting(),
                                   connectionContent.name(),

+ 2 - 0
ydb/public/api/protos/draft/fq.proto

@@ -459,6 +459,7 @@ message YdbDatabase {
 
 message ClickHouseCluster {
     string database_id = 1 [(Ydb.length).le = 1024];
+    string database_name = 8 [(Ydb.length).le = 1024];
     string login = 2 [(Ydb.length).le = 1024, (Ydb.sensitive) = true];
     string password = 3 [(Ydb.length).le = 1024, (Ydb.sensitive) = true];
     IamAuth auth = 4;
@@ -476,6 +477,7 @@ message ObjectStorageConnection {
 
 message PostgreSQLCluster {
     string database_id = 1 [(Ydb.length).le = 1024];
+    string database_name = 8 [(Ydb.length).le = 1024];
     string login = 2 [(Ydb.length).le = 1024, (Ydb.sensitive) = true];
     string password = 3 [(Ydb.length).le = 1024, (Ydb.sensitive) = true];
     IamAuth auth = 4;