Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks SQL
Databricks Runtime 12.2 a vyšší
Součásti chyb
Když Azure Databricks vyvolá chybu, obsahuje následující komponenty:
-
Popisný, čitelný řetězec, který je jedinečný pro chybový stav.
Mezi chybové podmínky patří podmíněné situace.
Příklad: TABLE_OR_VIEW_NOT_FOUND a INCOMPLETE_TYPE_DEFINITION.ARRAY.
Seznam všech chybových podmínek naleznete v části Chybové podmínky.
-
Pětimístný řetězec, seskupování chybových podmínek do standardního formátu podporovaného mnoha produkty a rozhraními API.
Příklad:
'42P01'Úplný seznam všech
SQLSTATEpoložek používaných službou Azure Databricks najdete v tématu SQLSTATEs. Parametrizovaná zpráva
Chybová zpráva se zástupnými symboly parametrů.
Například: TABLE_OR_VIEW_NOT_FOUND obsahuje následující zprávu:
The table or view <relationName> cannot be found.Parametrizovanou zprávu můžete použít k vykreslení chybové zprávy mapováním hodnot parametrů zprávy na značky
<parameter>parametrů.Parametry zprávy
Mapa parametrů a hodnot, které poskytují další informace o chybě. Například:
'relationName' -> 'main.default.tab1'.Zpráva
Kompletně vykreslená chybová zpráva, včetně chybového stavu a parametru
SQLSTATE, s vyplněnými parametry. Příklad:[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
Varování
Message a Parameterized Message nejsou stabilní mezi jednotlivými verzemi.
Text zprávy se může změnit nebo lokalizovat bez předchozího upozornění.
Pokud chcete programově zpracovat chybový stav, použijte místo toho chybovou podmínkuSQLSTATE a parametry zprávy.
Zpracování chybových podmínek
Platí pro:
Kontrola SQL Databricks
Databricks Runtime 14.2 a vyšší
Důležité
Tato funkce je ve verzi Public Preview.
Azure Databricks poskytuje rozhraní API specifická pro jazyk pro zpracování chybových podmínek.
SQL
Platí pro:
Databricks SQL
Databricks Runtime 16.3 a vyšší
Pro SQL použijte syntaxi složeného příkazu k definování obslužných rutin podmínek.
-
DEKLARUJTE OBSLUŽNOU RUTINu EXIT: Definuje obslužnou rutinu pro sadu zadaných chybových podmínek,
SQLSTATEs nebo jakékoliSQLEXCEPTION. -
GET DIAGNOSTIKA: Načte chybovou podmínku
SQLSTATEa parametry zprávy chybové podmínky zachycené obslužnou rutinou.
Python
Pro Python použijte pySparkException.
-
PySparkException.getErrorClass(): Vrátí chybovou podmínku výjimky jako řetězec. -
PySparkException.getMessageParameters(): Vrátí parametry zprávy výjimky ve formě slovníku. -
PySparkException.getSqlState(): Vrátí výrazSQLSTATEjako řetězec.
Scala
Pro Scala použijte SparkThrowable
-
getErrorClass(): Vrátí chybovou podmínku jako řetězec. -
getMessageParameters(): Vrátí parametry zprávy jako mapu. -
getSqlState(): VrátíSQLSTATEjako řetězec.
Příklady
Zachyťte všechny výjimky a zobrazte chybovou podmínku, parametry zprávy a
SQLSTATE. Zobrazí se také výchozí chybová zpráva.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)Výsledek
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], [], falseZachyťte pouze SQLSTATE
42P01a zobrazte vlastní zprávu: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: raiseVýsledek
I'm so sorry, but I cannot find: `does_not_exist`Zachyťte pouze chybový stav
TABLE_OR_VIEW_NOT_FOUNDa zobrazte vlastní zprávu: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: raiseVýsledek
I'm so sorry, but I cannot find: `does_not_exist`
Výjimky vyvolané uživatelem
Azure Databricks poskytuje následující funkce pro vyvolání chyb definovaných uživatelem:
-
Vyvolá výjimku s vlastní, přizpůsobenou chybovou zprávou.
-
Vyvolá chybu s volitelnou chybovou zprávou, pokud není splněna podmínka.
Obě funkce vrací chybovou podmínku "USER_RAISED_EXCEPTION" a SQLSTATE'P0001' společně se zprávou definovanou uživatelem.
Příklady
> 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