하이브에서 텍스트 파일을 가져오는 데 발생하는 구덩이를 해결합니다
프로그래머로서 가장 두려워하지 않는 것은 실패이다. 왜냐하면 우리는 용감한 마음을 가지고 있기 때문이다.다시!또 실패야...
오랫동안 생각하고 내 시계 격식을 보니 나는 매우 저급한 실수를 저질렀다.
Hive 테이블의 저장 형식은orcfile!!!
모두가 알다시피orcfile는 압축 형식으로 대량의 저장 공간을 절약할 수 있지만 orc는 직접load 데이터를 할 수 없다는 특징이 있습니다!load 데이터를 만들려면textfile로 저장된 중간표를 만들고 데이터를 추출해야 합니다.이 잘못은 너무 간단하기 때문에 인터넷에 관련 과학 보급이 있기 때문에 그것을 잘못으로 쓰는 경우는 드물다.문제가 생긴 친구들은 길을 좀 돌아야 할 것 같으니 제가 실수를 메울게요~~~~
밤을 들다.
1. 우선, excel 표를 txt 형식으로 내보냅니다. (이 과정은 더 이상 군더더기 없이 인터넷 강좌가 많습니다.)
123, ,666,1990-09-23 12:00:18
256, ,555,1989-10-06 03:57:32
142, ,444,1992-07-04 05:05:45
2. 하이브에서 테이블 모델을 생성합니다.
CREATE TABLE IF NOT EXISTS STUDENTS
(
ID INT COMMENT' ',
SNAME STRING COMMENT ' ',
SCORE INT COMMENT ' ',
STIME STRING COMMENT ' '
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORCFILE;
3. 임시 테이블(중간 테이블)을 만듭니다.
CREATE TABLE IF NOT EXISTS STUDENTS_TMP
(
ID INT COMMENT' ',
SNAME STRING COMMENT ' ',
SCORE INT COMMENT ' ',
STIME STRING COMMENT ' '
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
대상 테이블의 이름과 저장 형식만 다른 것과 같습니다.4. 임시 테이블에 데이터를 로드합니다.
load data local inpath '/export/data/1.txt' into table students_tmp;
5. 대상 테이블로 데이터 가져오기
insert overwrite table students select * from students_tmp;
6. 그리고 테이블 데이터를 보면 다음과 같은 효과가 있습니다.
hive > select * from students;
OK
123 666 1990-09-23 12:00:18
256 555 1989-10-06 03:57:32
142 444 1992-07-04 05:05:45
Time taken: 0.26 seconds, Fetched: 3 row(s)
다른 저장 형식인 SEQUENCEFILE, PARQUET 등도 textfile 형식으로 저장한 다음 목록을 뽑아야 한다.내보내기 형식의 구분 부호표에 따라야 합니다. 그렇지 않으면load 데이터가 틀리거나 모두null입니다.
excel 내보내기 형식:
text \t
csv ,
7. 우리가 excel에서 내보낸 파일 형식이gb2312 (txt든 csv든 모두 이 형식이므로 디코딩이 필요합니다.) 이것을utf-8로 돌려야 로드할 수 있습니다.그래서 로드하기 전에 우리는 일반적으로 두 가지 방법을 채택한다.
1. 텍스트 편집기에서 코드를 바꾸고bom을 가지고 있든 안 가지고 있든 상관없다. 그리고 업로드한다.
2. 파일이 있는 로컬 디렉토리에서 다음 명령 디코딩을 수행합니다.
piconv -f gb2312 -t UTF-8 1.txt > 2.txt
로컬 디렉터리에서 디코딩을 명령하면 파일 이름이 바뀝니다. 이 명령은 다른 파일에 파일을 쓰고 원본 파일의 내용을 비우므로 이름을 바꾸지 않으면 파일 내용이 완전히 손실됩니다.그래서 저희가 로드할 때 수정된 파일 이름을 꼭 선택해야 합니다.예:
코드 이전 데이터:
hive> select * from students;
OK
112 �� 35 2017/8/19 15:30
113 ���� 45
114 ³�� 55 2017/8/21 15:30
115 ���� NULL
116 ������ 75 2017/8/23 15:30
117 ������ 85 2017/8/24 15:30
118 �˽� NULL 2017/8/25 15:30
119 ������ 90
120 СѾ NULL 2017/8/27 15:30
121 ���� 80 2017/8/28 15:30
122 ��߸ 75
123 ��«�� 70 2017/8/30 15:30
124 ���� NULL 2017/8/31 15:30
125 �F NULL
126 � NULL 2017/9/2 15:30
127 ˾�� 50 2017/9/3 15:30
128 ������ 58 2017/9/4 15:30
129 ���� 66 2017/9/5 15:30
Time taken: 0.134 seconds, Fetched: 18 row(s)
디렉터리에 가서 코드를 바꾸고 Load
piconv -f gb2312 -t UTF-8 2.csv > 3.csv
# hive Load:
hive> load data local inpath '/export/data/3.csv' into table students;
결과:
hive> select * from students;
OK
112 35 2017/8/19 15:30
113 45
114 55 2017/8/21 15:30
115 NULL
116 75 2017/8/23 15:30
117 85 2017/8/24 15:30
118 NULL 2017/8/25 15:30
119 90
120 NULL 2017/8/27 15:30
121 80 2017/8/28 15:30
122 75
123 70 2017/8/30 15:30
124 NULL 2017/8/31 15:30
125 NULL
126 NULL 2017/9/2 15:30
127 50 2017/9/3 15:30
128 58 2017/9/4 15:30
129 66 2017/9/5 15:30
Time taken: 0.106 seconds, Fetched: 18 row(s)
보충: Hive 가져오기 데이터 NULLhdfs에서 데이터를hive의 테이블로 옮길 때 데이터 비트 NULL이 나타나면 열 구분자가 지정되지 않기 때문입니다.
하이브의 기본 구분자는/u0001(Ctrl+A)이기 때문에 부드럽게 이동하기 위해서는 표를 만들 때 데이터의 분할 기호를 지정해야 합니다. 문법은 다음과 같습니다.
hive (default)> create external table et (time BIGINT, userid string, content string, urlrank int, urlnum int, url string)
> partitioned by (filenum int)
> row format delimited fields terminated by '\t';
위에서 만든 것은 외부 테이블입니다. 데이터를 가져올 때load를 사용할 수 있지만, 데이터를 이동하지 않으려면 명령alter로 가리킵니다.
alter table et add partition (filenum=1) location '/input/SogouQueryLog/file1';
location 뒤에 있는 주소는 디렉터리여야 합니다. 그렇지 않으면 hdfs fs-mv src dest로 데이터를 이동할 수 있습니다.
hadoop fs -mv /input/SogouQueryLog/querylog_1 /input/SogouQueryLog/file1
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spark + HWC로 Hive 테이블을 만들고 자동으로 Metadata를 Atlas에 반영합니다.HDP 3.1.x의 경우 Spark + HWC에서 Hive 테이블을 만들고 자동으로 Metadata를 Atlas에 반영하는 방법이 있습니다. 방법: 전제조건: Hive Warehouse Connector (HWC) ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.