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

时间:2014-02-12 07:23:10

标签: hadoop hive

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

这样的表中加载文件时
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;

使用

正确加载数据
LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

我可以在Hive的桌面上运行SELECT * FROM test_details_txt;

但是,如果我尝试在

的表中加载数据
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC; 

尝试运行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语句加载数据时,我没有收到任何错误或异常。

使用LOAD DATA IN PATH..命令将数据存储到ORC表中是否有需要完成的任何其他事情

5 个答案:

答案 0 :(得分:59)

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

因此,在这种情况下,如果要将输入文件加载到ORC表中,则输入文件/home/user/test_details.txt必须采用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;

答案 1 :(得分:4)

步骤:

  1. 首先使用存储为TEXTFILE创建一个表(即默认或在 无论你想创建哪种格式表)
  2. 将数据加载到文本表中。
  3. 使用存储为ORC的表格作为select * from text_table;
  4. 从orc table中选择*。
  5. 示例:

    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)*/
    

答案 2 :(得分:1)

由于Hive不对我们的输入数据进行任何转换,因此格式必须相同:文件应该是ORC格式,或者我们可以将数据从文本文件加载到Hive中的文本表。

答案 3 :(得分:0)

在配置单元中将数据加载到ORC文件格式的步骤

1.使用textFile格式创建一个普通表

2.将数据正常载入此表

3.使用存储为orcfile的方法,使用普通配置单元表的预期结果的模式创建一个表

4.插入覆盖查询以将数据从textFile表复制到orcfile表

请参阅博客,了解如何将数据加载到配置单元中的所有文件格式

Load data into all file formats in hive

答案 4 :(得分:0)

ORC文件是二进制文件格式,因此无法直接将文本文件加载到ORC表中。 ORC代表Optimized Row Columnar,这意味着它可以以优化的方式存储数据,而不是其他文件格式。 ORC将原始数据的大小减少到75%。结果,数据处理的速度也增加了。 ORC显示比Text,Sequence和RC文件格式更好的性能。 ORC文件包含组中的行数据,称为条带以及文件页脚。当Hive处理数据时,ORC格式可以提高性能。

首先,您需要创建一个普通表作为textFile,将数据加载到textFile表中,然后您可以使用insert overwrite query将数据写入ORC文件。

create table table_name1 (schema of the table) row format delimited by ',' | stored as TEXTFILE

create table table_name2 (schema of the table) row format delimited by ',' | stored as ORC

load data local inpath ‘path of your file’ into table table_name1;(loading data from a local system)

INSERT OVERWRITE TABLE table_name2 SELECT * FROM table_name1;

现在您的所有数据都将存储在ORC文件中。 类似的过程适用于所有二进制文件格式,即Hive中的Sequence文件,RC文件和Parquet文件。

您可以参考以下链接了解更多详情。

https://acadgild.com/blog/file-formats-in-apache-hive/