This is an automated email from the ASF dual-hosted git repository.
diwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-flink-connector.git
The following commit(s) were added to refs/heads/master by this push:
new 784a6a17 [improve]Improve the way of dorisSystem create table (#452)
784a6a17 is described below
commit 784a6a171b234b4a9f64e0d2b310995d172b1bf6
Author: wudongliang <[email protected]>
AuthorDate: Tue Aug 6 19:17:52 2024 +0800
[improve]Improve the way of dorisSystem create table (#452)
---
.../flink/catalog/doris/DorisSchemaFactory.java | 132 +++++++++++++++++++++
.../doris/flink/catalog/doris/DorisSystem.java | 125 ++-----------------
.../doris/flink/sink/copy/CopySQLBuilder.java | 4 +-
.../flink/sink/schema/SchemaChangeHelper.java | 30 ++---
.../catalog/doris/DorisSchemaFactoryTest.java | 111 ++++++++++++-----
5 files changed, 237 insertions(+), 165 deletions(-)
diff --git
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
index 3f824a1f..9693d433 100644
---
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
+++
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactory.java
@@ -18,9 +18,12 @@
package org.apache.doris.flink.catalog.doris;
import org.apache.flink.annotation.VisibleForTesting;
+import org.apache.flink.util.Preconditions;
+import org.apache.flink.util.StringUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
+import org.apache.doris.flink.exception.CreateTableException;
import org.apache.doris.flink.tools.cdc.DorisTableConfig;
import java.util.ArrayList;
@@ -30,6 +33,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* Factory that creates doris schema.
@@ -103,4 +107,132 @@ public class DorisSchemaFactory {
}
return null;
}
+
+ public static String generateCreateTableDDL(TableSchema schema) {
+ StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ");
+ sb.append(identifier(schema.getDatabase()))
+ .append(".")
+ .append(identifier(schema.getTable()))
+ .append("(");
+
+ Map<String, FieldSchema> fields = schema.getFields();
+ List<String> keys = schema.getKeys();
+ // append keys
+ for (String key : keys) {
+ if (!fields.containsKey(key)) {
+ throw new CreateTableException("key " + key + " not found in
column list");
+ }
+ FieldSchema field = fields.get(key);
+ buildColumn(sb, field, true);
+ }
+
+ // append values
+ for (Map.Entry<String, FieldSchema> entry : fields.entrySet()) {
+ if (keys.contains(entry.getKey())) {
+ continue;
+ }
+ FieldSchema field = entry.getValue();
+ buildColumn(sb, field, false);
+ }
+ sb = sb.deleteCharAt(sb.length() - 1);
+ sb.append(" ) ");
+ // append uniq model
+ if (DataModel.UNIQUE.equals(schema.getModel())) {
+ sb.append(schema.getModel().name())
+ .append(" KEY(")
+ .append(String.join(",", identifier(schema.getKeys())))
+ .append(")");
+ }
+
+ // append table comment
+ if (!StringUtils.isNullOrWhitespaceOnly(schema.getTableComment())) {
+ sb.append(" COMMENT
'").append(quoteComment(schema.getTableComment())).append("' ");
+ }
+
+ // append distribute key
+ sb.append(" DISTRIBUTED BY HASH(")
+ .append(String.join(",",
identifier(schema.getDistributeKeys())))
+ .append(")");
+
+ Map<String, String> properties = schema.getProperties();
+ if (schema.getTableBuckets() != null) {
+
+ int bucketsNum = schema.getTableBuckets();
+ if (bucketsNum <= 0) {
+ throw new CreateTableException("The number of buckets must be
positive.");
+ }
+ sb.append(" BUCKETS ").append(bucketsNum);
+ } else {
+ sb.append(" BUCKETS AUTO ");
+ }
+ // append properties
+ int index = 0;
+ for (Map.Entry<String, String> entry : properties.entrySet()) {
+ if (index == 0) {
+ sb.append(" PROPERTIES (");
+ }
+ if (index > 0) {
+ sb.append(",");
+ }
+ sb.append(quoteProperties(entry.getKey()))
+ .append("=")
+ .append(quoteProperties(entry.getValue()));
+ index++;
+
+ if (index == (schema.getProperties().size())) {
+ sb.append(")");
+ }
+ }
+ return sb.toString();
+ }
+
+ private static void buildColumn(StringBuilder sql, FieldSchema field,
boolean isKey) {
+ String fieldType = field.getTypeString();
+ if (isKey && DorisType.STRING.equals(fieldType)) {
+ fieldType = String.format("%s(%s)", DorisType.VARCHAR, 65533);
+ }
+ sql.append(identifier(field.getName())).append(" ").append(fieldType);
+
+ if (field.getDefaultValue() != null) {
+ sql.append(" DEFAULT " +
quoteDefaultValue(field.getDefaultValue()));
+ }
+ sql.append(" COMMENT
'").append(quoteComment(field.getComment())).append("',");
+ }
+
+ private static String quoteProperties(String name) {
+ return "'" + name + "'";
+ }
+
+ private static List<String> identifier(List<String> names) {
+ return
names.stream().map(DorisSchemaFactory::identifier).collect(Collectors.toList());
+ }
+
+ public static String identifier(String name) {
+ if (name.startsWith("`") && name.endsWith("`")) {
+ return name;
+ }
+ return "`" + name + "`";
+ }
+
+ public static String quoteDefaultValue(String defaultValue) {
+ // DEFAULT current_timestamp not need quote
+ if (defaultValue.equalsIgnoreCase("current_timestamp")) {
+ return defaultValue;
+ }
+ return "'" + defaultValue + "'";
+ }
+
+ public static String quoteComment(String comment) {
+ if (comment == null) {
+ return "";
+ } else {
+ return comment.replaceAll("'", "\\\\'");
+ }
+ }
+
+ public static String quoteTableIdentifier(String tableIdentifier) {
+ String[] dbTable = tableIdentifier.split("\\.");
+ Preconditions.checkArgument(dbTable.length == 2);
+ return identifier(dbTable[0]) + "." + identifier(dbTable[1]);
+ }
}
diff --git
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
index be6572d3..427eb8b3 100644
---
a/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
+++
b/flink-doris-connector/src/main/java/org/apache/doris/flink/catalog/doris/DorisSystem.java
@@ -18,14 +18,12 @@
package org.apache.doris.flink.catalog.doris;
import org.apache.flink.annotation.Public;
-import org.apache.flink.util.Preconditions;
import org.apache.flink.util.StringUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.doris.flink.cfg.DorisConnectionOptions;
import org.apache.doris.flink.connection.JdbcConnectionProvider;
import org.apache.doris.flink.connection.SimpleJdbcConnectionProvider;
-import org.apache.doris.flink.exception.CreateTableException;
import org.apache.doris.flink.exception.DorisRuntimeException;
import org.apache.doris.flink.exception.DorisSystemException;
import org.slf4j.Logger;
@@ -41,7 +39,6 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Predicate;
-import java.util.stream.Collectors;
import static org.apache.flink.util.Preconditions.checkArgument;
@@ -141,81 +138,7 @@ public class DorisSystem implements Serializable {
}
public static String buildCreateTableDDL(TableSchema schema) {
- StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ");
- sb.append(identifier(schema.getDatabase()))
- .append(".")
- .append(identifier(schema.getTable()))
- .append("(");
-
- Map<String, FieldSchema> fields = schema.getFields();
- List<String> keys = schema.getKeys();
- // append keys
- for (String key : keys) {
- if (!fields.containsKey(key)) {
- throw new CreateTableException("key " + key + " not found in
column list");
- }
- FieldSchema field = fields.get(key);
- buildColumn(sb, field, true);
- }
-
- // append values
- for (Map.Entry<String, FieldSchema> entry : fields.entrySet()) {
- if (keys.contains(entry.getKey())) {
- continue;
- }
- FieldSchema field = entry.getValue();
- buildColumn(sb, field, false);
- }
- sb = sb.deleteCharAt(sb.length() - 1);
- sb.append(" ) ");
- // append uniq model
- if (DataModel.UNIQUE.equals(schema.getModel())) {
- sb.append(schema.getModel().name())
- .append(" KEY(")
- .append(String.join(",", identifier(schema.getKeys())))
- .append(")");
- }
-
- // append table comment
- if (!StringUtils.isNullOrWhitespaceOnly(schema.getTableComment())) {
- sb.append(" COMMENT
'").append(quoteComment(schema.getTableComment())).append("' ");
- }
-
- // append distribute key
- sb.append(" DISTRIBUTED BY HASH(")
- .append(String.join(",",
identifier(schema.getDistributeKeys())))
- .append(")");
-
- Map<String, String> properties = schema.getProperties();
- if (schema.getTableBuckets() != null) {
-
- int bucketsNum = schema.getTableBuckets();
- if (bucketsNum <= 0) {
- throw new CreateTableException("The number of buckets must be
positive.");
- }
- sb.append(" BUCKETS ").append(bucketsNum);
- } else {
- sb.append(" BUCKETS AUTO ");
- }
- // append properties
- int index = 0;
- for (Map.Entry<String, String> entry : properties.entrySet()) {
- if (index == 0) {
- sb.append(" PROPERTIES (");
- }
- if (index > 0) {
- sb.append(",");
- }
- sb.append(quoteProperties(entry.getKey()))
- .append("=")
- .append(quoteProperties(entry.getValue()));
- index++;
-
- if (index == (schema.getProperties().size())) {
- sb.append(")");
- }
- }
- return sb.toString();
+ return DorisSchemaFactory.generateCreateTableDDL(schema);
}
public Map<String, String> getTableFieldNames(String databaseName, String
tableName) {
@@ -244,53 +167,23 @@ public class DorisSystem implements Serializable {
}
}
- private static void buildColumn(StringBuilder sql, FieldSchema field,
boolean isKey) {
- String fieldType = field.getTypeString();
- if (isKey && DorisType.STRING.equals(fieldType)) {
- fieldType = String.format("%s(%s)", DorisType.VARCHAR, 65533);
- }
- sql.append(identifier(field.getName())).append(" ").append(fieldType);
-
- if (field.getDefaultValue() != null) {
- sql.append(" DEFAULT " +
quoteDefaultValue(field.getDefaultValue()));
- }
- sql.append(" COMMENT
'").append(quoteComment(field.getComment())).append("',");
- }
-
+ @Deprecated
public static String quoteDefaultValue(String defaultValue) {
- // DEFAULT current_timestamp not need quote
- if (defaultValue.equalsIgnoreCase("current_timestamp")) {
- return defaultValue;
- }
- return "'" + defaultValue + "'";
+ return DorisSchemaFactory.quoteDefaultValue(defaultValue);
}
+ @Deprecated
public static String quoteComment(String comment) {
- if (comment == null) {
- return "";
- } else {
- return comment.replaceAll("'", "\\\\'");
- }
- }
-
- private static List<String> identifier(List<String> name) {
- return
name.stream().map(DorisSystem::identifier).collect(Collectors.toList());
+ return DorisSchemaFactory.quoteComment(comment);
}
+ @Deprecated
public static String identifier(String name) {
- if (name.startsWith("`") && name.endsWith("`")) {
- return name;
- }
- return "`" + name + "`";
+ return DorisSchemaFactory.identifier(name);
}
+ @Deprecated
public static String quoteTableIdentifier(String tableIdentifier) {
- String[] dbTable = tableIdentifier.split("\\.");
- Preconditions.checkArgument(dbTable.length == 2);
- return identifier(dbTable[0]) + "." + identifier(dbTable[1]);
- }
-
- private static String quoteProperties(String name) {
- return "'" + name + "'";
+ return DorisSchemaFactory.quoteTableIdentifier(tableIdentifier);
}
}
diff --git
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
index 33843a06..8edfba3f 100644
---
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
+++
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/copy/CopySQLBuilder.java
@@ -17,7 +17,7 @@
package org.apache.doris.flink.sink.copy;
-import org.apache.doris.flink.catalog.doris.DorisSystem;
+import org.apache.doris.flink.catalog.doris.DorisSchemaFactory;
import org.apache.doris.flink.cfg.DorisExecutionOptions;
import java.util.Arrays;
@@ -53,7 +53,7 @@ public class CopySQLBuilder {
public String buildCopySQL() {
StringBuilder sb = new StringBuilder();
sb.append("COPY INTO ")
- .append(DorisSystem.quoteTableIdentifier(tableIdentifier))
+
.append(DorisSchemaFactory.quoteTableIdentifier(tableIdentifier))
.append(" FROM @~('{")
.append(String.join(",", fileList))
.append("}') ")
diff --git
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
index 06546877..74b57417 100644
---
a/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
+++
b/flink-doris-connector/src/main/java/org/apache/doris/flink/sink/schema/SchemaChangeHelper.java
@@ -20,7 +20,7 @@ package org.apache.doris.flink.sink.schema;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
-import org.apache.doris.flink.catalog.doris.DorisSystem;
+import org.apache.doris.flink.catalog.doris.DorisSchemaFactory;
import org.apache.doris.flink.catalog.doris.FieldSchema;
import java.util.List;
@@ -114,11 +114,11 @@ public class SchemaChangeHelper {
new StringBuilder(
String.format(
ADD_DDL,
-
DorisSystem.quoteTableIdentifier(tableIdentifier),
- DorisSystem.identifier(name),
+
DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+ DorisSchemaFactory.identifier(name),
type));
if (defaultValue != null) {
- addDDL.append(" DEFAULT
").append(DorisSystem.quoteDefaultValue(defaultValue));
+ addDDL.append(" DEFAULT
").append(DorisSchemaFactory.quoteDefaultValue(defaultValue));
}
commentColumn(addDDL, comment);
return addDDL.toString();
@@ -127,17 +127,17 @@ public class SchemaChangeHelper {
public static String buildDropColumnDDL(String tableIdentifier, String
columName) {
return String.format(
DROP_DDL,
- DorisSystem.quoteTableIdentifier(tableIdentifier),
- DorisSystem.identifier(columName));
+ DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+ DorisSchemaFactory.identifier(columName));
}
public static String buildRenameColumnDDL(
String tableIdentifier, String oldColumnName, String
newColumnName) {
return String.format(
RENAME_DDL,
- DorisSystem.quoteTableIdentifier(tableIdentifier),
- DorisSystem.identifier(oldColumnName),
- DorisSystem.identifier(newColumnName));
+ DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+ DorisSchemaFactory.identifier(oldColumnName),
+ DorisSchemaFactory.identifier(newColumnName));
}
public static String buildColumnExistsQuery(String database, String table,
String column) {
@@ -156,9 +156,9 @@ public class SchemaChangeHelper {
String tableIdentifier, String columnName, String newComment) {
return String.format(
MODIFY_COMMENT_DDL,
- DorisSystem.quoteTableIdentifier(tableIdentifier),
- DorisSystem.identifier(columnName),
- DorisSystem.quoteComment(newComment));
+ DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+ DorisSchemaFactory.identifier(columnName),
+ DorisSchemaFactory.quoteComment(newComment));
}
public static String buildModifyColumnDataTypeDDL(
@@ -170,8 +170,8 @@ public class SchemaChangeHelper {
new StringBuilder(
String.format(
MODIFY_TYPE_DDL,
-
DorisSystem.quoteTableIdentifier(tableIdentifier),
- DorisSystem.identifier(columnName),
+
DorisSchemaFactory.quoteTableIdentifier(tableIdentifier),
+ DorisSchemaFactory.identifier(columnName),
dataType));
commentColumn(modifyDDL, comment);
return modifyDDL.toString();
@@ -179,7 +179,7 @@ public class SchemaChangeHelper {
private static void commentColumn(StringBuilder ddl, String comment) {
if (StringUtils.isNotEmpty(comment)) {
- ddl.append(" COMMENT
'").append(DorisSystem.quoteComment(comment)).append("'");
+ ddl.append(" COMMENT
'").append(DorisSchemaFactory.quoteComment(comment)).append("'");
}
}
diff --git
a/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
b/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
index 1bc1f115..a0f3aaf0 100644
---
a/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
+++
b/flink-doris-connector/src/test/java/org/apache/doris/flink/catalog/doris/DorisSchemaFactoryTest.java
@@ -46,6 +46,13 @@ public class DorisSchemaFactoryTest {
@Test
public void testCreateTableSchema() {
+ TableSchema tableSchema = buildCreateTableSchema();
+ Assert.assertEquals(
+ "TableSchema{database='doris', table='create_tab',
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name',
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'},
id=FieldSchema{name='id', typeString='INT', defaultValue='100',
comment='int_test'}, age=FieldSchema{name='age', typeString='INT',
defaultValue='null', comment='null'}, email=FieldSchema{name='email',
typeString='VARCHAR(100)', defaultValue='[email protected]', comment='e'}},
keys=emai [...]
+ tableSchema.toString());
+ }
+
+ private TableSchema buildCreateTableSchema() {
String dorisTable = "doris.create_tab";
String[] dbTable = dorisTable.split("\\.");
Preconditions.checkArgument(dbTable.length == 2);
@@ -58,21 +65,24 @@ public class DorisSchemaFactoryTest {
List<String> pkKeys = Collections.singletonList("email");
Map<String, String> tableProperties = new HashMap<>();
String tableComment = "auto_tab_comment";
- TableSchema tableSchema =
- DorisSchemaFactory.createTableSchema(
- dbTable[0],
- dbTable[1],
- columnFields,
- pkKeys,
- new DorisTableConfig(tableProperties),
- tableComment);
- Assert.assertEquals(
- "TableSchema{database='doris', table='create_tab',
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name',
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'},
id=FieldSchema{name='id', typeString='INT', defaultValue='100',
comment='int_test'}, age=FieldSchema{name='age', typeString='INT',
defaultValue='null', comment='null'}, email=FieldSchema{name='email',
typeString='VARCHAR(100)', defaultValue='[email protected]', comment='e'}},
keys=emai [...]
- tableSchema.toString());
+ return DorisSchemaFactory.createTableSchema(
+ dbTable[0],
+ dbTable[1],
+ columnFields,
+ pkKeys,
+ new DorisTableConfig(tableProperties),
+ tableComment);
}
@Test
public void testCreateTableSchemaTableBuckets() {
+ TableSchema tableSchema = buildCreateTableSchemaTableBuckets();
+ Assert.assertEquals(
+ "TableSchema{database='doris', table='create_tab',
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name',
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'},
id=FieldSchema{name='id', typeString='INT', defaultValue='100',
comment='int_test'}, age=FieldSchema{name='age', typeString='INT',
defaultValue='null', comment='null'}, email=FieldSchema{name='email',
typeString='VARCHAR(100)', defaultValue='[email protected]', comment='e'}},
keys=emai [...]
+ tableSchema.toString());
+ }
+
+ private TableSchema buildCreateTableSchemaTableBuckets() {
String dorisTable = "doris.create_tab";
String[] dbTable = dorisTable.split("\\.");
Preconditions.checkArgument(dbTable.length == 2);
@@ -87,21 +97,24 @@ public class DorisSchemaFactoryTest {
tableProperties.put("table-buckets", "create_tab:40, create_taba:10,
tabs:12");
tableProperties.put("replication_num", "2");
String tableComment = "auto_tab_comment";
- TableSchema tableSchema =
- DorisSchemaFactory.createTableSchema(
- dbTable[0],
- dbTable[1],
- columnFields,
- pkKeys,
- new DorisTableConfig(tableProperties),
- tableComment);
- Assert.assertEquals(
- "TableSchema{database='doris', table='create_tab',
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name',
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'},
id=FieldSchema{name='id', typeString='INT', defaultValue='100',
comment='int_test'}, age=FieldSchema{name='age', typeString='INT',
defaultValue='null', comment='null'}, email=FieldSchema{name='email',
typeString='VARCHAR(100)', defaultValue='[email protected]', comment='e'}},
keys=emai [...]
- tableSchema.toString());
+ return DorisSchemaFactory.createTableSchema(
+ dbTable[0],
+ dbTable[1],
+ columnFields,
+ pkKeys,
+ new DorisTableConfig(tableProperties),
+ tableComment);
}
@Test
public void testCreateDuplicateTableSchema() {
+ TableSchema tableSchema = buildCreateDuplicateTableSchema();
+ Assert.assertEquals(
+ "TableSchema{database='doris', table='dup_tab',
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name',
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'},
id=FieldSchema{name='id', typeString='INT', defaultValue='100',
comment='int_test'}, age=FieldSchema{name='age', typeString='INT',
defaultValue='null', comment='null'}, email=FieldSchema{name='email',
typeString='VARCHAR(100)', defaultValue='[email protected]', comment='e'}},
keys=name, m [...]
+ tableSchema.toString());
+ }
+
+ private TableSchema buildCreateDuplicateTableSchema() {
String dorisTable = "doris.dup_tab";
String[] dbTable = dorisTable.split("\\.");
Preconditions.checkArgument(dbTable.length == 2);
@@ -114,16 +127,50 @@ public class DorisSchemaFactoryTest {
Map<String, String> tableProperties = new HashMap<>();
tableProperties.put("replication_num", "1");
String tableComment = "auto_tab_comment";
- TableSchema tableSchema =
- DorisSchemaFactory.createTableSchema(
- dbTable[0],
- dbTable[1],
- columnFields,
- new ArrayList<>(),
- new DorisTableConfig(tableProperties),
- tableComment);
+ return DorisSchemaFactory.createTableSchema(
+ dbTable[0],
+ dbTable[1],
+ columnFields,
+ new ArrayList<>(),
+ new DorisTableConfig(tableProperties),
+ tableComment);
+ }
+
+ @Test
+ public void testGenerateCreateTableDDL() {
+ TableSchema tableSchema = buildCreateTableSchema();
+ String ddl = DorisSchemaFactory.generateCreateTableDDL(tableSchema);
Assert.assertEquals(
- "TableSchema{database='doris', table='dup_tab',
tableComment='auto_tab_comment', fields={name=FieldSchema{name='name',
typeString='VARVHAR(100)', defaultValue='null', comment='Name_test'},
id=FieldSchema{name='id', typeString='INT', defaultValue='100',
comment='int_test'}, age=FieldSchema{name='age', typeString='INT',
defaultValue='null', comment='null'}, email=FieldSchema{name='email',
typeString='VARCHAR(100)', defaultValue='[email protected]', comment='e'}},
keys=name, m [...]
- tableSchema.toString());
+ "CREATE TABLE IF NOT EXISTS `doris`.`create_tab`(`email`
VARCHAR(100) DEFAULT '[email protected]' COMMENT 'e',`name` VARVHAR(100) COMMENT
'Name_test',`id` INT DEFAULT '100' COMMENT 'int_test',`age` INT COMMENT '' )
UNIQUE KEY(`email`) COMMENT 'auto_tab_comment' DISTRIBUTED BY HASH(`email`)
BUCKETS AUTO PROPERTIES ('light_schema_change'='true')",
+ ddl);
+ }
+
+ @Test
+ public void testGenerateCreateTableDDLBuckets() {
+ TableSchema tableSchema = buildCreateTableSchemaTableBuckets();
+ String ddl = DorisSchemaFactory.generateCreateTableDDL(tableSchema);
+ Assert.assertEquals(
+ "CREATE TABLE IF NOT EXISTS `doris`.`create_tab`(`email`
VARCHAR(100) DEFAULT '[email protected]' COMMENT 'e',`name` VARVHAR(100) COMMENT
'Name_test',`id` INT DEFAULT '100' COMMENT 'int_test',`age` INT COMMENT '' )
UNIQUE KEY(`email`) COMMENT 'auto_tab_comment' DISTRIBUTED BY HASH(`email`)
BUCKETS 40 PROPERTIES ('replication_num'='2','light_schema_change'='true')",
+ ddl);
+ }
+
+ @Test
+ public void testGenerateCreateTableDDLDuplicate() {
+ TableSchema tableSchema = buildCreateDuplicateTableSchema();
+ String ddl = DorisSchemaFactory.generateCreateTableDDL(tableSchema);
+ Assert.assertEquals(
+ "CREATE TABLE IF NOT EXISTS `doris`.`dup_tab`(`name`
VARVHAR(100) COMMENT 'Name_test',`id` INT DEFAULT '100' COMMENT
'int_test',`age` INT COMMENT '',`email` VARCHAR(100) DEFAULT '[email protected]'
COMMENT 'e' ) COMMENT 'auto_tab_comment' DISTRIBUTED BY HASH(`name`) BUCKETS
AUTO PROPERTIES ('replication_num'='1','light_schema_change'='true')",
+ ddl);
+ }
+
+ @Test
+ public void quoteTableIdentifier() {
+ String quoted = DorisSchemaFactory.quoteTableIdentifier("db.tbl");
+ Assert.assertEquals("`db`.`tbl`", quoted);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void quoteTableIdentifierException() {
+ DorisSchemaFactory.quoteTableIdentifier("db.tbl.sc");
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]