2017-08-15 41 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中只有很少的記錄。數量非常少。如何驗證它? –

相關問題