将数据从.txt文件加载到表中存储为Hive中的ORC

Nee*_*els 35 hadoop hive

我有一个.txt格式的数据文件.我正在使用该文件将数据加载到Hive表中.当我在一个表中加载文件时

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;
Run Code Online (Sandbox Code Playgroud)

使用正确加载数据

LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;
Run Code Online (Sandbox Code Playgroud)

我可以SELECT * FROM test_details_txt;在Hive的桌子上跑一个.

但是,如果我尝试在表中加载数据

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC; 
Run Code Online (Sandbox Code Playgroud)

尝试运行SELECT时收到以下错误:

Failed with exception java.io.IOException:java.io.IOException: Malformed ORC file hdfs://master:6000/user/hive/warehouse/test.db/transaction_details/test_details.txt. Invalid postscript.

使用上面的LOAD语句加载数据时,我没有收到任何错误或异常.

使用命令将数据存储到ORC表时还有什么需要完成的LOAD DATA IN PATH..吗?

Sun*_*nda 60

LOAD DATA只需将文件复制到hive数据文件即可.在将数据加载到表中时,Hive不会进行任何转换.

因此,在这种情况下,/home/user/test_details.txt如果要将输入文件加载到ORC表中,则输入文件需要采用ORC格式.

可能的解决方法是创建一个临时表STORED AS TEXT,然后LOAD DATA在其中创建,然后将此表中的数据复制到ORC表.

这是一个例子:

CREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;
CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;

-- Load into Text table
LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

-- Copy to ORC table
INSERT INTO TABLE test_details_orc SELECT * FROM test_details_txt;
Run Code Online (Sandbox Code Playgroud)

  • 是的,我已经采用了这种临时表方法.有了这个,我可以使用另一个Hive TXT表在ORC表中加载数据.我感兴趣的是找到一种从文件直接将数据加载到ORC表的方法.将输入文件保持为ORC格式有帮助吗?我还没有尝试过. (2认同)

小智 5

脚步:

  1. 首先使用存储为TEXTFILE的方式创建表(即默认值或要创建表的格式)
  2. 将数据加载到文本表中。
  3. 使用存储为ORC的表来创建表,方法是选择* from text_table;
  4. 从兽人表中选择*。

例:

CREATE TABLE text_table(line STRING);

LOAD DATA 'path_of_file' OVERWRITE INTO text_table;

CREATE TABLE orc_table STORED AS ORC AS SELECT * FROM text_table;

SELECT * FROM orc_table;   /*(it can now be read)*/
Run Code Online (Sandbox Code Playgroud)