Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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 koşulları alt koşulları içerir.
Örneğin: TABLE_OR_VIEW_NOT_FOUND ve INCOMPLETE_TYPE_DEFINITION. DIZI.
Tüm hata koşullarının listesi için bkz. Hata Koşulları.
-
Hata koşulları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
Tamamen işlenmiş hata iletisi, hata koşulunu ve
SQLSTATE'yu içerecek şekilde, parametreleri doldurulmuş olarak. Ö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 Koşulu, SQLSTATEve İ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.
SQL
Uygulandığı yer:
Databricks SQL
Databricks Runtime 16.3 ve üzeri
SQL için, koşul işleyicilerini tanımlamak için bileşik deyim söz dizimini kullanın.
-
DECLARE EXIT HANDLER: Belirtilen hata koşulları,
SQLSTATEs veya herhangiSQLEXCEPTIONbir kümesi için bir işleyici tanımlar. -
GET TANıLAMA: İşleyici tarafından kesilen hata koşulunun hata koşulunu,
SQLSTATEve ileti parametrelerini alır.
Piton
Python için pySparkException kullanın
-
PySparkException.getErrorClass(): Özel durumun hata koşulunu 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 programlama dili
Scala için SparkThrowable kullanın
-
getErrorClass(): Dize olarak bir hata koşulu döndürür. -
getMessageParameters(): Bir ileti parametresini harita olarak döndürür. -
getSqlState():SQLSTATEöğesini dize olarak döndürür.
Örnekler
Herhangi bir özel durumu yakalayın ve hata koşulunu, ileti parametrelerini ve
SQLSTATEgörüntüleyin. Varsayılan hata iletisini de görüntülemeSQL
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 programlama dili
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) }Piton
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)Sonuç
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], [], falseYalnızca SQLSTATE'i
42P01yakalayın ve özel bir ileti görüntüleyin: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 programlama dili
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")) }Piton
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: raiseSonuç
I'm so sorry, but I cannot find: `does_not_exist`Yalnızca hata koşulunu
TABLE_OR_VIEW_NOT_FOUNDyakalayın ve özel bir ileti görüntüleyin: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 programlama dili
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")) }Piton
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: raiseSonuç
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 koşulunu SQLSTATE'P0001' 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