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



我有一个.txt格式的数据文件。我正在使用该文件将数据加载到配置单元表中。当我在类似的表中加载文件时

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中的表上运行CCD_ 2。

然而,如果我试图将数据加载到表中

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表中时,是否还有其他需要执行的操作?

LOAD DATA只是将文件复制到配置单元数据文件中。配置单元在将数据加载到表中时不进行任何转换。

因此,在这种情况下,如果要将输入文件/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;

步骤:

  1. 首先使用存储为TEXTFILE(即默认值或要创建表格的任何格式)
  2. 将数据加载到文本表中
  3. 使用stored as ORC从text_table中选择*创建表
  4. 从orc表中选择*

示例:

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

由于配置单元不对输入数据进行任何转换,因此格式需要相同:要么文件应为ORC格式,要么我们可以在配置单元中将数据从文本文件加载到文本表。

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

首先,您需要创建一个普通表作为textFile,将数据加载到textFile表中,然后您可以使用insert overwrite查询将数据写入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中的序列文件、RC文件和Parquet文件。

有关更多详细信息,请参阅下面的链接。

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

在蜂窝中将数据加载到ORC文件格式的步骤

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

2.将数据正常加载到此表

3.使用存储为orcfile的创建一个具有正常配置单元表的预期结果模式的表

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

参考博客了解如何将数据加载到蜂窝中的所有文件格式

将数据加载到配置单元中的所有文件格式中

相关内容

  • 没有找到相关文章

最新更新