Как загрузить текстовый файл в таблицу Hive, сохраненную в виде файлов последовательности

У меня есть таблица улей, хранящаяся как файл последовательности.

Мне нужно загрузить текстовый файл в эту таблицу. Как загрузить данные в эту таблицу?

24
добавлено отредактировано
Просмотры: 1
de

4 ответы

Вы можете загрузить текстовый файл в текстовую таблицу 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;

Также можно загрузить/вставить с помощью переписать , чтобы заменить все.

50
добавлено
можно ли это сделать напрямую, можем ли мы загружать в файл таблицы формата последовательности из файла TSV без промежуточного сохранения в другую таблицу?
добавлено автор Bohdan, источник
Нет, это невозможно. Это самый простой способ загрузить данные в файл последовательности. То же самое подтверждается apche wiki cwiki.apache.org/confluence/display/Hive/CompressedStorage
добавлено автор Jai Prakash, источник

Вы можете загрузить текстовый файл в текстовую таблицу 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;

Также можно загрузить/вставить с помощью переписать , чтобы заменить все.

50
добавлено
можно ли это сделать напрямую, можем ли мы загружать в файл таблицы формата последовательности из файла TSV без промежуточного сохранения в другую таблицу?
добавлено автор Bohdan, источник
Нет, это невозможно. Это самый простой способ загрузить данные в файл последовательности. То же самое подтверждается apche wiki cwiki.apache.org/confluence/display/Hive/CompressedStorage
добавлено автор Jai Prakash, источник

Вы не можете напрямую создать таблицу, хранящуюся в виде файла последовательности, и вставить в нее текст. Вы должны сделать это:

  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';

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

DROP TABLE test_txt;
0
добавлено
Синтаксис LOAD DATA INPATH неверен ... необходим INTO.
добавлено автор Pratik Khadloya, источник

Вы не можете напрямую создать таблицу, хранящуюся в виде файла последовательности, и вставить в нее текст. Вы должны сделать это:

  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';

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

DROP TABLE test_txt;
0
добавлено
Синтаксис LOAD DATA INPATH неверен ... необходим INTO.
добавлено автор Pratik Khadloya, источник