[조회 성능 10배] 집계 키를 사용하여 조회 실행 시간을 10분의 1로 설정하는 것을 권장합니다.
개요
다음은 Snowflake에서 질의의 가지를 자르는 이유(질의를 수행할 때 해석 참조를 건너뛰는 것)의 클러스터 키 사용 방법에 대해 설명합니다.6억장의 음반 서식에 지정된 기간 집계된 조회를 통해 검증한 결과 성능이 약 10배 향상된 것으로 확인됐다.
집계 키를 설정하지 않을 때의 실행 시간을 기준으로 실행 시간 비율을 포함하는 성능 검증 결과는 다음과 같다.가장 좋은 것은 그것을 단열의 집합 키로 지정하는 것이지만, 여러 열을 통해 집합 키로 설정하는 것도 높일 수 있다.
번호 매기기
조치
실행 시간 비율
Partitions scanned
Bytes scanned
1
클러스터 키 설정 없음
1
10863
26.80GB
2
L_SHIPDATE 열에서 클러스터 키 설정하기
10
1241
2.30GB
3
L_SHIPDATE 열이 포함된 다중 열에서 클러스터 키 설정하기
7
1613
3.66GB
결론
자주 사용하는 대규모 공장표에는 사용할 여러 날짜열을 분류열로 설정하는 것이 좋다.그러나 자동 분류는 비용이 필요하기 때문에 다른 주파수로 업데이트된 시계나 잘 사용하지 않는 시계로 설정하면 원가 우위를 고려해야 한다.
문서에서 날짜 열을 설정하는 것이 좋습니다.
클러스터 키
클러스터 키는
문서에는 다음과 같은 설명이 있습니다.
분류 키는 같은 미분구 내의 표에 데이터를 공존할 수 있도록 명확하게 지정된 표(또는 표의 표현식)의 열 서브집합이다.
참조 소스: https://docs.snowflake.com/ja/user-guide/tables-clustering-keys.html#what-is-a-clustering-key
클러스터 키 유지 관리
아래 문서에서 말한 바와 같이, 분류 키의 유지보수는 자동으로 진행됩니다.
자동 클러스터
"AUTOMATIC CLUSTERING"으로 유료화됩니다.
또 수동 집합을 실시할 수 없을 것 같다.
2020년 5월까지 수동 재집계는 모든 계좌에서 폐지됐다.
참조 소스: 수동 재집합 클래스 - 권장되지 않음 - Snowflak Doocumentation
검증 방법
1. 검증 데이터베이스와 표 만들기
CREATE OR REPLACE DATABASE WK_PRUNING_TEST;
USE WK_PRUNING_TEST;
Create or replace table LINEITEM (
L_ORDERKEY NUMBER(38,0)
,L_PARTKEY NUMBER(38,0)
,L_SUPPKEY NUMBER(38,0)
,L_LINENUMBER NUMBER(38,0)
,L_QUANTITY NUMBER(12,2)
,L_EXTENDEDPRICE NUMBER(12,2)
,L_DISCOUNT NUMBER(12,2)
,L_TAX NUMBER(12,2)
,L_RETURNFLAG VARCHAR(255)
,L_LINESTATUS VARCHAR(255)
,L_SHIPDATE DATE
,L_COMMITDATE DATE
,L_RECEIPTDATE DATE
,L_SHIPINSTRUCT VARCHAR(255)
,L_SHIPMODE VARCHAR(255)
,L_COMMENT VARCHAR(255)
);
/*
--下記コードは本番環境で実施しないようにしてください。
--検証のために、リザルトキャッシュ機能をオフにします。
use role accountadmin;
ALTER ACCOUNT SET USE_CACHED_RESULT = FALSE;
SHOW PARAMETERS LIKE '%USE_CACHED_RESULT%'
--検証完了後、リザルトキャッシュ機能をオンにします。
use role accountadmin;
ALTER ACCOUNT SET USE_CACHED_RESULT = TRUE;
SHOW PARAMETERS LIKE '%USE_CACHED_RESULT%'
*/
2. 샘플 데이터 가져오기USE WK_PRUNING_TEST;
TRUNCATE TABLE LINEITEM;
INSERT INTO LINEITEM
SELECT
*
FROM
"SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1000"."LINEITEM";
-- 5,999,989,709であることを確認
SELECT COUNT(*) FROM LINEITEM
3. 인증서 작성CREATE OR REPLACE TABLE LINEITEM_CLONE_1 CLONE LINEITEM;
CREATE OR REPLACE TABLE LINEITEM_CLONE_2 CLONE LINEITEM;
4. 검증표 1의 LSHIPDATE 열에서 클러스터 키 설정하기ALTER TABLE "PUBLIC"."LINEITEM_CLONE_1" CLUSTER BY (L_SHIPDATE);
--cluster_by列が、LINEAR(L_SHIPDATE)となっていることを確認
show tables like 'LINEITEM_CLONE_1';
5. 검증표 2의 LCOMMITDATE 열, LCOMMITDATE 열, LSHIPDATE 열에서 클러스터 키 설정하기/*
--カーディナリティチェック
--Docsより、"低いカーディナリティ列の前に高いカーディナリティ列を配置すると、後者の列でのクラスタリングの有効性が低下します。"との記載あり
SELECT
approx_count_distinct(L_SHIPDATE)
,approx_count_distinct(L_COMMITDATE)
,approx_count_distinct(L_COMMITDATE)
FROM LINEITEM
;
*/
ALTER TABLE "PUBLIC"."LINEITEM_CLONE_2" CLUSTER BY (L_COMMITDATE,L_COMMITDATE,L_SHIPDATE) ;
--cluster_by列が、LINEAR(L_COMMITDATE,L_COMMITDATE,L_SHIPDATE)となっていることを確認
show tables like 'LINEITEM_CLONE_2';
6. 자동 재집계 복구, 잠시 기다리면 검증 조회 수행SELECT
SUM(L_EXTENDEDPRICE)
FROM
"PUBLIC"."LINEITEM"
WHERE L_SHIPDATE >= '1998-01-01'
;
SELECT
SUM(L_EXTENDEDPRICE)
FROM
"PUBLIC"."LINEITEM_CLONE_1"
WHERE L_SHIPDATE >= '1998-01-01'
;
SELECT
SUM(L_EXTENDEDPRICE)
FROM
"PUBLIC"."LINEITEM_CLONE_2"
WHERE L_SHIPDATE >= '1998-01-01'
;
7. History 탭에서 질의의 실행 결과 확인참조 링크
Reference
이 문제에 관하여([조회 성능 10배] 집계 키를 사용하여 조회 실행 시간을 10분의 1로 설정하는 것을 권장합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/manabian/items/499b5d51bdfd8ffb36b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)