복붙노트

[HADOOP] 하이브에 ORC로 저장된 테이블에 .txt 파일의 데이터로드

HADOOP

하이브에 ORC로 저장된 테이블에 .txt 파일의 데이터로드

데이터 형식이 .txt 인 데이터 파일이 있습니다. 이 파일을 사용하여 하이브 테이블에 데이터를로드하고 있습니다. 다음과 같은 테이블에 파일을로드 할 때

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;

데이터는 다음을 사용하여 올바르게로드됩니다.

LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

SELECT * FROM test_details_txt;를 실행할 수 있습니다. 하이브에있는 테이블에.

그러나 테이블에 데이터를로드하려고하면

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC; 

SELECT를 실행하려고 할 때 다음과 같은 오류가 발생합니다.

java.io.IOException 예외 : java.io.IOException : 잘못된 ORC 파일 hdfs : // master : 6000 / user / hive / warehouse / test.db / transaction_details / test_details.txt. 잘못된 포스트 스크립트.

위의 LOAD 문을 사용하여 데이터를로드하는 동안 오류나 예외가 발생하지 않습니다.

LOAD DATA IN PATH .. 명령을 사용하여 ORC 테이블에 데이터를 저장하는 동안 수행해야 할 다른 작업이 있습니까?

해결법

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

    1.LOAD DATA는 파일을 하이브 데이터 파일에 복사합니다. Hive는 테이블에 데이터를로드하는 동안 변환을 수행하지 않습니다.

    LOAD DATA는 파일을 하이브 데이터 파일에 복사합니다. Hive는 테이블에 데이터를로드하는 동안 변환을 수행하지 않습니다.

    따라서이 경우 입력 파일 /home/user/test_details.txt는 ORC 테이블에로드하는 경우 ORC 형식이어야합니다.

    가능한 임시 해결책은 STORED AS TEXT로 임시 테이블을 작성한 다음 LOAD DATA로 삽입 한 다음이 테이블의 데이터를 ORC 테이블로 복사하는 것입니다.

    다음은 그 예입니다.

    CREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;
    CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;
    
    -- Load into Text table
    LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;
    
    -- Copy to ORC table
    INSERT INTO TABLE test_details_orc SELECT * FROM test_details_txt;
    
  2. ==============================

    2.단계 :

    단계 :

    예:

    CREATE TABLE text_table(line STRING);
    
    LOAD DATA 'path_of_file' OVERWRITE INTO text_table;
    
    CREATE TABLE orc_table STORED AS ORC AS SELECT * FROM text_table;
    
    SELECT * FROM orc_table;   /*(it can now be read)*/
    
  3. ==============================

    3.Hive는 입력 데이터를 변환하지 않으므로 형식은 동일해야합니다. 파일이 ORC 형식이어야하거나 텍스트 파일의 데이터를 하이브의 텍스트 테이블로로드 할 수 있습니다.

    Hive는 입력 데이터를 변환하지 않으므로 형식은 동일해야합니다. 파일이 ORC 형식이어야하거나 텍스트 파일의 데이터를 하이브의 텍스트 테이블로로드 할 수 있습니다.

  4. ==============================

    4.ORC 파일은 바이너리 파일 형식이므로 텍스트 파일을 ORC 테이블에 직접로드 할 수 없습니다. ORC는 Optimized Row Columnar의 약자로 다른 파일 형식보다 최적화 된 방식으로 데이터를 저장할 수 있습니다. ORC는 원본 데이터의 크기를 75 %까지 줄입니다. 결과적으로 데이터 처리 속도도 빨라집니다. ORC는 텍스트, 시퀀스 및 RC 파일 형식보다 우수한 성능을 보여줍니다. ORC 파일에는 파일 바닥 글과 함께 줄무늬라고하는 그룹의 행 데이터가 들어 있습니다. ORC 형식은 하이브가 데이터를 처리 할 때 성능을 향상시킵니다.

    ORC 파일은 바이너리 파일 형식이므로 텍스트 파일을 ORC 테이블에 직접로드 할 수 없습니다. ORC는 Optimized Row Columnar의 약자로 다른 파일 형식보다 최적화 된 방식으로 데이터를 저장할 수 있습니다. ORC는 원본 데이터의 크기를 75 %까지 줄입니다. 결과적으로 데이터 처리 속도도 빨라집니다. ORC는 텍스트, 시퀀스 및 RC 파일 형식보다 우수한 성능을 보여줍니다. ORC 파일에는 파일 바닥 글과 함께 줄무늬라고하는 그룹의 행 데이터가 들어 있습니다. ORC 형식은 하이브가 데이터를 처리 할 때 성능을 향상시킵니다.

    먼저 하나의 일반 테이블을 textFile로 만들고 textFile 테이블에 데이터를로드 한 다음 삽입 덮어 쓰기 쿼리를 사용하여 데이터를 ORC 파일에 쓸 수 있습니다.

    create table table_name1 (schema of the table) row format delimited by ',' | stored as TEXTFILE
    
    create table table_name2 (schema of the table) row format delimited by ',' | stored as ORC
    
    load data local inpath ‘path of your file’ into table table_name1;(loading data from a local system)
    
    INSERT OVERWRITE TABLE table_name2 SELECT * FROM table_name1;
    

    이제 모든 데이터가 ORC 파일에 저장됩니다. 유사한 절차가 하이브의 Sequence 파일, RC 파일 및 Parquet 파일과 같은 모든 이진 파일 형식에 적용됩니다.

    자세한 내용은 아래 링크를 참조하십시오.

    https://acadgild.com/blog/file-formats-in-apache-hive/

  5. ==============================

    5.하이브에서 ORC 파일 형식으로 데이터를로드하는 단계

    하이브에서 ORC 파일 형식으로 데이터를로드하는 단계

    1. 텍스트 파일 형식을 사용하여 하나의 일반 테이블 만들기

    2.이 테이블에 데이터를 정상적으로로드하십시오.

    orcfile로 저장된 것을 사용하여 정상적인 하이브 테이블의 예상 결과 스키마로 하나의 테이블을 만듭니다.

    4. 텍스트 파일 테이블의 데이터를 orc 파일 테이블로 복사하는 덮어 쓰기 쿼리 삽입

    하이브에서 모든 파일 형식으로 데이터를로드하는 방법에 대한 자세한 내용은 블로그를 참조하십시오.

    하이브의 모든 파일 형식으로 데이터로드

  6. from https://stackoverflow.com/questions/21721251/loading-data-from-a-txt-file-to-table-stored-as-orc-in-hive by cc-by-sa and MIT license