파일에서 몇 개의 열만 설정하는 외부 테이블을 만들려면 어떻게해야합니까?외부 테이블 (HIVE) 파일에서 몇 개의 열만 선택하십시오.
예 : 아카이브에는 6 개의 열 A, B, C, D, E, F가 있습니다. 하지만 내 탁자에서 나는 A, C, F만을 원해.
가능합니까?
파일에서 몇 개의 열만 설정하는 외부 테이블을 만들려면 어떻게해야합니까?외부 테이블 (HIVE) 파일에서 몇 개의 열만 선택하십시오.
예 : 아카이브에는 6 개의 열 A, B, C, D, E, F가 있습니다. 하지만 내 탁자에서 나는 A, C, F만을 원해.
가능합니까?
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)
답변을 주셔서 감사합니다, rchang. 이것은 우리가 실제로 사용하는 방식입니다. 우리는 프로세스를 단순화하기 위해 create 문에서이 작업을 수행하려고합니다. 가능한가? –
@ElderChaves 일반적으로 나는 당신이하고 싶은 일을하는 방법을 모른다. 그러나 나는 대답의 끝 부분에 또 다른 대안을 추가했다. 아주 특별한 경우입니다. 즉, 관심있는 열이 각 행의 시작 부분에 있고 나머지 행을 무시하기를 원할 것입니다 (예를 들어, 12 개의 필드 중 처음 4 개의 필드에 관심이 있습니다). – rchang
upvoted. 대답은 유용했습니다. (아무런 의견없이 downvoting하는 것은 과실입니다.) –
내가 대답 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;
그건 하이브가 아니라 오라클을위한 것입니다. – YoYo
을 발견하면 하이브를 통해이 데이터를 수정하거나 전용 읽어 하시겠습니까? – rchang