콘솔에 결과를 인쇄하지 않고 임팔라 쿼리 결과가 완전하게 구체화되도록하는 안정적이고 효율적인 방법이 있습니까? 예를 들어 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;
는하지만 여전히 나는 명확하지 않다 구체화 된 하위 쿼리를 확인해야합니다. 아마 그 트릭이나 다른 트릭을 적용 할 힌트가 있습니까?
쿼리를 구체화하고 싶지만 쿼리를 구체화하지 마십시오 (즉, 데이터는 디스크에 유지됨). 거기에는 일종의 모순이 있습니다. 또는 임팔라 데몬을 스트레스 테스트하고 싶다면 OOM을 포기할 시점을 확인하십시오. –
다른 말로하면 : 임팔라는 분산 캐시 (* à la * Redis)가 아닌 데이터 처리 프레임 워크 (* à la * Spark)가 아닌 SQL 실행 엔진입니다. 쿼리가 실행되면 아무 것도 남지 않습니다. 몇 가지 로그 제외. –
@SamsonScharfrichter 의견을 주셔서 감사합니다. 많은 sql db에서 쿼리 결과를 임시 변수로 저장하고이를 다시 사용할 수 있습니다. 임팔라가 그런 특징을 가지고 있다면 내 경우를 해결할 수있을거야. 나는 쿼리를 구체화하고 싶지만 결과 전송/인쇄 오버 헤드를 원하지 않기 때문에 'select count (*)'외부 쿼리가 * select table * create table보다 훨씬 낫다. 나는 모순이 있다고 생각하지 않는다. 서버 측에서 쿼리 실행의 정확한 타이밍. – jangorecki