hive 查询表,返回数据全是null的情形分为以下几种:
方式一:
hive> show tables;
OK
student
Time taken: 0.052 seconds, Fetched: 1 row(s)
hive> create table student1(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
OK
Time taken: 0.705 seconds
hive> load data local inpath '/root/opt/modules/datas/student.txt' into table student;
Loading data to table default.student
Table default.student1 stats: [numFiles=1, totalSize=37]
OK
Time taken: 1.365 seconds
hive> select * from student;
OK
NULL NULL
NULL NULL
NULL NULL
NULL NULL
其中“/root/opt/modules/datas/student.txt”的内容为下面所示,每一行的(id,name)之间使用一个空格分割。
方式二:
hive> load data local inpath '/root/opt/modules/datas/student.txt' into table student;
Loading data to table default.student
Table default.student1 stats: [numFiles=1, totalSize=37]
OK
Time taken: 1.365 seconds
hive> select * from student;
OK
NULL NULL
NULL NULL
NULL NULL
NULL NULL
将上述的文件“/root/opt/modules/datas/student.txt”的每一行(id,name)之间使用一个Tab键分割。
解决方法如下所示:
情况3:将情况1中的命令
hive> create table users(id int, name string);
改为
hive> CREATE TABLE student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '
' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
其中TERMINATED BY ’ '指定了数据分隔符是一个空格,与“/root/opt/modules/datas/student.txt”中每行分隔符一致。
其查询的结果如下所示:
hive> select id from student;
OK
101
102
103
104
Time taken: 0.151 seconds, Fetched: 4 row(s)
hive> select * from student;
OK
101 Rocky
102 Yinger
103 Ru
104 Rose
Time taken: 0.162 seconds, Fetched: 4 row(s)
综上所述:hive 中创建表加载数据的时候,分隔符与加载文件中的分隔符需要一致,才能得到正确的查询结果。