2016-07-15 3 views
3

콘솔에 결과를 인쇄하지 않고 임팔라 쿼리 결과가 완전하게 구체화되도록하는 안정적이고 효율적인 방법이 있습니까? 예를 들어 INNER JOIN 쿼리를 사용합니다.임팔라 쿼리가 구체화되었는지 확인

쿼리 결과를 구체화하는 확실한 방법은 테이블을 선택으로 생성하는 것입니다.

CREATE TABLE t3 STORED AS PARQUET AS SELECT t1.* FROM t1 INNER JOIN t2 ON t1.id=t2.id; 

그것의 문제점

는 디스크에 기록되므로 비효율적이다. 쿼리를 실행하고 결과가 구체화되도록하는 가장 효율적인 방법을 찾고 있습니다.

예를 들어, Spark에서는 메서드 다음에 .count 메서드를 사용하여 쿼리가 구체화되도록 할 수 있습니다.

val t3 = t1.join(t2, "id") 
t3.cache 
t3.count 

내가 서브 쿼리와 해결 방법을 시도 할 수

. 쿼리 최적화 프로그램은 내가 총 수에만 관심이 있음을 발견 한 경우

SELECT COUNT(*) FROM (SELECT t1.* FROM t1 INNER JOIN t2 ON t1.id=t2.id) t3; 

는하지만 여전히 나는 명확하지 않다 구체화 된 하위 쿼리를 확인해야합니다. 아마 그 트릭이나 다른 트릭을 적용 할 힌트가 있습니까?

+0

쿼리를 구체화하고 싶지만 쿼리를 구체화하지 마십시오 (즉, 데이터는 디스크에 유지됨). 거기에는 일종의 모순이 있습니다. 또는 임팔라 데몬을 스트레스 테스트하고 싶다면 OOM을 포기할 시점을 확인하십시오. –

+0

다른 말로하면 : 임팔라는 분산 캐시 (* à la * Redis)가 아닌 데이터 처리 프레임 워크 (* à la * Spark)가 아닌 SQL 실행 엔진입니다. 쿼리가 실행되면 아무 것도 남지 않습니다. 몇 가지 로그 제외. –

+0

@SamsonScharfrichter 의견을 주셔서 감사합니다. 많은 sql db에서 쿼리 결과를 임시 변수로 저장하고이를 다시 사용할 수 있습니다. 임팔라가 그런 특징을 가지고 있다면 내 경우를 해결할 수있을거야. 나는 쿼리를 구체화하고 싶지만 결과 전송/인쇄 오버 헤드를 원하지 않기 때문에 'select count (*)'외부 쿼리가 * select table * create table보다 훨씬 낫다. 나는 모순이 있다고 생각하지 않는다. 서버 측에서 쿼리 실행의 정확한 타이밍. – jangorecki

답변

1

AFAIK 너는 임팔라으로 할 수 없으며 결코 할 수 없습니다.
Cloudera는 특히 Tableau, Qlik, MicroStrategy 등과 같은 BI 도구를 지원하기위한 도구를 설계했지만 ad hoc ETL 스크립트는 지원하지 않습니다.

한편 하이브에는 사용자 요구에 맞는 "HPL-SQL"절차 언어 래퍼가 함께 제공됩니다. 주의 사항 :

  • 하이브 2.0 이상이 필요 내부 HPL-SQL 인터프리터가 아닌 기본 하이브 클라이언트 (나 표준 JDBC 연결)

그리고 를 전체 스크립트 를 실행해야합니다 HPL-SQL 도구은 임팔라 쿼리을 지원하는 을 주장하지만 그 주장은 조사하지 않았습니다. 어색한 해결 방법으로 문제를 해결할 수 있습니다.

참고 : 당신이 자신을 제안
    HIVE-11055, 왜 안 스파크를 사용하는 해결 방법 중
    HPL/SQL website


말하기, (PL/HQL 도구는 하이브 코드 기반에 기여) ? Spark 네이티브 Parquet 라이브러리를 사용하거나 Impala 데몬에 대한 사용자 정의 JDBC 연결을 사용하여 임팔라/하이브 테이블을 읽을 수 있습니다.본질적으로 HPL/SQL 솔루션과 유사합니다.

+0

고마워요. 잘 대답합니다. 나는 현상금으로 잠시 기다릴 것입니다. 이미 스파크를 사용하고 있습니다. 벤치마킹에서 임팔라를보다 정확하게 반영하고자했습니다. 가장 좋은 방법은 'select count (*)'와 'create table as select'라는 두 가지 다른 쿼리를 테스트하여 독자가 유스 케이스에 대해 원하는 측정을 사용할 수 있도록하는 것입니다. – jangorecki