30

我有一个存储为序列文件的配置单元表。

我需要将一个文本文件加载到这个表中。如何将数据加载到此表中?

4

3 回答 3

55

您可以将文本文件加载到文本文件 Hive 表中,然后将该表中的数据插入到您的序列文件中。

从制表符分隔的文件开始:

% cat /tmp/input.txt
a       b
a2      b2

创建序列文件

hive> create table test_sq(k string, v string) stored as sequencefile;

尝试加载;正如预期的那样,这将失败:

hive> load data local inpath '/tmp/input.txt' into table test_sq;

但是有了这张表:

hive> create table test_t(k string, v string) row format delimited fields terminated by '\t' stored as textfile;

负载工作得很好:

hive> load data local inpath '/tmp/input.txt' into table test_t;
OK
hive> select * from test_t;
OK
a       b
a2      b2

现在从文本表加载到序列表中:

insert into table test_sq select * from test_t;

也可以使用覆盖进行加载/插入以替换所有内容。

于 2012-12-28T23:56:37.683 回答
2

您不能直接创建存储为序列文件的表并将文本插入其中。你必须这样做:

  1. 创建存储为文本的表格
  2. 将文本文件插入到文本表中
  3. 执行 CTAS 以创建存储为序列文件的表。
  4. 如果需要,删除文本表

例子:

CREATE TABLE test_txt(field1 int, field2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

LOAD DATA INPATH '/path/to/file.tsv' INTO TABLE test_txt;

CREATE TABLE test STORED AS SEQUENCEFILE
AS SELECT * FROM test_txt;

DROP TABLE test_txt;
于 2016-05-16T21:15:37.807 回答
0

简单的方法是将表创建为文本文件并将文件移动到适当的位置

CREATE EXTERNAL TABLE mytable(col1 string, col2 string)
以“|”结尾的行格式分隔字段 存储为文本文件;

将文件复制到创建表的 HDFS 位置。
希望这可以帮助!!!

于 2020-03-23T19:14:36.447 回答