hadoop—将数据从.txt文件加载到配置单元中存储为orc的表中

bvpmtnay  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(608)

我有一个数据文件 .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 * FROM test_details_txt; 在 hive 的table上。
但是,如果我尝试将数据加载到

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表中?

jhdbpxl9

jhdbpxl91#

步骤:
首先使用存储为文本文件创建一个表  (i、 e默认值或您要创建表的任何格式)
将数据加载到文本表中。
使用存储为orc作为selectfrom text\ U table创建表格;
从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)*/
u7up0aaq

u7up0aaq2#

将数据加载到配置单元中的orc文件格式的步骤
1.使用文本文件格式创建一个普通表
2.将数据正常加载到此表中
3.使用“存储为orcfile”创建一个表,其中包含常规配置单元表的预期结果的架构
4.插入覆盖查询,将数据从textfile表复制到orcfile表
参考博客了解如何将数据加载到hive中的所有文件格式
将数据加载到配置单元中的所有文件格式

yh2wf1be

yh2wf1be3#

orc文件是二进制文件格式,因此不能直接将文本文件加载到orc表中。orc代表优化的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文件中。类似的程序适用于所有二进制文件格式,即序列文件、rc文件和配置单元中的Parquet文件。
有关详细信息,请参阅下面的链接。
https://acadgild.com/blog/file-formats-in-apache-hive/

ltqd579y

ltqd579y4#

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

slhcrj9b

slhcrj9b5#

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;

相关问题