2015-01-30 1 views

답변

0

HDFS 파일의 열을 선택적으로 외부 테이블에 포함시키는 방법을 모르겠습니다. 유스 케이스에 따라 원하는 열만 포함하도록 외부 테이블을 기반으로 뷰를 정의하는 것으로 충분할 수 있습니다. 당신이해야 할 원하는 것을 달성하기 위해

hive> CREATE VIEW filtered_ext_table AS SELECT A, C, F FROM ext_table; 
OK 
Time taken: 0.749 seconds 
hive> DESCRIBE filtered_ext_table; 
OK 
a       string        
c       string        
f       string        
Time taken: 0.266 seconds, Fetched: 3 row(s) 
hive> SELECT * FROM filtered_ext_table; 
OK 
row_1_col_A row_1_col_C  row_1_col_F 
row_2_col_A row_2_col_C  row_2_col_F 
row_3_col_A row_3_col_C  row_3_col_F 
Time taken: 0.301 seconds, Fetched: 3 row(s) 

또 다른 방법 : 단지 당신이 원하는 열을 포함에

hive> CREATE EXTERNAL TABLE ext_table (
    > A STRING, 
    > B STRING, 
    > C STRING, 
    > D STRING, 
    > E STRING, 
    > F STRING 
    >) 
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    > STORED AS TEXTFILE 
    > LOCATION '/tmp/ext_table'; 
OK 
Time taken: 0.401 seconds 
hive> SELECT * FROM ext_table; 
OK 
row_1_col_A row_1_col_B  row_1_col_C  row_1_col_D  row_1_col_E  row_1_col_F 
row_2_col_A row_2_col_B  row_2_col_C  row_2_col_D  row_2_col_E  row_2_col_F 
row_3_col_A row_3_col_B  row_3_col_C  row_3_col_D  row_3_col_E  row_3_col_F 
Time taken: 0.222 seconds, Fetched: 3 row(s) 

그런 다음 뷰를 만들 : 예를 들어, 외부 테이블의 다음과 같은 바보 예제를 제공 외부 테이블을 뒷받침하는 HDFS 파일을 수정할 수 있습니다. 관심있는 열이 모두 각 행의 시작 부분에 있으면 외부 테이블을 정의하여 처음 세 열만 캡처하도록 할 수 있습니다 (얼마나 많은 열은 실제로 파일에 있음). 예를 들어, 위와 같은 데이터 파일 :

hive> DROP TABLE IF EXISTS ext_table; 
OK 
Time taken: 1.438 seconds 
hive> CREATE EXTERNAL TABLE ext_table (
    > A STRING, 
    > B STRING, 
    > C STRING 
    >) 
    > ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
    > STORED AS TEXTFILE 
    > LOCATION '/tmp/ext_table'; 
OK 
Time taken: 0.734 seconds 
hive> SELECT * FROM ext_table; 
OK 
row_1_col_A row_1_col_B  row_1_col_C 
row_2_col_A row_2_col_B  row_2_col_C 
row_3_col_A row_3_col_B  row_3_col_C 
Time taken: 0.727 seconds, Fetched: 3 row(s) 
+0

답변을 주셔서 감사합니다, rchang. 이것은 우리가 실제로 사용하는 방식입니다. 우리는 프로세스를 단순화하기 위해 create 문에서이 작업을 수행하려고합니다. 가능한가? –

+0

@ElderChaves 일반적으로 나는 당신이하고 싶은 일을하는 방법을 모른다. 그러나 나는 대답의 끝 부분에 또 다른 대안을 추가했다. 아주 특별한 경우입니다. 즉, 관심있는 열이 각 행의 시작 부분에 있고 나머지 행을 무시하기를 원할 것입니다 (예를 들어, 12 개의 필드 중 처음 4 개의 필드에 관심이 있습니다). – rchang

+0

upvoted. 대답은 유용했습니다. (아무런 의견없이 downvoting하는 것은 과실입니다.) –

-1

내가 대답 here

create table tmpdc_ticket(
    SERVICE_ID CHAR(144), 
    SERVICE_TYPE CHAR(50), 
    CUSTOMER_NAME CHAR(200), 
    TELEPHONE_NO CHAR(144), 
    ACCOUNT_NUMBER CHAR(144), 
    FAULT_STATUS CHAR(50), 
    BUSINESS_GROUP CHAR(100) 
) 
organization external(
    type oracle_loader 
    default directory sample_directory 
    access parameters(
     records delimited by newline 
     nologfile 
     skip 1 
     fields terminated by '|' 
     missing field values are null 
      (DUMMY_1, 
      DUMMY_2, 
      SERVICE_ID CHAR(144), 
      SERVICE_TYPE CHAR(50), 
      CUSTOMER_NAME CHAR(200), 
      TELEPHONE_NO CHAR(144), 
      ACCOUNT_NUMBER CHAR(144), 
      FAULT_STATUS CHAR(50), 
      BUSINESS_GROUP CHAR(100) 
     ) 
    ) 
    location(sample_directory:'sample_file.txt') 
) 
reject limit 1 
noparallel 
nomonitoring; 
+0

그건 하이브가 아니라 오라클을위한 것입니다. – YoYo

관련 문제