我创建了一个Hive表,它从文本文件中加载数据。但它返回的空结果集在所有查询上。
我尝试了以下命令:
CREATE TABLE table2(
id1 INT,
id2 INT,
id3 INT,
id4 STRING,
id5 INT,
id6 STRING,
id7 STRING,
id8 STRING,
id9 STRING,
id10 STRING,
id11 STRING,
id12 STRING,
id13 STRING,
id14 STRING,
id15 STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION '/user/biadmin/lineitem';
执行命令,并创建表。但是,对于所有查询,始终返回0行,包括SELECT * FROM table2;
示例数据:
输入数据的单行:
1 | 155190 | 7706 | 1 | 17 | 21168.23 | 0.04 | 0.02 | N | O | 1996-03-13 | 1996-02-12 | 1996-03-22 |交付人员|卡车|以上法院的|
我附上了数据文件的屏幕截图。 命令输出:DESCRIBE FORMATTED table2;
| Wed Apr 16 20:18:58 IST 2014 : Connection obtained for host: big-instght-15.persistent.co.in, port number 1528. |
| # col_name data_type comment |
| |
| id1 int None |
| id2 int None |
| id3 int None |
| id4 string None |
| id5 int None |
| id6 string None |
| id7 string None |
| id8 string None |
| id9 string None |
| id10 string None |
| id11 string None |
| id12 string None |
| id13 string None |
| id14 string None |
| id15 string None |
| |
| # Detailed Table Information |
| Database: default |
| Owner: biadmin |
| CreateTime: Mon Apr 14 20:17:31 IST 2014 |
| LastAccessTime: UNKNOWN |
| Protect Mode: None |
| Retention: 0 |
| Location: hdfs://big-instght-11.persistent.co.in:9000/user/biadmin/lineitem |
| Table Type: MANAGED_TABLE |
| Table Parameters: |
| serialization.null.format |
| transient_lastDdlTime 1397486851 |
| |
| # Storage Information |
| SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
| InputFormat: org.apache.hadoop.mapred.TextInputFormat |
| OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
| Compressed: No |
| Num Buckets: -1 |
| Bucket Columns: [] |
| Sort Columns: [] |
| Storage Desc Params: |
| field.delim | |
+ ---------------------------------------------- -------------------------------------------------- ----------------- +
谢谢!
答案 0 :(得分:1)
请确保 /user/biadmin/lineitem.txt 的位置确实存在并且您的数据存在。由于您使用的是 LOCATION 子句,因此您的数据必须存在,而不是默认的仓库位置 / user / hive / warehouse 。
快速 ls 验证:
bin/hadoop fs -ls /user/biadmin/lineitem.txt
另外,请确保使用正确的分隔符。
答案 1 :(得分:0)
您是否尝试过使用LOAD DATA LOCAL INFILE
LOAD DATA LOCAL INFILE'/user/biadmin/lineitem.txt' INTO TABLE table2
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
(id1,id2,id3........);
答案 2 :(得分:0)
您使用的是托管表还是外部表?如果是外部表,则应在创建表时使用外部关键字。在使用load命令将表数据加载到表中之后。如果它是托管表,在将数据加载到表后,您可以在hadoop中看到hive仓库目录中的数据。默认路径是" / user / hive / warehouse / yourtablename"。 你应该在hive shell中运行load命令。
答案 3 :(得分:0)
我能够将数据加载到表中。问题是:
LOCATION'/ user / biadmin / lineitem';
没有加载任何数据。但是当我将包含该文件的目录作为路径时:
LOCATION'/ user / biadmin / tpc-h';
我将lineite.txt文件放在tpc-h目录中。
有效!