Hadoop 将数据从.txt文件加载到配置单元中存储为ORC的表中
我有一个Hadoop 将数据从.txt文件加载到配置单元中存储为ORC的表中,hadoop,hive,Hadoop,Hive,我有一个.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; 我可以运行一个SELECT*fromtest
.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;
我可以运行一个SELECT*fromtest\u details\u txt配置单元中表上的代码>
但是,如果我尝试将数据加载到
CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC;
我在尝试运行SELECT时收到以下错误:
失败,出现异常java.io.IOException:java.io.IOException:ORC文件格式错误hdfs://master:6000/user/hive/warehouse/test.db/transaction_details/test_details.txt. postscript无效。
在使用上述LOAD语句加载数据时,我没有收到任何错误或异常
使用加载路径中的数据..
命令将数据存储到ORC表中时,是否还需要执行任何其他操作?加载数据
只需将文件复制到配置单元数据文件。配置单元在将数据加载到表中时不进行任何转换
因此,在这种情况下,如果要将输入文件加载到ORC表中,输入文件/home/user/test_details.txt
需要采用ORC格式
一种可能的解决方法是创建一个临时表,其中存储为文本
,然后加载数据
,然后将数据从此表复制到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;
在配置单元中将数据加载到ORC文件格式的步骤
1.使用文本文件格式创建一个普通表
2.将数据正常加载到此表中
3.使用存储为orcfile文件创建一个具有普通配置单元表预期结果架构的表
4.插入覆盖查询以将数据从textFile表复制到orcfile表
参考博客,了解如何将数据加载到hive中的所有文件格式
由于配置单元不对输入数据进行任何转换,因此格式必须相同:文件应为ORC格式,或者我们可以将数据从文本文件加载到配置单元中的文本表。ORC文件是二进制文件格式,因此您不能直接将文本文件加载到ORC表中。
ORC代表优化的行-列格式,这意味着它可以以比其他文件格式更优化的方式存储数据。ORC将原始数据的大小减少到75%。因此,数据处理的速度也提高了。ORC显示出比文本、序列和RC文件格式更好的性能。
ORC文件包含称为条带的组中的行数据以及文件页脚。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文件中。
类似的过程适用于所有二进制文件格式,即序列文件、RC文件和配置单元中的拼花地板文件
有关更多详细信息,请参阅下面的链接
步骤:
首先使用存储为文本文件(即默认值或
要创建表格的格式)
将数据加载到文本表中
使用存储为ORC作为select*从文本表格创建表格李>
从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)*/
你能发布你的创建表
,加载数据
,和选择查询吗?是的,我已经做了这个临时表方法。有了它,我可以使用另一个配置单元TXT表在ORC表中加载数据。我感兴趣的是找到一种从文件直接将数据加载到ORC表的方法。以ORC格式保存输入文件是否有帮助?我还没有试过。是的,正如答案中提到的,你可以将输入文件保持为ORC格式,然后简单地将其加载到ORC表中。这同样适用于拼花地板,除非使用Spark。嗨。。。这是一个普遍的答案,我想说的是,同样的事情适用于所有二进制文件,并在博客中用一个用例清楚地解释了这一点。非常感谢。