Подтвердить что ты не робот

Вставить запрос вставки как SQL

Я новичок в hive и хочу знать, есть ли в любом случае вставить данные в таблицу hive, как в SQL. Я хочу вставить свои данные в куст, например

INSERT INTO tablename VALUES (value1,value2..)

Я прочитал, что вы можете загружать данные из файла в таблицу hive или импортировать данные из одной таблицы в таблицу hive, но есть ли способ добавить данные, как в SQL?

4b9b3361

Ответ 2

Вы можете использовать стек функции создания таблицы для вставки значений литерала в таблицу.

Сначала вам нужна фиктивная таблица, содержащая только одну строку. Вы можете сгенерировать его с помощью ограничения.

CREATE TABLE one AS
SELECT 1 AS one
FROM any_table_in_your_database
LIMIT 1;

Теперь вы можете создать новую таблицу с такими буквальными значениями, как это:

CREATE TABLE my_table AS
SELECT stack(3
  , "row1", 1
  , "row2", 2
  , "row3", 3
) AS (column1, column2)
FROM one
;

Первый аргумент стека - это количество строк, которые вы генерируете.

Вы также можете добавить значения в существующую таблицу:

INSERT INTO TABLE my_table
SELECT stack(2
  , "row4", 1
  , "row5", 2
) AS (column1, column2)
FROM one
;

Ответ 3

Немного лучшая версия предложения unique2 ниже:

insert overwrite table target_table
select * from 
(
select stack(
    3,                 # generating new table with 3 records
    'John', 80,        # record_1
    'Bill', 61         # record_2
    'Martha', 101      # record_3
    ) 
) s;

Что не требует взлома с использованием уже выходящей таблицы.

Ответ 4

Вы можете использовать подход ниже. При этом вам не нужно создавать временную таблицу ИЛИ файл txt/csv для дальнейшего выбора и загрузки соответственно.

INSERT INTO TABLE tablename SELECT value1,value2 FROM tempTable_with_atleast_one_records LIMIT 1.

Где tempTable_with_atleast_one_records - любая таблица с по крайней мере одной записью.

Но проблема с этим подходом заключается в том, что если у вас есть оператор INSERT, который вставляет несколько строк, как показано ниже.

INSERT INTO yourTable values (1 , 'value1') , (2 , 'value2') , (3 , 'value3') ;

Затем вам нужно иметь отдельный оператор удержания INSERT для каждой строки. См. Ниже.

INSERT INTO TABLE yourTable SELECT 1 , 'value1' FROM tempTable_with_atleast_one_records LIMIT 1;
INSERT INTO TABLE yourTable SELECT 2 , 'value2' FROM tempTable_with_atleast_one_records LIMIT 1;
INSERT INTO TABLE yourTable SELECT 3 , 'value3' FROM tempTable_with_atleast_one_records LIMIT 1;

Ответ 5

Вы можете определенно добавить данные в существующую таблицу. (Но на самом деле это не приложение на уровне HDFS). Просто, когда вы выполняете операцию LOAD или INSERT в существующей таблице Hive без предложения OVERWRITE, новые данные будут помещаться без замены старых данных. Новый новый файл будет создан для этих недавно вставленных данных внутри каталога, соответствующего этой таблице. Например:

У меня есть файл с именем demo.txt, который имеет 2 строки:

ABC
XYZ

Создайте таблицу и загрузите в нее этот файл

hive> create table demo(foo string);
hive> load data inpath '/demo.txt' into table demo;

Теперь, если я сделаю SELECT в этой таблице, он даст мне:

hive> select * from demo;                        
OK    
ABC    
XYZ

Предположим, у меня есть еще один файл с именем demo2.txt, который имеет:

PQR

И я снова нахожу LOAD на этой таблице без использования перезаписывания,

hive> load data inpath '/demo2.txt' into table demo;

Теперь, если я сейчас сделаю SELECT, это даст мне,

hive> select * from demo;                       
OK
ABC
XYZ
PQR

НТН

Ответ 6

Нет. Этот синтаксис INSERT INTO tablename VALUES (x,y,z) в настоящее время не поддерживается в Hive.

Ответ 7

Да, вы можете вставлять, но не похожи на SQL.

В SQL мы можем вставлять данные уровня строки, но здесь вы можете вставлять поля (столбцы).

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

например:

CREATE TABLE test(stu_name STRING,stu_id INT,stu_marks INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

INSERT OVERWRITE TABLE test SELECT lang_name, lang_id, lang_legacy_id FROM export_table;

Ответ 8

Вставить целые данные table2 в table1. Ниже приведен запрос:

INSERT INTO TABLE table1 SELECT * FROM table2; 

Ответ 9

Введите следующую команду для вставки данных в таблицу testlog с некоторым условием:

INSERT INTO TABLE testlog SELECT * FROM table1 WHERE some condition;

Ответ 10

Вы не можете вставлять вставлять одну запись. Он не поддерживается Hive. Вы можете поместить все новые записи, которые вы хотите вставить в файл, и загрузить этот файл в временную таблицу в Hive. Затем, используя команду insert overwrite..select, вставьте эти строки в новый раздел вашей основной таблицы Hive. Ограничение здесь - ваша основная таблица, которую нужно предварительно разделить. Если вы не используете раздел, то вся ваша таблица будет заменена этими новыми записями.

Ответ 11

Я думаю, что в таких сценариях вы должны использовать HBASE, который облегчает такую ​​вставку, но не предоставляет SQL-язык запросов SQL. Вам нужно, чтобы вы использовали Java API для HBASE, например метод put, для такого ввода. Кроме того, HBASE представляет собой базу данных, не ориентированную на столбцы.

Ответ 12

Да, мы можем использовать запрос вставки в улье.

hive> создать тест таблицы (id int, строка имени);

INSERT: INSERT... VALUES доступен начиная с версии:Hive 0.14.

hive> вставить в таблицу тестовые значения (1, 'mytest');

Это будет работать для вставки. мы должны использовать значения ключевое слово.

Примечание. Пользователь не может вставить данные в столбец сложного типа данных (массив, карта, структура, объединение), используя предложение ** INSERT INTO... VALUES.

Ответ 13

Способы вставки данных в таблицу улья: для демонстрации я использую имя таблицы как table1 и table2

1) create table table2 as select * from table1 where 1=1;   или же   create table table2 as select * from table1;

2) insert overwrite table table2 select * from table1; --it вставит данные из одного в другой. Примечание. Это обновит цель.

3) insert into table table2 select * from table1; --it вставит данные из одного в другой. Примечание. Он будет добавлен в цель.

4) load data local inpath 'local_path' overwrite into table table1; --it загрузит данные из локальной системы в целевую таблицу, а также обновит целевую таблицу.

5) load data inpath 'hdfs_path' overwrite into table table1; --it загрузит данные из местоположения hdfs, а также обновит таблицу назначения.                или

create table table2(
    col1 string,
    col2 string,
    col3 string)
    row format delimited fields terminated by ','
    location 'hdfs_location'; 

6) load data local inpath 'local_path' into table table1; --it загрузит данные из локальной системы и также добавит их в целевую таблицу.

7) load data inpath 'hdfs_path' into table table1; --it загрузит данные из местоположения hdfs, а также добавит их в таблицу назначения.

8) insert into table2 values('aa','bb','cc'); --Lets скажем, у table2 есть только 3 столбца.

9) Многократная вставка в улей стол

Ответ 14

Вы все еще можете вставить в сложный тип в Hive - это работает (id - это int, массив коллег)

вставить в emp (id, коллеги) выбрать 11, массив ('Alex', 'Jian') из (выберите '1')