Azure 데이터웨어 하우스에서 JOIN 할 계획이고 잠재적으로 집계하려는 필드에 분산 테이블에 HASH를 사용하는 것이 좋습니다. 또한 사용할 필드에 대한 통계를 작성하는 것이 좋습니다.통계는 Azure Data Warehouse에서 해싱과 같은 JOINS 필드를 지원합니까?
같은 양의 레코드와 필드가있는 두 개의 테이블이 있다고 가정 해 보겠습니다. 한 테이블은 매우 고유 한 키에서 해시되며, 다른 테이블은 ROUND_ROBIN이며 여기에서 데이터는 60 개의 데이터베이스에서 균등하게 무작위로 나뉩니다.
-- CustomerID is alphanumeric
SELECT
[ProductID]
,COUNT(DISTINCT [CustomerID]) AS [Unique Records]
FROM [dbo].[FactTable]
GROUP BY
[Product]
해시 된 테이블에서 해시 된 키를 집계하면 0.05 초 이내에 결과가 반환되는 것을 확인할 수 있습니다. 동일한 집계를 사용하는 라운드 로빈 테이블에서 0.51 초입니다.
CREATE STATISTICS [ProductID] ON [dbo].[FactTable] ([ProductID]);
CREATE STATISTICS [CustomerID] ON [dbo].[FactTable] ([CustomerID]);
집계중인 필드에 통계를 적용해도 해시 된 테이블은 여전히 0.05 초 내에 반환됩니다. 변경 없음. 라운드 로빈 테이블에 동일한 작업을 수행하면 해시 값과 동일한 결과가 0.05 초 이내에 반환됩니다.
참고 : 초대형 자원 (최대 메모리 할당) 2000 DWU 실행 쿼리
해시 키의 분포를 조사, 내가 140,000,000 레코드가 60 데이터베이스 중 하나 개 유통에 저장됩니다 발견했다. 5 천만 개의 다른 레코드가 다른 59 개의 데이터베이스에 균등하게 분산되어 있습니다. 기본값은 내 해시 키를 해시 후보로 사용하지 않는 것입니다.
제 질문은 통계가있는 라운드 로빈 테이블이 동일한 테이블에서 성능이 뛰어나지 만 다른 테이블과 해시하고 있습니다. 해당 키를 사용하여 JOINS에서 라운드 로빈을 사용하면 동일한 성능이 유지됩니까? 아직 완전히 테스트하지는 않았지만 최선의 방법을 찾고 있습니다.
통계가 조인에 도움이됩니까? 필자가 읽은 기사 중 일부는 배포 키에 대해 라운드 로빈을 고려할 때 다른 사람이 접근 방식에 대해보다 확실한 답을 얻었는지 확인하는 것으로 나타났습니다. 위의 예에서와 같이 1 억 4 천만 명의 데이터 스큐가 발생하지 않는 후보자는 없습니다. 모든
응답을 자세히 나타내려면 테스트 한 모든 쿼리에 대한 Explain 계획을 게시하면 도움이됩니다. 쿼리 앞에 'EXPLAIN'이라는 단어를 넣고 실행 한 다음 XML을 질문에 복사하십시오. – GregGalloway
실제로는 없지만 참조 용으로 SQL 샘플이 포함되어 있습니다. 그것은 단지 SELECT COUNT (DISTINCT) GROUP BY 쿼리입니다. – Fastidious
하나 얻을 수 있습니까? 통계가 설명 계획을 변경하는지 또는 성능 차이가 캐싱과 관련이 있는지 확인하고 싶습니다. – GregGalloway