Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL
Databricks Runtime 12.2 ke atas
Komponen kesalahan
Saat Azure Databricks menimbulkan kesalahan, azure Databricks menyertakan komponen berikut:
-
String deskriptif yang dapat dibaca manusia dan unik untuk kondisi kesalahan.
Beberapa kondisi kesalahan mengandung subkondisi.
Misalnya: TABLE_OR_VIEW_NOT_FOUND, dan INCOMPLETE_TYPE_DEFINITION.ARRAY.
Untuk daftar semua kondisi kesalahan, lihat Kondisi Kesalahan.
-
String panjang lima karakter, mengelompokkan kondisi kesalahan ke dalam format standar yang didukung oleh banyak produk dan API.
Misalnya:
'42P01'Untuk daftar lengkap semua
SQLSTATEs yang digunakan oleh Azure Databricks lihat SQLSTATEs. Pesan Berparameter
Pesan galat dengan placeholder untuk parameter.
Misalnya : TABLE_OR_VIEW_NOT_FOUND menyertakan pesan berikut:
The table or view <relationName> cannot be found.Anda dapat menggunakan pesan yang memiliki parameter untuk menampilkan pesan kesalahan dengan memetakan nilai parameter pesan ke tag parameter
<parameter>.Parameter Pesan
Peta parameter dan nilai yang memberikan informasi tambahan tentang kesalahan. Misalnya:
'relationName' -> 'main.default.tab1'.Pesan
Pesan kesalahan yang dirender sepenuhnya, termasuk kondisi kesalahan dan
SQLSTATE, dengan parameter yang diisi. Contohnya:[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
Peringatan
Pesan dan Pesan Berparameter tidak stabil di seluruh rilis.
Teks pesan dapat diubah atau dilokalkan tanpa pemberitahuan.
Untuk menangani kondisi kesalahan secara terprogram, gunakan Parameter Kondisi Kesalahan, SQLSTATE, dan Pesan sebagai gantinya.
Menangani kondisi kesalahan
Berlaku untuk:
Databricks SQL
Databricks Runtime 14.2 ke atas
Penting
Fitur ini ada di Pratinjau Publik.
Azure Databricks menyediakan API khusus bahasa untuk menangani kondisi kesalahan.
SQL
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 atau lebih
Untuk SQL, gunakan sintaks pernyataan majemuk untuk menentukan penangan kondisi.
-
DECLARE EXIT HANDLER: Mendefinisikan handler untuk serangkaian kondisi kesalahan tertentu,
SQLSTATEs, atau apa punSQLEXCEPTION. -
GET DIAGNOSTIK: Mengambil kondisi kesalahan,
SQLSTATE, dan parameter pesan dari kondisi kesalahan yang disadap oleh handler.
Phyton
Untuk Python gunakan pySparkException
-
PySparkException.getErrorClass(): Mengembalikan kondisi kesalahan pengecualian sebagai string. -
PySparkException.getMessageParameters(): Mengembalikan parameter pesan pengecualian sebagai kamus. -
PySparkException.getSqlState(): MengembalikanSQLSTATEekspresi sebagai string.
Scala
Untuk Scala, gunakan SparkThrowable
-
getErrorClass(): Mengembalikan kondisi kesalahan sebagai string. -
getMessageParameters(): Mengembalikan parameter pesan sebagai peta. -
getSqlState(): MengembalikanSQLSTATEsebagai string.
Contoh
Tangkap pengecualian dan tampilkan kondisi kesalahan, parameter pesan, dan
SQLSTATE. Tampilkan juga pesan kesalahan defaultSQL
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) }Phyton
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)Hasil
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], [], falseTangkap SQLSTATE
42P01saja dan tampilkan pesan kustom: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")) }Phyton
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: raiseHasil
I'm so sorry, but I cannot find: `does_not_exist`Tangkap kondisi error
TABLE_OR_VIEW_NOT_FOUNDsaja dan tampilkan pesan khusus.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")) }Phyton
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: raiseHasil
I'm so sorry, but I cannot find: `does_not_exist`
Pengecualian yang dilaporkan pengguna
Azure Databricks menyediakan fungsi berikut untuk meningkatkan kesalahan yang ditentukan pengguna:
-
Memunculkan pengecualian dengan pesan kesalahan kustom.
-
Menimbulkan kesalahan dengan pesan kesalahan opsional, jika kondisi tidak terpenuhi.
Kedua fungsi mengembalikan kondisi kesalahan 'USER_RAISED_EXCEPTION' dan SQLSTATE'P0001' bersama dengan pesan yang ditentukan pengguna.
Contoh
> 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