cast Funkció

A következőre vonatkozik:yes Databricks SQL check marked yes Databricks Runtime

Az értéket expr a cél adattípusra typeveti. Ez az operátor a :: (kettőspontjel) operátor szinonimája

Szintaxis

cast(sourceExpr AS targetType)

Argumentumok

  • sourceExpr: Bármely kasztrálási kifejezés.
  • targetType: Az eredmény adattípusa.

Visszatérési érték

Az eredmény típusa targetType.

Az adattípus-öntés alábbi kombinációi érvényesek:

Forrás (sor) Cél(oszlop) VOID numeric KARAKTERLÁNC DÁTUM IDŐBÉLYEG TIMESTAMP_NTZ év–hónap intervallum napi időintervallum LOGIKAI BINÁRIS TÖMB MEGJELENÍTÉSE STRUCT
VOID I I I I I I I I I I I I I
numeric N I I N I N I I I N N N N
KARAKTERLÁNC N I I I I I I I I I N N N
DÁTUM N N I I I I N N N N N N N
IDŐBÉLYEG N I I I I I N N N N N N N
TIMESTAMP_NTZ N N I I I I N N N N N N N
év–hónap intervallum N I I N N N I N N N N N N
napi időintervallum N I I N N N N I N N N N N
LOGIKAI N I I N I N N N I N N N N
BINÁRIS N I I N N N N N N I N N N
TÖMB N N I N N N N N N N I N N
MEGJELENÍTÉSE N N I N N N N N N N N I N
STRUCT N N I N N N N N N N N N I

Szabályok és korlátozások a targetType alapján

Figyelmeztetés

A Databricks-futtatókörnyezetben, ha a spark.sql.ansi.enabled értéke false, a túlcsordulás nem okoz hibát, hanem "körbefuttatja" az eredményt.

Az sourceExpr érvénytelen formátumú vagy érvénytelen karaktereket targetType tartalmazó értékek a következőt eredményezik NULL: .

numeric

Ha a targetTypeszám éssourceExpr típus:

  • VOID

    Az eredmény a megadott numerikus típus NULL értéke.

  • numeric

    Ha targetType egy egész szám, az eredmény sourceExpr egész számra csonkul.

    Ellenkező esetben az eredmény sourceExprkerekítése a rendelkezésre álló skálához igazodik targetType.

    Ha az érték kívül esik a tartományon targetType, a rendszer túlcsordulási hibát jelez.

    A try_cast használatával a túlcsordulási hibákat a következővé alakíthatja: NULL.

  • KARAKTERLÁNC

    sourceExpr a olvasott érték a literál értékeként targetType.

    Ha sourceExpr nem felel meg a literális értékek formátumának, a rendszer hibát jelez.

    Ha az érték a tartományon targetTypekívül esik, a rendszer túlcsordulási hibát jelez.

    A try_cast használatával a túlcsordulást és az érvénytelen formátumhibákat a következővé alakíthatja: NULL.

  • IDŐBÉLYEG

    Az eredmény a és sourceExprközött eltelt 1970-01-01 00:00:00 UTC másodpercek száma.

    Ha targetType egy egész szám, az eredmény egész számra csonkul .

    Ellenkező esetben az eredmény kerekítése a rendelkezésre álló skálához igazodik targetType.

    Ha az eredmény a tartományon targetTypekívül esik, a rendszer túlcsordulási hibát jelez.

    A try_cast használatával a túlcsordulási hibákat a következővé alakíthatja: NULL.

  • INTERVALLUM

    A következőre vonatkozik:yes Databricks SQL check marked yes Databricks Runtime 11.2 és újabb

    A céltípusnak pontos numerikusnak kell lennie.

    INTERVAL upper_unit TO lower_unit Az eredményt a függvény a teljes számban mérilower_unit. Ha az lower_unit , SECONDa tört másodperc a tizedesvessző jobb oldalán lesz tárolva. Minden más intervallum esetén az eredmény mindig egy integrál szám.

  • LOGIKAI

    Ha sourceExpr a következő:

    • true: Az eredmény 0.
    • false: Az eredmény 1.
    • NULL: Az eredmény: NULL.

Példák

> 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

