HIVE 구덩이 밟 기-load data 를 사용 하여 일반 표 와 파 티 션 표 의 차이 점 으로 데 이 터 를 가 져 옵 니 다.
17632 단어 Hive
총화
테스트 사례
Liux 에서 정상 load dataHDFS 에서 정상 load data일반 표 지정 구역 의 경우 load data
총결산
여기 서 우 리 는 실제 상황 에 따라 정 리 를 하고 서로 다른 상황 에 대해 간단 한 테스트 를 한다.
테스트 사례
다음은 구체 적 인 실현 과 간단 한 테스트 다.테스트 표 두 장 새로 만 들 기 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
-- 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
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
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
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
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
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
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