Zpracování chyb v Azure Databricks
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 některé třídy chyb patří podlašty.
Příklad: TABLE_OR_VIEW_NOT_FOUND a INCOMPLETE_TYPE_DEFINITION. POLE.
Seznam všech tříd chyb naleznete v části Třídy chyb.
-
Pětimístný řetězec, který seskupuje třídy chyb do standardního formátu podporovaného mnoha produkty a rozhraními API.
Příklad:
'42P01'
Úplný seznam všech
SQLSTATE
polož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.
Parametrizovaná zpráva slouží 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
Zcela vykreslená chybová zpráva, včetně třídy chyby a
SQLSTATE
, s parametry vyplněnými. 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
Upozorňující
Message and Parameterized Message are not stable across release.
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 tříduSQLSTATE
chyb a parametry zprávy.
Zpracování chybových podmínek
Platí pro: Databricks SQL 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.
Python
Pro Python použijte pySparkException .
PySparkException.getErrorClass()
: Vrátí třídu chyby výjimky jako řetězec.PySparkException.getMessageParameters()
: Vrátí parametry zprávy výjimky jako slovník.PySparkException.getSqlState()
: VrátíSQLSTATE
výraz jako řetězec.
Scala
Pro Scala použijte SparkThrowable
getErrorClass()
: Vrátí třídu chyby jako řetězec.getMessageParameters()
: Vrátí parametry zprávy jako mapu.getSqlState()
: Vrátí hodnotu SQLSTATE jako řetězec.
Příklady
Zachyťte všechny výjimky a zobrazte třídu chyb, parametry zprávy a
SQLSTATE
. Zobrazí se také výchozí chybová zpráva.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)
Výsledek
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
Zachyťte pouze SQLSTATE
42P01
a zobrazte vlastní zprávu: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
Výsledek
I'm so sorry, but I cannot find: `does_not_exist`
Zachyťte pouze třídu
TABLE_OR_VIEW_NOT_FOUND
chyb a zobrazte vlastní zprávu: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
Vý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í chybovou zprávou.
-
Vyvolá chybu s volitelnou chybovou zprávou, pokud není splněna podmínka.
Obě funkce vrací třídu chyb "USER_RAISED_EXCEPTION" a SQLSTATE
'P0001'
spolu s uživatelem definovanou zprávou.
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