Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
Databricks SQL
Databricks Runtime 12.2 och senare
Felkomponenter
När Azure Databricks genererar ett fel innehåller det följande komponenter:
-
En beskrivande, läsbar sträng som är unik för felvillkoret.
Vissa felvillkor omfattar delvillkor.
Till exempel: TABLE_OR_VIEW_NOT_FOUND och INCOMPLETE_TYPE_DEFINITION.MATRIS.
En lista över alla felvillkor finns i Felvillkor.
-
En sträng med fem tecken, som grupperar felvillkor i ett standardformat som stöds av många produkter och API:er.
Till exempel:
'42P01'En fullständig lista över alla
SQLSTATEsom används av Azure Databricks finns i SQLSTATEs. Parameteriserat meddelande
Felmeddelandet som innehåller platshållare för parametrarna.
Exempel: TABLE_OR_VIEW_NOT_FOUND innehåller följande meddelande:
The table or view <relationName> cannot be found.Du kan använda det parametriserade meddelandet för att återge ett felmeddelande genom att mappa parametervärden för meddelanden till parametertaggar
<parameter>.Meddelandeparametrar
En karta över parametrar och värden som ger ytterligare information om felet. Exempel:
'relationName' -> 'main.default.tab1'.Meddelande
Det fullständigt renderade felmeddelandet, inklusive felvillkoret
SQLSTATEoch , med parametrarna ifyllda. Till exempel:[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
Varning
Meddelandet och det parametriserade meddelandet är inte stabila i olika versioner.
Meddelandetexten kan ändras eller lokaliseras utan föregående meddelande.
Om du vill hantera ett feltillstånd programmatiskt använder du felvillkoret , SQLSTATEoch meddelandeparametrar i stället.
Hantering av felvillkor
Gäller för:
Databricks SQL
Databricks Runtime 14.2 och senare
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Azure Databricks tillhandahåller språkspecifika API:er för att hantera feltillstånd.
SQL
Gäller för:
Databricks SQL
Databricks Runtime 16.3 och senare
För SQL använder du syntaxen för sammansatta uttryck för att definiera villkorshanterare.
-
DEKLARERA EXIT HANDLER: Definierar en hanterare för en uppsättning angivna felvillkor,
SQLSTATEs eller någonSQLEXCEPTION. -
GET DIAGNOSTIK: Hämtar felvillkoret,
SQLSTATEoch meddelandeparametrarna för felvillkoret som fångas upp av hanteraren.
python
För Python använder du pySparkException
-
PySparkException.getErrorClass(): Returnerar felvillkoret för undantaget som en sträng. -
PySparkException.getMessageParameters(): Returnerar meddelandeparametrarna för undantaget som en ordlista. -
PySparkException.getSqlState(): ReturnerarSQLSTATEuttrycket som en sträng.
Scala
För Scala du använder SparkThrowable
-
getErrorClass(): Returnerar ett felvillkor som en sträng. -
getMessageParameters(): Returnerar en meddelandeparametrar som en karta. -
getSqlState(): Returnerar enSQLSTATEsom en sträng.
Exempel
Fånga eventuella undantag och visa felvillkor, meddelandeparametrar och
SQLSTATE. Visa även standardfelmeddelandetSQL
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)Resultat
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], [], falseFånga endast SQLSTATE
42P01och visa ett anpassat meddelande: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: raiseResultat
I'm so sorry, but I cannot find: `does_not_exist`Fånga endast felvillkoret
TABLE_OR_VIEW_NOT_FOUNDoch visa ett anpassat meddelande: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: raiseResultat
I'm so sorry, but I cannot find: `does_not_exist`
Användarutlösta undantag
Azure Databricks tillhandahåller följande funktioner för att skapa användardefinierade fel:
-
Genererar ett undantag med ett anpassat felmeddelande.
-
Genererar ett fel med ett valfritt felmeddelande om ett villkor inte uppfylls.
Båda funktionerna returnerar felvillkoret "USER_RAISED_EXCEPTION" och SQLSTATE'P0001' tillsammans med ett användardefinierat meddelande.
Exempel
> 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