cast fungsi

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya 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:

  • VOID

    Hasilnya adalah NULL dari jenis numerik yang ditentukan.

  • numerik

    Jika targetType merupakan angka integral, hasilnya sourceExprdipotong menjadi bilangan bulat.

    Jika tidak, hasilnya sourceExprdibulatkan agar sesuai dengan skala targetType yang tersedia.

    Jika nilainya di luar rentang targetType, kesalahan luapan akan dimunculkan.

    Gunakan try_cast untuk mengubah kesalahan luapan menjadi NULL.

  • STRING

    sourceExprdibaca sebagai nilai harfiah dari targetType.

    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.

  • STEMPEL WAKTU

    Hasilnya adalah jumlah detik yang berlalu antara 1970-01-01 00:00:00 UTC dan sourceExpr.

    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.

  • INTERVAL

    Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya 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 total lower_unit. Jika lower_unit adalah SECOND, detik pecahan disimpan ke sebelah kanan titik desimal. Untuk semua interval lainnya, hasilnya selalu berupa angka integral.

  • BOOLEAN

    Jika sourceExpr adalah:

    • true: Hasilnya adalah 0.
    • false: Hasilnya adalah 1.
    • NULL: Hasilnya adalah NULL.

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:

  • VOID

    Hasilnya adalah string NULL.

  • angka tepat

    Hasilnya adalah angka harfiah dengan tanda minus opsional dan tidak ada nol di depan kecuali satu digit di sebelah kiri titik desimal. Jika targetType adalah DECIMAL(p, s) dengan s lebih besar 0, titik desimal ditambahkan dan angka nol di belakang ditambahkan ke skala.

  • biner titik-mengambang

    Jika bilangan mutlak kurang dari 10,000,000 dan lebih besar atau sama dengan 0.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.

  • TANGGAL

    Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah dateString masing-masing dalam bentuk -YYYY-MM-DD dan YYYY-MM-DD.

    Untuk tahun sebelum atau setelah rentang ini, jumlah digit yang diperlukan ditambahkan ke komponen tahun dan + digunakan untuk CE.

  • STEMPEL WAKTU

    Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk -YYYY-MM-DD hh:mm:ss dan YYYY-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.

  • TIMESTAMP_NTZ

    Jika tahun antara 9999 BCE dan 9999 CE, hasilnya adalah timestampString masing-masing dalam bentuk -YYYY-MM-DD hh:mm:ss dan YYYY-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.

  • interval bulan tahunan

    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
  • interval waktu sehari

    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
  • BOOLEAN

    Hasil dari true boolean adalah STRING harfiah true, untuk false adalah STRING harfiahfalse, dan untuk NULL adalah string NULL.

  • BINER

    Hasilnya adalah biner sourceExpr yang ditafsirkan sebagai urutan karakter UTF-8.

    Azure Databricks tidak memvalidasi karakter UTF-8. Transmisikan dari BINARY hingga STRING tidak akan pernah mengisi karakter pengganti atau memunculkan kesalahan.

  • ARRAY

    Hasilnya adalah daftar elemen transmisikan yang dipisahkan koma, yang diapit dengan tanda kurung siku [ ]. Satu spasi mengikuti setiap koma. NULL Elemen diterjemahkan menjadi harfiah null.

    Azure Databricks tidak mengutip atau menandai elemen individual, yang mungkin berisi tanda kurung atau koma.

  • PETA

    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 ->. NULLNilai peta diterjemahkan menjadi harfiah null.

    Azure Databricks tidak mengutip atau menandai kunci atau nilai individual, yang mungkin berisi kurung kurawal, koma, atau ->.

  • STRUKTUR

    Hasilnya adalah daftar nilai kolom yang dipisahkan koma, yang diapit dengan kurung kurawal { }. Satu spasi mengikuti setiap koma. Nilai bidang NULL diterjemahkan menjadi harfiah null.

    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:

  • VOID

    Hasilnya adalah TANGGAL NULL.

  • STRING

    sourceExpr harus berupa dateString yang valid.

    Jika sourceExpr bukan yang valid dateString, Azure Databricks mengembalikan kesalahan.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • STEMPEL WAKTU

    Hasilnya adalah bagian tanggal dari stempel waktu sourceExpr.

  • TIMESTAMP_NTZ

    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:

  • VOID

    Hasilnya adalah TANGGAL NULL.

  • numerik

    sourceExprdibaca sebagai jumlah detik sejak 1970-01-01 00:00:00 UTC.

    Pecahan yang lebih kecil dari mikrodetik akan terpotong.

    Jika nilai berada di luar rentang, kesalahan luapan TIMESTAMPdimunculkan.

    Gunakan try_cast untuk mengubah kesalahan luapan menjadi NULL.

  • STRING

    sourceExpr harus berupa timestampString yang valid.

    Jika sourceExpr bukan yang valid timestampString, Azure Databricks mengembalikan kesalahan.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • TANGGAL

    Hasilnya adalah sourceExpr TANGGAL pada 00:00:00jam.

  • TIMESTAMP_NTZ

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:

  • VOID

    Hasilnya adalah TANGGAL NULL.

  • STRING

    sourceExpr harus berupa timestampString yang valid.

    Jika sourceExpr bukan yang valid timestampString, Azure Databricks mengembalikan kesalahan.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • TANGGAL

    Hasilnya adalah sourceExpr TANGGAL pada 00:00:00jam.

  • STEMPEL WAKTU

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:

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:

  • VOID

    Hasilnya adalah interval waktu hari NULL.

  • exact_numeric

    Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 11.3 LTS ke atas

    Numerik ditafsirkan sebagai jumlah unit yang lebih rendah dari targetTypeyearmonthIntervalQualifier. Jika unit adalah SECOND, pecahan apa pun ditafsirkan sebagai detik pecahan.

  • STRING

    sourceExpr harus berupa dayTimeIntervalString yang valid.

    Jika sourceExpr bukan yang valid dayTimeIntervalString, Azure Databricks mengembalikan kesalahan.

    Gunakan try_cast untuk mengubah kesalahan data tidak valid menjadi NULL.

  • interval waktu sehari

    Jika targetTypedayTimeIntervalQualifier 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 dengan targetType.

