aboutsummaryrefslogtreecommitdiff
path: root/contrib/storage-hbase/src
diff options
context:
space:
mode:
authorvataga <vitalii.diravka@mail.ru>2016-02-02 13:18:49 +0200
committerParth Chandra <parthc@apache.org>2016-02-26 09:53:27 -0800
commitb9960f89e72810d109e712ef7e740919502e72d9 (patch)
tree72c5c93142803ca3f50ffb0d336b4134f9e32501 /contrib/storage-hbase/src
parentcca17cb8f9891bb0b49560acad7f129a6cb7edc0 (diff)
DRILL-4346: Handle NumberFormatException when casting empty string to int in hbase/maprdb
- Made replacing of functions casting for nullable input varbinary and var16char types are working (in CastFunctions.java setting 'drill.exec.functions.cast_empty_string_to_null = true' didn't work); - Added new generated classes for casting varbinary and var16char to int (CastEmptyStringVarTypesToNullableNumeric template and Casts.tdd data); - Created a test (in TestHBaseQueries.java) for checking an empty string to integer casting in maprdb/hbase table; - Small design changes according to comments in review (import statements, prefixes ...). This closes #384
Diffstat (limited to 'contrib/storage-hbase/src')
-rw-r--r--contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java7
-rw-r--r--contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java16
-rw-r--r--contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java27
3 files changed, 49 insertions, 1 deletions
diff --git a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
index fe1126592..8f59b676c 100644
--- a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
+++ b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/HBaseTestsSuite.java
@@ -61,6 +61,7 @@ public class HBaseTestsSuite {
protected static final String TEST_TABLE_FLOAT_OB_DESC = "TestTableFloatOBDesc";
protected static final String TEST_TABLE_BIGINT_OB_DESC = "TestTableBigIntOBDesc";
protected static final String TEST_TABLE_INT_OB_DESC = "TestTableIntOBDesc";
+ protected static final String TEST_TABLE_NULL_STR = "TestTableNullStr";
private static Configuration conf;
@@ -159,7 +160,8 @@ public class HBaseTestsSuite {
&& admin.tableExists(TEST_TABLE_DOUBLE_OB_DESC)
&& admin.tableExists(TEST_TABLE_FLOAT_OB_DESC)
&& admin.tableExists(TEST_TABLE_BIGINT_OB_DESC)
- && admin.tableExists(TEST_TABLE_INT_OB_DESC);
+ && admin.tableExists(TEST_TABLE_INT_OB_DESC)
+ && admin.tableExists(TEST_TABLE_NULL_STR);
}
private static void createTestTables() throws Exception {
@@ -183,6 +185,7 @@ public class HBaseTestsSuite {
TestTableGenerator.generateHBaseDatasetFloatOBDesc(admin, TEST_TABLE_FLOAT_OB_DESC, 1);
TestTableGenerator.generateHBaseDatasetBigIntOBDesc(admin, TEST_TABLE_BIGINT_OB_DESC, 1);
TestTableGenerator.generateHBaseDatasetIntOBDesc(admin, TEST_TABLE_INT_OB_DESC, 1);
+ TestTableGenerator.generateHBaseDatasetNullStr(admin, TEST_TABLE_NULL_STR, 1);
}
private static void cleanupTestTables() throws IOException {
@@ -212,6 +215,8 @@ public class HBaseTestsSuite {
admin.deleteTable(TEST_TABLE_BIGINT_OB_DESC);
admin.disableTable(TEST_TABLE_INT_OB_DESC);
admin.deleteTable(TEST_TABLE_INT_OB_DESC);
+ admin.disableTable(TEST_TABLE_NULL_STR);
+ admin.deleteTable(TEST_TABLE_NULL_STR);
}
public static int getZookeeperPort() {
diff --git a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
index 3f412c7c5..ce7d585f8 100644
--- a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
+++ b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestHBaseQueries.java
@@ -18,7 +18,9 @@
package org.apache.drill.hbase;
import java.util.Arrays;
+import java.util.List;
+import org.apache.drill.exec.rpc.user.QueryDataBatch;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
@@ -90,4 +92,18 @@ public class TestHBaseQueries extends BaseHBaseTest {
} catch (Exception e) { } // ignore
}
}
+ @Test
+ public void testCastEmptyStrings() throws Exception {
+ try {
+ test("alter system set `drill.exec.functions.cast_empty_string_to_null` = true;");
+ setColumnWidths(new int[] {5, 4});
+ List<QueryDataBatch> resultList = runHBaseSQLlWithResults("SELECT row_key,\n"
+ + " CAST(t.f.c1 as INT) c1, CAST(t.f.c2 as BIGINT) c2, CAST(t.f.c3 as INT) c3,\n"
+ + " CAST(t.f.c4 as INT) c4 FROM hbase.TestTableNullStr t where row_key='a1'");
+ printResult(resultList);
+ }
+ finally {
+ test("alter system reset `drill.exec.functions.cast_empty_string_to_null`;");
+ }
+ }
}
diff --git a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
index 77e9d6412..f4f3e933d 100644
--- a/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
+++ b/contrib/storage-hbase/src/test/java/org/apache/drill/hbase/TestTableGenerator.java
@@ -610,4 +610,31 @@ public class TestTableGenerator {
admin.flush(tableName);
}
+
+ public static void generateHBaseDatasetNullStr(HBaseAdmin admin, String tableName, int numberRegions) throws Exception {
+ if (admin.tableExists(tableName)) {
+ admin.disableTable(tableName);
+ admin.deleteTable(tableName);
+ }
+
+ HTableDescriptor desc = new HTableDescriptor(tableName);
+ desc.addFamily(new HColumnDescriptor("f"));
+ if (numberRegions > 1) {
+ admin.createTable(desc, Arrays.copyOfRange(SPLIT_KEYS, 0, numberRegions-1));
+ } else {
+ admin.createTable(desc);
+ }
+
+ HTable table = new HTable(admin.getConfiguration(), tableName);
+
+ Put p = new Put("a1".getBytes());
+ p.add("f".getBytes(), "c1".getBytes(), "".getBytes());
+ p.add("f".getBytes(), "c2".getBytes(), "".getBytes());
+ p.add("f".getBytes(), "c3".getBytes(), "5".getBytes());
+ p.add("f".getBytes(), "c4".getBytes(), "".getBytes());
+ table.put(p);
+
+ table.flushCommits();
+ table.close();
+ }
}