Ha a targetTypesztring típusú , és sourceExpr típusa:

  • VOID

    Az eredmény egy NULL sztring.

  • pontos numerikus

    Az eredmény az opcionális mínuszjellel és kezdő nullákkal rendelkező literális szám, kivéve a tizedesvessző bal oldalán lévő egyetlen számjegyet. Ha a targetTypeDECIMAL(p, s) érték nagyobb 0-val s , a rendszer tizedesvesszőt ad hozzá, és a záró nullákat a skálázáshoz hozzáadja.

  • lebegőpontos bináris

    Ha az abszolút szám kisebb 10,000,000 és nagyobb vagy egyenlő, mint 0.001, az eredményt tudományos jelölés nélkül fejezik ki, legalább egy számjegygel a tizedesvessző mindkét oldalán.

    Ellenkező esetben az Azure Databricks egy mantissát, majd E egy kitevőt használ. A mantiszának van egy választható kezdő mínuszjele, amelyet egy számjegy követ a tizedesvessző bal oldalán, és a számjegyek minimális száma nagyobb, mint nulla a jobb oldalon. A kitevőnek van és nem kötelező kezdő mínuszjele.

  • DÁTUM

    Ha az év 9999 BCE és 9999 CE között van, az eredmény az űrlap -YYYY-MM-DDdátumszűrése, illetve YYYY-MM-DD a dátum.

    A tartományt megelőző vagy követő években a szükséges számjegyek száma hozzáadódik az év összetevőjéhez, és + a CE-hez használatos.

  • IDŐBÉLYEG

    Ha az év 9999 BCE és 9999 CE között van, akkor az eredmény az űrlap -YYYY-MM-DD hh:mm:ssidőbélyegzője, illetve YYYY-MM-DD hh:mm:ss annak értéke.

    A tartományt megelőző vagy követő években a szükséges számjegyek száma hozzáadódik az év összetevőjéhez, és + a CE-hez használatos.

    Szükség esetén a rendszer másodperc törtrészt .f... ad hozzá.

  • TIMESTAMP_NTZ

    Ha az év 9999 BCE és 9999 CE között van, akkor az eredmény az űrlap -YYYY-MM-DD hh:mm:ssidőbélyegzője, illetve YYYY-MM-DD hh:mm:ss annak értéke.

    A tartományt megelőző vagy követő években a szükséges számjegyek száma hozzáadódik az év összetevőjéhez, és + a CE-hez használatos.

    Szükség esetén a rendszer másodperc törtrészt .f... ad hozzá.

  • év–hónap intervallum

    Az eredmény az intervallumkonstans legrövidebb ábrázolása. Ha az intervallum negatív, a jel beágyazódik a interval-string() fájlba. A 10-nél kisebb egységeknél a kezdő nullák ki vannak hagyva.

    Egy tipikus év-hónap intervallum sztring a következő űrlapot tartalmazza:

    • INTERVAL 'Y' YEAR
    • INTERVAL 'Y-M' YEAR TO MONTH
    • INTERVAL 'M' MONTH
  • napi időintervallum

    Az eredmény az intervallumkonstans legrövidebb ábrázolása. Ha az intervallum negatív, a jel beágyazódik a interval-string() fájlba. A 10-nél kisebb egységeknél a kezdő nullák ki vannak hagyva.

    Egy tipikus nap időintervallum-sztringje a következő űrlapot tartalmazza:

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

    A logikai érték eredménye true a SZTRING literál true, mert false a SZTRING literál false, és NULL a NULL sztring.

  • BINÁRIS

    Az eredmény az UTF-8 karaktersorozatként értelmezett bináris sourceExpr érték.

    Az Azure Databricks nem ellenőrzi az UTF-8 karaktereket. A betűnés BINARYSTRING soha nem injektál helyettesítő karaktereket, és nem okoz hibát.

  • TÖMB

    Az eredmény az öntött elemek vesszővel tagolt listája, amely szögletes zárójelekkel [ ]van fonva. Minden egyes vesszőt egy szóköz követ. Egy NULL elem literálra nullvan lefordítva.

    Az Azure Databricks nem idézi vagy más módon jelöli meg az egyes elemeket, amelyek maguk is tartalmazhatnak szögletes zárójeleket vagy vesszőket.

  • MEGJELENÍTÉSE

    Az eredmény az öntöttkulcs-érték párok vesszővel tagolt listája, amely kapcsos zárójelekkel { }van fonva. Minden egyes vesszőt egy szóköz követ. Az egyes kulcsértékpárokat a következő választja el egymástól: ->. A NULL leképezési érték literálra nullvan lefordítva.

    Az Azure Databricks nem idézi vagy más módon jelöli meg az egyes kulcsokat vagy értékeket, amelyek maguk is tartalmazhatnak kapcsos zárójeleket, vesszőket vagy ->.

  • STRUCT

    Az eredmény az öntött mező értékeinek vesszővel tagolt listája, amely kapcsos zárójelekkel { }van fonva. Minden egyes vesszőt egy szóköz követ. A NULL mezőértékek literálra nulllesznek lefordítva.

    Az Azure Databricks nem idézi vagy más módon jelöli meg az egyes mezőértékeket, amelyek maguk is tartalmazhatnak kapcsos zárójeleket vagy vesszőket.

