SYSTEM$EXPLAIN_PLAN_JSON
SYSTEM$EXPLAIN_PLAN_JSON
SQL 문의 텍스트가 주어지면 이 함수는 JSON으로 EXPLAIN 계획을 생성해요.
본문
구문
SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
인자
- EXPLAIN 계획을 원하는 SQL 문을 포함하는 문자열, 또는 문자열로 평가되는 표현식이에요. 리터럴 문자열이 사용되면 작은따옴표 문자(
')로 둘러싸야 해요. - EXPLAIN 계획을 원하는 쿼리 ID를 포함하는 문자열, 또는 문자열로 평가되는 표현식이에요. 리터럴 문자열이 사용되면 작은따옴표 문자(
')로 둘러싸야 해요. Snowflake는 지난 14일 이내에 실행된 쿼리 ID에 대한 히스토리 데이터를 보관해요. 14일보다 오래 전에 실행된 쿼리의 쿼리 ID를 지정하면 오류가 반환돼요. 자세한 내용은 Monitor query activity with Query History를 참고해요.
반환 값
JSON 호환 형식의 EXPLAIN 출력을 포함하는 VARCHAR를 반환해요.
사용상 주의사항
- 문자열 리터럴이 입력으로 전달되면 문자열 주위의 구분 기호는 작은따옴표(
') 또는 이중 달러 기호($$)일 수 있어요. 문자열 리터럴이 작은따옴표를 포함하면(이중 달러 기호는 포함하지 않으면) 이중 달러 기호로 문자열을 구분하면 문자열 안의 포함된 작은따옴표 문자를 이스케이프할 필요가 없어져요. - 단독으로 실행하면 실패할 SQL 문은 이 함수의 인자로 사용할 수 없어요. 예를 들어 CREATE TABLE 문이 지정되면 (테이블 이름이 이미 존재하므로) 다시 실행할 수 없어요. 시스템 함수는 문을 재컴파일하려고 시도할 때 오류로 실패해요.
- 이 명령의 출력을 후처리하려면 다음을 할 수 있어요.
- 출력을 쿼리할 수 있는 테이블로 취급하는 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);
이 예시는 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;
LAST_QUERY_ID()를 호출해 쿼리 ID를 조회하여 쿼리에 대해 EXPLAIN을 실행해요.
SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;