[HADOOP] SQL과 같은 하이브 삽입 쿼리
HADOOPSQL과 같은 하이브 삽입 쿼리
나는 하이브를 처음 사용하고 있고 SQL에서하는 것처럼 하이브 테이블에 데이터를 삽입 할 수 있는지 여부를 알고 싶습니다. 하이브에 내 데이터를 삽입하고 싶습니다.
INSERT INTO tablename VALUES (value1,value2..)
파일에서 하이브 테이블로 데이터를로드 할 수 있거나 한 테이블에서 하이브 테이블로 데이터를 가져올 수 있지만 SQL로 데이터를 추가 할 수있는 방법이 있습니까?
해결법
-
==============================
1.여기에있는 해답 중 일부는 Hive 0.14에서 구식입니다.
여기에있는 해답 중 일부는 Hive 0.14에서 구식입니다.
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingvaluesintotablesfromSQL
다음과 같은 구문을 사용하여 삽입 할 수 있습니다.
CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2)); INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
-
==============================
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 ;
stack의 첫 번째 인수는 생성하는 행의 수입니다.
기존 테이블에 값을 추가 할 수도 있습니다.
INSERT INTO TABLE my_table SELECT stack(2 , "row4", 1 , "row5", 2 ) AS (column1, column2) FROM one ;
-
==============================
3.unique2 제안의 약간 더 나은 버전은 아래와 같습니다.
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 파일을 각각 작성할 필요가 없습니다.
아래 접근법을 사용할 수 있습니다. 이를 통해 추가 선택 및로드를 위해 임시 테이블 또는 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 레벨에서는 실제로 추가되지 않습니다.) OVERWRITE 절없이 기존 Hive 테이블에서 LOAD 또는 INSERT 작업을 수행 할 때마다 이전 데이터를 대체하지 않고 새 데이터가 저장됩니다. 해당 테이블에 해당하는 디렉토리 내에이 새로 삽입 된 데이터에 대한 새 파일이 작성됩니다. 예 :
기존 테이블에 데이터를 확실히 추가 할 수 있습니다. (하지만 HDFS 레벨에서는 실제로 추가되지 않습니다.) OVERWRITE 절없이 기존 Hive 테이블에서 LOAD 또는 INSERT 작업을 수행 할 때마다 이전 데이터를 대체하지 않고 새 데이터가 저장됩니다. 해당 테이블에 해당하는 디렉토리 내에이 새로 삽입 된 데이터에 대한 새 파일이 작성됩니다. 예 :
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
덮어 쓰기를 사용하지 않고이 테이블에서 다시로드를 수행합니다.
hive> load data inpath '/demo2.txt' into table demo;
이제 SELECT를하면 나에게 줄거야.
hive> select * from demo; OK ABC XYZ PQR
HTH
-
==============================
6.아니요.이 INSERT INTO tablename VALUES (x, y, z) 구문은 현재 Hive에서 지원되지 않습니다.
아니요.이 INSERT INTO tablename VALUES (x, y, z) 구문은 현재 Hive에서 지원되지 않습니다.
-
==============================
7.table2의 전체 데이터를 table1에 삽입합니다. 아래는 쿼리입니다.
table2의 전체 데이터를 table1에 삽입합니다. 아래는 쿼리입니다.
INSERT INTO TABLE table1 SELECT * FROM table2;
-
==============================
8.예, 삽입 할 수 있지만 SQL과 유사하지는 않습니다.
예, 삽입 할 수 있지만 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;
-
==============================
9.몇 가지 조건을 사용하여 testlog 테이블에 데이터를 삽입하려면 다음 명령을 입력하십시오.
몇 가지 조건을 사용하여 testlog 테이블에 데이터를 삽입하려면 다음 명령을 입력하십시오.
INSERT INTO TABLE testlog SELECT * FROM table1 WHERE some condition;
-
==============================
10.삽입하여 단일 레코드를 삽입 할 수 없습니다. 그것은 Hive에 의해 지원되지 않습니다. 파일에 삽입하려는 모든 새 레코드를 배치하고 해당 파일을 하이브의 임시 테이블에로드 할 수 있습니다. 그런 다음 insert overwrite..select 명령을 사용하여 해당 행을 기본 Hive 테이블의 새 파티션에 삽입합니다. 여기서 제약 조건은 주 테이블이 미리 분할되어야한다는 것입니다. 파티션을 사용하지 않으면 전체 테이블이이 새로운 레코드로 대체됩니다.
삽입하여 단일 레코드를 삽입 할 수 없습니다. 그것은 Hive에 의해 지원되지 않습니다. 파일에 삽입하려는 모든 새 레코드를 배치하고 해당 파일을 하이브의 임시 테이블에로드 할 수 있습니다. 그런 다음 insert overwrite..select 명령을 사용하여 해당 행을 기본 Hive 테이블의 새 파티션에 삽입합니다. 여기서 제약 조건은 주 테이블이 미리 분할되어야한다는 것입니다. 파티션을 사용하지 않으면 전체 테이블이이 새로운 레코드로 대체됩니다.
-
==============================
11.이러한 시나리오에서는 HBASE를 사용하여 이러한 종류의 삽입을 용이하게해야하지만 SQL 언어의 쿼리 언어는 제공하지 않는다고 생각합니다. 이러한 삽입 작업을 수행하려면 put 메소드와 같은 HBASE의 Java API를 사용해야합니다. 또한 HBASE는 열 기반의 no-sql 데이터베이스입니다.
이러한 시나리오에서는 HBASE를 사용하여 이러한 종류의 삽입을 용이하게해야하지만 SQL 언어의 쿼리 언어는 제공하지 않는다고 생각합니다. 이러한 삽입 작업을 수행하려면 put 메소드와 같은 HBASE의 Java API를 사용해야합니다. 또한 HBASE는 열 기반의 no-sql 데이터베이스입니다.
-
==============================
12.예, 하이브에 삽입 쿼리를 사용할 수 있습니다.
예, 하이브에 삽입 쿼리를 사용할 수 있습니다.
hive> 테이블 테스트 생성 (id int, name string);
INSERT : INSERT ... VALUES는 버전 Hive 0.14부터 사용할 수 있습니다.
hive> 테이블 테스트 값 (1, 'mytest')에 삽입;
이것은 삽입을 위해 작동 할 것입니다. 우리는 값 키워드를 사용해야합니다.
참고 : 사용자는 ** INSERT INTO ... VALUES 절을 사용하여 복잡한 데이터 유형 열 (배열, 맵, 구조체, 공용체)에 데이터를 삽입 할 수 없습니다.
-
==============================
13.하이브 테이블에 데이터를 삽입하는 방법 : 데모 용으로 테이블 이름을 table1과 table2로 사용하고 있습니다.
하이브 테이블에 데이터를 삽입하는 방법 : 데모 용으로 테이블 이름을 table1과 table2로 사용하고 있습니다.
from https://stackoverflow.com/questions/17425492/hive-insert-query-like-sql by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Spark SQL에서 CSV로 데이터를 내보내는 방법 (0) | 2019.06.06 |
---|---|
[HADOOP] Hadoop에서 노드를 올바르게 제거하려면 어떻게해야합니까? (0) | 2019.06.05 |
[HADOOP] 하이브에서 COLLECT_SET ()을 사용하여 중복을 유지 하시겠습니까? (0) | 2019.06.05 |
[HADOOP] Hadoop 2.2 설치`. ' 그런 파일이나 디렉토리가 없다. (0) | 2019.06.05 |
[HADOOP] 아파치가 뾰족하게 달리지 않고 달릴 수 있습니까? (0) | 2019.06.05 |