Példák

> 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);
  {}

DATE

Ha a targetTypedátum típusú és sourceExpr típusa:

  • VOID

    Az eredmény egy NULL DÁTUM.

  • KARAKTERLÁNC

    sourceExpr érvényes dateStringnek kell lennie.

    Ha sourceExpr nem érvényes dateString, az Azure Databricks hibát ad vissza.

    Az érvénytelen adathibákat a try_cast használatával alakítsa át a következővé: NULL.

  • IDŐBÉLYEG

    Az eredmény az időbélyeg sourceExprdátumrésze.

  • TIMESTAMP_NTZ

    Az eredmény a timestamp_ntz sourceExprdátum része.

Példák

> 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

TIMESTAMP

Ha a targetTypetimestamp típusú , és sourceExpr típusa:

  • VOID

    Az eredmény egy NULL DÁTUM.

  • numeric

    sourceExpra másodpercek számaként van beolvasva.1970-01-01 00:00:00 UTC

    A mikroszekundumnál kisebb törtek csonkulnak.

    Ha az érték kívül esik a tartományon TIMESTAMP, a rendszer túlcsordulási hibát jelez.

    A try_cast használatával a túlcsordulási hibákat a következővé alakíthatja: NULL.

  • KARAKTERLÁNC

    sourceExpr érvényes timestampStringnek kell lennie.

    Ha sourceExpr nem érvényes timestampString, az Azure Databricks hibát ad vissza.

    Az érvénytelen adathibákat a try_cast használatával alakítsa át a következővé: NULL.

  • DÁTUM

    Az eredmény a DÁTUM az sourceExpr00:00:00óra.

  • TIMESTAMP_NTZ

Az eredmény egy időbélyegérték, amely a timestamp_ntz sourceExprazonos év/hónap/nap/óra/perc/másodperc mezőivel rendelkezik.

Példák

> 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

Ha a targetTypeTIMESTAMP_NTZ típusú , és sourceExpr típusa a következő:

  • VOID

    Az eredmény egy NULL DÁTUM.

  • KARAKTERLÁNC

    sourceExpr érvényes timestampStringnek kell lennie.

    Ha sourceExpr nem érvényes timestampString, az Azure Databricks hibát ad vissza.

    Az érvénytelen adathibákat a try_cast használatával alakítsa át a következővé: NULL.

  • DÁTUM

    Az eredmény a DÁTUM az sourceExpr00:00:00óra.

  • IDŐBÉLYEG

Az eredmény helyi idő, mint a sourceExpr munkamenet időzónájában.

Példák

> 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

év–hónap intervallum

Ha a targetType érték egy év-hónap intervallum , és sourceExpr típusa a következő:

Példák

> 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

napi időintervallum

Ha a targetTypenap időintervalluma , és sourceExpr típusa a következő:

  • VOID

    Az eredmény null napi időintervallum.

  • exact_numeric

    A következőre vonatkozik:yes Databricks SQL check marked yes Databricks Runtime 11.2 és újabb

    A szám a dayTimeIntervalQualifier alacsonyabb egységeinek targetType számaként értelmezhető. Ha az egység SECOND bármilyen tört, akkor a rendszer tört másodpercként értelmezi.

  • KARAKTERLÁNC

    sourceExpr érvényes dayTimeIntervalString értéknek kell lennie.

    Ha sourceExpr nem érvényes dayTimeIntervalString, az Azure Databricks hibát ad vissza.

    Az érvénytelen adathibákat a try_cast használatával alakítsa át a következővé: NULL.

  • napi időintervallum

    Ha a targetTypedayTimeIntervalQualifier a dayTimeIntervalQualifier forrástípus legkisebb egységét tartalmazza, az érték változatlan marad, de újraértelmezve lesz, hogy megfeleljen a céltípusnak.

    Ellenkező esetben az sourceExpr időköz csonkul, hogy illeszkedjen a értékhez 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

