Azure Databricks에서 오류 처리
적용 대상: Databricks SQL Databricks Runtime 12.2 이상
오류 구성 요소
Azure Databricks에서 오류가 발생하면 다음 구성 요소가 포함됩니다.
-
오류 조건에 고유한 설명적이고 사람이 읽을 수 있는 문자열입니다.
일부 오류 클래스에는 하위 클래스가 포함됩니다.
예: TABLE_OR_VIEW_NOT_FOUND 및 INCOMPLETE_TYPE_DEFINITION. 배열입니다.
모든 오류 클래스 목록은 오류 클래스를 참조 하세요.
-
오류 클래스를 여러 제품 및 API에서 지원하는 표준 형식으로 그룹화한 5자 길이의 문자열입니다.
예:
'42P01'
Azure Databricks에서 사용하는 모든
SQLSTATE
항목의 전체 목록은 SQLSTATEs를 참조 하세요. 매개 변수가 있는 메시지
매개 변수에 대한 자리 표시자가 있는 오류 메시지입니다.
예: TABLE_OR_VIEW_NOT_FOUND 다음 메시지가 포함됩니다.
The table or view <relationName> cannot be found.
매개 변수가 있는 메시지를 사용하여 메시지 매개 변수 값을 매개 변수 태그에 매핑하여 오류 메시지를 렌더링할 수 있습니다
<parameter>
.메시지 매개 변수
오류에 대한 추가 정보를 제공하는 매개 변수 및 값의 맵입니다. 예:
'relationName' -> 'main.default.tab1'
Message
매개 변수가 채워진 오류 클래스 및
SQLSTATE
오류 클래스를 포함하여 완전히 렌더링된 오류 메시지입니다. 예시:[TABLE_OR_VIEW_NOT_FOUND] The table or view `does_not_exist` cannot be found. Verify the spelling and correctness of the schema and catalog. If you did not qualify the name with a schema, verify the current_schema() output, or qualify the name with the correct schema and catalog. To tolerate the error on drop use DROP VIEW IF EXISTS or DROP TABLE IF EXISTS. SQLSTATE: 42P01; line 1 pos 14; 'Project [*] +- 'UnresolvedRelation [does_not_exist], [], false
Warning
메시지 및 매개 변수가 있는 메시지는 릴리스에서 안정적이지 않습니다.
메시지 텍스트는 예고 없이 변경되거나 지역화될 수 있습니다.
오류 조건을 프로그래밍 방식으로 처리하려면 대신 오류 클래스 및 메시지 매개 변수를 사용합니다.SQLSTATE
오류 조건 처리
적용 대상: Databricks SQL Databricks Runtime 14.2 이상
Important
이 기능은 공개 미리 보기 상태입니다.
Azure Databricks는 오류 조건을 처리하기 위한 언어별 API를 제공합니다.
Python
Python의 경우 pySparkException 사용
PySparkException.getErrorClass()
: 예외의 오류 클래스를 문자열로 반환합니다.PySparkException.getMessageParameters()
: 예외의 메시지 매개 변수를 사전으로 반환합니다.PySparkException.getSqlState()
: 식의SQLSTATE
문자열을 반환합니다.
Scala
getErrorClass()
: 오류 클래스를 문자열로 반환합니다.getMessageParameters()
: 메시지 매개 변수를 맵으로 반환합니다.getSqlState()
: SQLSTATE를 문자열로 반환합니다.
예제
예외를 catch하고 오류 클래스, 메시지 매개 변수 및
SQLSTATE
. 기본 오류 메시지도 표시합니다.Scala
import org.apache.spark.SparkThrowable try { spark.sql("SELECT * FROM does_not_exist").show() } catch { case ex: SparkThrowable => println("Error Class : " + ex.getErrorClass) println("Message parameters: " + ex.getMessageParameters()) println("SQLSTATE : " + ex.getSqlState) println(ex) }
Python
from pyspark.errors import PySparkException try: spark.sql("SELECT * FROM does_not_exist").show() except PySparkException as ex: print("Error Class : " + ex.getErrorClass()) print("Message parameters: " + str(ex.getMessageParameters())) print("SQLSTATE : " + ex.getSqlState()) print(ex)
결과
Error Class : TABLE_OR_VIEW_NOT_FOUND Message parameters: {'relationName': '`does_not_exist`'} SQLSTATE : 42P01 [TABLE_OR_VIEW_NOT_FOUND] The table or view `does_not_exist` cannot be found. Verify the spelling and correctness of the schema and catalog. If you did not qualify the name with a schema, verify the current_schema() output, or qualify the name with the correct schema and catalog. To tolerate the error on drop use DROP VIEW IF EXISTS or DROP TABLE IF EXISTS. SQLSTATE: 42P01; line 1 pos 14; 'Project [*] +- 'UnresolvedRelation [does_not_exist], [], false
SQLSTATE
42P01
만 catch하고 사용자 지정 메시지를 표시합니다.Scala
import org.apache.spark.SparkThrowable try { spark.sql("SELECT * FROM does_not_exist").show() } catch { case ex: SparkThrowable if (ex.getSqlState == "42P01") => println("I'm so sorry, but I cannot find: " + ex.getMessageParameters().get("relationName")) }
Python
from pyspark.errors import PySparkException try: spark.sql("SELECT * FROM does_not_exist").show() except PySparkException as ex: if (ex.getSqlState() == "42P01"): print("I'm so sorry, but I cannot find: " + ex.getMessageParameters()['relationName']) else: raise
결과
I'm so sorry, but I cannot find: `does_not_exist`
오류 클래스
TABLE_OR_VIEW_NOT_FOUND
만 catch하고 사용자 지정 메시지를 표시합니다.Scala
import org.apache.spark.SparkThrowable try { spark.sql("SELECT * FROM does_not_exist").show() } catch { case ex: SparkThrowable if (ex.getErrorClass == "TABLE_OR_VIEW_NOT_FOUND") => println("I'm so sorry, but I cannot find: " + ex.getMessageParameters().get("relationName")) }
Python
from pyspark.errors import PySparkException try: spark.sql("SELECT * FROM does_not_exist").show() except PySparkException as ex: if (ex.getErrorClass() == "TABLE_OR_VIEW_NOT_FOUND"): print("I'm so sorry, but I cannot find: " + ex.getMessageParameters()['relationName']) else: raise
결과
I'm so sorry, but I cannot find: `does_not_exist`
사용자가 예외를 발생시켰습니다.
Azure Databricks는 사용자 정의 오류를 발생하도록 다음 함수를 제공합니다.
-
사용자 지정 오류 메시지를 사용하여 예외를 발생합니다.
-
조건이 충족되지 않으면 선택적 오류 메시지와 함께 오류를 발생합니다.
두 함수 모두 'USER_RAISED_EXCEPTION' 오류 클래스와 SQLSTATE
'P0001'
함께 사용자 정의 메시지를 반환합니다.
예제
> SELECT raise_error('This is a custom error message');
[USER_RAISED_EXCEPTION] This is a custom error message. SQLSTATE: P0001
> SELECT assert_true(1 = 2, 'One is not two!');
[USER_RAISED_EXCEPTION] One is not two! SQLSTATE: P0001
> SELECT assert_true(1 = 2);
[USER_RAISED_EXCEPTION] '(1 = 2)' is not true! SQLSTATE: P0001