HIVE 구덩이 밟 기-load data 를 사용 하여 일반 표 와 파 티 션 표 의 차이 점 으로 데 이 터 를 가 져 옵 니 다.

17632 단어 Hive
load data 형식 으로 데이터 가 져 오기
총화
테스트 사례
Liux 에서 정상 load dataHDFS 에서 정상 load data일반 표 지정 구역 의 경우 load data
  • 분 구 표 가 분 구 를 지정 하지 않 은 경우 load data
  • 필드 가 부족 한 경우 load data
  • 필드 가 너무 많은 경우 load data
  • 필드 유형 이 일치 하지 않 는 경우 load data
  • 여기 서 HIVE 에서 load data 형식 으로 데 이 터 를 가 져 올 수 있 는 상황 에 중점 을 두 고 있 습 니 다.구 덩이 를 밟 는 것 을 피하 다.
    총결산
    여기 서 우 리 는 실제 상황 에 따라 정 리 를 하고 서로 다른 상황 에 대해 간단 한 테스트 를 한다.
  • load data 형식 으로 hive 표 에 데 이 터 를 불 러 올 때 키워드 local 을 사용 하면 로 컬 파일 시스템 에서 가 져 온 다 는 뜻 입 니 다.여 기 는 파일 이 HDFS 에 복사 되 었 습 니 다
  • load data 형식 으로 hive 표 에 데 이 터 를 불 러 올 때 키워드 local 을 사용 하지 않 으 면 HDFS 파일 시스템 에서 가 져 오 는 것 을 표시 합 니 다.여 기 는 파일 의 이동 입 니 다
  • load data 형식 으로 hive 표 에 데 이 터 를 불 러 올 때 키워드 overwrite 를 사용 하면 데이터 덮어 쓰기 작업 을 수행 하고 기 존 데 이 터 는 모두 덮어 씁 니 다(파 티 션 표 라면 지정 한 파 티 션 을 덮어 씁 니 다)
  • load data 형식 으로 hive 표 에 데 이 터 를 불 러 올 때 키워드 overwrite 를 사용 하지 않 으 면 데이터 추가 작업 을 수행 하고 기 존 데 이 터 는 덮어 쓰 지 않 습 니 다
  • load data 형식 으로 hive 표 에 데 이 터 를 불 러 올 때 필드 형식 을 검사 하지 않 습 니 다.필드 형식 이 일치 하지 않 으 면 null 값 으로 채 웁 니 다.필드 가 너무 많 으 면 버 리 고 부족 하면 null 값 으로 채 웁 니 다

  • 테스트 사례
    다음은 구체 적 인 실현 과 간단 한 테스트 다.테스트 표 두 장 새로 만 들 기 test01 과 test02,그 중 test01 은 일반 시계,test02 는 구분 표 입 니 다.
    CREATE TABLE IF NOT EXISTS `test_01`(
      `id` STRING,`name` STRING,`age` INT,`score` FLOAT)
    ROW FORMAT DELIMITED  FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
    
    CREATE TABLE IF NOT EXISTS `test_02`(
      `id` STRING,`name` STRING,`age` INT,`score` FLOAT)
    PARTITIONED BY (`dataday` STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
    

    여 기 는 상황 에 따라 각각 테스트 를 진행 합 니 다.
    linux 에서 정상 load data
    테스트 데이터 a.txt
    [root@nd2 wh]# cat a.txt
    1,lucy,20,90
    2,Marry,21,95
    3,Tom,22,100
    
  • 여기 서 우 리 는 a.txt 파일 내용 을 각각 test 로 가 져 옵 니 다.01 과 test02 표 중
  • --  overwrite    
    hive> load data local inpath '/usr/wh/a.txt' overwrite into table test_01; 
    hive> select * from test_01;
    1	lucy	20	90.0
    2	Marry	21	95.0
    3	Tom	22	100.0
    --       overwrite,        
    hive> load data local inpath '/usr/wh/a.txt'  into table test_01; 
    hive> select * from test_01;
    1	lucy	20	90.0
    2	Marry	21	95.0
    3	Tom		22	100.0
    1	lucy	20	90.0
    2	Marry	21	95.0
    3	Tom		22	100.0
    --    overwrite          
    hive> load data local inpath '/usr/wh/a.txt' overwrite into table test_01; 
    hive> select * from test_01;
    1	lucy	20	90.0
    2	Marry	21	95.0
    3	Tom		22	100.0
    
    --           
    hive> load data local inpath '/usr/wh/a.txt' overwrite into table test_02 
    partition (dataday='20190501');
    hive> select * from test_02;
    1	lucy	20	90.0	20190501
    2	Marry	21	95.0	20190501
    3	Tom		22	100.0	20190501
    

    HDFS 에서 정상 load data
    테스트 데이터 a.txt
    [root@nd2 wh]# hadoop fs -cat /wh/test/a.txt
    1,lucy,20,90
    2,Marry,21,95
    3,Tom,22,100
    
  • 여기 서 우 리 는 a.txt 파일 내용 을 각각 test 로 가 져 옵 니 다.01 과 test02 표 중
  • hive> load data inpath 'hdfs://nameservice1/wh/test/a.txt' overwrite into table test_01; 
    hive> select * from test_01;
    OK
    1	lucy	20	90.0
    2	Marry	21	95.0
    3	Tom		22	100.0
    
    --      , HDFS      HIVE ,        ,                HDFS 
    --[root@nd2 wh]# hadoop fs -ls /wh/test/
    --[root@nd2 wh]# hadoop fs -put a.txt /wh/test/
    
    hive> load data inpath 'hdfs://nameservice1/wh/test/a.txt' overwrite into table test_02 partition (dataday='20190501');
    hive> select * from test_02;
    1	lucy	20	90.0	20190501
    2	Marry	21	95.0	20190501
    3	Tom		22	100.0	20190501
    

    일반 표 가 파 티 션 을 지정 한 경우 load data
  • 여기 서 a.txt 파일 내용 을 test 로 가 져 옵 니 다.01,여기 바로 잘못 보 고 했 어 요.
    hive> load data local inpath '/usr/wh/a.txt' overwrite into table test_01 partition (dataday='20190501');
    FAILED: ValidationFailureSemanticException table is not partitioned but partition spec exists: {dataday=20190501}
    

    파 티 션 테이블 에 파 티 션 이 지정 되 지 않 은 경우 load data
  • 여기 서 a.txt 파일 내용 을 test 로 가 져 옵 니 다.01,여기 바로 잘못 보 고 했 어 요.
    hive> load data local inpath '/usr/wh/a.txt' overwrite into table test_02; 
    FAILED: SemanticException [Error 10062]: Need to specify partition columns because the destination table is partitioned
    

    필드 가 부족 한 경우 load data
    테스트 데이터 b.txt
  • [root@nd2 wh]# cat b.txt
    1,lucy,20
    2,Marry,21
    3,Tom,22
    
  • 여기 서 a.txt 파일 내용 을 test 로 가 져 옵 니 다.01
  • hive> load data local inpath '/usr/wh/b.txt' overwrite into table test_01; 
    hive> select * from test_01;
    1	lucy	20	NULL
    2	Marry	21	NULL
    3	Tom		22	NULL
    

    필드 가 너무 많은 경우 load data
    테스트 데이터 c.txt
    [root@nd2 wh]# cat c.txt 
    1,lucy,20,90,aa
    2,Marry,21,95,bb
    3,Tom,22,100,cc
    
  • 여기 서 c.txt 파일 내용 을 test 로 가 져 옵 니 다.01
  • hive> load data local inpath '/usr/wh/c.txt' overwrite into table test_01;
    hive> select * from test_01;
    1	lucy	20	90.0
    2	Marry	21	95.0
    3	Tom		22	100.0
    

    필드 형식 이 일치 하지 않 는 경우 load data
    테스트 데이터 d.txt
    [root@nd2 wh]# cat d.txt 
    1,lucy,aa,bb
    2,Marry,cc,dd
    3,Tom,xx,yy
    
  • 여기 서 d.txt 파일 내용 을 test 로 가 져 옵 니 다.01
  • hive> load data local inpath '/usr/wh/d.txt' overwrite into table test_01;
    hive> select * from test_01;
    1	lucy	NULL	NULL
    2	Marry	NULL	NULL
    3	Tom		NULL	NULL
    

    좋은 웹페이지 즐겨찾기