cast
fungsi
Berlaku untuk: Databricks SQL Databricks Runtime
Transmisikan nilai expr
ke jenis data target type
. Operator ini adalah sinonim untuk operator :: (tanda titik dua)
Sintaks
cast(sourceExpr AS targetType)
Argumen
sourceExpr
: Ekspresi apa pun yang dapat ditransmisikan.targetType
: Jenis data hasil.
Mengembalikan
Hasilnya adalah jenis targetType
.
Kombinasi transmisi jenis data berikut valid:
Sumber (baris) Target (kolom) | VOID | numerik | STRING | TANGGAL | STEMPEL WAKTU | TIMESTAMP_NTZ | interval bulan tahunan | interval waktu sehari | BOOLEAN | BINER | ARRAY | PETA | STRUKTUR |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VOID | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
numerik | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N |
STRING | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N |
TANGGAL | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N |
STEMPEL WAKTU | N | Y | Y | Y | Y | Y | N | N | N | N | N | N | N |
TIMESTAMP_NTZ | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N |
interval bulan tahunan | N | Y | Y | N | N | N | Y | N | N | N | N | N | N |
interval waktu sehari | N | Y | Y | N | N | N | N | Y | N | N | N | N | N |
BOOLEAN | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N |
BINER | N | Y | Y | N | N | N | N | N | N | Y | N | N | N |
ARRAY | N | N | Y | N | N | N | N | N | N | N | Y | N | N |
PETA | N | N | Y | N | N | N | N | N | N | N | N | Y | N |
STRUKTUR | N | N | Y | N | N | N | N | N | N | N | N | N | Y |
Aturan dan batasan berdasarkan jenis target
Peringatan
Dalam Databricks Runtime, jika spark.sql.ansi.enabled adalah false
, luapan tidak akan menyebabkan kesalahan tetapi sebaliknya akan "membungkus" hasilnya.
Nilai sourceExpr
dengan format yang tidak valid atau karakter yang tidak valid untuk targetType
akan menghasilkan NULL
.
numeric
Jika targetType
adalah numerik dan sourceExpr
berjenis:
-
Hasilnya adalah NULL dari jenis numerik yang ditentukan.
-
Jika
targetType
merupakan angka integral, hasilnyasourceExpr
dipotong menjadi bilangan bulat.Jika tidak, hasilnya
sourceExpr
dibulatkan agar sesuai dengan skalatargetType
yang tersedia.Jika nilainya di luar rentang
targetType
, kesalahan luapan akan dimunculkan.Gunakan try_cast untuk mengubah kesalahan luapan menjadi
NULL
. -
sourceExpr
dibaca sebagai nilai harfiah daritargetType
.Jika
sourceExpr
tidak sesuai dengan format untuk nilai harfiah, kesalahan akan dimunculkan.Jika nilai berada di luar rentang
targetType
, kesalahan luapan akan dimunculkan.Gunakan try_cast untuk mengubah kesalahan format yang meluap dan tidak valid menjadi
NULL
. -
Hasilnya adalah jumlah detik yang berlalu antara
1970-01-01 00:00:00 UTC
dansourceExpr
.Jika
targetType
merupakan angka integral, hasilnya dipotong menjadi bilangan bulat.Jika tidak, hasilnya dibulatkan agar sesuai dengan skala
targetType
yang tersedia.Jika hasilnya di luar rentang
targetType
, kesalahan luapan akan dimunculkan.Gunakan try_cast untuk mengubah kesalahan luapan menjadi
NULL
. -
Berlaku untuk: Databricks SQL Databricks Runtime 11.3 LTS ke atas
Jenis target harus berupa numerik yang tepat.
Mengingat
INTERVAL upper_unit TO lower_unit
hasilnya diukur dalam jumlah totallower_unit
. Jikalower_unit
adalahSECOND
, detik pecahan disimpan ke sebelah kanan titik desimal. Untuk semua interval lainnya, hasilnya selalu berupa angka integral. -
Jika
sourceExpr
adalah:true
: Hasilnya adalah 0.false
: Hasilnya adalah 1.NULL
: Hasilnya adalahNULL
.
Contoh
> SELECT cast(NULL AS INT);
NULL
> SELECT cast(5.6 AS INT);
5
> SELECT cast(5.6 AS DECIMAL(2, 0));
6
> SELECT cast(-5.6 AS INT);
-5
> SELECT cast(-5.6 AS DECIMAL(2, 0));
-6
> SELECT cast(128 AS TINYINT);
Overflow
> SELECT cast(128 AS DECIMAL(2, 0));
Overflow
> SELECT cast('123' AS INT);
123
> SELECT cast('123.0' AS INT);
Invalid format
> SELECT cast(TIMESTAMP'1970-01-01 00:00:01' AS LONG);
1
> SELECT cast(TIMESTAMP'1970-01-01 00:00:00.000001' AS DOUBLE);
1.0E-6
> SELECT cast(TIMESTAMP'2022-02-01 00:00:00' AS SMALLINT);
error: overflow
> SELECT cast(true AS BOOLEAN);
1
> SELECT cast(INTERVAL '1-2' YEAR TO MONTH AS INTEGER);
14
> SELECT cast(INTERVAL '1:30.5' MINUTE TO SECOND AS DECIMAL(5, 2));
90.50
> SELECT cast(TRUE AS INT);
1
> SELECT cast(FALSE AS INT);
0
STRING
Jika targetType
adalah jenis STRING dan sourceExpr
berjenis:
-
Hasilnya adalah string NULL.
-
Hasilnya adalah angka harfiah dengan tanda minus opsional dan tidak ada nol di depan kecuali satu digit di sebelah kiri titik desimal. Jika
targetType
adalahDECIMAL(p, s)
dengans
lebih besar 0, titik desimal ditambahkan dan angka nol di belakang ditambahkan ke skala. -
Jika bilangan mutlak kurang dari
10,000,000
dan lebih besar atau sama dengan0.001
, hasilnya dinyatakan tanpa notasi ilmiah dengan setidaknya satu digit di kedua sisi koma desimal.Jika tidak, Azure Databricks menggunakan mantissa diikuti oleh
E
dan eksponen. Mantissa memiliki tanda minus jarak antar baris opsional diikuti oleh satu digit di sebelah kiri titik desimal, dan jumlah digit minimal yang lebih besar dari nol di sebelah kanan. Eksponen memiliki dan tanda minus jarak antar baris opsional. -
Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah dateString masing-masing dalam bentuk
-YYYY-MM-DD
danYYYY-MM-DD
.Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan
+
digunakan untuk CE. -
Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk
-YYYY-MM-DD hh:mm:ss
danYYYY-MM-DD hh:mm:ss
.Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan
+
digunakan untuk CE.Detik pecahan
.f...
ditambahkan jika perlu. -
Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk
-YYYY-MM-DD hh:mm:ss
danYYYY-MM-DD hh:mm:ss
.Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan
+
digunakan untuk CE.Detik pecahan
.f...
ditambahkan jika perlu. -
Hasilnya adalah representasi terpendek dari interval harfiah. Jika intervalnya negatif, tandanya disematkan di
interval-string
. Untuk unit yang lebih kecil dari 10, nol jarak antar baris dihilangkan.String interval tahun-bulan yang khas memiliki bentuk:
INTERVAL 'Y' YEAR
INTERVAL 'Y-M' YEAR TO MONTH
INTERVAL 'M' MONTH
-
Hasilnya adalah representasi terpendek dari interval harfiah. Jika intervalnya negatif, tandanya disematkan di
interval-string
. Untuk unit yang lebih kecil dari 10, nol jarak antar baris dihilangkan.String interval waktu hari biasa memiliki bentuk:
INTERVAL 'D' DAY
INTERVAL 'D h' DAY TO HOUR
INTERVAL 'D h:m' DAY TO MINUTE
INTERVAL 'D h:m:s' DAY TO SECOND
INTERVAL 'h' HOUR
INTERVAL 'h:m' HOUR TO MINUTE
INTERVAL 'm:s' MINUTE TO SECOND
INTERVAL 's' SECOND
-
Hasil dari
true
boolean adalah STRING harfiahtrue
, untukfalse
adalah STRING harfiahfalse
, dan untukNULL
adalah string NULL. -
Hasilnya adalah biner
sourceExpr
yang ditafsirkan sebagai urutan karakter UTF-8.Azure Databricks tidak memvalidasi karakter UTF-8. Transmisikan dari
BINARY
hinggaSTRING
tidak akan pernah mengisi karakter pengganti atau memunculkan kesalahan. -
Hasilnya adalah daftar elemen transmisikan yang dipisahkan koma, yang diapit dengan tanda kurung siku
[ ]
. Satu spasi mengikuti setiap koma.NULL
Elemen diterjemahkan menjadi harfiahnull
.Azure Databricks tidak mengutip atau menandai elemen individual, yang mungkin berisi tanda kurung atau koma.
-
Hasilnya adalah daftar pasangan nilai kunci transmisikan yang dipisahkan koma, yang diapit dengan kurung kurawal
{ }
. Satu spasi mengikuti setiap koma. Setiap pasangan nilai kunci dipisahkan oleh->
.NULL
Nilai peta diterjemahkan menjadi harfiahnull
.Azure Databricks tidak mengutip atau menandai kunci atau nilai individual, yang mungkin berisi kurung kurawal, koma, atau
->
. -
Hasilnya adalah daftar nilai kolom yang dipisahkan koma, yang diapit dengan kurung kurawal
{ }
. Satu spasi mengikuti setiap koma. Nilai bidangNULL
diterjemahkan menjadi harfiahnull
.Azure Databricks tidak mengutip atau menandai nilai bidang individual, yang mungkin berisi kurung kurawal, atau koma.
Contoh
> SELECT cast(NULL AS STRING);
NULL
> SELECT cast(-3Y AS STRING);
-3
> SELECT cast(5::DECIMAL(10, 5) AS STRING);
5.00000
> SELECT cast(12345678e-4 AS STRING);
1234.5678
> SELECT cast(1e7 as string);
1.0E7
> SELECT cast(1e6 as string);
1000000.0
> SELECT cast(1e-4 as string);
1.0E-4
> SELECT cast(1e-3 as string);
0.001
> SELECT cast(12345678e7 AS STRING);
1.2345678E14
> SELECT cast(DATE'1900-12-31' AS STRING);
1900-12-31
-- Caesar no more
> SELECT cast(DATE'-0044-03-15' AS STRING);
-0044-03-15
> SELECT cast(DATE'100000-12-31' AS STRING);
+100000-12-31
> SELECT cast(current_timestamp() AS STRING);
2022-04-02 22:29:09.783
> SELECT cast(TIMESTAMP_NTZ'2023-01-01' AS STRING);
2023-01-01 00:00:00
> SELECT cast(INTERVAL -'13-02' YEAR TO MONTH AS STRING);
INTERVAL '-13-2' YEAR TO MONTH
> SELECT cast(INTERVAL '12:04.9900' MINUTE TO SECOND AS STRING);
INTERVAL '12:04.99' MINUTE TO SECOND
> SELECT cast(true AS STRING);
true
> SELECT cast(false AS STRING);
false
-- A bad UTF-8 string
> SELECT cast(x'33800033' AS STRING);
3�3
> SELECT hex(cast(x'33800033' AS STRING));
33800033
> SELECT cast(array('hello', NULL, 'world') AS STRING);
[hello, null, world]
> SELECT cast(array('hello', 'wor, ld') AS STRING);
[hello, wor, ld]
> SELECT cast(array() AS STRING);
[]
> SELECT cast(map('hello', 1, 'world', null) AS STRING);
{hello -> 1, world -> null}
> SELECT cast(map('hello -> 1', DATE'2022-01-01') AS STRING);
{hello -> 1 -> 2022-01-01}
> SELECT cast(map() AS STRING);
{}
> SELECT cast(named_struct('a', 5, 'b', 6, 'c', NULL) AS STRING);
{5, 6, null}
> SELECT cast(named_struct() AS STRING);
{}
TANGGAL
Jika targetType
adalah jenis TANGGAL dan sourceExpr
berjenis:
-
Hasilnya adalah TANGGAL NULL.
-
sourceExpr
harus berupa dateString yang valid.Jika
sourceExpr
bukan yang validdateString
, Azure Databricks mengembalikan kesalahan.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL
. -
Hasilnya adalah bagian tanggal dari stempel waktu
sourceExpr
. -
Hasilnya adalah bagian tanggal dari timestamp_ntz
sourceExpr
.
Contoh
> SELECT cast(NULL AS DATE);
NULL
> SELECT cast('1900-10-01' AS DATE);
1900-10-01
> SELECT cast('1900-10-01' AS DATE);
1900-10-01
-- There is no February 30.
> SELECT cast('1900-02-30' AS DATE);
Error
> SELECT cast(TIMESTAMP'1900-10-01 12:13:14' AS DATE);
1900-10-01
> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14' AS DATE);
1900-10-01
TANDA WAKTU
Jika targetType
adalah jenis STEMPEL WAKTU dan sourceExpr
berjenis:
-
Hasilnya adalah TANGGAL NULL.
-
sourceExpr
dibaca sebagai jumlah detik sejak1970-01-01 00:00:00 UTC
.Pecahan yang lebih kecil dari mikrodetik akan terpotong.
Jika nilai berada di luar rentang, kesalahan luapan
TIMESTAMP
dimunculkan.Gunakan try_cast untuk mengubah kesalahan luapan menjadi
NULL
. -
sourceExpr
harus berupa timestampString yang valid.Jika
sourceExpr
bukan yang validtimestampString
, Azure Databricks mengembalikan kesalahan.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL
. -
Hasilnya adalah
sourceExpr
TANGGAL pada00:00:00
jam.
Hasilnya adalah nilai tanda waktu dengan bidang tahun/bulan/hari/jam/menit/detik yang sama dari timestamp_ntz sourceExpr
.
Contoh
> SELECT cast(NULL AS TIMESTAMP);
NULL
> SET TIME ZONE '+00:00';
> SELECT cast(0.0 AS TIMESTAMP);
1970-01-01 00:00:00
> SELECT cast(0.0000009 AS TIMESTAMP);
1970-01-01 00:00:00
> SELECT cast(1e20 AS TIMESTAMP);
Error: overflow
> SELECT cast('1900' AS TIMESTAMP);
1900-01-01 00:00:00
> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP);
1900-10-01 12:13:14
> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP);
Error
> SELECT cast(DATE'1900-10-01' AS TIMESTAMP);
1900-10-01 00:00:00
> SELECT cast(TIMESTAMP_NTZ'2023-01-01 02:03:04.567' as TIMESTAMP)
2023-01-01 02:03:04.567
TIMESTAMP_NTZ
targetType
Jika adalah jenis TIMESTAMP_NTZ dan sourceExpr
berjenis:
-
Hasilnya adalah TANGGAL NULL.
-
sourceExpr
harus berupa timestampString yang valid.Jika
sourceExpr
bukan yang validtimestampString
, Azure Databricks mengembalikan kesalahan.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL
. -
Hasilnya adalah
sourceExpr
TANGGAL pada00:00:00
jam.
Hasilnya adalah waktu lokal sebagai di sourceExpr
zona waktu sesi.
Contoh
> SELECT cast(NULL AS TIMESTAMP_NTZ);
NULL
> SELECT cast('1900' AS TIMESTAMP_NTZ);
1900-01-01 00:00:00
> SELECT cast('1900-10-01 12:13:14' AS TIMESTAMP_NTZ);
1900-10-01 12:13:14
> SELECT cast('1900-02-30 12:13:14' AS TIMESTAMP_NTZ);
Error
> SELECT cast(DATE'1900-10-01' AS TIMESTAMP_NTZ);
1900-10-01 00:00:00
> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-07-01 08:43:28
> SELECT current_timezone(), CAST(TIMESTAMP'2021-7-1T8:43:28UTC+3' as TIMESTAMP_NTZ);
America/Los_Angeles 2021-06-30 22:43:28
interval bulan-tahun
Jika targetType
adalah interval bulan tahun dan sourceExpr
berjenis:
-
Hasilnya adalah interval bulan tahun NULL.
-
Berlaku untuk: Databricks SQL Databricks Runtime 11.3 LTS ke atas
Numerik ditafsirkan sebagai jumlah unit yang lebih rendah dari
targetType
yearmonthIntervalQualifier. -
sourceExpr
harus berupa yearMonthIntervalString yang valid.Jika
sourceExpr
bukan yang validyearMonthIntervalString
, Azure Databricks mengembalikan kesalahan.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL
. -
Jika
targetType
yearMonthIntervalQualifier menyertakanMONTH
, nilainya tetap tidak berubah, tetapi ditafsirkan ulang agar sesuai dengan jenis target.Jika tidak, jika jenis sumber yearMonthIntervalQualifier menyertakan
MONTH
, hasilnya akan terpotong menjadi tahun penuh.
Contoh
> SELECT cast(NULL AS INTERVAL YEAR);
NULL
> SELECT cast('1-4' AS INTERVAL YEAR TO MONTH)::STRING;
INTERVAL '1-4' YEAR TO MONTH
> SELECT cast('1' AS INTERVAL YEAR TO MONTH);
error
> SELECT cast(INTERVAL '1-4' YEAR TO MONTH AS INTERVAL MONTH)::STRING;
INTERVAL '16' MONTH
> SELECT cast(14 AS INTERVAL YEAR TO MONTH)::STRING;
INTERVAL '1-2' YEAR TO MONTH
> SELECT cast(INTERVAL '1-11' YEAR TO MONTH AS INTERVAL YEAR)::STRING;
INTERVAL '1' YEAR
interval hari-waktu
Jika targetType
adalah interval waktu hari dan sourceExpr
berjenis:
-
Hasilnya adalah interval waktu hari NULL.
-
Berlaku untuk: Databricks SQL Databricks Runtime 11.3 LTS ke atas
Numerik ditafsirkan sebagai jumlah unit yang lebih rendah dari
targetType
yearmonthIntervalQualifier. Jika unit adalahSECOND
, pecahan apa pun ditafsirkan sebagai detik pecahan. -
sourceExpr
harus berupa dayTimeIntervalString yang valid.Jika
sourceExpr
bukan yang validdayTimeIntervalString
, Azure Databricks mengembalikan kesalahan.Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL
. -
Jika
targetType
dayTimeIntervalQualifier menyertakan unit terkecil dari jenis sumber dayTimeIntervalQualifier, nilainya tetap tidak berubah, tetapi ditafsirkan ulang agar sesuai dengan jenis target.Jika tidak, interval
sourceExpr
dipotong agar sesuai dengantargetType
.
> SELECT cast(NULL AS INTERVAL HOUR);
NULL
> SELECT cast('1 4:23' AS INTERVAL DAY TO MINUTE)::STRING;
INTERVAL '1 04:23' DAY TO MINUTE
> SELECT cast('1' AS INTERVAL DAY TO MINUTE);
error
> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL MINUTE)::STRING;
INTERVAL '1703' MINUTE
> SELECT cast(INTERVAL '1 4:23' DAY TO MINUTE AS INTERVAL HOUR)::STRING;
INTERVAL '28' HOUR
> SELECT cast(125.3 AS INTERVAL MINUTE TO SECOND)::STRING;
INTERVAL '2:5.3' MINUTE TO SECOND
BOOLEAN
Jika targetType
adalah BOOLEAN dan sourceExpr
berjenis:
-
Hasilnya adalah NULL Boolean.
-
Jika
sourceExpr
adalah:0
: Hasilnya adalahfalse
.NULL
: Hasilnya adalahNULL
.special floating point value
: Hasilnya adalahtrue
.
Jika tidak, hasilnya adalah
true
.
-
Jika
sourcEexpr
adalah (tidak peka huruf besar/kecil):'T', 'TRUE', 'Y', 'YES', or '1'
: Hasilnya adalahtrue
'F', 'FALSE', 'N', 'NO', or '0'
: Hasilnya adalahfalse
NULL
: Hasilnya adalahNULL
Jika tidak, Azure Databricks mengembalikan sintaks input yang tidak valid untuk kesalahan boolean jenis.
Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi
NULL
.
Contoh
> SELECT cast(NULL AS BOOLEAN);
NULL
> SELECT cast('T' AS BOOLEAN);
true
> SELECT cast('True' AS BOOLEAN);
true
> SELECT cast('1' AS BOOLEAN);
true
> SELECT cast('0' AS BOOLEAN);
false
> SELECT cast('n' AS BOOLEAN);
false
> SELECT cast('on' AS BOOLEAN);
error: invalid input syntax for type boolean
> SELECT cast(0 AS BOOLEAN);
false
> SELECT cast(0.0E10 AS BOOLEAN);
false
> SELECT cast(1 AS BOOLEAN);
true
> SELECT cast(0.1 AS BOOLEAN);
true
> SELECT cast('NaN'::FLOAT AS BOOLEAN);
true
BINER
Jika targetType
adalah BINARY dan sourceExpr
berjenis:
Contoh
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
ARRAY
targetType
Jika adalah array < targetElementType > dan sourceExpr
berjenis:
-
Hasilnya adalah NULL dari
targeType
. -
Jika transmisi dari
sourceElementType
ketargetElementType
didukung, hasilnya adalahARRAY<targetElementType>
dengan semua elemen ditransmisikan ketargetElementType
.Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung atau jika salah satu elemen tidak dapat ditransmisikan.
Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi
NULL
.
Contoh
> SELECT cast(NULL AS ARRAY<INT>);
NULL
> SELECT cast(array('t', 'f', NULL) AS ARRAY<BOOLEAN>);
[true, false, NULL]
> SELECT cast(array('t', 'f', NULL) AS INTERVAL YEAR);
error: cannot cast array<string> to interval year
> SELECT cast(array('t', 'f', 'o') AS ARRAY<BOOLEAN>);
error: invalid input syntax for type boolean: o.
PETA
targetType
Jika adalah targetKeyType MAP<, targetValueType > dan sourceExpr
berjenis:
-
Hasilnya adalah NULL dari
targetType
. MAP <sourceKeyType, sourceValueType >
Jika transmisi dari
sourceKeyType
ketargetKeyType
dansourceValueType
ketargetValueType
didukung, hasilnya adalahMAP<targetKeyType, targetValueType>
dengan semua kunci ditransmisikan ketargetKeyType
dan semua nilai ditransmisikan ketargetValueType
.Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung atau jika salah satu kunci atau nilai tidak dapat ditransmisikan.
Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi
NULL
.
Contoh
> SELECT cast(NULL AS MAP<STRING, INT>);
NULL
> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, BOOLEAN>);
{10:true,15:false,20:null}
> SELECT cast(map('10', 't', '15', 'f', '20', NULL) AS MAP<INT, ARRAY<INT>>);
error: cannot cast map<string,string> to map<int,array<int>>
> SELECT cast(map('10', 't', '15', 'f', '20', 'o') AS MAP<INT, BOOLEAN>);
error: invalid input syntax for type boolean: o.
STRUKTUR
targetType
Jika adalah STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > dan sourceExpr
berjenis:
-
Hasilnya adalah NULL dari
targetType
. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
sourceExpr
dapat ditransmisikan ketargetType
jika semua kondisi Anda benar:- Jenis sumber memiliki jumlah bidang yang sama dengan target
- Untuk semua bidang:
sourceFieldTypeN
dapat ditransmisikan ketargetFieldTypeN
. - Untuk semua nilai bidang: Nilai bidang sumber N dapat ditransmisikan ke
targetFieldTypeN
dan nilainya tidak nol jika bidang target N ditandai sebagaiNOT NULL
.
sourceFieldName
s, sumberNOT NULL
batasan, dan sumberCOMMENT
s tidak harus cocok dengantargetType
dan diabaikan.Azure Databricks menimbulkan kesalahan jika pemeran tidak didukung atau jika salah satu kunci atau nilai tidak dapat ditransmisikan.
Gunakan try_cast untuk mengubah data tidak valid atau kesalahan luapan menjadi
NULL
.
Contoh
> SELECT cast(NULL AS STRUCT<a:INT>);
NULL
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
{"b":true,"c":1900-01-01}
> SELECT cast(named_struct('a', 't', 'b', NULL::DATE) AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
error: cannot cast struct<a:string,b:date> to struct<b:boolean,c:date>
> SELECT cast(named_struct('a', 't', 'b', '1900') AS STRUCT<b:BOOLEAN, c:ARRAY<INT>>);
error: cannot cast struct<a:string,b:string> to struct<b:boolean,c:array<int>>
> SELECT cast(named_struct('a', 't', 'b', 'hello') AS STRUCT<b:BOOLEAN, c:DATE>);
error: Cannot cast hello to DateType