2017-08-15 128 views
0

我sqooped mysql表到hbase并尝试在Hive中创建一个外部表。当从HIVE查询时,外部表返回NULL为十进制数据类型

我在mysql有一列十进制(38,1),它被移动到hbase

现在,当使用Hive创建外部表时,在获取记录时我得到空值。剩余所有值arr字符串数据类型,因此hive外部表保存值。

hive中创建外部表时,我使用的数据类型是decimal(38,1)

任何其他解决方案获取Hive外部表中的实际值?

创建表:

create external table namespace.tablename(c1 string,c2_col string,c3_col decimal(38,1),c4_col string) 
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES 
("hbase.columns.mapping" = ":key,cf1:a,cf1:b,cf1:c")TBLPROPERTIES("hbase.table.name" = "namespace.hbasetablename"); 

剩余价值被取出,但与decimal (38,1)只有一列从mysql搬到hbase。但是从hbasehive没有为列不匹配

+0

您可以发布create table语句? –

+0

'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES(“hbase.columns.mapping”)存储的外部表namespace.tablename(c1 string,c2_col string,c3_col decimal(38,1),c4_col string) =“:key,cf1:a,cf1:b,cf1:c”)TBLPROPERTIES(“hbase.table.name”=“namespace.hbasetablename”); –

+0

取回剩余值但是只有一列有十进制(38,1),它从mysql移动到hbase。但从hbase到配置单元的列不匹配 –

回答

0

Sqoop目前每个字段转换成它的字符串表示(因为如果你是在文本模式导入到HDFS)序列化到HBase的所有值,然后插入UTF-8字节目标单元格中​​此字符串的字符串。

由于Hbase将数据保存为字符串格式,但您的查询正试图将其作为十进制查找,因此您得到的结果为空。我建议使用字符串数据类型创建配置单元表,并在查询过程中以十进制格式进行转换。

例子:

select cast('string_col' as Decimal(38,1)) as string_col from table; 
+0

试过相同但仍然只有空值。可用的其他方法吗? –

+0

这很奇怪。你可以导入到配置单元表来检查/查找/调试数据的问题。 –

+0

MYSQL -HBASE - 总记录数是正确的,Hbase-Hive总数不正确。 Hive中只有很少的记录。数量非常少。如何验证它? –