Sdílet prostřednictvím


Zpracování chyb v Azure Databricks

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 a vyšší

Součásti chyb

Když Azure Databricks vyvolá chybu, obsahuje následující komponenty:

  • Error – třída

    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.

  • SQLSTATE

    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 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ů.

    Pří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: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano 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:

  • raise_error

    Vyvolá výjimku s vlastní chybovou zprávou.

  • assert_true

    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