提交 c5a7d246 authored 作者: taojinlong's avatar taojinlong

merge from boolean-dev:feat-redshift-datasource

...@@ -137,6 +137,17 @@ ...@@ -137,6 +137,17 @@
<artifactId>java-jwt</artifactId> <artifactId>java-jwt</artifactId>
<version>${jwt.version}</version> <version>${jwt.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.4.1.jre8</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.14</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.curator</groupId> <groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId> <artifactId>curator-framework</artifactId>
......
...@@ -11,7 +11,9 @@ public enum DatasourceTypes { ...@@ -11,7 +11,9 @@ public enum DatasourceTypes {
oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""), oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""),
mongo("mongo", "mongodb", "com.mongodb.jdbc.MongoDriver", "`", "`", "\"", "\""), mongo("mongo", "mongodb", "com.mongodb.jdbc.MongoDriver", "`", "`", "\"", "\""),
ck("ch", "ch", "ru.yandex.clickhouse.ClickHouseDriver", "`", "`", "'", "'"), ck("ch", "ch", "ru.yandex.clickhouse.ClickHouseDriver", "`", "`", "'", "'"),
es("es", "es", "", "\"", "\"", "\"", "\""); es("es", "es", "", "\"", "\"", "\"", "\""),
redshift("redshift", "redshift", "org.postgresql.Driver", "\"", "\"", "\"", "\"");
private String feature; private String feature;
private String desc; private String desc;
......
package io.dataease.datasource.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class MysqlConfigration extends JdbcConfiguration {
private String driver = "com.mysql.cj.jdbc.Driver";
public String getJdbc() {
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中
return "jdbc:mysql://HOSTNAME:PORT/DATABASE?characterEncoding=UTF-8&connectTimeout=5000&useSSL=false"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim());
}
}
\ No newline at end of file
package io.dataease.datasource.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RedshiftConfigration extends JdbcConfiguration {
private String driver = "com.amazon.redshift.jdbc42.Driver";
public String getJdbc() {
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中
return "jdbc:redshift://HOSTNAME:PORT/DATABASE"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim());
}
}
\ No newline at end of file
...@@ -335,6 +335,12 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -335,6 +335,12 @@ public class JdbcProvider extends DatasourceProvider {
driver = mongodbConfiguration.getDriver(); driver = mongodbConfiguration.getDriver();
jdbcurl = mongodbConfiguration.getJdbc(); jdbcurl = mongodbConfiguration.getJdbc();
break; break;
case redshift:
RedshiftConfigration redshiftConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfigration.class);
username = redshiftConfigration.getUsername();
password = redshiftConfigration.getPassword();
driver = redshiftConfigration.getDriver();
jdbcurl = redshiftConfigration.getJdbc();
default: default:
break; break;
} }
...@@ -411,6 +417,12 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -411,6 +417,12 @@ public class JdbcProvider extends DatasourceProvider {
dataSource.setUrl(mongodbConfiguration.getJdbc()); dataSource.setUrl(mongodbConfiguration.getJdbc());
jdbcConfiguration = mongodbConfiguration; jdbcConfiguration = mongodbConfiguration;
break; break;
case redshift:
RedshiftConfigration redshiftConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfigration.class);
dataSource.setPassword(redshiftConfigration.getPassword());
dataSource.setDriverClassName(redshiftConfigration.getDriver());
dataSource.setUrl(redshiftConfigration.getJdbc());
jdbcConfiguration = redshiftConfigration;
default: default:
break; break;
} }
...@@ -453,6 +465,9 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -453,6 +465,9 @@ public class JdbcProvider extends DatasourceProvider {
case ck: case ck:
CHConfiguration chConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfiguration.class); CHConfiguration chConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfiguration.class);
return "SELECT name FROM system.tables where database='DATABASE';".replace("DATABASE", chConfiguration.getDataBase()); return "SELECT name FROM system.tables where database='DATABASE';".replace("DATABASE", chConfiguration.getDataBase());
case redshift:
RedshiftConfigration redshiftConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfigration.class);
return redshiftConfigration.getDataBase();
default: default:
return "show tables;"; return "show tables;";
} }
...@@ -487,6 +502,12 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -487,6 +502,12 @@ public class JdbcProvider extends DatasourceProvider {
throw new Exception(Translator.get("i18n_schema_is_empty")); throw new Exception(Translator.get("i18n_schema_is_empty"));
} }
return "SELECT viewname FROM pg_views WHERE schemaname='SCHEMA' ;".replace("SCHEMA", pgConfiguration.getSchema()); return "SELECT viewname FROM pg_views WHERE schemaname='SCHEMA' ;".replace("SCHEMA", pgConfiguration.getSchema());
case redshift:
RedshiftConfigration redshiftConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfigration.class);
if(StringUtils.isEmpty(redshiftConfigration.getSchema())){
throw new Exception(Translator.get("i18n_schema_is_empty"));
}
return "SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' AND schemaname='SCHEMA' ;".replace("SCHEMA", redshiftConfigration.getSchema());
default: default:
return null; return null;
} }
...@@ -501,6 +522,8 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -501,6 +522,8 @@ public class JdbcProvider extends DatasourceProvider {
return "select name from sys.schemas;"; return "select name from sys.schemas;";
case pg: case pg:
return "SELECT nspname FROM pg_namespace;"; return "SELECT nspname FROM pg_namespace;";
case redshift:
return "SELECT nspname FROM pg_namespace;";
default: default:
return "show tables;"; return "show tables;";
} }
......
...@@ -50,6 +50,8 @@ public class ProviderFactory implements ApplicationContextAware { ...@@ -50,6 +50,8 @@ public class ProviderFactory implements ApplicationContextAware {
return context.getBean("ckQuery", QueryProvider.class); return context.getBean("ckQuery", QueryProvider.class);
case mongo: case mongo:
return context.getBean("mongoQuery", QueryProvider.class); return context.getBean("mongoQuery", QueryProvider.class);
case redshift:
return context.getBean("redshiftQuery", QueryProvider.class);
default: default:
return context.getBean("mysqlQuery", QueryProvider.class); return context.getBean("mysqlQuery", QueryProvider.class);
} }
......
package io.dataease.provider.redshift;
import io.dataease.provider.SQLConstants;
import static io.dataease.datasource.constants.DatasourceTypes.pg;
/**
* Redshift 静态变量
*
* @className: RedshiftConstants
* @description: Redshift 静态变量
* @author: Jiantao Yan
* @date: 2021/10/11 17:12
**/
public class RedshiftConstants extends SQLConstants {
public static final String KEYWORD_TABLE = pg.getKeywordPrefix() + "%s" + pg.getKeywordSuffix();
public static final String KEYWORD_FIX = "%s." + pg.getKeywordPrefix() + "%s" + pg.getKeywordSuffix();
public static final String UNIX_TIMESTAMP = "floor(extract(epoch from(( %s - timestamp '1970-01-01 00:00:00')*1000))) ";
public static final String DATE_FORMAT = "to_char(%s, %s)";
public static final String FROM_UNIXTIME = "to_timestamp(%s)";
public static final String TO_DATE = "to_date(%s,'%s')";
public static final String CAST = "CAST(%s AS %s)";
public static final String DEFAULT_DATE_FORMAT = "'YYYY-MM-DD HH24:MI:SS'";
public static final String DEFAULT_INT_FORMAT = "numeric(18,0)";
public static final String DEFAULT_FLOAT_FORMAT = "numeric(18,2)";
public static final String WHERE_VALUE_NULL = "(NULL,'')";
public static final String WHERE_VALUE_VALUE = "'%s'";
public static final String AGG_COUNT = "COUNT(*)";
public static final String AGG_FIELD = "%s(%s)";
public static final String WHERE_BETWEEN = "'%s' AND '%s'";
public static final String BRACKETS = "(%s)";
}
...@@ -486,7 +486,6 @@ public class ChartViewService { ...@@ -486,7 +486,6 @@ public class ChartViewService {
List<DatasetTableField> sourceFields = dataSetTableFieldsService.getFieldsByTableId(view.getTableId()); List<DatasetTableField> sourceFields = dataSetTableFieldsService.getFieldsByTableId(view.getTableId());
map.put("sourceFields", sourceFields); map.put("sourceFields", sourceFields);
ChartViewDTO dto = new ChartViewDTO(); ChartViewDTO dto = new ChartViewDTO();
BeanUtils.copyBean(dto, view); BeanUtils.copyBean(dto, view);
dto.setData(map); dto.setData(map);
......
...@@ -286,4 +286,4 @@ i18n_Stopped=END ...@@ -286,4 +286,4 @@ i18n_Stopped=END
i18n_Exec=Running i18n_Exec=Running
i18n_no_trigger=The current setting does not trigger task generation. i18n_no_trigger=The current setting does not trigger task generation.
i18n_dataset_field_delete=Union field deleted,please set again and redo. i18n_dataset_field_delete=Union field deleted,please set again and redo.
i18n_es_limit=Elasticsearch version cannot be less than 6.3 i18n_es_limit=Elasticsearch version cannot be less than 6.3
\ No newline at end of file
...@@ -288,4 +288,4 @@ i18n_Stopped=執行結束 ...@@ -288,4 +288,4 @@ i18n_Stopped=執行結束
i18n_Exec=運行中 i18n_Exec=運行中
i18n_no_trigger=当前设置没有触发任务生成 當前設置沒有觸發任務生成. i18n_no_trigger=当前设置没有触发任务生成 當前設置沒有觸發任務生成.
i18n_dataset_field_delete=該自定義數據集有關聯字段被刪除,請重新確認關聯關系並重做該數據集 i18n_dataset_field_delete=該自定義數據集有關聯字段被刪除,請重新確認關聯關系並重做該數據集
i18n_es_limit=Elasticsearch 版本不能小於6.3 i18n_es_limit=Elasticsearch 版本不能小於6.3
\ No newline at end of file
...@@ -165,6 +165,8 @@ export default { ...@@ -165,6 +165,8 @@ export default {
return 'Doris' return 'Doris'
} else if (type === 'mongo') { } else if (type === 'mongo') {
return 'MongoDB' return 'MongoDB'
}else if (type === 'redshift') {
return 'AWS Redshift'
} }
}, },
......
...@@ -59,14 +59,14 @@ ...@@ -59,14 +59,14 @@
<el-form-item v-if="form.configuration.dataSourceType=='jdbc'" :label="$t('datasource.port')" prop="configuration.port" > <el-form-item v-if="form.configuration.dataSourceType=='jdbc'" :label="$t('datasource.port')" prop="configuration.port" >
<el-input v-model="form.configuration.port" autocomplete="off" type="number" min="0" /> <el-input v-model="form.configuration.port" autocomplete="off" type="number" min="0" />
</el-form-item> </el-form-item>
<el-form-item v-if="form.type=='oracle' || form.type=='sqlServer' || form.type=='pg'"> <el-form-item v-if="form.type=='oracle' || form.type=='sqlServer' || form.type=='pg' || form.type=='redshift'">
<el-button icon="el-icon-plus" size="mini" @click="getSchema()"> <el-button icon="el-icon-plus" size="mini" @click="getSchema()">
{{ $t('datasource.get_schema') }} {{ $t('datasource.get_schema') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item v-if="form.type=='oracle' || form.type=='sqlServer' || form.type=='pg'" :label="$t('datasource.schema')"> <el-form-item v-if="form.type=='oracle' || form.type=='sqlServer' || form.type=='pg' || form.type=='redshift'" :label="$t('datasource.schema')">
<el-select v-model="form.configuration.schema" filterable :placeholder="$t('datasource.please_choose_schema')" class="select-width"> <el-select filterable v-model="form.configuration.schema" :placeholder="$t('datasource.please_choose_schema')" class="select-width">
<el-option <el-option
v-for="item in schemas" v-for="item in schemas"
:key="item" :key="item"
...@@ -150,6 +150,7 @@ export default { ...@@ -150,6 +150,7 @@ export default {
'configuration.acquireIncrement': [{ required: true, message: this.$t('datasource.please_input_acquire_increment'), trigger: 'change' }], 'configuration.acquireIncrement': [{ required: true, message: this.$t('datasource.please_input_acquire_increment'), trigger: 'change' }],
'configuration.connectTimeout': [{ required: true, message: this.$t('datasource.please_input_connect_timeout'), trigger: 'change' }] 'configuration.connectTimeout': [{ required: true, message: this.$t('datasource.please_input_connect_timeout'), trigger: 'change' }]
}, },
<<<<<<< HEAD
allTypes: [ allTypes: [
{ name: 'mysql', label: 'MySQL', type: 'jdbc', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true'}, { name: 'mysql', label: 'MySQL', type: 'jdbc', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true'},
{ name: 'oracle', label: 'Oracle', type: 'jdbc'}, { name: 'oracle', label: 'Oracle', type: 'jdbc'},
...@@ -161,6 +162,13 @@ export default { ...@@ -161,6 +162,13 @@ export default {
{ name: 'ck', label: 'ClickHouse', type: 'jdbc', extraParams: '' }, { name: 'ck', label: 'ClickHouse', type: 'jdbc', extraParams: '' },
{ name: 'mongo', label: 'MongoDB', type: 'jdbc', extraParams: '' } { name: 'mongo', label: 'MongoDB', type: 'jdbc', extraParams: '' }
], ],
=======
allTypes: [{ name: 'mysql', label: 'MySQL', type: 'jdbc' },
{ name: 'oracle', label: 'Oracle', type: 'jdbc' },
{ name: 'sqlServer', label: 'SQL Server', type: 'jdbc' },
{ name: 'pg', label: 'PostgreSQL', type: 'jdbc' },
{ name: 'redshift', label: 'AWS Redshift', type: 'jdbc' }],
>>>>>>> 1fd0fa65ec9293502290e8efe942f4b9a60a8eee
schemas: [], schemas: [],
canEdit: false, canEdit: false,
originConfiguration: {} originConfiguration: {}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论