Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks SQL
Databricks Runtime 12.2 i nowsze
Składniki błędu
Gdy usługa Azure Databricks zgłasza błąd, zawiera następujące składniki:
-
Opisowy, czytelny dla człowieka ciąg znaków, który jest unikatowy dla każdego warunku błędu.
Niektóre warunki błędu obejmują podkondycje.
Na przykład: TABLE_OR_VIEW_NOT_FOUND i INCOMPLETE_TYPE_DEFINITION.ARRAY.
Aby uzyskać listę wszystkich warunków błędów, zobacz Warunki błędu.
-
Ciąg o długości pięciu znaków, grupowanie warunków błędowych w standardowym formacie obsługiwanym przez wiele produktów i interfejsów API.
Na przykład:
'42P01'.Aby uzyskać pełną listę wszystkich
SQLSTATEelementów używanych przez usługę Azure Databricks, zobacz SQLSTATEs. Komunikat sparametryzowany
Wiadomość o błędzie zawierająca symbole zastępcze dla parametrów.
Na przykład: TABLE_OR_VIEW_NOT_FOUND zawiera następujący komunikat:
The table or view <relationName> cannot be found.Możesz użyć sparametryzowanego komunikatu, aby renderować komunikat o błędzie, mapując wartości parametrów komunikatu na tagi parametrów
<parameter>.Parametry komunikatu
Mapa parametrów i wartości, które zawierają dodatkowe informacje o błędzie. Na przykład:
'relationName' -> 'main.default.tab1'.Wiadomość
Całkowicie renderowany komunikat o błędzie, zawierający warunek błędu i
SQLSTATE, z wypełnionymi parametrami. Na przykład:[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
Ostrzeżenie
Komunikat i komunikat sparametryzowany nie są stabilne w wersjach.
Tekst wiadomości może zostać zmieniony lub zlokalizowany bez powiadomienia.
Aby programowo obsłużyć warunek błędu, zamiast tego użyj warunku błędu , SQLSTATEi parametrów komunikatu .
Obsługa warunków błędów
Dotyczy:
Databricks SQL
Databricks Runtime 14.2 i nowsze
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
Usługa Azure Databricks udostępnia interfejsy API specyficzne dla języka do obsługi warunków błędów.
SQL
Dotyczy:
Databricks SQL
Databricks Runtime 16.3 lub nowszy
W przypadku języka SQL użyj składni instrukcji złożonej do zdefiniowania procedur obsługi warunków.
-
DEKLARUJ OBSŁUGĘ ZAKOŃCZENIA: definiuje obsługę dla zestawu określonych warunków błędu,
SQLSTATElub dowolnychSQLEXCEPTION. -
GET DIAGNOSTYKA: pobiera warunek błędu,
SQLSTATEoraz jego parametry komunikatu przechwycone przez obsługę.
Python
W przypadku języka Python użyj elementu pySparkException
-
PySparkException.getErrorClass(): zwraca warunek błędu wyjątku jako ciąg. -
PySparkException.getMessageParameters(): zwraca parametry komunikatu wyjątku jako słownik. -
PySparkException.getSqlState(): zwracaSQLSTATEwyrażenie jako ciąg.
Skala
W przypadku języka Scala użyj elementu SparkThrowable
-
getErrorClass(): zwraca warunek błędu jako ciąg. -
getMessageParameters(): zwraca parametry komunikatu jako mapę. -
getSqlState(): zwraca elementSQLSTATEjako ciąg.
Przykłady
Przechwyć wszelkie wyjątki i wyświetl warunek błędu, parametry komunikatu oraz
SQLSTATE. Wyświetl również domyślny komunikat o błędzieSQL
BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN DECLARE error_condition STRING; DECLARE sqlstate STRING; DECLARE msg_args MAP<STRING, STRING>; DECLARE msg STRING; GET DIAGNOSTICS CONDITION 1 error_condition = CONDITION_IDENTIFIER, sqlstate = RETURNED_SQLSTATE, msg_args = MESSAGE_ARGUMENTS, msg = MESSAGE_TEXT; VALUES('Error Condition : ' || error_condition ), ('Message arguments : ' || cast(msg_args AS STRING)), ('SQLSTATE : ' || sqlstate ), (msg ); END; SELECT * FROM does_not_exist; END;Skala
import org.apache.spark.SparkThrowable try { spark.sql("SELECT * FROM does_not_exist").show() } catch { case ex: SparkThrowable => println("Error Condition : " + ex.getErrorClass) println("Message arguments : " + 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 Condition : " + ex.getErrorClass()) print("Message arguments : " + str(ex.getMessageParameters())) print("SQLSTATE : " + ex.getSqlState()) print(ex)Wynik
Error Condition : TABLE_OR_VIEW_NOT_FOUND Message arguments : {'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], [], falsePrzechwyć tylko SQLSTATE
42P01i wyświetl niestandardowy komunikat.SQL
BEGIN DECLARE EXIT HANDLER FOR SQLSTATE '42P01' BEGIN DECLARE msg_args MAP<STRING, STRING>; GET DIAGNOSTICS CONDITION 1 msg_args = MESSAGE_ARGUMENTS; VALUES('I\'m so sorry, but I cannot find: ' || msg_args['relationName']); END; SELECT * FROM does_not_exist; END;Skala
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: raiseWynik
I'm so sorry, but I cannot find: `does_not_exist`Przechwyć tylko błąd warunku
TABLE_OR_VIEW_NOT_FOUNDi wyświetl niestandardowy komunikat.SQL
BEGIN DECLARE EXIT HANDLER FOR TABLE_OR_VIEW_NOT_FOUND BEGIN DECLARE msg_args MAP<STRING, STRING>; GET DIAGNOSTICS CONDITION 1 msg_args = MESSAGE_ARGUMENTS; VALUES('I\'m so sorry, but I cannot find: ' || msg_args['relationName']); END; SELECT * FROM does_not_exist; END;Skala
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: raiseWynik
I'm so sorry, but I cannot find: `does_not_exist`
Użytkownik zgłosił wyjątki
Usługa Azure Databricks udostępnia następujące funkcje umożliwiające zgłaszanie błędów zdefiniowanych przez użytkownika:
-
Zgłasza wyjątek z własnym komunikatem o błędzie.
-
Zgłasza błąd z opcjonalnym komunikatem o błędzie, jeśli warunek nie jest spełniony.
Obie funkcje zwracają stan błędu "USER_RAISED_EXCEPTION" oraz SQLSTATE'P0001' razem z komunikatem zdefiniowanym przez użytkownika.
Przykłady
> 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