2017-08-15 2 views
0

mysql表をhbaseに揃えて、Hiveで外部表を作成しようとしました。HIVEから照会された外部表は、小数データ型の場合NULLを戻します。

mysqlに10進数(38,1)の列があり、hbaseに移動しました。

Hiveで外部テーブルを作成している間、レコードをフェッチしている間にnull値を取得しています。残りのすべての値は文字列データ型になりますので、外部テーブルに値が保持されます。

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"); 

残りの値がフェッチされているが、mysqlからdecimal (38,1)と1つの列のみがhbaseに移動しました。しかしhbaseからhiveにSqoopは現在、その文字列表現(テキストモードでHDFSにインポートされたかのように)に、各フィールドを変換することにより、HBaseのにすべての値をシリアル化し、その後、UTF-8バイトを挿入

+0

はあなたがtable文を作成し投稿することができますか? –

+0

'org.apache.hadoop.hive.hbase.HBaseStorageHandler'によって保存された外部テーブルnamespace.tablename(c1文字列、c2_col文字列、c3_col小数点(38,1)、c4_col文字列)を作成します。SERDEPROPERTIES( "hbase.columns.mapping" = ":key、c​​f1:a、cf1:b、cf1:c")TBLPROPERTIES( "hbase.table.name" = "namespace.hbasetablename"); –

+0

残りの値が取得されますが、mysqlの小数点(38,1)を持つ列がhbaseに移動した列は1つだけです。しかし、hbaseからハイブまでカラムの不一致があります –

答えて

0

列の不一致がありますこの文字列のターゲットセル内の

Hbaseはデータを文字列形式に保持していますが、クエリでは10進数で検索しようとしているため、結果はnullになります。文字列データ型のハイブテーブルを作成し、クエリ中に10進形式でキャストすることをお勧めします。

例:

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

同じものを試しましたが、まだnull値しか得られていません。 –

+0

これは奇妙です。ハイブテーブルにインポートして、データの問題をチェック/発見/デバッグできますか? –

+0

MYSQL -HBASE - 合計レコード数が正しく、Hbase-Hiveの合計数が正しくありません。ハイブにはほんのわずかのレコードしかありません。カウントは非常に少ないです。それを確認する方法は? –

関連する問題