- 카테고리:
SYSTEM$EXPLAIN_PLAN_JSON¶
SQL 문의 텍스트가 주어지면 이 함수는 JSON으로 EXPLAIN 계획을 생성합니다.
구문¶
SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
인자¶
sql_statement_expression
필요한 EXPLAIN 계획에 대한 SQL 문을 포함하는 문자열이거나, 이러한 문자열로 평가되는 식입니다. 리터럴 문자열을 사용하는 경우, 작은따옴표 문자
'
로 묶어야 합니다.sql_query_id_expression
필요한 EXPLAIN 계획에 대한 쿼리 ID를 포함하는 문자열이거나, 이러한 문자열로 평가되는 식입니다. 리터럴 문자열을 사용하는 경우, 작은따옴표 문자
'
로 묶어야 합니다.Snowflake는 지난 14일 이내에 실행된 쿼리 IDs에 대한 기록 데이터를 보관합니다. 과거에 실행한 지 14일 이상 지난 쿼리에 ID를 지정하면 오류가 반환됩니다. 자세한 내용은 쿼리 기록으로 쿼리 활동 모니터링하기 섹션을 참조하십시오.
반환¶
함수는 JSON 호환 형식의 EXPLAIN 출력을 포함하는 VARCHAR를 반환합니다.
사용법 노트¶
문자열 리터럴이 입력으로 전달된 경우, 문자열 주위의 구분 기호는 작은따옴표
'
또는 이중 달러 기호$$
일 수 있습니다. 문자열 리터럴이 작은따옴표를 포함하는 경우(이중 달러 기호를 포함하지 않음), 이중 달러 기호로 문자열을 구분하면 문자열 내부에 포함된 작은따옴표 문자를 이스케이프할 필요가 없습니다.이 명령의 출력을 사후 처리하려면 다음 방법으로 수행할 수 있습니다.
쿼리할 수 있는 테이블로 출력을 처리하는 RESULT_SCAN 함수를 사용합니다.
나중에 분석할 수 있도록 JSON 형식의 출력을 테이블에 삽입합니다. 출력을 JSON 형식으로 저장하는 경우 SYSTEM$EXPLAIN_JSON_TO_TEXT 또는 EXPLAIN_JSON 함수를 사용하여 JSON을 사람이 더 쉽게 읽을 수 있는 형식(테이블 형식 또는 서식 있는 텍스트)으로 변환할 수 있습니다.
예¶
이 예는 아래에 표시된 표를 사용합니다.
CREATE TABLE Z1 (ID INTEGER); CREATE TABLE Z2 (ID INTEGER); CREATE TABLE Z3 (ID INTEGER);
이 예는 n SQL 문을 포함하는 리터럴 문자열을 입력 매개 변수로 사용합니다.
SELECT SYSTEM$EXPLAIN_PLAN_JSON( 'SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID' ) AS explain_plan; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPLAIN_PLAN | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | {"GlobalStats":{"partitionsTotal":2,"partitionsAssigned":2,"bytesAssigned":1024},"Operations":[[{"id":0,"operation":"Result","expressions":["Z1.ID","Z2.ID"]},{"id":1,"parentOperators":[0],"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parentOperators":[1],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parentOperators":[1],"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parentOperators":[3],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z1"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512}]]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
$$
를 사용하여, 작은따옴표를 포함하는 쿼리를 구분합니다.
SELECT SYSTEM$EXPLAIN_PLAN_JSON( $$ SELECT symptom, IFNULL(diagnosis, '(not yet diagnosed)') FROM medical $$ );
아래 코드는 이미 실행한 쿼리에 대한 EXPLAIN 계획을 보는 방법을 보여줍니다.
쿼리를 실행합니다.
SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID;쿼리에서 EXPLAIN을 실행하고
LAST_QUERY_ID()
를 호출하여 쿼리 ID를 찾습니다.SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;