아무도 말할 수 : 하이브 테이블을 만들 수 고정 된 오프셋을 통해 값을 분리. 예 : 파일 : col1 col2 col3 이 경우 1 - 4 자의 문자는 표의 첫 번째 열, 5-8 자의 두 번째 열, 8-12 자의 문자를 나타냅니다.고정 오프셋으로 하이브 필드 delimeter
고맙습니다.
아무도 말할 수 : 하이브 테이블을 만들 수 고정 된 오프셋을 통해 값을 분리. 예 : 파일 : col1 col2 col3 이 경우 1 - 4 자의 문자는 표의 첫 번째 열, 5-8 자의 두 번째 열, 8-12 자의 문자를 나타냅니다.고정 오프셋으로 하이브 필드 delimeter
고맙습니다.
는 I 유사한 문제점이 방법으로 해결했다 :
개행 구분 행 고정 오프셋 열 입력
첫 번째 입력이 주어 한 컬럼의 테이블로 데이터 문자열
그런 다음 자바 클래스 또는 한 줄에 걸리는 스트리밍 Hadoop을 통해 파이썬 모듈 중 하나를 통과하고, 반환 여러 필드 :
import sys
for line in sys.stdin:
# line will have a newline on the end you don't want
line = line.strip()
output = []
output.append(line[:4])
output.append(line[4:8])
output.append(line[8:12])
print '\t'.join(output)
귀하의 하이브의 cript는 다음과 같이 표시됩니다
CREATE TABLE IF NOT EXISTS input_raw(line STRING);
LOAD DATA LOCAL INPATH '${hiveconf:input}' OVERWRITE INTO TABLE input_raw;
CREATE TABLE IF NOT EXISTS processed_data(
field1 STRING,
field2 STRING
field3 STRING);
delete FILE processing.py;
add FILE processing.py;
INSERT INTO TABLE processed_data
SELECT
TRANSFORM (line)
USING 'python processing.py'
AS(field1, field2, field3)
FROM input_raw;
DROP TABLE input_raw;
당신은 또한 당신의 접근 방식에 따라, 그러나 하이브 SUBSTR()를 사용하여 스트리밍 및 파이썬 그 모두를 피할 수
CREATE TABLE IF NOT EXISTS input_raw(line STRING);
LOAD DATA LOCAL INPATH '${hiveconf:input}' OVERWRITE INTO TABLE input_raw;
CREATE TABLE IF NOT EXISTS processed_data(
field1 STRING,
field2 STRING
field3 STRING);
INSERT INTO TABLE processed_data
SELECT
substr(line,1,4) as field1,
substr(line,5,4) as field2,
substr(line,9,4) as field3
FROM input_raw;
DROP TABLE input_raw;
나는 그 프로젝트에 아직도있을 때 :) –
https://groups.google.com/ a/cloudera.org/forum /? fromgroups = #! topic/cdh-user/9xvU0RyqKPA –
http://stackoverflow.com/questions/1309700/regex-for-fixed-width-field –