Azure Databricks'te hata işleme
Şunlar için geçerlidir: Databricks SQL Databricks Runtime 12.2 ve üzeri
Hata bileşenleri
Azure Databricks bir hata yükselttiğinde aşağıdaki bileşenleri içerir:
-
Hata koşuluna özgü açıklayıcı, insan tarafından okunabilir bir dize.
Bazı hata sınıfları alt bileşenler içerir.
Örneğin: 'TABLE_OR_VIEW_NOT_FOUND', ' INCOMPLETE_TYPE_DEFINITION. DIZI'.
Tüm hata sınıflarının listesi için bkz. Hata Sınıfları.
-
Hata sınıflarını birçok ürün ve API tarafından desteklenen standart bir biçimde gruplandıran beş karakterlik uzun dize.
Örneğin:
'42P01'
Azure Databricks tarafından kullanılan tüm
SQLSTATE
özelliklerin tam listesi için bkz . SQLSTATEs. Parametreli İleti
Parametreler için yer tutucuları içeren hata iletisi.
Örneğin: 'TABLE_OR_VIEW_NOT_FOUND' aşağıdaki iletiyi içerir:
The table or view <relationName> cannot be found.
İleti parametre değerlerini parametre etiketleriyle
<parameter>
eşleyerek hata iletisini işlemek için parametreli iletiyi kullanabilirsiniz.İleti Parametreleri
Hata hakkında ek bilgi sağlayan parametrelerin ve değerlerin haritası. Örneğin:
'relationName' -> 'main.default.tab1'
.İleti
Hata sınıfı ve
SQLSTATE
parametreleri doldurulmuş olarak dahil olmak üzere tamamen işlenmiş hata iletisi. Örneğin:[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
Uyarı
İleti ve Parametreli İleti sürümler arasında kararlı değildir.
İleti metni bildirimde bulunmaksızın değiştirilebilir veya yerelleştirilebilir.
Bir hata koşulunu program aracılığıyla işlemek için bunun yerine Hata Sınıfı, SQLSTATE
ve İleti Parametreleri'ni kullanın.
Hata koşullarını işleme
Şunlar için geçerlidir: Databricks SQL Databricks Runtime 14.2 ve üzeri
Önemli
Bu özellik Genel Önizlemededir.
Azure Databricks, hata koşullarını işlemek için dile özgü API'ler sağlar.
Python
Python için pySparkException kullanın
PySparkException.getErrorClass()
: Özel durumun hata sınıfını dize olarak döndürür.PySparkException.getMessageParameters()
: Özel durumun ileti parametrelerini sözlük olarak döndürür.PySparkException.getSqlState()
: İfadenin dize olarak değerini döndürürSQLSTATE
.
Scala
Scala için SparkThrowable kullanın
getErrorClass()
: Dize olarak bir hata sınıfı döndürür.getMessageParameters()
: Bir ileti parametresini harita olarak döndürür.getSqlState()
: SQLSTATE'i dize olarak döndürür.
Örnekler
Herhangi bir özel durumu yakalayın ve hata sınıfını, ileti parametrelerini ve
SQLSTATE
görüntüleyin. Varsayılan hata iletisini de görüntülemeScala
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)
Sonuç
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
Yalnızca SQLSTATE'i
42P01
yakalayın ve özel bir ileti görüntüleyin: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
Sonuç
I'm so sorry, but I cannot find: `does_not_exist`
Yalnızca hata sınıfını
TABLE_OR_VIEW_NOT_FOUND
yakalayın ve özel bir ileti görüntüleyin: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
Sonuç
I'm so sorry, but I cannot find: `does_not_exist`
Kullanıcı tarafından tetiklenen özel durumlar
Azure Databricks, kullanıcı tanımlı hataları tetikleyen aşağıdaki işlevleri sağlar:
-
Özel hata iletisiyle bir özel durum oluşturur.
-
Bir koşul karşılanmazsa isteğe bağlı bir hata iletisiyle hata oluşturur.
Her iki işlev de 'USER_RAISED_EXCEPTION' hata sınıfını'P0001'
SQLSTATE
ve kullanıcı tanımlı bir iletiyi döndürür.
Örnekler
> 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