Megosztás a következőn keresztül:


Hibakezelés az Azure Databricksben

A következőkre vonatkozik: jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime 12.2 vagy újabb

Hibaösszetevők

Amikor az Azure Databricks hibát jelez, az a következő összetevőket tartalmazza:

  • Hibaosztály

    A hibaállapotra jellemző, leíró, ember által olvasható sztring.

    Egyes hibaosztályok alosztályokat tartalmaznak.

    Például: "TABLE_OR_VIEW_NOT_FOUND" és "INCOMPLETE_TYPE_DEFINITION. TÖMB".

    Az összes hibaosztály listáját a Hibaosztályok című témakörben találja.

  • SQLSTATE

    Öt karakter hosszú sztring, amely a hibaosztályokat 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: a "TABLE_OR_VIEW_NOT_FOUND" a következő üzenetet tartalmazza:

    The table or view <relationName> cannot be found.
    

    A paraméteres üzenet használatával megjelenítheti a hibaüzenetet az üzenet paraméterértékeinek a paramétercímkékhez <parameter>való leképezésével.

  • Ü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 hibaosztályt é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 inkább a HibaosztálytSQLSTATE és az Üzenetparamétereket.

Hibafeltételek kezelése

A következőkre vonatkozik: jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet 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.

Python

Python esetén a pySparkException használata

  • PySparkException.getErrorClass(): A kivétel hibaosztályá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ása SQLSTATE .

Scala

Scala esetén a SparkThrowable használata

  • getErrorClass(): Egy hibaosztályt ad vissza sztringként.
  • getMessageParameters(): Egy üzenetparamétert ad vissza térképként.
  • getSqlState(): Egy SQLSTATE-t ad vissza sztringként.

Példák

  • Kivételeket észlelhet, és megjelenítheti a hibaosztályt, az üzenetparamétereket és SQLSTATEa . Az alapértelmezett hibaüzenet megjelenítése

    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)
    

    Eredmény

      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
    
  • Csak az SQLSTATE 42P01 elfogása és egy egyéni üzenet megjelenítése:

    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
    

    Eredmény

    I'm so sorry, but I cannot find: `does_not_exist`
    
  • Csak a hibaosztály TABLE_OR_VIEW_NOT_FOUND elfogása és egyéni üzenet megjelenítése:

    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
    

    Eredmé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:

  • raise_error

    Kivételt jelez egy egyéni hibaüzenettel.

  • assert_true

    Ha egy feltétel nem teljesül, hibaüzenet jelenik meg.

Mindkét függvény a "USER_RAISED_EXCEPTION" hibaosztályt é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