18

フラット ファイルからハイブ テーブルにデータをロードしているときに、null 値を取得しています。
私のテーブル構造は次のようなものです:

hive> create table test_hive (id int,value string);

私のフラットファイルは次のようなものです:input.txt

1   a
2   b
3   c
4   d
5   e
6   F
7   G
8   j

以下のコマンドを実行すると、null 値が取得されます。

hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_hive;
hive> select * from test_hive;
OK<br>
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL

スクリーンショット:

hive> create table test_hive (id int,value string);
OK
Time taken: 4.97 seconds
hive> show tables;
OK
test_hive
Time taken: 0.124 seconds
hive> LOAD DATA LOCAL INPATH '/home/hduser/input2.txt' OVERWRITE INTO TABLE test_hive;
Copying data from file:/home/hduser/input2.txt
Copying file: file:/home/hduser/input2.txt
Loading data to table default.test_hive
Deleted hdfs://hydhtc227141d:54310/app/hive/warehouse/test_hive
OK
Time taken: 0.572 seconds
hive> select * from test_hive;
OK
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
Time taken: 0.182 seconds
4

6 に答える 6

23

Hive のデフォルトのフィールド ターミネータは ^A です。create table ステートメントで、別のフィールド セパレータを使用していることを明示的に言及する必要があります。

Lorand Bending がコメントで指摘したのと同様に、次を使用します。

CREATE TABLE test_hive(id INT, value STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

(外部テーブルではなく) 管理対象テーブルを作成しているため、場所を指定する必要はありません。

于 2012-11-15T05:54:41.923 に答える
6

あなたが直面している問題は、データではフィールドが ' ' で区切られており、テーブルの作成中にフィールド区切り文字について言及していないためです。そのため、Hive テーブルの作成時にフィールド区切り記号を指定しない場合、既定では、Hive は ^A を区切り記号と見なします。

したがって、問題を解決するには、以下の構文に言及したテーブルを再作成すると機能します。

CREATE TABLE test_hive(id INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

于 2015-11-25T17:29:55.600 に答える
1

要素はスペースまたはタブで区切られていますか? タブで次の手順を実行します。スペースで区切られている場合は、'\t' の代わりに ' ' を使用してください。

hive> CREATE TABLE test_hive(id INT, value STRING) row format
   delimited fields terminated by '\t' line formated by '\n' stored as filename;

あなたが入力しなければならないよりも

hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_hive;

hive> select * from test_hive;

これで、期待される出力「ファイル名」を正確に取得できます。

于 2014-12-10T10:50:02.867 に答える
1

Hive のデフォルトのレコードとフィールド区切り文字リスト:

  1. \n

  2. ^A

  3. ^B

  4. ^C

^V^A を押すと、Vim に ^A を挿入できます。

于 2014-06-25T09:58:22.520 に答える