You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ng...@apache.org on 2021/04/06 15:40:01 UTC
[hive] 17/38: HIVE-24396: refactored code to Abstract class and
providers share common code
This is an automated email from the ASF dual-hosted git repository.
ngangam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
commit 3de6032b45890d46269d935f1e02d7bdab3f4cd1
Author: Naveen Gangam <ng...@cloudera.com>
AuthorDate: Mon Nov 23 17:59:30 2020 -0500
HIVE-24396: refactored code to Abstract class and providers share common code
---
.../JDBCConnectorProviderFactory.java | 9 ++-
.../jdbc/AbstractJDBCConnectorProvider.java | 13 ++--
.../jdbc/DerbySQLConnectorProvider.java | 69 ++++++++++++++++++++
.../dataconnector/jdbc/MySQLConnectorProvider.java | 74 ++++------------------
.../jdbc/PostgreSQLConnectorProvider.java | 71 ++++-----------------
5 files changed, 102 insertions(+), 134 deletions(-)
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/JDBCConnectorProviderFactory.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/JDBCConnectorProviderFactory.java
index 537fd2c..b1ebfe0 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/JDBCConnectorProviderFactory.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/JDBCConnectorProviderFactory.java
@@ -1,12 +1,11 @@
package org.apache.hadoop.hive.metastore.dataconnector;
import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.dataconnector.jdbc.DerbySQLConnectorProvider;
import org.apache.hadoop.hive.metastore.dataconnector.jdbc.MySQLConnectorProvider;
import org.apache.hadoop.hive.metastore.dataconnector.jdbc.PostgreSQLConnectorProvider;
-import static org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.MYSQL_TYPE;
-import static org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.POSTGRES_TYPE;
-
+import static org.apache.hadoop.hive.metastore.dataconnector.IDataConnectorProvider.*;
public class JDBCConnectorProviderFactory {
@@ -33,6 +32,10 @@ public class JDBCConnectorProviderFactory {
provider = new PostgreSQLConnectorProvider(dbName, connector);
break;
+ case DERBY_TYPE:
+ provider = new DerbySQLConnectorProvider(dbName, connector);
+ break;
+
default:
throw new RuntimeException("Unsupported JDBC type");
}
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/AbstractJDBCConnectorProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/AbstractJDBCConnectorProvider.java
index 62a7786..12ce799 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/AbstractJDBCConnectorProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/AbstractJDBCConnectorProvider.java
@@ -1,5 +1,6 @@
package org.apache.hadoop.hive.metastore.dataconnector.jdbc;
+import org.apache.hadoop.hive.metastore.ColumnType;
import org.apache.hadoop.hive.metastore.Warehouse;
import org.apache.hadoop.hive.metastore.api.DataConnector;
import org.apache.hadoop.hive.metastore.api.FieldSchema;
@@ -219,16 +220,13 @@ public abstract class AbstractJDBCConnectorProvider extends AbstractDataConnecto
return rs;
}
- private String wrapSize(int size) {
+ protected String wrapSize(int size) {
return "(" + size + ")";
}
- protected abstract String getDataType(String dbType, int size);
-
- /*
- private String getDataType(String mySqlType, int size) {
- //TODO: Geomentric, network, bit, array data types of postgresql needs to be supported.
- switch(mySqlType)
+ // subclasses call this first, anything that is not mappable by this code is mapped in the subclass
+ protected String getDataType(String mySqlType, int size) {
+ switch(mySqlType.toLowerCase())
{
case "char":
return ColumnType.CHAR_TYPE_NAME + wrapSize(size);
@@ -288,7 +286,6 @@ public abstract class AbstractJDBCConnectorProvider extends AbstractDataConnecto
return ColumnType.VOID_TYPE_NAME;
}
}
- */
@Override protected String getInputClass() {
return JDBC_INPUTFORMAT_CLASS;
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/DerbySQLConnectorProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/DerbySQLConnectorProvider.java
new file mode 100644
index 0000000..1cf90bc
--- /dev/null
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/DerbySQLConnectorProvider.java
@@ -0,0 +1,69 @@
+package org.apache.hadoop.hive.metastore.dataconnector.jdbc;
+
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.api.Table;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+public class DerbySQLConnectorProvider extends AbstractJDBCConnectorProvider {
+ private static Logger LOG = LoggerFactory.getLogger(DerbySQLConnectorProvider.class);
+
+ // private static final String DRIVER_CLASS = "org.apache.derby.jdbc.EmbeddedDriver".intern();
+ private static final String DRIVER_CLASS = "org.apache.derby.jdbc.AutoloadedDriver".intern();
+
+ public DerbySQLConnectorProvider(String dbName, DataConnector connector) {
+ super(dbName, connector);
+ driverClassName = DRIVER_CLASS;
+ }
+
+ /**
+ * Returns a list of all table names from the remote database.
+ * @return List A collection of all the table names, null if there are no tables.
+ * @throws IOException To indicate any failures with executing this API
+ */
+ @Override
+ protected ResultSet fetchTableNames() throws MetaException {
+ ResultSet rs = null;
+ try {
+ rs = getConnection().getMetaData().getTables(scoped_db, null, null, new String[] { "TABLE" });
+ } catch (SQLException sqle) {
+ LOG.warn("Could not retrieve table names from remote datasource, cause:" + sqle.getMessage());
+ throw new MetaException("Could not retrieve table names from remote datasource, cause:" + sqle.getMessage());
+ }
+ return rs;
+ }
+
+ /**
+ * Fetch a single table with the given name, returns a Hive Table object from the remote database
+ * @return Table A Table object for the matching table, null otherwise.
+ * @throws MetaException To indicate any failures with executing this API
+ * @param tableName
+ */
+ @Override
+ public ResultSet fetchTableMetadata(String tableName) throws MetaException {
+ return null;
+ }
+
+ /**
+ * Returns Hive Table objects from the remote database for tables that match a name pattern.
+ * @return List A collection of objects that match the name pattern, null otherwise.
+ * @throws MetaException To indicate any failures with executing this API
+ * @param regex
+ */
+ @Override
+ public List<Table> getTables(String regex) throws MetaException {
+ return null;
+ }
+
+ protected String getDataType(String dbDataType, int size) {
+ String mappedType = super.getDataType(dbDataType, size);
+ // map any db specific types here. or return
+ return mappedType;
+ }
+}
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/MySQLConnectorProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/MySQLConnectorProvider.java
index f4f9b62..cb80c4f 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/MySQLConnectorProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/MySQLConnectorProvider.java
@@ -7,7 +7,6 @@ import org.apache.hadoop.hive.metastore.api.Table;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
@@ -26,7 +25,7 @@ public class MySQLConnectorProvider extends AbstractJDBCConnectorProvider {
/**
* Returns a list of all table names from the remote database.
* @return List A collection of all the table names, null if there are no tables.
- * @throws IOException To indicate any failures with executing this API
+ * @throws MetaException To indicate any failures with executing this API
*/
@Override protected ResultSet fetchTableNames() throws MetaException {
ResultSet rs = null;
@@ -46,6 +45,7 @@ public class MySQLConnectorProvider extends AbstractJDBCConnectorProvider {
* @param regex
*/
@Override public List<Table> getTables(String regex) throws MetaException {
+ LOG.info("getTables() not implemented yet");
return null;
}
@@ -69,70 +69,18 @@ public class MySQLConnectorProvider extends AbstractJDBCConnectorProvider {
}
}
- private String wrapSize(int size) {
- return "(" + size + ")";
- }
-
protected String getDataType(String dbDataType, int size) {
- //TODO: Geomentric, network, bit, array data types of postgresql needs to be supported.
- switch(dbDataType.toLowerCase())
+ String mappedType = super.getDataType(dbDataType, size);
+ if (!mappedType.equalsIgnoreCase(ColumnType.VOID_TYPE_NAME)) {
+ return mappedType;
+ }
+
+ // map any db specific types here.
+ switch (dbDataType.toLowerCase())
{
- case "char":
- return ColumnType.CHAR_TYPE_NAME + wrapSize(size);
- case "varchar":
- case "tinytext":
- return ColumnType.VARCHAR_TYPE_NAME + wrapSize(size);
- case "text":
- case "mediumtext":
- case "enum":
- case "set":
- case "tsvector":
- case "tsquery":
- case "uuid":
- case "json":
- return ColumnType.STRING_TYPE_NAME;
- case "blob":
- case "mediumblob":
- case "longblob":
- case "bytea":
- return ColumnType.BINARY_TYPE_NAME;
- case "tinyint":
- return ColumnType.TINYINT_TYPE_NAME;
- case "smallint":
- case "smallserial":
- return ColumnType.SMALLINT_TYPE_NAME;
- case "mediumint":
- case "int":
- case "serial":
- return ColumnType.INT_TYPE_NAME;
- case "bigint":
- case "bigserial":
- case "money":
- return ColumnType.BIGINT_TYPE_NAME;
- case "float":
- case "real":
- return ColumnType.FLOAT_TYPE_NAME;
- case "double":
- case "double precision":
- return ColumnType.DOUBLE_TYPE_NAME;
- case "decimal":
- case "numeric":
- return ColumnType.DECIMAL_TYPE_NAME;
- case "date":
- return ColumnType.DATE_TYPE_NAME;
- case "datetime":
- return ColumnType.DATETIME_TYPE_NAME;
- case "timestamp":
- case "time":
- case "interval":
- return ColumnType.TIMESTAMP_TYPE_NAME;
- case "timestampz":
- case "timez":
- return ColumnType.TIMESTAMPTZ_TYPE_NAME;
- case "boolean":
- return ColumnType.BOOLEAN_TYPE_NAME;
default:
- return ColumnType.VOID_TYPE_NAME;
+ mappedType = ColumnType.VOID_TYPE_NAME;
}
+ return mappedType;
}
}
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/PostgreSQLConnectorProvider.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/PostgreSQLConnectorProvider.java
index 41e08e9..1e7c65a 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/PostgreSQLConnectorProvider.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/dataconnector/jdbc/PostgreSQLConnectorProvider.java
@@ -45,72 +45,23 @@ public class PostgreSQLConnectorProvider extends AbstractJDBCConnectorProvider {
return null;
}
- private String wrapSize(int size) {
- return "(" + size + ")";
- }
-
protected String getDataType(String dbDataType, int size) {
+ String mappedType = super.getDataType(dbDataType, size);
+ if (!mappedType.equalsIgnoreCase(ColumnType.VOID_TYPE_NAME)) {
+ return mappedType;
+ }
+
+ // map any db specific types here.
//TODO: Geomentric, network, bit, array data types of postgresql needs to be supported.
- switch(dbDataType.toLowerCase())
+ switch (dbDataType.toLowerCase())
{
- case "char":
case "bpchar":
- return ColumnType.CHAR_TYPE_NAME + wrapSize(size);
- case "varchar":
- case "tinytext":
- return ColumnType.VARCHAR_TYPE_NAME + wrapSize(size);
- case "text":
- case "mediumtext":
- case "enum":
- case "set":
- case "tsvector":
- case "tsquery":
- case "uuid":
- case "json":
- return ColumnType.STRING_TYPE_NAME;
- case "blob":
- case "mediumblob":
- case "longblob":
- case "bytea":
- return ColumnType.BINARY_TYPE_NAME;
- case "tinyint":
- return ColumnType.TINYINT_TYPE_NAME;
- case "smallint":
- case "smallserial":
- return ColumnType.SMALLINT_TYPE_NAME;
- case "mediumint":
- case "int":
- case "serial":
- return ColumnType.INT_TYPE_NAME;
- case "bigint":
- case "bigserial":
+ mappedType = ColumnType.CHAR_TYPE_NAME + wrapSize(size);
case "int8":
- case "money":
- return ColumnType.BIGINT_TYPE_NAME;
- case "float":
- case "real":
- return ColumnType.FLOAT_TYPE_NAME;
- case "double":
- case "double precision":
- return ColumnType.DOUBLE_TYPE_NAME;
- case "decimal":
- case "numeric":
- return ColumnType.DECIMAL_TYPE_NAME;
- case "date":
- return ColumnType.DATE_TYPE_NAME;
- case "datetime":
- return ColumnType.DATETIME_TYPE_NAME;
- case "timestamp":
- case "time":
- case "interval":
- return ColumnType.TIMESTAMP_TYPE_NAME;
- case "timestampz":
- case "timez":
- return ColumnType.TIMESTAMPTZ_TYPE_NAME;
- case "boolean":
- return ColumnType.BOOLEAN_TYPE_NAME;
+ mappedType = ColumnType.BIGINT_TYPE_NAME;
default:
- return ColumnType.VOID_TYPE_NAME;
+ mappedType = ColumnType.VOID_TYPE_NAME;
}
+ return mappedType;
}
}