2017-04-03 9 views
0

파티션을 사용하여 하이브 테이블에 데이터를로드하려고합니다.하이브의 현재 날짜와 같은 파티션 열

코드는 다음과 같다 :

나는 다음과 같은 오류가 점점 오전
CREATE EXTERNAL TABLE URL(url STRING, clicks INT) 
COMMENT 'Unique Clicks per URL' 
PARTITIONED BY(dt STRING) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE 
LOCATION '/mypath/URL'; 

LOAD DATA INPATH '/inputpath/' INTO TABLE URL 
PARTITION (dt=date_format(CURRENT_TIMESTAMP, "yyyy.MM.dd HH:mm:ss")); 

:

FAILED: ParseException line 4:14 cannot recognize input near 
'date_format' '(' 'CURRENT_TIMESTAMP' in constant 

내가

SET hive.exec.dynamic.partition.mode=nonstrict; 

를 사용하여 시도했지만 아무것도 변경되지 않습니다.

왜 작동하지 않습니까? 현재 날짜를 파티션 열로 설정하는 방법은 무엇입니까?

미리 감사드립니다.

로렌조

+0

에서 변수로 날짜 귀하의 질문에 대답하기 매우 실망했다. 하이브 작업을 계속하기 전에 몇 가지 문서/튜토리얼을 읽으시기 바랍니다. –

답변

0

왜 당신이 그들 위에 외부 테이블을 만들 수 있습니다 때 파일을 이동?
LOAD DATA INPATH은 "있는 그대로"파일 (HDFS 메타 데이터 작업)을 테이블의 위치로 이동하기 만합니다.

명확하게 날짜 일 때 파티션 열을 문자열로 정의하는 이유는 무엇입니까?

CREATE EXTERNAL TABLE URL ... PARTITIONED BY(dt DATE) ... 

왜 비 ISO 형식 (YYYY.MM.DD)를 사용하려고? (

1
가 상수를 사용하여이 파티션 정보는 데이터의 일부가 아닌 것 때문에

ISO 날짜 형식은 3 가지 옵션이 있습니다 YYYY-MM-DD


입니다 함수를 포함하여 표현이 허용되지 않음).

2

LOAD DATA INPATH '/inputpath/' INTO TABLE URL PARTITION (dt=date '2017-03-04'); 
파티션 URL뿐만없이 유사한 추가 테이블, URL_STG을 만들고 동적 파티션을 삽입하는 데 사용합니다.

3.

set hive.exec.dynamic.partition.mode=nonstrict; 

insert into URL select *,current_date from URL_STG; 

는 공급은 CLI

hive --hivevar dt=$(date +"%Y-%m-%d") -e \ 
'LOAD DATA INPATH '\''/inputpath/'\'' INTO TABLE URL PARTITION (dt=date '\''${hivevar:dt}'\'')' 
+0

답장을 보내 주셔서 감사합니다. 실망 스럽다는 점에 유감스럽게 생각합니다. 다만 하이브를 사용하기 시작했는데, 왜 그렇게 좌절했는지 나는 확신 할 수 없습니다. 질문 : 1) 데이터가 더 큰 스크립트의 일부이고 다음 "반복"을 위해 데이터가 포함 된 폴더를 지워야하기 때문에 데이터를 이동해야합니다. 2) "문자열"은 dateformats, unixtimestamp 등을 사용하여 여러 시간 동안 실패한 후에 거기에서 끝났습니다. 유감스럽게 생각합니다. 3) 특별한 이유없이, ISO에 대한 정보를 주셔서 감사합니다. 함수에서 상수를 정의 할 수 있습니까? 감사합니다. – lorenzotenti

+0

파티션 열의 유형이 string입니다. 파티션 칼럼의 이름은 "date"를 의미하는'dt '이다. 실제 값은 시간 소인 (초 수준까지)입니다. 형식이 ISO가 아닙니다. 오류의 파티션 선언에 상수를 사용하는 것. 동적 파티션은'load data inpath'와 아무 관련이 없습니다. 이 게시물을 어디에서 다루기 시작하십니까? :-) ... 그리고 아니오, 리터럴을 사용할 수 없습니다. –