Updated Branches: refs/heads/trunk c4b0eac2d -> 8b3742ad6
SQOOP-912: Add ability to specify --hive-database parameter (Jarek Jarcec Cecho via Kate Ting) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/8b3742ad Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/8b3742ad Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/8b3742ad Branch: refs/heads/trunk Commit: 8b3742ad69ad8dfea30c692cf9e8f78192f91890 Parents: c4b0eac Author: Kate Ting <[email protected]> Authored: Mon Apr 15 12:44:32 2013 -0400 Committer: Kate Ting <[email protected]> Committed: Mon Apr 15 12:44:32 2013 -0400 ---------------------------------------------------------------------- src/java/org/apache/sqoop/SqoopOptions.java | 9 ++++++ src/java/org/apache/sqoop/hive/TableDefWriter.java | 11 ++++++- src/java/org/apache/sqoop/tool/BaseSqoopTool.java | 10 +++++++ .../cloudera/sqoop/hive/TestTableDefWriter.java | 22 +++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/8b3742ad/src/java/org/apache/sqoop/SqoopOptions.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/sqoop/SqoopOptions.java b/src/java/org/apache/sqoop/SqoopOptions.java index f423c0f..f18d43e 100644 --- a/src/java/org/apache/sqoop/SqoopOptions.java +++ b/src/java/org/apache/sqoop/SqoopOptions.java @@ -145,6 +145,7 @@ public class SqoopOptions implements Cloneable { @StoredAsProperty("hive.fail.table.exists") private boolean failIfHiveTableExists; @StoredAsProperty("hive.table.name") private String hiveTableName; + @StoredAsProperty("hive.database.name") private String hiveDatabaseName; @StoredAsProperty("hive.drop.delims") private boolean hiveDropDelims; @StoredAsProperty("hive.delims.replacement") private String hiveDelimsReplacement; @@ -1618,6 +1619,14 @@ public class SqoopOptions implements Cloneable { this.hiveTableName = name; } + public String getHiveDatabaseName() { + return this.hiveDatabaseName; + } + + public void setHiveDatabaseName(String name) { + this.hiveDatabaseName = name; + } + public String getHivePartitionKey() { return hivePartitionKey; } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8b3742ad/src/java/org/apache/sqoop/hive/TableDefWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/sqoop/hive/TableDefWriter.java b/src/java/org/apache/sqoop/hive/TableDefWriter.java index 3563c67..c9962e9 100644 --- a/src/java/org/apache/sqoop/hive/TableDefWriter.java +++ b/src/java/org/apache/sqoop/hive/TableDefWriter.java @@ -132,12 +132,16 @@ public class TableDefWriter { String [] colNames = getColumnNames(); StringBuilder sb = new StringBuilder(); if (options.doFailIfHiveTableExists()) { - sb.append("CREATE TABLE `").append(outputTableName).append("` ( "); + sb.append("CREATE TABLE `"); } else { sb.append("CREATE TABLE IF NOT EXISTS `"); - sb.append(outputTableName).append("` ( "); } + if(options.getHiveDatabaseName() != null) { + sb.append(options.getHiveDatabaseName()).append("`.`"); + } + sb.append(outputTableName).append("` ( "); + // Check that all explicitly mapped columns are present in result set for(Object column : userMapping.keySet()) { boolean found = false; @@ -232,6 +236,9 @@ public class TableDefWriter { sb.append(" OVERWRITE"); } sb.append(" INTO TABLE `"); + if(options.getHiveDatabaseName() != null) { + sb.append(options.getHiveDatabaseName()).append("`.`"); + } sb.append(outputTableName); sb.append('`'); http://git-wip-us.apache.org/repos/asf/sqoop/blob/8b3742ad/src/java/org/apache/sqoop/tool/BaseSqoopTool.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java index c457272..c46a7b7 100644 --- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java +++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java @@ -99,6 +99,7 @@ public abstract class BaseSqoopTool extends com.cloudera.sqoop.tool.SqoopTool { public static final String FMT_AVRODATAFILE_ARG = "as-avrodatafile"; public static final String HIVE_IMPORT_ARG = "hive-import"; public static final String HIVE_TABLE_ARG = "hive-table"; + public static final String HIVE_DATABASE_ARG = "hive-database"; public static final String HIVE_OVERWRITE_ARG = "hive-overwrite"; public static final String HIVE_DROP_DELIMS_ARG = "hive-drop-import-delims"; public static final String HIVE_DELIMS_REPLACEMENT_ARG = @@ -445,6 +446,11 @@ public abstract class BaseSqoopTool extends com.cloudera.sqoop.tool.SqoopTool { .withDescription("Sets the table name to use when importing to hive") .withLongOpt(HIVE_TABLE_ARG) .create()); + hiveOpts.addOption(OptionBuilder.withArgName("database-name") + .hasArg() + .withDescription("Sets the database name to use when importing to hive") + .withLongOpt(HIVE_DATABASE_ARG) + .create()); hiveOpts.addOption(OptionBuilder .withDescription("Drop Hive record \\0x01 and row delimiters " + "(\\n\\r) from imported string fields") @@ -814,6 +820,10 @@ public abstract class BaseSqoopTool extends com.cloudera.sqoop.tool.SqoopTool { out.setHiveTableName(in.getOptionValue(HIVE_TABLE_ARG)); } + if(in.hasOption(HIVE_DATABASE_ARG)) { + out.setHiveDatabaseName(in.getOptionValue(HIVE_DATABASE_ARG)); + } + if (in.hasOption(HIVE_DROP_DELIMS_ARG)) { out.setHiveDropDelims(true); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/8b3742ad/src/test/com/cloudera/sqoop/hive/TestTableDefWriter.java ---------------------------------------------------------------------- diff --git a/src/test/com/cloudera/sqoop/hive/TestTableDefWriter.java b/src/test/com/cloudera/sqoop/hive/TestTableDefWriter.java index 6610b75..55e572e 100644 --- a/src/test/com/cloudera/sqoop/hive/TestTableDefWriter.java +++ b/src/test/com/cloudera/sqoop/hive/TestTableDefWriter.java @@ -212,4 +212,26 @@ public class TestTableDefWriter extends TestCase { // Expected, ok } } + + public void testHiveDatabase() throws Exception { + String[] args = { + "--hive-database", "db", + }; + Configuration conf = new Configuration(); + SqoopOptions options = + new ImportTool().parseArguments(args, null, null, false); + TableDefWriter writer = new TableDefWriter(options, + null, HsqldbTestServer.getTableName(), "outputTable", conf, false); + + Map<String, Integer> colTypes = new SqlTypeMap<String, Integer>(); + writer.setColumnTypes(colTypes); + + String createTable = writer.getCreateTableStmt(); + assertNotNull(createTable); + assertTrue(createTable.contains("`db`.`outputTable`")); + + String loadStmt = writer.getLoadDataStmt(); + assertNotNull(loadStmt); + assertTrue(createTable.contains("`db`.`outputTable`")); + } }