Ha a targetType logikai érték éssourceExpr típusa:

  • VOID

    Az eredmény null logikai érték.

  • numeric

    Ha sourceExpr a következő:

    • 0: Az eredmény: false.

      Ellenkező esetben az eredmény a következő true: .

  • KARAKTERLÁNC

    Ha sourcEexpr az (a kis- és nagybetűk nem érzékenek):

    • 'T', 'TRUE', 'Y', 'YES', or '1': Az eredmény true
    • 'F', 'FALSE', 'N', 'NO', or '0': Az eredmény false
    • NULL: Az eredmény NULL

    Ellenkező esetben az Azure Databricks érvénytelen bemeneti szintaxist ad vissza a logikai hiba típusához.

    Az érvénytelen adathibákat a try_cast használatával alakítsa át a következővé: NULL.

Példák

> 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

BINARY

Ha a targetTypebináris és sourceExpr típus:

  • VOID

    Az eredmény null bináris.

  • KARAKTERLÁNC

    Az eredmény az UTF-8 kódolása.surceExpr

Példák

> SELECT cast(NULL AS BINARY);
  NULL

> SELECT hex(cast('Spark SQL' AS BINARY));
  537061726B2053514C

> SELECT hex(cast('Oдesa' AS BINARY));
  4FD0B4657361

TÖMB

Ha a targetTypetömb < targetElementType > , és sourceExpr típusa:

  • VOID

    Az eredmény a null értéke targeType.

  • ARRAY < sourceElementType >

    Ha az áttűnés sourceElementTypetargetElementType támogatott, az eredmény egy ARRAY<targetElementType> , amely az összes elemet a -ra öntötte targetElementType.

    Az Azure Databricks hibát jelez, ha a leadás nem támogatott, vagy ha valamelyik elem nem adható át.

    Az try_cast használatával érvénytelen adatokat vagy túlcsordulási hibákat alakíthat át értékké NULL.

Példák

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

MEGJELENÍTÉSE

Ha a targetTypemap < targetKeyType, targetValueType > és sourceExpr típusa:

  • VOID

    Az eredmény a null értéke targetType.

  • MAP <sourceKeyType, sourceValueType >

    Ha a és a közötti áttűnések támogatottak, az eredmény egyMAP<targetKeyType, targetValueType>, amely az összes kulcsát a és az targetKeyType értékre öntötte.targetValueTypesourceKeyTypetargetKeyTypesourceValueTypetargetValueType

    Az Azure Databricks hibát jelez, ha a leadás nem támogatott, vagy ha a kulcsok vagy értékek egyikét sem lehet leadni.

    Az try_cast használatával érvénytelen adatokat vagy túlcsordulási hibákat alakíthat át értékké NULL.

Példák

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

STRUCT

Ha a targetTypeSTRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > és sourceExpr típusa:

  • VOID

    Az eredmény a null értéke targetType.

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

    A-t sourceExpr akkor lehet átvenni, targetType ha az összes feltétel teljesül:

    • A forrástípusnak ugyanannyi mezője van, mint a célnak
    • Az összes mezőhöz: sourceFieldTypeN a () mezőre targetFieldTypeNvethető.
    • Az összes mezőérték esetében: Az N forrásmező értéke átvehető, targetFieldTypeN és az érték nem null, ha az N célmezőt jelöli NOT NULL.

    sourceFieldNameaz s, a forráskényszer NOT NULL és a forrás COMMENTs nem egyezik a és a targetType értékével.

    Az Azure Databricks hibát jelez, ha a leadás nem támogatott, vagy ha a kulcsok vagy értékek egyikét sem lehet leadni.

    Az try_cast használatával érvénytelen adatokat vagy túlcsordulási hibákat alakíthat át értékké NULL.

Példák

> 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