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
バイトを挿入
はあなたがtable文を作成し投稿することができますか? –
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'によって保存された外部テーブルnamespace.tablename(c1文字列、c2_col文字列、c3_col小数点(38,1)、c4_col文字列)を作成します。SERDEPROPERTIES( "hbase.columns.mapping" = ":key、cf1:a、cf1:b、cf1:c")TBLPROPERTIES( "hbase.table.name" = "namespace.hbasetablename"); –
残りの値が取得されますが、mysqlの小数点(38,1)を持つ列がhbaseに移動した列は1つだけです。しかし、hbaseからハイブまでカラムの不一致があります –