2

csvファイルからHiveにデータをインポートしています。私のテーブルには文字列とintの両方が含まれています。ただし、私の入力ファイルでは、intの周囲に空白があるため、次のようになります。

some string,     2    ,another string  ,    7    , yet another string

残念ながら、ファイルを提供するプログラムのフォーマットを制御することはできません。

(例)を使用してデータをインポートする場合:

CREATE TABLE MYTABLE(string1 STRING, alpha INT, string2 STRING, beta INT, string3 STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

次に、すべての整数がNULLに設定されます。これは、余分な空白が解析を失敗させるためだと思います。これを回避する方法はありますか?

4

1 に答える 1

3

多段階のインポートを実行できます。最初の段階では、すべてのデータをとして保存STRINGし、2番目の段階では、を使用trim()して空白を削除してから、データをとして保存しますINT。また、Pigを使用してソースファイルから生のテキストとしてデータを読み取り、正しいデータ型と同様にHiveに書き込むこともできます。

編集

ソースファイルを外部テーブルとして指定できる場合は、これを1回のパスで実行することもできます。

CREATE TABLE myTable(
    string1 STRING, alpha STRING, string2 STRING, beta STRING, string3 STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '\\server\path\file.csv'

INSERT INTO myOtherTable
SELECT string1,
       CAST(TRIM(alpha) AS INT),
       string2,
       CAST(TRIM(beta) AS INT),
       string3
FROM myTable;
于 2013-01-15T20:52:04.713 に答える