복붙노트

[HADOOP] 어떻게 하이브 테이블에 여러 줄의 열 데이터를로드? 새 라인 문자를 가진 열

HADOOP

어떻게 하이브 테이블에 여러 줄의 열 데이터를로드? 새 라인 문자를 가진 열

나는 몇 줄 이상에 걸쳐 데이터를 포함 Excel 파일의 열을 (안 마지막 열)이있다.

칼럼의 일부 세포가 비어 일부는 단일 라인 항목이 있습니다.

.CSV 파일 또는 엑셀에서 탭 분리가 .txt로 저장하면 모든 멀티 라인 데이터와 몇 단 한 줄의 항목을 큰 따옴표로 생성지고, 빈 필드의 아무도는 따옴표 없습니다. 한 줄의 항목 중 일부는 따옴표하지 않습니다.

그것은 하이브 테이블이 동일한 구조를 갖는 데이터를 저장하는 것이 가능하다? 네, 어떻게이 수행 할 수 있습니다? 나는 따옴표 안에 모든 LF를 탈출 만 실제 EOL로 지난 LF 돌볼 필요가 이해합니다. 그러나 '\ n을'이 발생 순간, 하이브는 새 행에 데이터를합니다.

엑셀에서 데이터의 형식은 다음과 같은 같다 :

|------+------+--------+------------------+-------+------|
|row1: | col1 | col2   | col3(multi-line) | col4  | col5 |
|------+------+--------+------------------+-------+------|
|      |      |        | line 1 of 3      |       |      |
|row2: | abc  | defsa  | line 2 of 3      | bcde  | hft  |
|      |      |        | line 3 of 3      |       |      |
|------+------+--------+------------------+-------+------|
|row3: | abc2 | defsa2 | (blank)          | bcde2 | hft2 |
|------+------+--------+------------------+-------+------|
|row4: | abc3 | defsa3 | single-line1     | bcde3 | hft3 |
|------+------+--------+------------------+-------+------|
|row5: | abc4 | defsa4 | single-line2     | bcde4 | hft4 |
|------+------+--------+------------------+-------+------|

CVS로 저장하는 경우는 다음과 출력 :

ROW1 - COL1, COL2, COL3 (멀티 라인), col4, COL5 ROW2 - abc 방송, defsa, 3 호선의 1 ",,,,,, row3 - 3의 라인이 ,,,,,, row4 - 3 라인 3 ,,,,,, row5 - "BCDE, HFT row6 - abc2, defsa2, bcde2, hft2 row7 - abc3, defsa3, 단일 호선, bcde3, hft3 row8 - abc4, defsa4, 단일 호선 ",,,,,, row9 - "bcde4, hft4

CSV 9 행 엑셀 5 행.

가능하다면, 구성을 변경하고, 여러 줄 열을 유지하지 않고, 하이브 테이블에이 .csv 파일로 저장하는 입력을 평가한다.

해결법

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

    1.이 링크에서 제공되는 SerDe이 포함 된 새로운 라인을 처리 할 수 ​​없습니다. 내 생각 엔 당신이 포함 된 새로운 라인을 원하는 경우, 사용자 정의 SerDe을 만들어야 할 것입니다. 너무 깊게로 보지 않고,이 사용자 정의 SerDe을 만드는 데 도움이 될 수있는 좋은 자원이다.

    이 링크에서 제공되는 SerDe이 포함 된 새로운 라인을 처리 할 수 ​​없습니다. 내 생각 엔 당신이 포함 된 새로운 라인을 원하는 경우, 사용자 정의 SerDe을 만들어야 할 것입니다. 너무 깊게로 보지 않고,이 사용자 정의 SerDe을 만드는 데 도움이 될 수있는 좋은 자원이다.

    당신은, 예를 하이브를로드하기 전에 데이터를 처리하는 돼지를 사용하여 시도 되세요 당신은 하이브로 이동하기 전에 다른 뭔가의 \ n 개의 문자를 대체 할 수 있습니다. 하지만 당신은 아마 같은 SerDe을 사용하고 있기 때문에 정확하게 돼지에로드 할 수 없다는 동일한 문제로 실행될 수 있습니다.

    궁극적으로, 사용자 정의 SerDe가 문제를 해결하는 것입니다,하지만 난 보이지 않아요 또 다른 쉬운 방법이있을 수 있습니다.

  2. from https://stackoverflow.com/questions/39832280/how-to-load-multi-line-column-data-in-hive-table-columns-having-new-line-charac by cc-by-sa and MIT license