diff --git a/backend/src/main/java/io/dataease/commons/constants/DatasourceTypes.java b/backend/src/main/java/io/dataease/commons/constants/DatasourceTypes.java index 7de1c4c638..4e6da058e3 100644 --- a/backend/src/main/java/io/dataease/commons/constants/DatasourceTypes.java +++ b/backend/src/main/java/io/dataease/commons/constants/DatasourceTypes.java @@ -3,6 +3,7 @@ package io.dataease.commons.constants; public enum DatasourceTypes { excel("excel", "excel", "", "", "", "", ""), mysql("mysql", "mysql", "com.mysql.jdbc.Driver", "`", "`", "'", "'"), + hive("hive", "hive", "org.apache.hive.jdbc.HiveDriver", "`", "`", "'", "'"), mariadb("mariadb", "mariadb", "com.mysql.jdbc.Driver", "`", "`", "'", "'"), ds_doris("ds_doris", "ds_doris", "com.mysql.jdbc.Driver", "`", "`", "'", "'"), pg("pg", "pg", "org.postgresql.Driver", "\"", "\"", "\"", "\""), diff --git a/backend/src/main/java/io/dataease/provider/ProviderFactory.java b/backend/src/main/java/io/dataease/provider/ProviderFactory.java index 90e82cda7a..4a0f160fa0 100644 --- a/backend/src/main/java/io/dataease/provider/ProviderFactory.java +++ b/backend/src/main/java/io/dataease/provider/ProviderFactory.java @@ -53,6 +53,8 @@ public class ProviderFactory implements ApplicationContextAware { return context.getBean("mongoQuery", QueryProvider.class); case redshift: return context.getBean("redshiftQuery", QueryProvider.class); + case hive: + return context.getBean("hiveQuery", QueryProvider.class); default: return context.getBean("mysqlQuery", QueryProvider.class); } diff --git a/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java b/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java index 4ea43f9115..ea7e8b35b4 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java @@ -194,10 +194,10 @@ public class EsProvider extends DatasourceProvider { } for (String[] row : esReponse.getRows()) { - if(row.length == 3 && row[1].equalsIgnoreCase("TABLE") && row[2].equalsIgnoreCase("INDEX")){ + if(row.length == 3 && row[1].contains("TABLE") && row[2].equalsIgnoreCase("INDEX")){ tables.add(row[0]); } - if(row.length == 2 && row[1].equalsIgnoreCase("BASE TABLE")){ + if(row.length == 2 && row[1].contains("TABLE")){ tables.add(row[0]); } } diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index 06158dfb93..cabe171c32 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -170,6 +170,9 @@ public class JdbcProvider extends DatasourceProvider { String f = metaData.getColumnName(j + 1); String l = StringUtils.isNotEmpty(metaData.getColumnLabel(j + 1)) ? metaData.getColumnLabel(j + 1) : f; String t = metaData.getColumnTypeName(j + 1); + if(datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.hive.name())){ + l = l.split("\\.")[1]; + } TableFiled field = new TableFiled(); field.setFieldName(l); field.setRemarks(l); @@ -342,14 +345,25 @@ public class JdbcProvider extends DatasourceProvider { password = redshiftConfigration.getPassword(); driver = redshiftConfigration.getDriver(); jdbcurl = redshiftConfigration.getJdbc(); + break; + case hive: + HiveConfiguration hiveConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), HiveConfiguration.class); + username = hiveConfiguration.getUsername(); + password = hiveConfiguration.getPassword(); + driver = hiveConfiguration.getDriver(); + jdbcurl = hiveConfiguration.getJdbc(); + break; default: break; } Driver driverClass = (Driver) extendedJdbcClassLoader.loadClass(driver).newInstance(); - props.setProperty("user", username); - if (StringUtils.isNotBlank(password)) { - props.setProperty("password", password); + + if (StringUtils.isNotBlank(username)) { + props.setProperty("user", username); + if (StringUtils.isNotBlank(password)) { + props.setProperty("password", password); + } } Connection conn = driverClass.connect(jdbcurl, props); @@ -362,7 +376,7 @@ public class JdbcProvider extends DatasourceProvider { druidDataSource.setInitialSize(jdbcConfiguration.getInitialPoolSize());// 初始连接数 druidDataSource.setMinIdle(jdbcConfiguration.getMinPoolSize()); // 最小连接数 druidDataSource.setMaxActive(jdbcConfiguration.getMaxPoolSize()); // 最大连接数 - if(datasourceRequest.getDatasource().getType().equals(DatasourceTypes.mongo.name())){ + if(datasourceRequest.getDatasource().getType().equals(DatasourceTypes.mongo.name()) || datasourceRequest.getDatasource().getType().equals(DatasourceTypes.hive.name())){ WallFilter wallFilter = new WallFilter(); wallFilter.setDbType(DatasourceTypes.mysql.name()); druidDataSource.setProxyFilters(Arrays.asList(new Filter[]{wallFilter})); @@ -424,6 +438,13 @@ public class JdbcProvider extends DatasourceProvider { dataSource.setDriverClassName(redshiftConfigration.getDriver()); dataSource.setUrl(redshiftConfigration.getJdbc()); jdbcConfiguration = redshiftConfigration; + break; + case hive: + HiveConfiguration hiveConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), HiveConfiguration.class); + dataSource.setPassword(hiveConfiguration.getPassword()); + dataSource.setDriverClassName(hiveConfiguration.getDriver()); + dataSource.setUrl(hiveConfiguration.getJdbc()); + jdbcConfiguration = hiveConfiguration; default: break; } @@ -442,7 +463,8 @@ public class JdbcProvider extends DatasourceProvider { case mariadb: case de_doris: case ds_doris: - return "show tables;"; + case hive: + return "show tables"; case sqlServer: SqlServerConfiguration sqlServerConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), SqlServerConfiguration.class); if(StringUtils.isEmpty(sqlServerConfiguration.getSchema())){ diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 493620a248..e14690a455 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -188,7 +188,7 @@ public class DataSetTableService { if (datasetTable.getEditType() == 0) { List newFields = sheet.getFields().stream().map(TableFiled::getRemarks).collect(Collectors.toList()); if (!oldFields.equals(newFields)) { - DataEaseException.throwException(Translator.get("i18n_excel_colume_change")); + DataEaseException.throwException(Translator.get("i18n_excel_colume_inconsistent")); } oldFields = newFields; } diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 1a7a60cf2d..087e57e5cc 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -279,6 +279,7 @@ i18n_msg_type_dataset_sync_success=Dataset synchronization successful i18n_msg_type_dataset_sync_faild=Dataset synchronization failed i18n_data_not_sync=Please sync data first i18n_excel_colume_change=The column name of Excel is inconsistent with the original data set +i18n_excel_colume_inconsistent=The column names of the selected sheet pages are inconsistent i18n_timed_task=Timed Task i18n_datasource_connect_error=Data source connection exception: i18n_check_sql_error=Check incremental SQL exception, diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 8be33cb6ea..a38b6337cc 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -278,6 +278,7 @@ i18n_msg_type_dataset_sync_success=数据集同步成功 i18n_msg_type_dataset_sync_faild=数据集同步失败 i18n_data_not_sync=请先完成数据同步 i18n_excel_colume_change=Excel的列名与原数据集不一致 +i18n_excel_colume_inconsistent=所选sheet页面的列名不一致 i18n_timed_task=定时任务 i18n_datasource_connect_error=数据源连接异常: i18n_check_sql_error=校验增量 SQL 异常, diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 2fe6ca5c5b..e3f8095a6c 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -281,6 +281,7 @@ i18n_msg_type_dataset_sync_success=數據集同步成功 i18n_msg_type_dataset_sync_faild=數據集同步失敗 i18n_data_not_sync=請先完成數據同步 i18n_excel_colume_change=Excel的列名與原數據集不一致 +i18n_excel_colume_inconsistent=所選sheet頁面的列名不一致 i18n_timed_task=定時任務 i18n_datasource_connect_error=數據源連接異常: i18n_check_sql_error=校驗增量SQL異常, diff --git a/frontend/src/views/dataset/add/AddDB.vue b/frontend/src/views/dataset/add/AddDB.vue index 6cd152f51c..50a7db4d03 100644 --- a/frontend/src/views/dataset/add/AddDB.vue +++ b/frontend/src/views/dataset/add/AddDB.vue @@ -29,7 +29,7 @@ - + diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index 18ad79c08f..ab4c2ff27f 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -33,7 +33,7 @@ - + diff --git a/frontend/src/views/system/datasource/DsTree.vue b/frontend/src/views/system/datasource/DsTree.vue index ffed65f504..61f9da893e 100644 --- a/frontend/src/views/system/datasource/DsTree.vue +++ b/frontend/src/views/system/datasource/DsTree.vue @@ -185,6 +185,8 @@ export default { return 'MongoDB' }else if (type === 'redshift') { return 'AWS Redshift' + } else if (type === 'hive') { + return 'Apache Hive' } }, diff --git a/frontend/src/views/system/datasource/form.vue b/frontend/src/views/system/datasource/form.vue index 2a0c1f4f6c..40a95caf3e 100644 --- a/frontend/src/views/system/datasource/form.vue +++ b/frontend/src/views/system/datasource/form.vue @@ -39,10 +39,10 @@ {{ $t('datasource.oracle_service_name') }} - + - + @@ -152,6 +152,7 @@ export default { }, allTypes: [ { name: 'mysql', label: 'MySQL', type: 'jdbc', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true'}, + { name: 'hive', label: 'Apache Hive', type: 'jdbc', extraParams: ''}, { name: 'oracle', label: 'Oracle', type: 'jdbc'}, { name: 'sqlServer', label: 'SQL Server', type: 'jdbc', extraParams: ''}, { name: 'pg', label: 'PostgreSQL', type: 'jdbc', extraParams: '' },