当从HIVE查询时,外部表返回NULL为十进制数据类型
我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
。但是从hbase
到hive
没有为列不匹配
Sqoop目前每个字段转换成它的字符串表示(因为如果你是在文本模式导入到HDFS)序列化到HBase的所有值,然后插入UTF-8
字节目标单元格中此字符串的字符串。
由于Hbase将数据保存为字符串格式,但您的查询正试图将其作为十进制查找,因此您得到的结果为空。我建议使用字符串数据类型创建配置单元表,并在查询过程中以十进制格式进行转换。
例子:
select cast('string_col' as Decimal(38,1)) as string_col from table;
试过相同但仍然只有空值。可用的其他方法吗? –
这很奇怪。你可以导入到配置单元表来检查/查找/调试数据的问题。 –
MYSQL -HBASE - 总记录数是正确的,Hbase-Hive总数不正确。 Hive中只有很少的记录。数量非常少。如何验证它? –
您可以发布create table语句? –
'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”); –
取回剩余值但是只有一列有十进制(38,1),它从mysql移动到hbase。但从hbase到配置单元的列不匹配 –