You are viewing a plain text version of this content. The canonical link for it is here.
Posted to gitbox@hive.apache.org by GitBox <gi...@apache.org> on 2021/03/09 19:58:21 UTC

[GitHub] [hive] nrg4878 commented on a change in pull request #2037: HIVE-24396: Support for external datasources via connectors (Same as PR#1680 rebased off new master)

nrg4878 commented on a change in pull request #2037:
URL: https://github.com/apache/hive/pull/2037#discussion_r590676810



##########
File path: ql/src/java/org/apache/hadoop/hive/ql/ddl/database/create/CreateDatabaseAnalyzer.java
##########
@@ -70,19 +73,43 @@ public void analyzeInternal(ASTNode root) throws SemanticException {
         managedLocationUri = unescapeSQLString(childNode.getChild(0).getText());
         outputs.add(toWriteEntity(managedLocationUri));
         break;
+      case HiveParser.TOK_DATACONNECTOR:
+        type = "REMOTE";
+        // locationUri = "REMOTE_DATABASE"; // TODO
+        ASTNode nextNode = (ASTNode) root.getChild(i);
+        connectorName = ((ASTNode)nextNode).getChild(0).getText();
+        outputs.add(toWriteEntity(connectorName));
+        // outputs.remove(toWriteEntity(locationUri));
+        if (managedLocationUri != null) {
+          outputs.remove(toWriteEntity(managedLocationUri));
+          managedLocationUri = null;
+        }
+        break;
       default:
         throw new SemanticException("Unrecognized token in CREATE DATABASE statement");
       }
     }
 
-    CreateDatabaseDesc desc = new CreateDatabaseDesc(databaseName, comment, locationUri, managedLocationUri,
-        ifNotExists, props);
-    rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), desc)));
-
+    CreateDatabaseDesc desc = null;
     Database database = new Database(databaseName, comment, locationUri, props);
-    if (managedLocationUri != null) {
-      database.setManagedLocationUri(managedLocationUri);
+    if (type.equalsIgnoreCase("NATIVE")) {
+      desc = new CreateDatabaseDesc(databaseName, comment, locationUri, managedLocationUri, ifNotExists, props);
+      database.setType(DatabaseType.NATIVE);
+      // database = new Database(databaseName, comment, locationUri, props);
+      if (managedLocationUri != null) {
+        database.setManagedLocationUri(managedLocationUri);
+      }
+    } else {
+      String remoteDbName = databaseName;
+      if (props != null && props.get("connector.remoteDbName") != null) // TODO finalize the property name
+        remoteDbName = props.get("connector.remoteDbName");
+      desc = new CreateDatabaseDesc(databaseName, comment, locationUri, null, ifNotExists, props, type,
+          connectorName, remoteDbName);
+      database.setConnector_name(connectorName);
+      database.setType(DatabaseType.REMOTE);
+      database.setRemote_dbname(remoteDbName);

Review comment:
       so the remote_dbname is actually a name of a database/schema in the remote DB instance. So it is not a JDBC URL. for example, in hive you can create a new DB called "mysql_test" that maps to a database named "test" in a remote MySQL instance. So in this case remote_dbname would be "test" and the database name in hive would be "mysql_test". Does the alleviate your concern? Thanks




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscribe@hive.apache.org
For additional commands, e-mail: gitbox-help@hive.apache.org