This is an automated email from the ASF dual-hosted git repository. nic pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 426a227 KYLIN-3857 add configuration for quote character 426a227 is described below commit 426a22711d6e25d2b7a4c1c3c6cea4e642b7f248 Author: hit-lacus <hit_la...@126.com> AuthorDate: Wed Apr 17 20:57:43 2019 +0800 KYLIN-3857 add configuration for quote character --- .../org/apache/kylin/common/KylinConfigBase.java | 8 +++ .../java/org/apache/kylin/job/JoinedFlatTable.java | 13 ++-- .../kylin/job/util/FlatTableSqlQuoteUtils.java | 81 +++++++++++----------- .../kylin/job/util/FlatTableSqlQuoteUtilsTest.java | 35 ++++++---- .../kylin/source/hive/GarbageCollectionStep.java | 8 ++- .../apache/kylin/source/hive/HiveMRInputTest.java | 9 ++- .../kylin/source/jdbc/JdbcHiveInputBase.java | 5 +- .../source/jdbc/extensible/JdbcHiveInputBase.java | 5 +- .../apache/kylin/source/kafka/KafkaInputBase.java | 4 +- 9 files changed, 98 insertions(+), 70 deletions(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index 849f635..e8d9480 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -873,6 +873,14 @@ public abstract class KylinConfigBase implements Serializable { return r; } + public boolean enableHiveDdlQuote(){ + return Boolean.parseBoolean(getOptional("kylin.source.hive.quote-enabled", TRUE)); + } + + public String getQuoteCharacter(){ + return getOptional("kylin.source.quote.character", "`"); + } + /** * was for route to hive, not used any more */ diff --git a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java index 297f669..427f379 100644 --- a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java +++ b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java @@ -32,6 +32,7 @@ import org.apache.kylin.cube.CubeSegment; import org.apache.kylin.cube.model.CubeDesc; import org.apache.kylin.cube.model.RowKeyColDesc; import org.apache.kylin.job.engine.JobEngineConfig; +import org.apache.kylin.job.util.FlatTableSqlQuoteUtils; import org.apache.kylin.metadata.model.DataModelDesc; import org.apache.kylin.metadata.model.IJoinedFlatTableDesc; import org.apache.kylin.metadata.model.JoinDesc; @@ -89,7 +90,7 @@ public class JoinedFlatTable { if (i > 0) { ddl.append(","); } - ddl.append(colName(col, flatDesc.useAlias()) + " " + getHiveDataType(col.getDatatype()) + "\n"); + ddl.append(quoteIdentifier(colName(col, flatDesc.useAlias())) + " " + getHiveDataType(col.getDatatype()) + "\n"); } ddl.append(")" + "\n"); if (TEXTFILE.equals(storageFormat)) { @@ -170,7 +171,7 @@ public class JoinedFlatTable { DataModelDesc model = flatDesc.getDataModel(); TableRef rootTable = model.getRootFactTable(); - sql.append(" FROM ").append(flatDesc.getDataModel().getRootFactTable().getTableIdentityQuoted("`")) + sql.append(" FROM ").append(flatDesc.getDataModel().getRootFactTable().getTableIdentityQuoted(FlatTableSqlQuoteUtils.getQuote())) .append(" as ").append(quoteIdentifier(rootTable.getAlias())).append(sep); for (JoinTableDesc lookupDesc : model.getJoinTables()) { @@ -185,7 +186,7 @@ public class JoinedFlatTable { } String joinType = join.getType().toUpperCase(Locale.ROOT); - sql.append(joinType).append(" JOIN ").append(dimTable.getTableIdentityQuoted("`")) + sql.append(joinType).append(" JOIN ").append(dimTable.getTableIdentityQuoted(FlatTableSqlQuoteUtils.getQuote())) .append(" as ").append(quoteIdentifier(dimTable.getAlias())).append(sep); sql.append("ON "); for (int i = 0; i < pk.length; i++) { @@ -229,7 +230,7 @@ public class JoinedFlatTable { DataModelDesc model = flatDesc.getDataModel(); if (StringUtils.isNotEmpty(model.getFilterCondition())) { String quotedFilterCondition = quoteIdentifierInSqlExpr(flatDesc, - model.getFilterCondition(), "`"); + model.getFilterCondition()); whereBuilder.append(" AND (").append(quotedFilterCondition).append(") "); // -> filter condition contains special character may cause bug } if (flatDesc.getSegment() != null) { @@ -240,7 +241,7 @@ public class JoinedFlatTable { if (segRange != null && !segRange.isInfinite()) { whereBuilder.append(" AND ("); String quotedPartitionCond = quoteIdentifierInSqlExpr(flatDesc, - partDesc.getPartitionConditionBuilder().buildDateRangeCondition(partDesc, flatDesc.getSegment(), segRange), "`"); + partDesc.getPartitionConditionBuilder().buildDateRangeCondition(partDesc, flatDesc.getSegment(), segRange)); whereBuilder.append(quotedPartitionCond); whereBuilder.append(")" + sep); } @@ -313,7 +314,7 @@ public class JoinedFlatTable { + quoteIdentifier(col.getName()); } else { String computeExpr = col.getColumnDesc().getComputedColumnExpr(); - return quoteIdentifierInSqlExpr(flatDesc, computeExpr, "`"); + return quoteIdentifierInSqlExpr(flatDesc, computeExpr); } } } diff --git a/core-job/src/main/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtils.java b/core-job/src/main/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtils.java index 2d0f72d..1b7073a 100644 --- a/core-job/src/main/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtils.java +++ b/core-job/src/main/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtils.java @@ -26,6 +26,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; +import org.apache.kylin.common.KylinConfig; import org.apache.kylin.metadata.model.ColumnDesc; import org.apache.kylin.metadata.model.IJoinedFlatTableDesc; import org.apache.kylin.metadata.model.TableDesc; @@ -36,47 +37,50 @@ import com.google.common.collect.Maps; public class FlatTableSqlQuoteUtils { - public static final String QUOTE = "`"; + private FlatTableSqlQuoteUtils() { + } + + private static String quote = null; + + private static synchronized void setQuote() { + if (quote != null) + return; + KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv(); + if (kylinConfig.enableHiveDdlQuote()) { + quote = kylinConfig.getQuoteCharacter(); + } else { + quote = ""; + } + } + + public static String getQuote() { + setQuote(); + return quote; + } /** * Quote identifier by default quote ` - * @param identifier - * @return */ - public static String quoteIdentifier(String identifier){ - return QUOTE + identifier + QUOTE; + public static String quoteIdentifier(String identifier) { + setQuote(); + return quote + identifier + quote; } /** * Quote table identity, eg. `default`.`kylin_sales` - * @param database - * @param table - * @param quote - * @return */ - public static String quoteTableIdentity(String database, String table, String quote) { + public static String quoteTableIdentity(String database, String table) { + setQuote(); String dbName = quote + database + quote; String tableName = quote + table + quote; return String.format(Locale.ROOT, "%s.%s", dbName, tableName).toUpperCase(Locale.ROOT); } /** - * use default quote ` to quote table identity - * @param database - * @param table - * @return - */ - public static String quoteTableIdentity(String database, String table) { - return quoteTableIdentity(database, table, QUOTE); - } - - /** * Used for quote identifiers in Sql Filter Expression & Computed Column Expression for flat table - * @param flatDesc - * @param quotation - * @return */ - public static String quoteIdentifierInSqlExpr(IJoinedFlatTableDesc flatDesc, String sqlExpr, String quotation) { + public static String quoteIdentifierInSqlExpr(IJoinedFlatTableDesc flatDesc, String sqlExpr) { + setQuote(); Map<String, String> tabToAliasMap = buildTableToTableAliasMap(flatDesc); Map<String, Map<String, String>> tabToColsMap = buildTableToColumnsMap(flatDesc); @@ -84,14 +88,14 @@ public class FlatTableSqlQuoteUtils { for (String table : tabToAliasMap.keySet()) { List<String> tabPatterns = getTableNameOrAliasPatterns(table); if (isIdentifierNeedToQuote(sqlExpr, table, tabPatterns)) { - sqlExpr = quoteIdentifier(sqlExpr, quotation, table, tabPatterns); + sqlExpr = quoteIdentifier(sqlExpr, table, tabPatterns); tableMatched = true; } String tabAlias = tabToAliasMap.get(table); List<String> tabAliasPatterns = getTableNameOrAliasPatterns(tabAlias); if (isIdentifierNeedToQuote(sqlExpr, tabAlias, tabAliasPatterns)) { - sqlExpr = quoteIdentifier(sqlExpr, quotation, tabAlias, tabAliasPatterns); + sqlExpr = quoteIdentifier(sqlExpr, tabAlias, tabAliasPatterns); tableMatched = true; } @@ -100,13 +104,13 @@ public class FlatTableSqlQuoteUtils { for (String column : columns) { List<String> colPatterns = getColumnNameOrAliasPatterns(column); if (isIdentifierNeedToQuote(sqlExpr, column, colPatterns)) { - sqlExpr = quoteIdentifier(sqlExpr, quotation, column, colPatterns); + sqlExpr = quoteIdentifier(sqlExpr, column, colPatterns); } if (columnHasAlias(table, column, tabToColsMap)) { String colAlias = getColumnAlias(table, column, tabToColsMap); List<String> colAliasPattern = getColumnNameOrAliasPatterns(colAlias); if (isIdentifierNeedToQuote(sqlExpr, colAlias, colAliasPattern)) { - sqlExpr = quoteIdentifier(sqlExpr, quotation, colAlias, colPatterns); + sqlExpr = quoteIdentifier(sqlExpr, colAlias, colPatterns); } } } @@ -121,15 +125,14 @@ public class FlatTableSqlQuoteUtils { * Used to quote identifiers for JDBC ext job when quoting cc expr * @param tableDesc * @param sqlExpr - * @param quot * @return */ - public static String quoteIdentifierInSqlExpr(TableDesc tableDesc, String sqlExpr, String quot) { + public static String quoteIdentifierInSqlExpr(TableDesc tableDesc, String sqlExpr) { String table = tableDesc.getName(); boolean tableMatched = false; List<String> tabPatterns = getTableNameOrAliasPatterns(table); if (isIdentifierNeedToQuote(sqlExpr, table, tabPatterns)) { - sqlExpr = quoteIdentifier(sqlExpr, quot, table, tabPatterns); + sqlExpr = quoteIdentifier(sqlExpr, table, tabPatterns); tableMatched = true; } @@ -138,7 +141,7 @@ public class FlatTableSqlQuoteUtils { String column = columnDesc.getName(); List<String> colPatterns = getColumnNameOrAliasPatterns(column); if (isIdentifierNeedToQuote(sqlExpr, column, colPatterns)) { - sqlExpr = quoteIdentifier(sqlExpr, quot, column, colPatterns); + sqlExpr = quoteIdentifier(sqlExpr, column, colPatterns); } } } @@ -164,9 +167,9 @@ public class FlatTableSqlQuoteUtils { } // visible for test - static String quoteIdentifier(String sqlExpr, String quotation, String identifier, - List<String> identifierPatterns) { - String quotedIdentifier = quotation + identifier.trim() + quotation; + static String quoteIdentifier(String sqlExpr, String identifier, List<String> identifierPatterns) { + setQuote(); + String quotedIdentifier = quote + identifier.trim() + quote; for (String pattern : identifierPatterns) { Matcher matcher = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE | Pattern.DOTALL).matcher(sqlExpr); @@ -220,7 +223,7 @@ public class FlatTableSqlQuoteUtils { } private static Map<String, String> getColToColAliasMapInTable(String tableName, - Map<String, Map<String, String>> tableToColumnsMap) { + Map<String, Map<String, String>> tableToColumnsMap) { if (tableToColumnsMap.containsKey(tableName)) { return tableToColumnsMap.get(tableName); } @@ -228,13 +231,13 @@ public class FlatTableSqlQuoteUtils { } private static Set<String> listColumnsInTable(String tableName, - Map<String, Map<String, String>> tableToColumnsMap) { + Map<String, Map<String, String>> tableToColumnsMap) { Map<String, String> colToAliasMap = getColToColAliasMapInTable(tableName, tableToColumnsMap); return colToAliasMap.keySet(); } private static boolean columnHasAlias(String tableName, String columnName, - Map<String, Map<String, String>> tableToColumnsMap) { + Map<String, Map<String, String>> tableToColumnsMap) { Map<String, String> colToAliasMap = getColToColAliasMapInTable(tableName, tableToColumnsMap); if (colToAliasMap.containsKey(columnName)) { return true; @@ -243,7 +246,7 @@ public class FlatTableSqlQuoteUtils { } private static String getColumnAlias(String tableName, String columnName, - Map<String, Map<String, String>> tableToColumnsMap) { + Map<String, Map<String, String>> tableToColumnsMap) { Map<String, String> colToAliasMap = getColToColAliasMapInTable(tableName, tableToColumnsMap); if (colToAliasMap.containsKey(columnName)) { return colToAliasMap.get(columnName); diff --git a/core-job/src/test/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtilsTest.java b/core-job/src/test/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtilsTest.java index 1b5839f..c1d41a8 100644 --- a/core-job/src/test/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtilsTest.java +++ b/core-job/src/test/java/org/apache/kylin/job/util/FlatTableSqlQuoteUtilsTest.java @@ -18,34 +18,41 @@ package org.apache.kylin.job.util; +import org.apache.kylin.common.util.LocalFileMetadataTestCase; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import java.util.List; -public class FlatTableSqlQuoteUtilsTest { +public class FlatTableSqlQuoteUtilsTest extends LocalFileMetadataTestCase { + + @Before + public void setup() throws Exception { + createTestMetadata(); + } @Test public void testQuoteTableName() { List<String> tablePatterns = FlatTableSqlQuoteUtils.getTableNameOrAliasPatterns("KYLIN_SALES"); String expr = "KYLIN_SALES.PRICE * KYLIN_SALES.COUNT"; String expectedExpr = "`KYLIN_SALES`.PRICE * `KYLIN_SALES`.COUNT"; - String quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES", tablePatterns); + String quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "`KYLIN_SALES`.PRICE * KYLIN_SALES.COUNT"; expectedExpr = "`KYLIN_SALES`.PRICE * `KYLIN_SALES`.COUNT"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES", tablePatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE * KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT"; expectedExpr = "`KYLIN_SALES`.PRICE AS KYLIN_SALES_PRICE * `KYLIN_SALES`.COUNT AS KYLIN_SALES_COUNT"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES", tablePatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "(KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE > 1 and KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT > 50)"; expectedExpr = "(`KYLIN_SALES`.PRICE AS KYLIN_SALES_PRICE > 1 and `KYLIN_SALES`.COUNT AS KYLIN_SALES_COUNT > 50)"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES", tablePatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); } @@ -54,22 +61,22 @@ public class FlatTableSqlQuoteUtilsTest { List<String> tablePatterns = FlatTableSqlQuoteUtils.getTableNameOrAliasPatterns("KYLIN_SALES_ALIAS"); String expr = "KYLIN_SALES.PRICE * KYLIN_SALES.COUNT"; String expectedExpr = "KYLIN_SALES.PRICE * KYLIN_SALES.COUNT"; - String quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES_ALIAS", tablePatterns); + String quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES_ALIAS", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE * KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT"; expectedExpr = "KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE * KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES_ALIAS", tablePatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES_ALIAS", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "(KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE > 1 and KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT > 50)"; expectedExpr = "(KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE > 1 and KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT > 50)"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES_ALIAS", tablePatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES_ALIAS", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "(KYLIN_SALES_ALIAS.PRICE AS KYLIN_SALES_PRICE > 1 and KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT > 50)"; expectedExpr = "(`KYLIN_SALES_ALIAS`.PRICE AS KYLIN_SALES_PRICE > 1 and KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT > 50)"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "KYLIN_SALES_ALIAS", tablePatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "KYLIN_SALES_ALIAS", tablePatterns); Assert.assertEquals(expectedExpr, quotedExpr); } @@ -78,27 +85,27 @@ public class FlatTableSqlQuoteUtilsTest { List<String> columnPatterns = FlatTableSqlQuoteUtils.getColumnNameOrAliasPatterns("PRICE"); String expr = "KYLIN_SALES.PRICE * KYLIN_SALES.COUNT"; String expectedExpr = "KYLIN_SALES.`PRICE` * KYLIN_SALES.COUNT"; - String quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "PRICE", columnPatterns); + String quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "PRICE", columnPatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "KYLIN_SALES.PRICE/KYLIN_SALES.COUNT"; expectedExpr = "KYLIN_SALES.`PRICE`/KYLIN_SALES.COUNT"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "PRICE", columnPatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "PRICE", columnPatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "KYLIN_SALES.PRICE AS KYLIN_SALES_PRICE * KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT"; expectedExpr = "KYLIN_SALES.`PRICE` AS KYLIN_SALES_PRICE * KYLIN_SALES.COUNT AS KYLIN_SALES_COUNT"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "PRICE", columnPatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "PRICE", columnPatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "(PRICE > 1 AND COUNT > 50)"; expectedExpr = "(`PRICE` > 1 AND COUNT > 50)"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "PRICE", columnPatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "PRICE", columnPatterns); Assert.assertEquals(expectedExpr, quotedExpr); expr = "PRICE>1 and `PRICE` < 15"; expectedExpr = "`PRICE`>1 and `PRICE` < 15"; - quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "`", "PRICE", columnPatterns); + quotedExpr = FlatTableSqlQuoteUtils.quoteIdentifier(expr, "PRICE", columnPatterns); Assert.assertEquals(expectedExpr, quotedExpr); } diff --git a/source-hive/src/main/java/org/apache/kylin/source/hive/GarbageCollectionStep.java b/source-hive/src/main/java/org/apache/kylin/source/hive/GarbageCollectionStep.java index ebfaf85..ed86513 100644 --- a/source-hive/src/main/java/org/apache/kylin/source/hive/GarbageCollectionStep.java +++ b/source-hive/src/main/java/org/apache/kylin/source/hive/GarbageCollectionStep.java @@ -32,6 +32,7 @@ import org.apache.kylin.job.exception.ExecuteException; import org.apache.kylin.job.execution.AbstractExecutable; import org.apache.kylin.job.execution.ExecutableContext; import org.apache.kylin.job.execution.ExecuteResult; +import org.apache.kylin.job.util.FlatTableSqlQuoteUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,14 +58,17 @@ public class GarbageCollectionStep extends AbstractExecutable { } private String cleanUpIntermediateFlatTable(KylinConfig config) throws IOException { + String quoteCharacter = FlatTableSqlQuoteUtils.getQuote(); StringBuffer output = new StringBuffer(); final HiveCmdBuilder hiveCmdBuilder = new HiveCmdBuilder(); final List<String> hiveTables = this.getIntermediateTables(); - if (!config.isHiveKeepFlatTable()){ + if (!config.isHiveKeepFlatTable()) { for (String hiveTable : hiveTables) { if (StringUtils.isNotEmpty(hiveTable)) { hiveCmdBuilder.addStatement("USE " + config.getHiveDatabaseForIntermediateTable() + ";"); - hiveCmdBuilder.addStatement("DROP TABLE IF EXISTS `" + hiveTable + "`;"); + hiveCmdBuilder + .addStatement("DROP TABLE IF EXISTS " + quoteCharacter + hiveTable + quoteCharacter + ";"); + output.append("Hive table " + hiveTable + " is dropped. \n"); } } diff --git a/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java b/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java index cc1b5e1..d0e30a0 100644 --- a/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java +++ b/source-hive/src/test/java/org/apache/kylin/source/hive/HiveMRInputTest.java @@ -28,13 +28,20 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.KylinConfig.SetAndUnsetThreadLocalConfig; +import org.apache.kylin.common.util.LocalFileMetadataTestCase; import org.apache.kylin.common.util.RandomUtil; import org.apache.kylin.common.util.StringUtil; import org.apache.kylin.job.execution.DefaultChainedExecutable; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; -public class HiveMRInputTest { +public class HiveMRInputTest extends LocalFileMetadataTestCase { + + @Before + public void setup() throws Exception { + createTestMetadata(); + } @Test public void TestGetJobWorkingDir() throws IOException { diff --git a/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/JdbcHiveInputBase.java b/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/JdbcHiveInputBase.java index 3769473..77e38c7 100644 --- a/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/JdbcHiveInputBase.java +++ b/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/JdbcHiveInputBase.java @@ -183,8 +183,7 @@ public class JdbcHiveInputBase extends HiveInputBase { .getPartitionTimeColumnRef().getTableAlias().equals(splitTableAlias))) { String quotedPartCond = FlatTableSqlQuoteUtils.quoteIdentifierInSqlExpr(flatDesc, partitionDesc.getPartitionConditionBuilder().buildDateRangeCondition(partitionDesc, - flatDesc.getSegment(), segRange), - "`"); + flatDesc.getSegment(), segRange)); bquery += " WHERE " + quotedPartCond; } } @@ -196,7 +195,7 @@ public class JdbcHiveInputBase extends HiveInputBase { String cmd = String.format(Locale.ROOT, "%s/bin/sqoop import" + generateSqoopConfigArgString() - + "--connect \"%s\" --driver %s --username %s --password %s --query \"%s AND \\$CONDITIONS\" " + + "--connect \"%s\" --driver %s --username %s --password \"%s\" --query \"%s AND \\$CONDITIONS\" " + "--target-dir %s/%s --split-by %s --boundary-query \"%s\" --null-string '' " + "--fields-terminated-by '%s' --num-mappers %d", sqoopHome, connectionUrl, driverClass, jdbcUser, jdbcPass, selectSql, jobWorkingDir, hiveTable, diff --git a/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/extensible/JdbcHiveInputBase.java b/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/extensible/JdbcHiveInputBase.java index ec69084..9fd6d30 100644 --- a/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/extensible/JdbcHiveInputBase.java +++ b/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/extensible/JdbcHiveInputBase.java @@ -94,15 +94,14 @@ public class JdbcHiveInputBase extends org.apache.kylin.source.jdbc.JdbcHiveInpu .getPartitionTimeColumnRef().getTableAlias().equals(splitTableAlias))) { String quotedPartCond = FlatTableSqlQuoteUtils.quoteIdentifierInSqlExpr(flatDesc, partitionDesc.getPartitionConditionBuilder().buildDateRangeCondition(partitionDesc, - flatDesc.getSegment(), segRange), - "`"); + flatDesc.getSegment(), segRange)); bquery += " WHERE " + quotedPartCond; } } } bquery = escapeQuotationInSql(bquery); - splitColumn = escapeQuotationInSql(dataSource.convertColumn(splitColumn, FlatTableSqlQuoteUtils.QUOTE)); + splitColumn = escapeQuotationInSql(dataSource.convertColumn(splitColumn, FlatTableSqlQuoteUtils.getQuote())); String cmd = StringUtils.format( "--connect \"%s\" --driver %s --username %s --password %s --query \"%s AND \\$CONDITIONS\" " diff --git a/source-kafka/src/main/java/org/apache/kylin/source/kafka/KafkaInputBase.java b/source-kafka/src/main/java/org/apache/kylin/source/kafka/KafkaInputBase.java index 23b0ae0..b159652 100644 --- a/source-kafka/src/main/java/org/apache/kylin/source/kafka/KafkaInputBase.java +++ b/source-kafka/src/main/java/org/apache/kylin/source/kafka/KafkaInputBase.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.cube.CubeSegment; import org.apache.kylin.cube.model.CubeDesc; +import org.apache.kylin.job.util.FlatTableSqlQuoteUtils; import org.apache.kylin.source.kafka.model.StreamCubeFactTableDesc; import org.apache.kylin.engine.mr.IInput; import org.apache.kylin.engine.mr.JobBuilderSupport; @@ -34,7 +35,6 @@ import org.apache.kylin.job.constant.ExecutableConstants; import org.apache.kylin.job.engine.JobEngineConfig; import org.apache.kylin.job.execution.AbstractExecutable; import org.apache.kylin.job.execution.DefaultChainedExecutable; -import org.apache.kylin.job.util.FlatTableSqlQuoteUtils; import org.apache.kylin.metadata.model.IJoinedFlatTableDesc; import org.apache.kylin.source.hive.CreateFlatHiveTableStep; import org.apache.kylin.source.hive.GarbageCollectionStep; @@ -158,7 +158,7 @@ public class KafkaInputBase { final String dropTableHql = JoinedFlatTable.generateDropTableStatement(flatDesc); final String createTableHql = JoinedFlatTable.generateCreateTableStatement(flatDesc, baseLocation); String insertDataHqls = JoinedFlatTable.generateInsertDataStatement(flatDesc); - insertDataHqls = insertDataHqls.replace(flatDesc.getDataModel().getRootFactTable().getTableIdentityQuoted(FlatTableSqlQuoteUtils.QUOTE) + " ", + insertDataHqls = insertDataHqls.replace(flatDesc.getDataModel().getRootFactTable().getTableIdentityQuoted(FlatTableSqlQuoteUtils.getQuote()) + " ", quoteTableIdentity(hiveTableDatabase, streamFactDesc.getTableName()) + " "); CreateFlatHiveTableStep step = new CreateFlatHiveTableStep();