2015-02-02 2 views
0

나는 두 데이터 집합이있는 테이블은 하나 개의 데이터 세트구글 BigQuery의 사용은, 결코 결과를 다시 반환

유형 등의 정보를 가지고 있습니다 | 이름 | Id

포장 된 약 | 슈도에페드린 HCl 경구 용 정제 120 MG | 110

PackagedDrug | 슈도에페드린 염산 구강 타블렛 60 MG | 111

DrugName | 슈도에페드린 HCl | 내가 원하는 무엇 (112)


는 DrugName 개념에 PackagedDrug에 가입, 그래서 그의 이름을 입력 DrugName에 대한 이름과 일치되는 유형 PackagedDrug에 대한 모든 ID를 얻을 수 있습니다. 다음 쿼리에서 DrugName의 이름을 하드 코드하면 즉시 실행되지만 하드 코드를 꺼내면 계속 실행됩니다. 큰 쿼리의 속도를 높이는 적절한 방법을 제안 해 주시겠습니까?

SELECT a.MSC_ID MSC_id, a.MSC_CONcept_type, a.concept_id, a.concept_name, b.concept_name는

from 
(select MSC_id, MSC_CONcept_type, concept_id, concept_name 
    FROM [ClientAlerts.MSC_Concepts] 
    where MSC_CONcept_type in ('MediSpan.Concepts.PackagedDrug')) a 

CROSS JOIN 

(MSC_CONcept_type, concept_id, CONCEPT_NAME 길이 (CONCEPT_NAME는) ClientAlerts FROM
렌을 선택 .MSC_Concepts] 여기서 ('MediSpan.Concepts.NamebasedClassification.DrugName')에 MSC_CONcept_type -

B ('염산 슈도에페드린') ) 및 CONCEPT_NAME

여기서 SUBSTR (a.concept_name, 1 b.len) + '=

감사를 b.concept_name, Savita

답변

0

이 BigQuery를 자체와는 아무 상관이있다. 하드 코딩 할 때 값은 하드 코딩 된 값을 찾기 때문에 모든 행을 확인할 필요가 없으므로 값이 "필터링"되는 방식이 빠릅니다.

하드 코딩 된 값을 사용하지 않으면 더 많은 행이 검색되고 첫 번째 쿼리의 모든 행이 두 번째 쿼리와 비교됩니다. 솔직히, 여기서 올바르게 사용 사례를 설명하면이 작업을 더 빠르게 수행 할 방법이 없다고 생각합니다.

하지만 한 가지 질문이 떠오릅니다. 왜 "유형"이 있습니까? 대신 두 개의 테이블이 있어야하는 것 같습니다.

+0

안녕하세요, 유형 중 하나를 다른 테이블로 만들었지 만 여전히 느립니다. –

+0

@SavitaMhetar, 나는 두 개의 다른 테이블을 만들면 빨리 만들 것이라고 말한 적은 없습니다. 확실히 더 빨리 만들 것입니다. 조인 할 때 이해해야 할 한가지는 시스템이 가능한 모든 행 조합을 만들려고한다는 것입니다. 각 테이블의 행 수가 얼마나됩니까? 이것은 단순히 시스템에 많은 행이있을 것이므로 – Patrice

+0

한 테이블에는 250 만 개의 행이 있으며 다른 테이블에는 78000 개의 행이 있습니다. –