Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:
Databricks SQL
Databricks Runtime 12.2 vagy újabb
Hibaösszetevők
Amikor az Azure Databricks hibát jelez, az a következő összetevőket tartalmazza:
-
A hibaállapotra jellemző, leíró, ember által olvasható sztring.
Egyes hibafeltételek közé tartoznak az alkondíciók.
Például: TABLE_OR_VIEW_NOT_FOUND és INCOMPLETE_TYPE_DEFINITION.ARRAY.
Az összes hibafeltétel listáját a Hibafeltételek című témakörben találja.
-
Öt karakter hosszú sztring, amely a hibafeltételeket a számos termék és API által támogatott szabványos formátumba csoportosítja.
Például:
'42P01'Az Azure Databricks által használt összes
SQLSTATEadat teljes listáját az SQLSTATEs tartalmazza. Paraméteres üzenet
A paraméterek helyőrzőit tartalmazó hibaüzenet.
Például: TABLE_OR_VIEW_NOT_FOUND a következő üzenetet tartalmazza:
The table or view <relationName> cannot be found.A paraméterezett üzenet használatával megjeleníthet egy hibaüzenetet, ha az üzenet paraméterértékeit a
<parameter>paramétercímkékre leképezi.Üzenetparaméterek
A paraméterek és értékek térképe, amely további információt nyújt a hibáról. Például:
'relationName' -> 'main.default.tab1'Üzenet
A teljesen renderelt hibaüzenet, beleértve a hibafeltételt és a
SQLSTATE, a paraméterek kitöltésével. Példa:[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
Figyelmeztetés
Az üzenet és a paraméteres üzenet nem stabil a kiadások között.
Az üzenet szövege értesítés nélkül módosítható vagy honosítható.
Ha programozott módon szeretne kezelni egy hibafeltételt, használja helyette a Hiba feltételtSQLSTATE és az Üzenetparamétereket.
Hibafeltételek kezelése
A következőkre vonatkozik:
Databricks SQL
Databricks Runtime 14.2 vagy újabb
Fontos
Ez a funkció a nyilvános előzetes verzióban érhető el.
Az Azure Databricks nyelvspecifikus API-kat biztosít a hibafeltételek kezeléséhez.
SQL
A következőkre vonatkozik:
Databricks SQL
Databricks Runtime 16.3 és újabb verziói
Sql esetén a feltételkezelők definiálásához használja az összetett utasítás szintaxisát.
-
EXIT HANDLER deklarálása: Egy kezelőt határoz meg a megadott hibafeltételekhez,
SQLSTATE-hoz, vagy bármelySQLEXCEPTION-hoz. -
GET DIAGNOSZTIKA: Lekéri a hibafeltételt és
SQLSTATEa kezelő által észlelt hibafeltétel üzenetparamétereit.
Python
Python esetén a pySparkException használata
-
PySparkException.getErrorClass(): A kivétel hibafeltételét adja vissza sztringként. -
PySparkException.getMessageParameters(): A kivétel üzenetparamétereit adja vissza szótárként. -
PySparkException.getSqlState(): A kifejezés karakterláncként való visszaadásaSQLSTATE.
Scala
Scala esetén a SparkThrowable használata
-
getErrorClass(): Egy hibafeltételt ad vissza sztringként. -
getMessageParameters(): Egy üzenetparamétert ad vissza térképként. -
getSqlState(): SztringkéntSQLSTATEad vissza.
Példák
Kapjon el bármilyen kivételt, és jelenítse meg a hiba feltételét, az üzenet paramétereit és az
SQLSTATE. Az alapértelmezett hibaüzenet megjelenítéseSQL
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)Eredmény
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], [], falseCsak az SQLSTATE
42P01elfogása és egy egyéni üzenet megjelenítése: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: raiseEredmény
I'm so sorry, but I cannot find: `does_not_exist`Csak a hibafeltételt
TABLE_OR_VIEW_NOT_FOUNDészleli, és megjelenít egy egyéni üzenetet: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: raiseEredmény
I'm so sorry, but I cannot find: `does_not_exist`
Felhasználó által kiváltott kivételek
Az Azure Databricks a következő függvényeket biztosítja a felhasználó által definiált hibák felmerüléséhez:
-
Kivételt jelez egy egyéni hibaüzenettel.
-
Ha egy feltétel nem teljesül, hibát vált ki egy opcionális hibaüzenettel.
Mindkét függvény a "USER_RAISED_EXCEPTION" hibafeltételt és a SQLSTATE'P0001' felhasználó által megadott üzenetet adja vissza.
Példák
> 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