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
Azure Databricks menggunakan beberapa aturan untuk mengatasi konflik di antara jenis data:
- Promosi dengan aman memperluas jenis ke jenis yang lebih luas.
- Downcasting implisit mengurangi tipe. Kebalikan dari promosi.
- Crosscasting implisit mengubah suatu jenis menjadi jenis dari keluarga tipe lain.
Anda juga dapat secara eksplisit mengonversi di antara banyak tipe:
- Fungsi cast mengonversi sebagian besar jenis, dan mengembalikan kesalahan jika tidak dapat.
- fungsi try_cast mirip dengan fungsi cast tetapi mengembalikan NULL saat melewati nilai yang tidak valid.
- Fungsi bawaan lainnya ditransmisikan di antara jenis menggunakan arahan format yang disediakan.
Jenis promosi
Promosi tipe adalah proses konversi tipe ke dalam tipe lain dari keluarga tipe yang sama yang mencakup semua nilai yang mungkin dari tipe asli.
Oleh karena itu, promosi tipe adalah operasi yang aman. Misalnya, TINYINT
memiliki rentang dari -128
ke 127
. Semua kemungkinan nilai dapat dipromosikan dengan aman ke INTEGER
.
Ketik daftar prioritas
Daftar prioritas jenis menentukan apakah nilai jenis data tertentu dapat dipromosikan secara implisit ke jenis data lain.
Jenis Data | Daftar prioritas (dari tersempit ke terluas) |
---|---|
TINYINT | TINYINT -> SMALLINT -> INT -> BIGINT -> DESIMAL -> FLOAT (1) -> DOUBLE |
SMALLINT | SMALLINT -> INT -> BIGINT -> DESIMAL -> FLOAT (1) -> GANDA |
INT | INT -> BIGINT -> DESIMAL -> FLOAT (1) -> DOUBLE |
BIGINT | BIGINT -> DESIMAL -> FLOAT (1) -> DOUBLE |
DESIMAL | DECIMAL (Desimal) -> FLOAT (Bilangan Mengambang) (1) -> DOUBLE (Ganda) |
MENGAPUNG | FLOAT (1) -> GANDA |
DOBEL | dobel |
TANGGAL | TANGGAL -> TANDA WAKTU |
STEMPEL WAKTU | TANDA WAKTU |
ARRAY | ARRAY (2) |
BINER | BINER |
BOOLEAN | Boolean |
INTERVAL | Selang |
PETA | MAP (2) |
string | TALI |
STRUKTUR | STRUKTUR (2) |
VARIAN | VARIAN |
OBJEK | OBJEK (3) |
(1) Untuk menghindari hilangnya presisi, resolusi tipe yang paling tidak umumFLOAT
dilewati.
(2) Untuk jenis yang kompleks, aturan prioritas berlaku secara rekursif pada elemen komponennya.
(3)OBJECT
hanya ada dalam sebuah VARIANT
.
String dan NULL
Aturan khusus berlaku untuk STRING
dan yang tidak bertipe NULL
.
-
NULL
dapat dipromosikan ke jenis lain apa pun. -
STRING
dapat dipromosikan menjadiBIGINT
,BINARY
,BOOLEAN
,DATE
,DOUBLE
,INTERVAL
, danTIMESTAMP
. Jika nilai string aktual tidak dapat diubah ke jenis terkecil umum, Azure Databricks akan menimbulkan kesalahan runtime. Saat mempromosikan keINTERVAL
, nilai string harus sesuai dengan satuan intervalnya.
Grafik prioritas jenis
Ini adalah penggambaran grafis dari hierarki prioritas, menggabungkan daftar prioritas jenis
Resolusi jenis yang paling tidak umum
Jenis paling tidak umum dari sekumpulan jenis adalah jenis tersempit yang dapat dijangkau dari grafik prioritas jenis oleh semua elemen dari kumpulan jenis.
Resolusi jenis yang paling jarang digunakan untuk:
- Menentukan apakah suatu fungsi yang mengharapkan parameter dari suatu jenis dapat dipanggil menggunakan argumen dari jenis yang lebih sempit.
- Dapatkan jenis argumen untuk fungsi yang mengharapkan jenis argumen bersama untuk beberapa parameter, seperti coalesce, dalam, paling kecil, atau paling besar.
- Menentukan jenis operand untuk operator seperti operasi aritmatika atau perbandingan.
- Menentukan jenis hasil untuk ekspresi seperti ekspresi kasus.
- Menurunkan jenis elemen, kunci, atau nilai untuk konstruktor array dan peta.
- Tentukan jenis hasil dari operator himpunan UNION, INTERSECT, atau EXCEPT pada .
Aturan khusus diterapkan jika jenis yang paling tidak umum bernilai FLOAT
. Jika salah satu jenis yang berkontribusi adalah jenis numerik yang tepat (TINYINT
, SMALLINT
, INTEGER
, BIGINT
atau DECIMAL
), jenis yang paling tidak umum didorong ke DOUBLE
untuk menghindari potensi hilangnya digit.
Ketika jenis yang paling tidak umum adalah STRING
kolase dihitung mengikuti aturan prioritas kolase .
Downcasting dan crosscasting implisit
Azure Databricks menggunakan bentuk penerapan implisit ini hanya pada fungsi dan pemanggilan operator, dan hanya di mana niatnya dapat ditentukan secara tidak ambigu.
Downcasting implisit
Downcasting implisit secara otomatis mengonversi tipe yang lebih luas menjadi tipe yang lebih sempit tanpa mengharuskan Anda menentukan konversinya secara eksplisit. Downcasting praktis, tetapi membawa risiko kesalahan saat runtime yang tak terduga jika nilai aktual gagal diwakili dalam tipe yang lebih terbatas.
Downcasting menerapkan daftar prioritas jenis dalam urutan terbalik.
Pengubahan lintas implisit
Crosscasting implisit mentransmisikan nilai dari satu keluarga jenis ke keluarga jenis lainnya tanpa mengharuskan Anda menentukan pemeran secara eksplisit.
Azure Databricks mendukung penyilangan implisit dari:
- Jenis sederhana apa pun, kecuali
BINARY
keSTRING
. - Sebuah
STRING
untuk jenis sederhana apa pun.
- Jenis sederhana apa pun, kecuali
Transmisi pada pemanggilan fungsi
Mengingat fungsi atau operator yang terselesaikan, aturan berikut berlaku, dalam urutan yang tercantum, untuk setiap parameter dan pasangan argumen:
Jika jenis parameter yang didukung adalah bagian dari grafik prioritas jenis argumen, Azure Databricks mempromosikan argumen ke jenis parameter tersebut.
Dalam kebanyakan kasus, deskripsi fungsi secara eksplisit menyatakan jenis atau rantai yang didukung, seperti "jenis numerik apa pun".
Misalnya, sin(expr) beroperasi di
DOUBLE
tetapi akan menerima numerik apa pun.Jika jenis parameter yang diharapkan adalah
STRING
dan argumen adalah tipe data sederhana, Azure Databricks akan mengubah tipe argumen tersebut menjadi jenis parameter string.Misalnya, substr(str, start, len) mengharapkan
str
menjadiSTRING
. Sebagai gantinya, Anda dapat meneruskan jenis numerik atau tanggal dan waktu.Jika jenis argumen adalah
STRING
dan jenis parameter yang diharapkan adalah jenis sederhana, Azure Databricks mengonversi argumen string ke jenis parameter terluas yang didukung.Misalnya, date_add (tanggal, hari) mengharapkan
DATE
danINTEGER
.Jika Anda memanggil
date_add()
dengan duaSTRING
, Azure Databricks mengubah tipe yang pertamaSTRING
keDATE
dan yang keduaSTRING
ke sebuahINTEGER
.Jika fungsi mengharapkan jenis numerik, seperti jenis
INTEGER
atauDATE
, tetapi argumen adalah jenis yang lebih umum, seperti jenisDOUBLE
atauTIMESTAMP
, Azure Databricks secara implisit mengonversi dan menurunkan tipe argumen ke tipe parameter tersebut.Misalnya, date_add (tanggal, hari) mengharapkan
DATE
danINTEGER
.Jika Anda memanggil
date_add()
denganTIMESTAMP
danBIGINT
, Azure Databricks men-downcastTIMESTAMP
keDATE
dengan menghapus komponen waktu danBIGINT
keINTEGER
.Jika tidak, Azure Databricks menimbulkan kesalahan.
Contoh
Fungsicoalesce
menerima sekumpulan jenis argumen selama mereka berbagi jenis yang paling tidak umum.
Jenis hasil adalah jenis yang paling tidak umum dari jenis argumen.
-- The least common type of TINYINT and BIGINT is BIGINT
> SELECT typeof(coalesce(1Y, 1L, NULL));
BIGINT
-- INTEGER and DATE do not share a precedence chain or support crosscasting in either direction.
> SELECT typeof(coalesce(1, DATE'2020-01-01'));
Error: DATATYPE_MISMATCH.DATA_DIFF_TYPES
-- Both are ARRAYs and the elements have a least common type
> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L)))
ARRAY<BIGINT>
-- The least common type of INT and FLOAT is DOUBLE
> SELECT typeof(coalesce(1, 1F))
DOUBLE
> SELECT typeof(coalesce(1L, 1F))
DOUBLE
> SELECT typeof(coalesce(1BD, 1F))
DOUBLE
-- The least common type between an INT and STRING is BIGINT
> SELECT typeof(coalesce(5, '6'));
BIGINT
-- The least common type is a BIGINT, but the value is not BIGINT.
> SELECT coalesce('6.1', 5);
Error: CAST_INVALID_INPUT
-- The least common type between a DECIMAL and a STRING is a DOUBLE
> SELECT typeof(coalesce(1BD, '6'));
DOUBLE
-- Two distinct explicit collations result in an error
> SELECT collation(coalesce('hello' COLLATE UTF8_BINARY,
'world' COLLATE UNICODE));
Error: COLLATION_MISMATCH.EXPLICIT
-- The resulting collation between two distinct implicit collations is indeterminate
> SELECT collation(coalesce(c1, c2))
FROM VALUES('hello' COLLATE UTF8_BINARY,
'world' COLLATE UNICODE) AS T(c1, c2);
NULL
-- The resulting collation between a explicit and an implicit collations is the explicit collation.
> SELECT collation(coalesce(c1 COLLATE UTF8_BINARY, c2))
FROM VALUES('hello',
'world' COLLATE UNICODE) AS T(c1, c2);
UTF8_BINARY
-- The resulting collation between an implicit and the default collation is the implicit collation.
> SELECT collation(coalesce(c1, 'world'))
FROM VALUES('hello' COLLATE UNICODE) AS T(c1, c2);
UNICODE
-- The resulting collation between the default collation and the indeterminate collation is the default collation.
> SELECT collation(coalesce(coalesce('hello' COLLATE UTF8_BINARY, 'world' COLLATE UNICODE), 'world'));
UTF8_BINARY
Fungsi mengharapkan argumen dari jenis substring
untuk string dan untuk parameter awal dan panjang.
-- Promotion of TINYINT to INTEGER
> SELECT substring('hello', 1Y, 2);
he
-- No casting
> SELECT substring('hello', 1, 2);
he
-- Casting of a literal string
> SELECT substring('hello', '1', 2);
he
-- Downcasting of a BIGINT to an INT
> SELECT substring('hello', 1L, 2);
he
-- Crosscasting from STRING to INTEGER
> SELECT substring('hello', str, 2)
FROM VALUES(CAST('1' AS STRING)) AS T(str);
he
-- Crosscasting from INTEGER to STRING
> SELECT substring(12345, 2, 2);
23
|| (CONCAT) memungkinkan crosscasting implisit ke string.
-- A numeric is cast to STRING
> SELECT 'This is a numeric: ' || 5.4E10;
This is a numeric: 5.4E10
-- A date is cast to STRING
> SELECT 'This is a date: ' || DATE'2021-11-30';
This is a date: 2021-11-30
date_add dapat dipanggil dengan TIMESTAMP
atau BIGINT
karena downcasting implisit.
> SELECT date_add(TIMESTAMP'2011-11-30 08:30:00', 5L);
2011-12-05
date_add dapat dipanggil dengan STRING
karena adanya crosscasting implisit.
> SELECT date_add('2011-11-30 08:30:00', '5');
2011-12-05
Terkait
- ANSI_MODE
- transmisikan
- Jenis data
- Fungsi
- try_cast