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();
}