Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Função
Aplica-se a:
SQL do Databricks
Databricks Runtime
Converte o valor expr no tipo de dados de destino type. Este operador é um sinônimo para :: o operador (sinal de dois-pontos)
Sintaxe
cast(sourceExpr AS targetType)
Argumentos
-
sourceExpr: qualquer expressão que possa ser convertida. -
targetType: o tipo de dados do resultado.
Retornos
O resultado é o tipo targetType.
As seguintes combinações de conversão de tipo de dados são válidas:
| Origem (linha) Destino(coluna) | VAZIO | numérico | CORDA | DATA | TIMESTAMP | TIMESTAMP_NTZ | intervalo de ano-mês | intervalo de dia-tempo | BOOLIANO | BINÁRIO | ARRAY | MAPA | ESTRUTURA | variant | de OBJETO |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| VAZIO | S | S | S | S | S | S | S | S | S | S | S | S | S | S | N |
| numérico | N | S | S | N | S | N | S | S | S | N | N | N | N | S | N |
| CORDA | N | S | S | S | S | S | S | S | S | S | N | N | N | S | N |
| DATA | N | N | S | S | S | S | N | N | N | N | N | N | N | S | N |
| TIMESTAMP | N | S | S | S | S | S | N | N | N | N | N | N | N | S | N |
| TIMESTAMP_NTZ | N | N | S | S | S | S | N | N | N | N | N | N | N | S | N |
| intervalo de ano-mês | N | S | S | N | N | N | S | N | N | N | N | N | N | N | N |
| intervalo de dia-tempo | N | S | S | N | N | N | N | S | N | N | N | N | N | N | N |
| BOOLIANO | N | S | S | N | S | N | N | N | S | N | N | N | N | S | N |
| BINÁRIO | N | S | S | N | N | N | N | N | N | S | N | N | N | S | N |
| ARRAY | N | N | S | N | N | N | N | N | N | N | S | N | N | S | N |
| MAPA | N | N | S | N | N | N | N | N | N | N | N | S | N | N | N |
| ESTRUTURA | N | N | S | N | N | N | N | N | N | N | N | N | S | N | N |
| variant | N | S | S | S | S | S | N | N | S | S | S | S | S | S | N |
| de OBJETO | N | N | N | N | N | N | N | N | N | N | N | S | S | N | N |
Regras e limitações com base em targetType
Aviso
No Databricks Runtime, se spark.sql.ansi.enabled for false, um estouro não causará um erro, mas "encapsulará" o resultado.
Um valor sourceExpr com um formato inválido ou caracteres inválidos para targetType resultará em um NULL.
numérico
Se o targetType for um numérico e sourceExpr for do tipo:
-
O resultado é um
NULLdo tipo numérico especificado. -
Se
targetTypefor um numérico integral, o resultado ésourceExprtruncado para um número inteiro.Caso contrário, o resultado será
sourceExprarredondado para uma escala detargetTypedisponível.Se o valor estiver fora do intervalo de
targetType, um erro de estouro é gerado.Use try_cast para transformar erros de estouro em
NULL. -
sourceExpré lido como um valor literal dotargetType.Se
sourceExprnão estiver em conformidade com o formato de valores literais, um erro será gerado.Se o valor estiver fora do intervalo do
targetType, um erro de estouro é gerado.Use try_cast para transformar erros de estouro e formato inválidos em
NULL. -
O resultado é o número de segundos decorridos entre
1970-01-01 00:00:00 UTCesourceExpr.Se
targetTypefor um numérico integral, o resultado é truncado para um número inteiro.Caso contrário, o resultado será arredondado para um ajuste na escala disponível de
targetType.Se o resultado estiver fora do intervalo de
targetType, um erro de estouro é gerado.Use try_cast para transformar erros de estouro em
NULL. -
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e versões posterioresO tipo de destino precisa ser um numérico exato.
Dado um
INTERVAL upper_unit TO lower_unit, o resultado é medido em número total delower_unit. Se alower_unitforSECOND, os segundos fracionários serão armazenados à direita do ponto decimal. Para todos os outros intervalos, o resultado é sempre um número integral. -
Se
sourceExprfor:-
true: o resultado é 1. -
false: o resultado é 0. -
NULL: o resultado éNULL.
-
-
As regras do tipo do valor real do tipo
VARIANTse aplicam.
Exemplos
> 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
> SELECT cast('15'::VARIANT AS INT);
15
CORDA
Se o sourceExpr for um STRING, o resultado STRING herdará a ordenação de sourceExpr.
Em todos os outros casos, a ordenação do resultado STRING é a ordenação padrão.
Para alterar a ordenação, adicione a expressão collate.
Se for targetType um STRING tipo e sourceExpr for do tipo:
-
O resultado é uma cadeia de caracteres
NULL. -
O resultado é o número literal com um sinal de menos opcional e nenhum zero à esquerda, exceto o dígito único à esquerda do ponto decimal. Se o
targetTypeforDECIMAL(p, s)comsmaior do que 0, um ponto decimal será adicionado e zeros serão adicionados à escala. -
Se o número absoluto for menor do que
10,000,000e maior ou igual a0.001, o resultado é expresso sem notação científica com pelo menos um dígito em ambos os lados do ponto decimal.Caso contrário, o Azure Databricks usará uma mantissa seguida por
Ee um expoente. A mantissa tem um sinal de menos à esquerda opcional seguido por um dígito à esquerda do ponto decimal e o número mínimo de dígitos maior do que zero para a direita. O expoente tem um opcional sinal de menos à esquerda. -
Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma dateString do formulário
-YYYY-MM-DDeYYYY-MM-DD, respectivamente.Para anos anteriores ou após esse intervalo, o número necessário de dígitos é adicionado ao componente de ano e
+é usado para d.C. -
Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma timestampString do formulário
-YYYY-MM-DD hh:mm:sseYYYY-MM-DD hh:mm:ss, respectivamente.Para anos anteriores ou após esse intervalo, o número necessário de dígitos é adicionado ao componente de ano e
+é usado para d.C..f...de segundos fracionários são adicionados, se necessário. -
Se o ano estiver entre 9999 a.C. e 9999 d.C, o resultado é uma timestampString do formulário
-YYYY-MM-DD hh:mm:sseYYYY-MM-DD hh:mm:ss, respectivamente.Para anos anteriores ou após esse intervalo, o número necessário de dígitos é adicionado ao componente de ano e
+é usado para d.C..f...de segundos fracionários são adicionados, se necessário. -
O resultado é sua representação mais curta do literal de intervalo. Se o intervalo for negativo, o sinal será inserido no
interval-string. Para unidades menores que 10, os zeros à esquerda são omitidos.Uma cadeia de caracteres de intervalo típica de ano/mês tem o formulário:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
O resultado é sua representação mais curta do literal de intervalo. Se o intervalo for negativo, o sinal será inserido no
interval-string. Para unidades menores que 10, os zeros à esquerda são omitidos.Uma cadeia de caracteres típica de intervalo de dia/horário tem o formulário:
INTERVAL 'D' DAYINTERVAL 'D h' DAY TO HOURINTERVAL 'D h:m' DAY TO MINUTEINTERVAL 'D h:m:s' DAY TO SECONDINTERVAL 'h' HOURINTERVAL 'h:m' HOUR TO MINUTEINTERVAL 'm:s' MINUTE TO SECONDINTERVAL 's' SECOND
-
O resultado do booliano
trueé o literal deSTRINGtrue. Parafalse, é o literal STRINGfalse. ParaNULLé a string NULL. -
Um resultado é o
sourceExprbinário interpretado como uma sequência de caracteres UTF-8.O Azure Databricks não valida os caracteres UTF-8. Uma conversão de
BINARYparaSTRINGnunca injetará caracteres de substituição ou gerará um erro. -
O resultado é uma lista separada por vírgulas de elementos de conversão, que é preparada com colchetes
[ ]. Um espaço segue cada vírgula. Um elementoNULLé movido para umnullliteral.O Azure Databricks não cita ou marca elementos individuais, que podem conter colchetes ou vírgulas.
-
O resultado é uma lista separada por vírgulas de pares de valor de chave de conversão, que é colocada entre chaves
{ }. Um espaço segue cada vírgula. Cada par chave/valor é separado por um->. Um valor de mapaNULLé movido paranullliteral.O Azure Databricks não cita ou marca valores ou chaves individuais, que podem conter chaves, vírgulas ou
->. -
O resultado é uma lista separada por vírgulas de valores de campo de conversão, que é colocada entre chaves
{ }. Um espaço segue cada vírgula. Um valor de campoNULLé movido para um literalnull.O Azure Databricks não cita ou marca valores de campo individuais, que podem conter chaves ou vírgulas.
-
As regras do tipo do valor real do tipo
VARIANTse aplicam.
Exemplos
> 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);
{}
> SELECT cast(DATE'2024-01-05'::VARIANT AS STRING);
2024-01-05
> SELECT cast(5 AS STRING) COLLATE UNICODE;
5
DATA
Se for targetType um DATE tipo e sourceExpr for do tipo:
-
O resultado é uma
NULLDATE. -
sourceExprdeve ser uma dateString válida.Se
sourceExprnão for umdateStringválido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é a parte da data do carimbo de data/hora
sourceExpr. -
O resultado é a parte da data do carimbo de timestamp_ntz
sourceExpr. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam.
Exemplos
> 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
> SELECT cast(TIMESTAMP_NTZ'1900-10-01 12:13:14'::VARIANT AS DATE);
1900-10-01
timestamp
Se for targetType um TIMESTAMP tipo e sourceExpr for do tipo:
-
O resultado é uma
NULLDATE. -
sourceExprserá lido como o número de segundos desde1970-01-01 00:00:00 UTC.Frações menores que microssegundos são truncadas.
Se o valor estiver fora do intervalo de
TIMESTAMP, um erro de estouro é gerado.Use try_cast para transformar erros de estouro em
NULL. -
sourceExprdeve ser um carimbo de data/hora válido.Se
sourceExprnão for umtimestampStringválido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é a
sourceExprDATEàs00:00:00.
O resultado é um valor de carimbo de data/hora com os mesmos campos ano/mês/dia/hora/minuto/segundo de timestamp_ntz sourceExpr.
-
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam.
Exemplos
> 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
> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP);
1900-10-01 00:00:00
TIMESTAMP_NTZ
Se for targetType um TIMESTAMP_NTZ tipo e sourceExpr for do tipo:
-
O resultado é uma
NULLDATE. -
sourceExprdeve ser um carimbo de data/hora válido.Se
sourceExprnão for umtimestampStringválido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é o DATE
sourceExprem00:00:00h. -
O resultado é hora local como o
sourceExprno fuso horário da sessão. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam.
Exemplos
> 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
> SELECT cast(DATE'1900-10-01'::VARIANT AS TIMESTAMP_NTZ);
1900-10-01 00:00:00
intervalo de ano/mês
Se o targetType for um intervalo de um ano/mês e sourceExpr for do tipo:
-
O resultado é um intervalo de ano-mês
NULL. -
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e versões posterioresO numérico é interpretado como um número de unidades inferiores do
targetTypeyearmonthIntervalQualifier. -
sourceExprdeve ser um yearMonthIntervalString válido.Se
sourceExprnão for umyearMonthIntervalStringválido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
Se o
targetTypeyearMonthIntervalQualifier incluirMONTHo valor permanecerá inalterado, mas será reinterpretado para corresponder ao tipo de destino.Caso contrário, se o tipo de origem yearMonthIntervalQualifier incluir
MONTH, o resultado é truncado para anos completos.
Exemplos
> 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
intervalo de dia-horário
Se o targetType for um intervalo de dia-horário e sourceExpr for do tipo:
-
O resultado é um intervalo de dia-hora
NULL. -
Aplica-se a:
SQL do Databricks
Databricks Runtime 11.3 LTS e versões posterioresO numérico é interpretado como um número de unidades inferiores do
targetTypedayTimeIntervalQualifier. Se a unidade forSECOND, qualquer fração será interpretada como segundos fracionários. -
sourceExprdeve ser um dayTimeIntervalString válido.Se
sourceExprnão for umdayTimeIntervalStringválido, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
Se o
targetTypedayTimeIntervalQualifier incluir a menor unidade do tipo de origem dayTimeIntervalQualifier, o valor permanecerá inalterado, mas será reinterpretado para corresponder ao tipo de destino.Caso contrário, o intervalo
sourceExprserá truncado para se ajustar aotargetType.
> 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
BOOLEANO
Se o targetType for um BOOLEAN e sourceExpr for do tipo:
-
O resultado é um
NULLde tipoBOOLEAN. -
Se
sourceExprfor:0: o resultado éfalse.-
NULL: o resultado éNULL. -
special floating point value: o resultado étrue.
Caso contrário, o resultado será
true.-
-
Se
sourcEexpr(não diferenciará maiúsculas e minúsculas):-
'T', 'TRUE', 'Y', 'YES', or '1': o resultado étrue -
'F', 'FALSE', 'N', 'NO', or '0': o resultado éfalse -
NULL: o resultado éNULL
Caso contrário, o Azure Databricks retornará uma sintaxe de entrada inválida para o tipo de erro booleano.
Use try_cast para transformar erros de dados inválidos em
NULL. -
-
As regras do tipo do valor real do tipo
VARIANTse aplicam.
Exemplos
> 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
> SELECT cast(1::VARIANT AS BOOLEAN);
true
BINÁRIO
Se o targetType for um BINARY e sourceExpr for do tipo:
-
O resultado é um
NULLde tipoBINARY. -
O resultado é a codificação UTF-8 do
surceExpr. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam.
Exemplos
> SELECT cast(NULL AS BINARY);
NULL
> SELECT hex(cast('Spark SQL' AS BINARY));
537061726B2053514C
> SELECT hex(cast('Oдesa' AS BINARY));
4FD0B4657361
> SELECT hex(cast('Oдesa'::VARIANT AS BINARY));
4FD0B4657361
ARRAY
Se o targetType for um ARRAY < targetElementType > e sourceExpr for do tipo:
-
O resultado é um
NULLdotargeType. -
Se houver suporte para a conversão de
sourceElementTypeparatargetElementType, o resultado é umARRAY<targetElementType>com todos os elementos convertidos para otargetElementType.O Azure Databricks gera um erro se a conversão não tiver suporte ou se nenhum dos elementos não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL. -
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam.
Exemplos
> 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.
> SELECT cast(array('t', 'f', NULL)::VARIANT AS ARRAY<BOOLEAN>);
[true, false, NULL]
Mapa
Se o targetType for um MAP < targetKeyType, targetValueType > e sourceExpr for do tipo:
-
O resultado é um
NULLdotargetType. MAP <sourceKeyType, sourceValueType >
Se houver suporte para as conversões de
sourceKeyTypeparatargetKeyTypeesourceValueTypeparatargetValueType, o resultado é umMAP<targetKeyType, targetValueType>com todas as chaves convertidas para otargetKeyTypee todos os valores convertidos para otargetValueType.O Azure Databricks gera um erro se a conversão não seja suportada ou se qualquer uma das chaves ou valores não puder ser convertida.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL.-
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Cada
sourceFieldNamedo tipoSTRINGé convertido emtargetKeyTypee mapeado para uma chave de mapa. Cada valor de campo de origem desourceFieldTypeé convertido emtargetValueTypee mapeado para o respectivo valor de mapa.O Azure Databricks gerará um erro se não houver suporte para conversões ou se nenhum dos valores de campo ou valores de chave não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL.
Exemplos
> 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.
-- Casting an OBJECT to a MAP
> SELECT schema_of_variant(parse_json('{"cars": 12, "bicycles": 5 }'));
OBJECT<bicycles: BIGINT, cars: BIGINT>
> SELECT CAST(parse_json('{"cars": 12, "bicycles": 5 }') AS MAP<STRING, INTEGER>);
{bicycles -> 5, cars -> 12}
ESTRUTURA
Se o targetType for um STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, …]] > e sourceExpr for do tipo:
-
O resultado é um
NULLdotargetType. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
A
sourceExprpode ser convertida emtargetTypese todas essas condições forem verdadeiras:- O tipo de origem tem o mesmo número de campos que o destino
- Para todos os campos:
sourceFieldTypeNpode ser convertido para otargetFieldTypeN. - Para todos os valores de campo: o valor do campo de origem N pode ser convertido para
targetFieldTypeNe o valor não é nulo se o campo de destino N estiver marcado comoNOT NULL.
sourceFieldNames, restriçõesNOT NULLde origem eCOMMENTs de origem não precisam corresponder aotargetTypee são ignorados.O Azure Databricks gera um erro se a conversão não tiver suporte ou se nenhum dos campos não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL.-
As regras de tipo para o valor real mantido pelo tipo de dados
VARIANTse aplicam. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Todos os
sourceFieldNames são equiparados asourceFieldNames. Cada valor de campo de origemsourceFieldTypeé convertido no valor equiparadotargetValueTypee mapeado para o respectivo valor de mapa.Se um
targetFieldNamenão for equiparado, o valor do campo seráNULL.Se um
sourceFieldNamenão for equiparado, o campo será ignorado.O Azure Databricks gerará um erro se não houver suporte para conversões ou se nenhum dos valores de campo ou valores de chave não puder ser convertido.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL.
Exemplos
> SELECT cast(NULL AS STRUCT<a:INT>);
NULL
> SELECT cast(named_struct('a', 't', 'b', '1900-01-01') 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
> SELECT cast(named_struct('a', 't', 'b', '1900-01-01')::VARIANT AS STRUCT<b:BOOLEAN, c:DATE NOT NULL COMMENT 'Hello'>);
{"b":true,"c":1900-01-01}
-- Casting an OBJECT to a STRUCT
> SELECT schema_of_variant(parse_json('{"name": "jason", "age": 25 }'));
OBJECT<age: BIGINT, name: STRING>
> SELECT CAST(parse_json('{"name": "jason", "age": 25 }') AS STRUCT<id: BIGINT, name: STRING>);
{"id":null,"name":"jason"}
VARIANTE
Se o targetType for uma VARIANT e sourceExpr for do tipo:
-
O resultado é um
NULLde tipoVARIANT. -
O resultado será uma
VARIANTrepresentando o valor numérico. A precisão dos tiposDECIMALdeve ser <= 38.Todos os valores numéricos inteiros são mapeados para
BIGINT.Todos os valores
DECIMALsão mapeados para o menor número possível de algarismos e casas decimais para a precisão desejada. -
O resultado é uma
VARIANTque representa o valorSTRING. -
O resultado é uma
VARIANTque representa o valorDATE. -
O resultado é uma
VARIANTque representa o valorTIMESTAMP. -
O resultado é uma
VARIANTque representa o valorTIMESTAMP NTZ. -
O resultado é uma
VARIANTque representa o valorBOOLEAN. -
O resultado é uma
VARIANTque representa o valorBINARY. -
Se houver suporte para a conversão de
sourceElementTypeemVARIANT, o resultado seráVARIANT, representandoARRAY<sourceElementType>.O Azure Databricks gera um erro se não houver suporte para a conversão.
-
Não há suporte para essa conversão diretamente, pois
VARIANTnão é capaz de preservar a ordem dos campos de struct. Use to_variant_object para converterSTRUCTemVARIANTcomo umOBJECT. -
Essa conversão não tem suporte direto, pois
VARIANTnão pode preservar o tipoMAP. Use to_variant_object para converterMAPparaVARIANTcomo umOBJECT. As chaves de mapa devem ser cadeias de caracteres.O Azure Databricks gera um erro se não houver suporte para a conversão.
Use try_cast para transformar erros de estouro ou dados inválidos em
NULL.
Exemplos
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT