복붙노트

[HADOOP] SQL과 같은 하이브 삽입 쿼리

HADOOP

SQL과 같은 하이브 삽입 쿼리

나는 하이브를 처음 사용하고 있고 SQL에서하는 것처럼 하이브 테이블에 데이터를 삽입 할 수 있는지 여부를 알고 싶습니다. 하이브에 내 데이터를 삽입하고 싶습니다.

INSERT INTO tablename VALUES (value1,value2..)

파일에서 하이브 테이블로 데이터를로드 할 수 있거나 한 테이블에서 하이브 테이블로 데이터를 가져올 수 있지만 SQL로 데이터를 추가 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    6.아니요.이 INSERT INTO tablename VALUES (x, y, z) 구문은 현재 Hive에서 지원되지 않습니다.

    아니요.이 INSERT INTO tablename VALUES (x, y, z) 구문은 현재 Hive에서 지원되지 않습니다.

  7. ==============================

    7.table2의 전체 데이터를 table1에 삽입합니다. 아래는 쿼리입니다.

    table2의 전체 데이터를 table1에 삽입합니다. 아래는 쿼리입니다.

    INSERT INTO TABLE table1 SELECT * FROM table2; 
    
  8. ==============================

    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. ==============================

    9.몇 가지 조건을 사용하여 testlog 테이블에 데이터를 삽입하려면 다음 명령을 입력하십시오.

    몇 가지 조건을 사용하여 testlog 테이블에 데이터를 삽입하려면 다음 명령을 입력하십시오.

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

    10.삽입하여 단일 레코드를 삽입 할 수 없습니다. 그것은 Hive에 의해 지원되지 않습니다. 파일에 삽입하려는 모든 새 레코드를 배치하고 해당 파일을 하이브의 임시 테이블에로드 할 수 있습니다. 그런 다음 insert overwrite..select 명령을 사용하여 해당 행을 기본 Hive 테이블의 새 파티션에 삽입합니다. 여기서 제약 조건은 주 테이블이 미리 분할되어야한다는 것입니다. 파티션을 사용하지 않으면 전체 테이블이이 새로운 레코드로 대체됩니다.

    삽입하여 단일 레코드를 삽입 할 수 없습니다. 그것은 Hive에 의해 지원되지 않습니다. 파일에 삽입하려는 모든 새 레코드를 배치하고 해당 파일을 하이브의 임시 테이블에로드 할 수 있습니다. 그런 다음 insert overwrite..select 명령을 사용하여 해당 행을 기본 Hive 테이블의 새 파티션에 삽입합니다. 여기서 제약 조건은 주 테이블이 미리 분할되어야한다는 것입니다. 파티션을 사용하지 않으면 전체 테이블이이 새로운 레코드로 대체됩니다.

  11. ==============================

    11.이러한 시나리오에서는 HBASE를 사용하여 이러한 종류의 삽입을 용이하게해야하지만 SQL 언어의 쿼리 언어는 제공하지 않는다고 생각합니다. 이러한 삽입 작업을 수행하려면 put 메소드와 같은 HBASE의 Java API를 사용해야합니다. 또한 HBASE는 열 기반의 no-sql 데이터베이스입니다.

    이러한 시나리오에서는 HBASE를 사용하여 이러한 종류의 삽입을 용이하게해야하지만 SQL 언어의 쿼리 언어는 제공하지 않는다고 생각합니다. 이러한 삽입 작업을 수행하려면 put 메소드와 같은 HBASE의 Java API를 사용해야합니다. 또한 HBASE는 열 기반의 no-sql 데이터베이스입니다.

  12. ==============================

    12.예, 하이브에 삽입 쿼리를 사용할 수 있습니다.

    예, 하이브에 삽입 쿼리를 사용할 수 있습니다.

    hive> 테이블 테스트 생성 (id int, name string);

    INSERT : INSERT ... VALUES는 버전 Hive 0.14부터 사용할 수 있습니다.

    hive> 테이블 테스트 값 (1, 'mytest')에 삽입;

    이것은 삽입을 위해 작동 할 것입니다. 우리는 값 키워드를 사용해야합니다.

    참고 : 사용자는 ** INSERT INTO ... VALUES 절을 사용하여 복잡한 데이터 유형 열 (배열, 맵, 구조체, 공용체)에 데이터를 삽입 할 수 없습니다.

  13. ==============================

    13.하이브 테이블에 데이터를 삽입하는 방법 : 데모 용으로 테이블 이름을 table1과 table2로 사용하고 있습니다.

    하이브 테이블에 데이터를 삽입하는 방법 : 데모 용으로 테이블 이름을 table1과 table2로 사용하고 있습니다.

  14. from https://stackoverflow.com/questions/17425492/hive-insert-query-like-sql by cc-by-sa and MIT license