복붙노트

[HADOOP] 그것은 가져 오기 전에 새 파일에 필터와 Sqoop을 증분 가져 오기를 쓸 수 있습니까?

HADOOP

그것은 가져 오기 전에 새 파일에 필터와 Sqoop을 증분 가져 오기를 쓸 수 있습니까?

내 의심의 여지가 내가 SQL 서버 테이블에 같은 파일 3000 개 레코드를 추가 한 후 그 날, HDFS에이 데이터를 가져 오기, 말, 내가 SQL 서버 테이블에 2,000 레코드를 가진 파일 A1.csv을 가지고있다. 지금, 나는 내가 완전한 3000 개 레코드를 가져올 수 싶지 않아, HDFS에 추가 할 데이터의 두 번째 덩어리에 대한 증분 가져 오기를 실행하려면,하지만. 나는 특정 조건 1000 개 레코드가 증가 가져 오기의 일환으로 가져올 수, 같은 가져올 수 내 필요에 따라 일부 데이터가 필요합니다.

할 Sqoop을 증분 가져 오기 명령을 사용하여 해당하는 방법이 있나요?

제발 도와주세요, 감사합니다.

해결법

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

    1.당신은 귀하의 경우 새로운 1000 개 기록 인 델타를 식별하는 고유 키 또는 타임 스탬프 필드가 필요합니다. 옵션 당신이 해당 필드를 사용하여 하둡에 데이터를 가져올 수 있습니다.

    당신은 귀하의 경우 새로운 1000 개 기록 인 델타를 식별하는 고유 키 또는 타임 스탬프 필드가 필요합니다. 옵션 당신이 해당 필드를 사용하여 하둡에 데이터를 가져올 수 있습니다.

    옵션 1

    Sqoop을 APPEND 증분을 사용하여, 아래 그것의 예는

    sqoop import \
    --connect jdbc:oracle:thin:@enkx3-scan:1521:dbm2 \
    --username wzhou \
    --password wzhou \
    --table STUDENT \
    --incremental append \
    --check-column student_id \
    -m 4 \
    --split-by major
    

    인수 :

    --check-column (col)  #Specifies the column to be examined when determining which rows to import.
    
    --incremental (mode)      #Specifies how Sqoop determines which rows are new. Legal values for mode include append and lastmodified.
    
    --last-value (value) Specifies the maximum value of the check column from the previous import.
    

    옵션 2

    당신이 MySQL을위한 네이티브 SQL을 사용할 수 Sqoop을에 ​​--query 인수를 사용하여 / 데이터베이스 당신이에 연결합니다.

    예 :

    sqoop import \
      --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
      --split-by a.id --target-dir /user/foo/joinresults
    
    sqoop import \
      --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
      -m 1 --target-dir /user/foo/joinresults
    
  2. from https://stackoverflow.com/questions/48556141/is-it-possible-to-write-a-sqoop-incremental-import-with-filters-on-the-new-file by cc-by-sa and MIT license