Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 将数据从.txt文件加载到配置单元中存储为ORC的表中_Hadoop_Hive - Fatal编程技术网

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。嗨。。。这是一个普遍的答案,我想说的是,同样的事情适用于所有二进制文件,并在博客中用一个用例清楚地解释了这一点。非常感谢。