diff --git a/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java b/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java index 7c141fc0630fd9fcc2e3c41b264fb2c200f7ca1b..c6f3b0ff3abfd78bb4139eb471beeb0b66211f2a 100644 --- a/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java +++ b/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseRowSerializer.java @@ -271,8 +271,11 @@ private boolean serialize( ss.write(sep); } serialize(entry.getKey(), koi, level+2, ss); - ss.write(keyValueSeparator); - serialize(entry.getValue(), voi, level+2, ss); + + if ( entry.getValue() != null) { + ss.write(keyValueSeparator); + serialize(entry.getValue(), voi, level+2, ss); + } } } return true; diff --git a/hbase-handler/src/test/queries/positive/hbase_queries.q b/hbase-handler/src/test/queries/positive/hbase_queries.q index b445c4b3d8fcc0d31e1176ad88fd1dceab5cb60e..5d321df8c7c97471d9487466882fe0add9ab2446 100644 --- a/hbase-handler/src/test/queries/positive/hbase_queries.q +++ b/hbase-handler/src/test/queries/positive/hbase_queries.q @@ -164,6 +164,17 @@ SELECT COUNT(*) FROM hbase_table_1_like; SHOW CREATE TABLE hbase_table_1_like; +DROP TABLE IF EXISTS hbase_table_9; +CREATE TABLE hbase_table_9 (id bigint, data map, str string) +stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' +with serdeproperties ("hbase.columns.mapping" = ":key,cf:map_col#s:s,cf:str_col"); + +insert overwrite table hbase_table_9 select 1 as id, map('abcd', null) as data , null as str from src limit 1; +insert into table hbase_table_9 select 2 as id, map('efgh', null) as data , '1234' as str from src limit 1; +insert into table hbase_table_9 select 3 as id, map('hij', '') as data , '1234' as str from src limit 1; +insert into table hbase_table_9 select 4 as id, map('klm', 'avalue') as data , '1234' as str from src limit 1; +select * from hbase_table_9; + DROP TABLE hbase_table_1; DROP TABLE hbase_table_1_like; DROP TABLE hbase_table_2; @@ -176,3 +187,4 @@ DROP TABLE hbase_table_7; DROP TABLE hbase_table_8; DROP TABLE empty_hbase_table; DROP TABLE empty_normal_table; +DROP TABLE hbase_table_9; diff --git a/hbase-handler/src/test/results/positive/hbase_queries.q.out b/hbase-handler/src/test/results/positive/hbase_queries.q.out index 4f105641edc104dcbb967268c560c4c3307573cf..71346ca37056e4454e05ea46959723988d87c09e 100644 --- a/hbase-handler/src/test/results/positive/hbase_queries.q.out +++ b/hbase-handler/src/test/results/positive/hbase_queries.q.out @@ -919,6 +919,66 @@ WITH SERDEPROPERTIES ( TBLPROPERTIES ( 'hbase.table.name'='hbase_table_0', #### A masked pattern was here #### +PREHOOK: query: DROP TABLE IF EXISTS hbase_table_9 +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS hbase_table_9 +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE hbase_table_9 (id bigint, data map, str string) +stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' +with serdeproperties ("hbase.columns.mapping" = ":key,cf:map_col#s:s,cf:str_col") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hbase_table_9 +POSTHOOK: query: CREATE TABLE hbase_table_9 (id bigint, data map, str string) +stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' +with serdeproperties ("hbase.columns.mapping" = ":key,cf:map_col#s:s,cf:str_col") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hbase_table_9 +PREHOOK: query: insert overwrite table hbase_table_9 select 1 as id, map('abcd', null) as data , null as str from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@hbase_table_9 +POSTHOOK: query: insert overwrite table hbase_table_9 select 1 as id, map('abcd', null) as data , null as str from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@hbase_table_9 +PREHOOK: query: insert into table hbase_table_9 select 2 as id, map('efgh', null) as data , '1234' as str from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@hbase_table_9 +POSTHOOK: query: insert into table hbase_table_9 select 2 as id, map('efgh', null) as data , '1234' as str from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@hbase_table_9 +PREHOOK: query: insert into table hbase_table_9 select 3 as id, map('hij', '') as data , '1234' as str from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@hbase_table_9 +POSTHOOK: query: insert into table hbase_table_9 select 3 as id, map('hij', '') as data , '1234' as str from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@hbase_table_9 +PREHOOK: query: insert into table hbase_table_9 select 4 as id, map('klm', 'avalue') as data , '1234' as str from src limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: default@hbase_table_9 +POSTHOOK: query: insert into table hbase_table_9 select 4 as id, map('klm', 'avalue') as data , '1234' as str from src limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: default@hbase_table_9 +PREHOOK: query: select * from hbase_table_9 +PREHOOK: type: QUERY +PREHOOK: Input: default@hbase_table_9 +#### A masked pattern was here #### +POSTHOOK: query: select * from hbase_table_9 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hbase_table_9 +#### A masked pattern was here #### +1 {"abcd":null} NULL +2 {"efgh":null} 1234 +3 {"hij":""} 1234 +4 {"klm":"avalue"} 1234 PREHOOK: query: DROP TABLE hbase_table_1 PREHOOK: type: DROPTABLE PREHOOK: Input: default@hbase_table_1 @@ -1015,3 +1075,11 @@ POSTHOOK: query: DROP TABLE empty_normal_table POSTHOOK: type: DROPTABLE POSTHOOK: Input: default@empty_normal_table POSTHOOK: Output: default@empty_normal_table +PREHOOK: query: DROP TABLE hbase_table_9 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hbase_table_9 +PREHOOK: Output: default@hbase_table_9 +POSTHOOK: query: DROP TABLE hbase_table_9 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hbase_table_9 +POSTHOOK: Output: default@hbase_table_9