Вставка данных в таблицу улья

Используя дистрибутив Cygwin, я установил Hadoop 0.20.3 и Hive 0.11.0.

Прежде всего, я не понимаю, как использовать CLI:

hive> show tables;

Затем введите и ничего не произойдет. Я могу выполнять запросы с помощью hive -e/-f.

Затем я создал таблицу:

CREATE TABLE tweet_table(
tweet STRING
)
COMMENT 'Table of string'

Но как я могу вставить данные в эту таблицу? Я вижу несколько примеров INSERT INTO, но когда я пытаюсь:

INSERT INTO TABLE tweet_table (tweet) VALUES ("data")

У меня есть ошибка:

FAILED: ParseException line 1:30 cannot recognize input near '(' 'tweet' ')' in select clause

Как добавить данные в таблицу?

Ответы

Ответ 1

Вы можете вставить новые данные в таблицу двумя способами.

  1. Загрузите данные файла в таблицу с помощью команды load.

    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename.
    
  2. Вы можете вставить новые данные в таблицу, используя запрос выбора.

    INSERT INTO table tablename1 select columnlist FROM secondtable;
    

Ответ 2

Если у вас уже есть таблица pre_loaded_tbl с некоторыми данными. Вы можете использовать трюк для загрузки данных в таблицу со следующим запросом

INSERT INTO TABLE tweet_table 
  SELECT  "my_data" AS my_column 
    FROM   pre_loaded_tbl 
   LIMIT   5;

Также обратите внимание, что "my_data" не зависит от каких-либо данных в pre_loaded_tbl. Вы можете выбрать любые данные и написать любое имя столбца (здесь my_data и my_column). Улей не требует наличия одинакового имени столбца. Однако структура оператора select должна быть такой же, как и для вашей tweet_table. Вы можете использовать лимит, чтобы определить, сколько раз вы можете вставлять в tweet_table.

Однако, если вы не создали какую-либо таблицу, вам придется загрузить данные с помощью файлов копирования или загрузки данных в приведенных выше ответах.

Ответ 3

Попробуйте использовать это с одинарными кавычками в данных:

insert into table test_hive values ('1','puneet');

Ответ 4

Если таблица без раздела, то код будет,

Вставить в таблицу table_name выбрать col_a, col_b, col_c из другой_таблицы another_table(source table)

--here может быть применено любое условие, такое как ограничение, группировка, упорядочение и т.д.

Если таблица с разделами, то код будет,

set hive.exec.dynamic.partition = true;
set hive.exec.dynamic.partition.mode = nonstrict;

вставить в таблицу table_name раздел (partition_col1, paritition_col2) выбрать col_a, col_b, col_c, partition_col1, partition_col2 из another_table(source table)

--here может быть применено любое условие, такое как ограничение, группировка, упорядочение и т.д.

Ответ 5

У меня возникла аналогичная проблема, поэтому я использовал impala для вставки одной строки в таблицу, и она работала для одного и того же запроса. Это будет работать точно.

Ответ 6

Хотя есть принятый ответ, я хотел бы добавить, что с Hive 0.14 разрешены операции на уровне записи. Правильный синтаксис и запрос будет:

INSERT INTO TABLE tweet_table VALUES ('data');