diff options
author | vataga <vitalii.diravka@mail.ru> | 2016-02-02 13:18:49 +0200 |
---|---|---|
committer | Parth Chandra <parthc@apache.org> | 2016-02-26 09:53:27 -0800 |
commit | b9960f89e72810d109e712ef7e740919502e72d9 (patch) | |
tree | 72c5c93142803ca3f50ffb0d336b4134f9e32501 /contrib/storage-hbase/src | |
parent | cca17cb8f9891bb0b49560acad7f129a6cb7edc0 (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')
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(); + } } |