Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Gilt für:
Databricks SQL
Databricks Runtime 12.2 und höher
Fehlerkomponenten
Wenn Azure Databricks einen Fehler auslöst, enthält er die folgenden Komponenten:
-
Eine beschreibende, lesbare Zeichenfolge, die für die Fehlerbedingung eindeutig ist
Einige Fehlerbedingungen umfassen Unterbedingungen.
Beispiel: TABLE_OR_VIEW_NOT_FOUND und INCOMPLETE_TYPE_DEFINITION. ARRAY.
Eine Liste aller Fehlerbedingungen finden Sie unter "Fehlerbedingungen".
-
Eine fünf Zeichen lange Zeichenfolge, die Fehlerbedingungen in einem Standardformat gruppiert, das von vielen Produkten und APIs unterstützt wird.
Beispiel:
'42P01'Eine vollständige Liste aller von Azure Databricks verwendeten
SQLSTATE-Werte finden Sie unter SQLSTATE-Codes. Parametrisierte Meldung
Die Fehlermeldung mit Platzhaltern für die Parameter
Beispiel: TABLE_OR_VIEW_NOT_FOUND enthält die folgende Meldung:
The table or view <relationName> cannot be found.Sie können die parametrisierte Nachricht verwenden, um eine Fehlermeldung zu rendern, indem Sie Meldungsparameter den Parametertags
<parameter>zuordnen.Meldungsparameter
Eine Zuordnung von Parametern und Werten, die zusätzliche Informationen zum Fehler bereitstellen. Beispiel:
'relationName' -> 'main.default.tab1'Meldung
Die vollständig gerenderte Fehlermeldung, einschließlich der Fehlerbedingung und der
SQLSTATE, mit den ausgefüllten Parametern. Beispiel:[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
Warnung
Meldung und Parametrisierte Meldung sind nicht über Versionen hinweg stabil.
Der Meldungstext kann ohne Ankündigung geändert oder lokalisiert werden.
Um eine Fehlerbedingung programmgesteuert zu behandeln, verwenden Sie stattdessen die Fehlerbedingung, SQLSTATEund die Meldungsparameter .
Behandeln von Fehlerbedingungen
Gilt für:
Databricks SQL
Databricks Runtime 14.2 und höher
Wichtig
Dieses Feature befindet sich in der Public Preview.
Azure Databricks stellt sprachspezifische APIs zur Behandlung von Fehlerbedingungen bereit.
SQL
Gilt für:
Databricks SQL
Databricks Runtime 16.3 und höher
Verwenden Sie für SQL die Syntax der zusammengesetzten Anweisung zum Definieren von Bedingungshandlern.
-
DECLARE EXIT HANDLER: Definiert einen Handler für eine Reihe angegebener Fehlerbedingungen,
SQLSTATE-Zustände oder eine beliebigeSQLEXCEPTION-Ausnahme. -
GET DIAGNOSE: Ruft die Fehlerbedingung,
SQLSTATEund die Meldungsparameter der vom Handler abgefangenen Fehlerbedingung ab.
Python
Verwenden Sie für Python pySparkException.
-
PySparkException.getErrorClass(): Gibt die Fehlerbedingung der Ausnahme als Zeichenfolge zurück. -
PySparkException.getMessageParameters(): Gibt die Meldungsparameter der Ausnahme als Wörterbuch zurück. -
PySparkException.getSqlState(): Gibt denSQLSTATE-Wert der Ausnahme als Zeichenfolge zurück.
Scala
Verwenden Sie für Scala SparkThrowable.
-
getErrorClass(): Gibt eine Fehlerbedingung als Zeichenfolge zurück. -
getMessageParameters(): Gibt einen Meldungsparameter als Zuordnung zurück. -
getSqlState(): Gibt einSQLSTATEals Zeichenfolge zurück.
Beispiele
Erfassen Sie alle Ausnahmen und Anzeigefehlerbedingungen, Meldungsparameter und
SQLSTATE-Werte. Zeigen Sie außerdem die Standardfehlermeldung an.SQL
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;Scala
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)Ergebnis
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], [], falseErfassen Sie nur den SQLSTATE-Wert
42P01, und zeigen Sie eine benutzerdefinierte Meldung an: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;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: raiseErgebnis
I'm so sorry, but I cannot find: `does_not_exist`Erfassen Sie die Fehlerbedingung
TABLE_OR_VIEW_NOT_FOUNDnur, und zeigen Sie eine benutzerdefinierte Meldung an: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;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: raiseErgebnis
I'm so sorry, but I cannot find: `does_not_exist`
Von Benutzer*innen ausgelöste Ausnahmen
Azure Databricks bietet die folgenden Funktionen zum Auslösen von benutzerdefinierten Fehlern:
-
Löst eine Ausnahme mit einer benutzerdefinierten Fehlermeldung aus.
-
Löst einen Fehler mit einer optionalen Fehlermeldung aus, wenn eine Bedingung nicht erfüllt wird.
Beide Funktionen geben die Fehlerbedingung "USER_RAISED_EXCEPTION" und die SQLSTATE'P0001' zusammen mit einer benutzerdefinierten Nachricht zurück.
Beispiele
> 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