2017-11-21 3 views
-1

私は奇妙な問題に直面しています。ファイルとテーブル定義とカンマの両方でタブ区切りを試しました。十進数の値をNULLとするハイブテーブル

どちらの場合でも、このフィールドをINTとして定義すると、小数点の値がNULLとして読み込まれます。カンマ区切り値で

サンプルデータ: 1,22.334 2,445.322 3,999.233

としてこのテーブルを定義したテーブルX(ID INT、SAL DECIMAL(3,3))行形式区切られたフィールドを作成しますカンマ区切りファイル

についても同様に '\ t' の位置 '\ TMP \データ\' によって

末端テーブルX(ID INT、SAL DECIMAL(3,3))行フォーマット区切を作成しますEDフィールド「」場所 『\ TMP \データ\』によって

を終了しかし、どちらの場合も、それはNULLとして小数点以下の値を読んでいる?問題が何であるかを

+0

次の例で22.342と2の間にスペースがあるのはなぜですか? 1,22.334 2 – Espanta

+0

これらの書式設定された値を 'String'としてマップし、SQLを使って千分区切り記号を削除し、ターゲット数値型にキャストします。 'Decimal(15,3)' –

+0

@エスパンタ実際にはスペースではありません....このデータを掲示している間、同じ行に別のレコードがあります。それはrec1 = 1,22.334 rec2 = 2,445.322 rec3 = 3,999.233です。これらのレコードはすべて新しい行にあります。 – Gourav

答えて

0

まず最初は、小数点データ型はコンマを受け入れていないんですデータで。 2番目の問題は、提供されるサンプルデータの小数点(3,3)を最小小数点(7,3)に増やす必要があることです。 10進数(3,3)は3つの値のいずれも保持できません。

生データにコンマが含まれているため、 すべての列を含むテーブルを文字列データ型としてロードする必要があります。 後で正規表現を使用してデータ内のカンマを削除し、decimalデータ型を持つ2番目のレベルのハイブテーブルにロードします。

+0

回答ありがとうございます。同じデータをタブ区切り形式で試しましたが、同じ問題があります。私のサンプルデータは10進数の後に最大3桁しかありません。それ以上は丸めたり、切り捨てられた? – Gourav

+0

DECIMALは**固定スケール/精度、正確な計算**を意味します。銀行が貯蓄口座を切り捨てるようにしますか? –

+0

はい、正解です。精度を上げると正確に解析されますが、私のデータは22.444ですが、DECIMAL(6,3)の精度が必要なのはなぜですか?精度を4,3に減らすと再びNULLになります。 – Gourav

関連する問題