복붙노트

[HADOOP] 하이브 데이터를 가져 Sqoop을

HADOOP

하이브 데이터를 가져 Sqoop을

내가 sqoop2를 사용하여 테이블을 하이브 데이터를 가져 오기 위해 노력하고 있어요. 나는 --hive 가져 오기를 사용하고 있지만 작동하지 않습니다

암호:

sqoop import --connect jdbc:sqlserver://192.168.x.xxx:11xx --username user --password user --table xxxx.NOTIFICATION --hive-import

오류:

내가 무엇을 잘못하고 있지?

해결법

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

    1.당신이 사용하고 있습니다. 테이블 이름 (점).

    당신이 사용하고 있습니다. 테이블 이름 (점).

    내부적으로, Sqoop을 명령을 실행됩니다

    SELECT t.* FROM xxxx.NOTIFICATION AS t WHERE 1=0
    

    당신의 SQL Server 테이블의 메타 데이터를 가져올 수 있습니다.

    이 명령은 다음과 같이 해석됩니다

    이를 방지하려면 이스케이프 문자 ([] SQL 서버의 경우)를 사용할 수 있습니다 :

    Sqoop을 가져 --connect JDBC : SQLSERVER : //192.168.x.xxx : 11xx --username 사용자 --password 사용자 --table [xxxx.NOTIFICATION] --hive 가져

    이 생성됩니다

    SELECT t.* FROM [xxxx.NOTIFICATION] AS t WHERE 1=0
    

    이제 xxxx.NOTIFICATION은 테이블 이름으로 처리됩니다.

  2. ==============================

    2.하이 비트 연구를하고 @dev와 문제에 대해 논의 후 나는 해결책을 찾아 냈다.

    하이 비트 연구를하고 @dev와 문제에 대해 논의 후 나는 해결책을 찾아 냈다.

    난 내 명령을 변경 한 아래를 사용하고 나를 위해 일한 그래서 나는 sqoop2을 사용하고 있습니다.

    $ sqoop import --connect "jdbc:sqlserver://192.168.x.xxx:11xx;database=SSSS;username=user;password=user" --query "SELECT * FROM xxxx.NOTIFICATION where \$CONDITIONS" --split-by xxxx.NOTIFICATION.ID --hive-import --hive-table NOTIFICATION  --target-dir NOTIFICATION 
    

    이 명령을 실행하기 전에 우리는 create 명령을 사용하여 하이브에 테이블을 작성해야합니다. 여기에 내가 하이브라는 테이블 통지를 만들었습니다.

  3. ==============================

    3.나는 테이블 이름이 통보 가정 당신은 당신이 --table xxxx.NOTIFICATION 쓰기 데이터베이스 이름 XXXX을 언급하려고

    나는 테이블 이름이 통보 가정 당신은 당신이 --table xxxx.NOTIFICATION 쓰기 데이터베이스 이름 XXXX을 언급하려고

    이 경우, 대신 아래에 언급 된 구문을 시도하십시오 할 수 있습니까?

    sqoop import --connect jdbc:sqlserver://192.168.x.xxx:11xx;databaseName=xxxx --username user --password user --table NOTIFICATION --hive-import
    
  4. from https://stackoverflow.com/questions/39142141/sqoop-to-import-data-to-hive by cc-by-sa and MIT license