> 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:

  • VOID

    Hasilnya adalah NULL Boolean.

  • numerik

    Jika sourceExpr adalah:

    • 0: Hasilnya adalah false.

      Jika tidak, hasilnya adalah true.

  • STRING

    Jika sourcEexpr adalah (tidak peka huruf besar/kecil):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Hasilnya adalah true
    • 'F', 'FALSE', 'N', 'NO', or '0': Hasilnya adalah false
    • NULL: Hasilnya adalah NULL

    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:

  • VOID

    Hasilnya adalah Biner NULL.

  • STRING

    Hasilnya adalah pengkodean UTF-8 dari surceExpr.

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:

  • VOID

    Hasilnya adalah NULL dari targeType.

  • ARRAY < sourceElementType >

    Jika transmisi dari sourceElementType ke targetElementType didukung, hasilnya adalah ARRAY<targetElementType> dengan semua elemen ditransmisikan ke targetElementType.

    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:

  • VOID

    Hasilnya adalah NULL dari targetType.

  • MAP <sourceKeyType, sourceValueType >

    Jika transmisi dari sourceKeyType ke targetKeyType dan sourceValueType ke targetValueType didukung, hasilnya adalah MAP<targetKeyType, targetValueType> dengan semua kunci ditransmisikan ke targetKeyType dan semua nilai ditransmisikan ke targetValueType.

    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:

  • VOID

    Hasilnya adalah NULL dari targetType.

  • STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >

    sourceExpr dapat ditransmisikan ke targetType jika semua kondisi Anda benar:

    • Jenis sumber memiliki jumlah bidang yang sama dengan target
    • Untuk semua bidang: sourceFieldTypeN dapat ditransmisikan ke targetFieldTypeN.
    • Untuk semua nilai bidang: Nilai bidang sumber N dapat ditransmisikan ke targetFieldTypeN dan nilainya tidak nol jika bidang target N ditandai sebagai NOT NULL.

    sourceFieldNames, sumber NOT NULL batasan, dan sumber COMMENTs tidak harus cocok dengan targetType 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