[edit]
1 SQL Server에서 ODBC연결하여 Hive에서 데이터 가져올때 #
sql1방식보다 sql2 방식으로 가져오는게 4~10배 빠르다. (경험적으로..)
sql1
drop table if exists #temp1
select *
into #temp1
from openquery(hive, '
select
col1, col2, col3
from gamelog
where 1=1
and a.date_key between 20190619 and 20190821
'
)
sql2
exec('drop table if exists etl_fcc1d2fd1da44550bbde0661f25b631a;') at hive
exec('
create table etl_fcc1d2fd1da44550bbde0661f25b631a
as
select
col1, col2, col3
from gamelog
where 1=1
and a.date_key between 20190619 and 20190821
') at hive
go
drop table if exists #1
select *
into #1
from openquery(hive, '
select
col1, col2, col3
from etl_fcc1d2fd1da44550bbde0661f25b631a')
--4:30
[edit]
2 파티션 컬럼 읽을 때 #
현상:
gamelog 테이블은 date_key, log_no로 파티션된 테이블이다.
아래와 같이 파티션 키만 읽는 쿼리를 날렸다.
그런데 1시간이 걸리는 것이다.
아래와 같이 파티션 키만 읽는 쿼리를 날렸다.
그런데 1시간이 걸리는 것이다.
hive> set hive.execution.engine=mr;
hive> select log_no
> from gamelog
> where 1=1
> and date_key=20181228
> group by log_no;
해결:
영문을 모르겠으나 메시지를 잘 살펴보니 알겠더라.
이유는 hive가 input data size를 졸라 작제 추정한 것에 있다.

영문을 모르겠으나 메시지를 잘 살펴보니 알겠더라.
이유는 hive가 input data size를 졸라 작제 추정한 것에 있다.
그냥 쓸때없이 파티션 키가 아닌 다른 데이터도 조회하도록 해준다.
hive> select log_no, count(get_json_object(log_string, '$.1') cnt
> from gamelog
> where 1=1
> and date_key=20181228
> group by log_no;
댓글 없음:
댓글 쓰기