Author: thejas
Date: Fri Feb 14 00:21:37 2014
New Revision: 1568174

URL: http://svn.apache.org/r1568174
Log:
HIVE-6378 : HCatClient::createTable() doesn't allow SerDe class to be specified 
(Karl D. Gierach , Mithun Radhakrishnan via Thejas Nair)

Modified:
    
hive/trunk/hcatalog/webhcat/java-client/src/main/java/org/apache/hcatalog/api/HCatCreateTableDesc.java
    
hive/trunk/hcatalog/webhcat/java-client/src/test/java/org/apache/hcatalog/api/TestHCatClient.java

Modified: 
hive/trunk/hcatalog/webhcat/java-client/src/main/java/org/apache/hcatalog/api/HCatCreateTableDesc.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/hcatalog/webhcat/java-client/src/main/java/org/apache/hcatalog/api/HCatCreateTableDesc.java?rev=1568174&r1=1568173&r2=1568174&view=diff
==============================================================================
--- 
hive/trunk/hcatalog/webhcat/java-client/src/main/java/org/apache/hcatalog/api/HCatCreateTableDesc.java
 (original)
+++ 
hive/trunk/hcatalog/webhcat/java-client/src/main/java/org/apache/hcatalog/api/HCatCreateTableDesc.java
 Fri Feb 14 00:21:37 2014
@@ -345,6 +345,7 @@ public class HCatCreateTableDesc {
     private String fileFormat;
     private String location;
     private String storageHandler;
+    private String serDe;
     private Map<String, String> tblProps;
     private boolean ifNotExists;
     private String dbName;
@@ -472,6 +473,17 @@ public class HCatCreateTableDesc {
     }
 
     /**
+     * SerDe.
+     *
+     * @param serDe the SerDe implementation's class-name.
+     * @return the builder
+     */
+    public Builder serDe(String serDe) {
+        this.serDe = serDe;
+        return this;
+    }
+
+    /**
      * Builds the HCatCreateTableDesc.
      *
      * @return HCatCreateTableDesc
@@ -494,7 +506,7 @@ public class HCatCreateTableDesc {
       desc.location = this.location;
       desc.tblProps = this.tblProps;
       desc.sortCols = this.sortCols;
-      desc.serde = null;
+      desc.serde = this.serDe;
       if (!StringUtils.isEmpty(fileFormat)) {
         desc.fileFormat = fileFormat;
         if ("SequenceFile".equalsIgnoreCase(fileFormat)) {

Modified: 
hive/trunk/hcatalog/webhcat/java-client/src/test/java/org/apache/hcatalog/api/TestHCatClient.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/hcatalog/webhcat/java-client/src/test/java/org/apache/hcatalog/api/TestHCatClient.java?rev=1568174&r1=1568173&r2=1568174&view=diff
==============================================================================
--- 
hive/trunk/hcatalog/webhcat/java-client/src/test/java/org/apache/hcatalog/api/TestHCatClient.java
 (original)
+++ 
hive/trunk/hcatalog/webhcat/java-client/src/test/java/org/apache/hcatalog/api/TestHCatClient.java
 Fri Feb 14 00:21:37 2014
@@ -36,6 +36,7 @@ import org.apache.hadoop.hive.ql.io.orc.
 import org.apache.hadoop.hive.ql.io.orc.OrcSerde;
 import org.apache.hadoop.hive.ql.io.RCFileInputFormat;
 import org.apache.hadoop.hive.ql.io.RCFileOutputFormat;
+import org.apache.hadoop.hive.ql.metadata.DefaultStorageHandler;
 import org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe;
 import org.apache.hadoop.mapred.TextInputFormat;
 import org.apache.hcatalog.cli.SemanticAnalysis.HCatSemanticAnalyzer;
@@ -51,6 +52,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertArrayEquals;
@@ -179,6 +181,24 @@ public class TestHCatClient {
       OrcSerde.class.getName()));
     assertTrue(table1.getCols().equals(cols));
 
+    // Check that serDe settings stick.
+    String tableFour = "table4";
+    String nonDefaultSerDe = "com.my.custom.SerDe";
+    HCatCreateTableDesc tableDesc4 = 
+        HCatCreateTableDesc.create(db, tableFour, 
cols).serDe(nonDefaultSerDe).build();
+    client.createTable(tableDesc4);
+    HCatTable table4 = client.getTable(db, tableFour);
+    assertEquals("SerDe libraries don't match!", nonDefaultSerDe, 
table4.getSerdeLib());
+    client.dropTable(db, tableFour, true);
+
+    // Check that serDe settings don't stick when a storageHandler is used.
+    tableDesc4 = HCatCreateTableDesc.create(db, tableFour, cols).
+        
serDe(nonDefaultSerDe).storageHandler(DefaultStorageHandler.class.getName()).build();
+    client.createTable(tableDesc4);
+    table4 = client.getTable(db, tableFour);
+    assertNotSame("SerDe libraries shouldn't have matched!", nonDefaultSerDe, 
table4.getSerdeLib());
+    client.dropTable(db, tableFour, true);
+
     client.close();
   }
 


Reply via email to