在将平面文件中的数据加载到配置单元表时获取空值

use*_*697 15 null hadoop hive flat-file hdfs

我将平面文件中的数据加载到配置单元表时获取空值.
我的表结构是这样的:

hive> create table test_hive (id int,value string);
Run Code Online (Sandbox Code Playgroud)

我的平面文件是这样的:input.txt

1   a
2   b
3   c
4   d
5   e
6   F
7   G
8   j
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时,我得到空值:

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
Run Code Online (Sandbox Code Playgroud)

屏幕截图:

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
Run Code Online (Sandbox Code Playgroud)

小智 20

Hive中的默认字段终止符是^ A. 您需要在create table语句中明确提到您正在使用不同的字段分隔符.

与Lorand Bending在评论中指出的相似,使用:

CREATE TABLE test_hive(id INT, value STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
Run Code Online (Sandbox Code Playgroud)

您不需要指定位置,因为您正在创建托管表(而不是外部表).


Muf*_*dar 6

您遇到的问题是因为在您的数据中,字段由''分隔,而在创建表时您没有提到字段分隔符.因此,如果在创建hive表时未提及字段分隔符,则默认情况下,hive会将^ A视为分隔符.

因此,要解决您的问题,您可以重新创建提及以下语法的表,它将起作用.

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