提交 1fd0fa65 authored 作者: yanjiantao's avatar yanjiantao

feat: add redshift datasource

上级 b8ab1d74
......@@ -151,6 +151,13 @@
<artifactId>postgresql</artifactId>
<version>42.2.14</version>
</dependency>
<!-- redshift jdbc -->
<dependency>
<groupId>com.amazon.redshift</groupId>
<artifactId>redshift-jdbc42</artifactId>
<version>2.1.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
......
......@@ -6,7 +6,8 @@ public enum DatasourceTypes {
pg("pg", "pg", "org.postgresql.Driver", "\"", "\"", "\"", "\""),
sqlServer("sqlServer", "sqlServer", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "\"", "\"", "\"", "\""),
doris("doris", "doris", "com.mysql.jdbc.Driver", "`", "`", "", ""),
oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\"");
oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""),
redshift("redshift", "redshift", "org.postgresql.Driver", "\"", "\"", "\"", "\"");
private String feature;
private String desc;
......
package io.dataease.datasource.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class RedshiftConfigration extends JdbcDTO {
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
......@@ -436,6 +436,12 @@ public class JdbcProvider extends DatasourceProvider {
password = pgConfigration.getPassword();
driver = pgConfigration.getDriver();
jdbcurl = pgConfigration.getJdbc();
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:
break;
}
......@@ -493,6 +499,13 @@ public class JdbcProvider extends DatasourceProvider {
dataSource.setJdbcUrl(pgConfigration.getJdbc());
jdbcDTO = pgConfigration;
break;
case redshift:
RedshiftConfigration redshiftConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfigration.class);
dataSource.setUser(redshiftConfigration.getUsername());
dataSource.setDriverClass(redshiftConfigration.getDriver());
dataSource.setPassword(redshiftConfigration.getPassword());
dataSource.setJdbcUrl(redshiftConfigration.getJdbc());
jdbcDTO = redshiftConfigration;
default:
break;
}
......@@ -514,6 +527,9 @@ public class JdbcProvider extends DatasourceProvider {
case pg:
PgConfigration pgConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), PgConfigration.class);
return pgConfigration.getDataBase();
case redshift:
RedshiftConfigration redshiftConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfigration.class);
return redshiftConfigration.getDataBase();
default:
return null;
}
......@@ -546,6 +562,13 @@ public class JdbcProvider extends DatasourceProvider {
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", pgConfigration.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:
return "show tables;";
}
......@@ -560,6 +583,8 @@ public class JdbcProvider extends DatasourceProvider {
return "select name from sys.schemas;";
case pg:
return "SELECT nspname FROM pg_namespace;";
case redshift:
return "SELECT nspname FROM pg_namespace;";
default:
return "show tables;";
}
......
......@@ -30,6 +30,8 @@ public class ProviderFactory implements ApplicationContextAware {
return context.getBean("jdbc", DatasourceProvider.class);
case pg:
return context.getBean("jdbc", DatasourceProvider.class);
case redshift:
return context.getBean("jdbc", DatasourceProvider.class);
default:
return context.getBean("jdbc", DatasourceProvider.class);
}
......@@ -48,6 +50,8 @@ public class ProviderFactory implements ApplicationContextAware {
return context.getBean("pgQuery", QueryProvider.class);
case oracle:
return context.getBean("oracleQuery", QueryProvider.class);
case redshift:
return context.getBean("redshiftQuery", QueryProvider.class);
default:
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)";
}
......@@ -149,6 +149,8 @@ export default {
return 'Oracle'
}else if (type === 'pg') {
return 'PostgreSQL'
}else if (type === 'redshift') {
return 'AWS Redshift'
}
},
......
......@@ -45,13 +45,13 @@
<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" />
</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()">
{{ $t('datasource.get_schema') }}
</el-button>
</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 filterable v-model="form.configuration.schema" :placeholder="$t('datasource.please_choose_schema')" class="select-width">
<el-option
v-for="item in schemas"
......@@ -146,7 +146,8 @@ export default {
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: 'pg', label: 'PostgreSQL', type: 'jdbc' },
{ name: 'redshift', label: 'AWS Redshift', type: 'jdbc' }],
schemas: [],
canEdit: false,
originConfiguration: {}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论