HBase table 上的 Hive table 显示整数列为 NULL
Hive table on HBase table showing NULL for integer columns
我正在尝试在 Hbase table 上创建 Hive table。详情如下:
HBase table 有这样的数据:
Connected to: Phoenix (version 4.7)
Driver: PhoenixEmbeddedDriver (version 4.7)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
1341/1341 (100%) Done
Done
sqlline version 1.1.8
0: jdbc:phoenix:maxiqtesting1.lti.com:2181:/h>
select * from HBASE_TEST_6JULY_1792409;
+---------+---------+---------+
| FIELD0 | FIELD1 | FIELD2 |
+---------+---------+---------+
| 1 | qq | 23 |
| 2 | ee | 12 |
| 3 | dd | 123 |
+---------+---------+---------+
3 rows selected (0.139 seconds)
0: jdbc:phoenix:maxiqtesting1.lti.com:2181:/h>
创建 Hive Table 命令:
CREATE EXTERNAL TABLE HBASE_TEST_6JULY(FIELD0 int,FIELD1 string, FIELD2 int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,0:FIELD1,0:FIELD2","hbase.table.default.storage.type" = "binary", 'serialization.format'='1')
TBLPROPERTIES("hbase.table.name" = "HBASE_TEST_6JULY_1792409");
Hive 上的 SELECT 命令 table 给出的结果为:
hive> select * from HBASE_TEST_6JULY;
OK
-2147483647 qq -2147483625
-2147483646 ee -2147483636
-2147483645 dd -2147483525
Time taken: 0.963 seconds, Fetched: 3 row(s)
整数列值显示不正确。如果我在配置单元中将所有列作为字符串,那么我将在 HBase
中得到相应整数列的空值
任何人都可以帮助我并提供解决方案以通过在 HBase 上公开 Hive tables 来读取具有正确值的 numeric/non-string 列吗?
要从 hbase 读取非字符串列,您的 ddl 语句应该读取
CREATE EXTERNAL TABLE HBASE_TEST_6JULY(
FIELD0 int,
FIELD1 string,
FIELD2 int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key#b,0:FIELD1,0:FIELD2#b", 'serialization.format'='1')
TBLPROPERTIES("hbase.table.name" = "HBASE_TEST_6JULY_1792409");
请注意在 int 列的列映射限定符中使用“#b”。
这为我修好了。
我正在尝试在 Hbase table 上创建 Hive table。详情如下:
HBase table 有这样的数据:
Connected to: Phoenix (version 4.7)
Driver: PhoenixEmbeddedDriver (version 4.7)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
1341/1341 (100%) Done
Done
sqlline version 1.1.8
0: jdbc:phoenix:maxiqtesting1.lti.com:2181:/h>
select * from HBASE_TEST_6JULY_1792409;
+---------+---------+---------+
| FIELD0 | FIELD1 | FIELD2 |
+---------+---------+---------+
| 1 | qq | 23 |
| 2 | ee | 12 |
| 3 | dd | 123 |
+---------+---------+---------+
3 rows selected (0.139 seconds)
0: jdbc:phoenix:maxiqtesting1.lti.com:2181:/h>
创建 Hive Table 命令:
CREATE EXTERNAL TABLE HBASE_TEST_6JULY(FIELD0 int,FIELD1 string, FIELD2 int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,0:FIELD1,0:FIELD2","hbase.table.default.storage.type" = "binary", 'serialization.format'='1')
TBLPROPERTIES("hbase.table.name" = "HBASE_TEST_6JULY_1792409");
Hive 上的 SELECT 命令 table 给出的结果为:
hive> select * from HBASE_TEST_6JULY;
OK
-2147483647 qq -2147483625
-2147483646 ee -2147483636
-2147483645 dd -2147483525
Time taken: 0.963 seconds, Fetched: 3 row(s)
整数列值显示不正确。如果我在配置单元中将所有列作为字符串,那么我将在 HBase
中得到相应整数列的空值任何人都可以帮助我并提供解决方案以通过在 HBase 上公开 Hive tables 来读取具有正确值的 numeric/non-string 列吗?
要从 hbase 读取非字符串列,您的 ddl 语句应该读取
CREATE EXTERNAL TABLE HBASE_TEST_6JULY(
FIELD0 int,
FIELD1 string,
FIELD2 int
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key#b,0:FIELD1,0:FIELD2#b", 'serialization.format'='1')
TBLPROPERTIES("hbase.table.name" = "HBASE_TEST_6JULY_1792409");
请注意在 int 列的列映射限定符中使用“#b”。 这为我修好了。