Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Função
Aplica-se a:
Databricks SQL
Databricks Runtime
Converte o valor expr para o tipo typede dados de destino. Este operador é sinónimo de :: operador (sinal de dois pontos)
Sintaxe
cast(sourceExpr AS targetType)
Argumentos
-
sourceExpr: Qualquer expressão convertível. -
targetType: O tipo de dados do resultado.
Devoluções
O resultado é o tipo targetType.
As seguintes combinações de conversão de tipos de dados são válidas:
| Origem (linha) Destino (coluna) | VAZIO | numérico | STRING | DATA | Carimbo de data e hora | TIMESTAMP_NTZ | intervalo ano-mês | intervalo diurno | BOOLEANO | BINÁRIO | MATRIZ | MAPA | ESTRUTURA | VARIANTE | OBJETO |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| VAZIO | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
| numérico | N | Y | Y | N | Y | N | Y | Y | Y | N | N | N | N | Y | N |
| STRING | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | Y | N |
| DATA | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
| Carimbo de data e hora | N | Y | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
| TIMESTAMP_NTZ | N | N | Y | Y | Y | Y | N | N | N | N | N | N | N | Y | N |
| intervalo ano-mês | N | Y | Y | N | N | N | Y | N | N | N | N | N | N | N | N |
| intervalo diurno | N | Y | Y | N | N | N | N | Y | N | N | N | N | N | N | N |
| BOOLEANO | N | Y | Y | N | Y | N | N | N | Y | N | N | N | N | Y | N |
| BINÁRIO | N | Y | Y | N | N | N | N | N | N | Y | N | N | N | Y | N |
| MATRIZ | N | N | Y | N | N | N | N | N | N | N | Y | N | N | Y | N |
| MAPA | N | N | Y | N | N | N | N | N | N | N | N | Y | N | N | N |
| ESTRUTURA | N | N | Y | N | N | N | N | N | N | N | N | N | Y | N | N |
| VARIANTE | N | Y | Y | Y | Y | Y | N | N | Y | Y | Y | Y | Y | Y | N |
| OBJETO | N | N | N | N | N | N | N | N | N | N | N | Y | Y | N | N |
Regras e limitações baseadas em targetType
Aviso
No Databricks Runtime, se spark.sql.ansi.enabled estiver definido como false verdadeiro, um overflow não causará um erro, mas envolverá o resultado.
Um sourceExpr valor com um formato inválido ou caracteres inválidos para targetType resultará em um NULL.
numérico
Se o targetType é numérico e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipo numérico especificado. -
Se
targetTypefor um número integral, o resultado ésourceExprtruncado para se tornar um número inteiro.Caso contrário, o resultado é
sourceExprarredondado para ajustar à escala disponível detargetType.Se o valor estiver fora do intervalo de
targetType, será gerado um erro de estouro.Use try_cast para converter erros de estouro em
NULL. -
sourceExpré lido como um valor literal dotargetType.Se
sourceExprnão estiver em conformidade com o formato para valores literais, um erro será gerado.Se o valor estiver fora do intervalo de
targetType, será gerado um erro de overflow.Use try_cast para transformar erros de formato inválidos e de estouro em
NULL. -
O resultado é o número de segundos decorridos entre
1970-01-01 00:00:00 UTCesourceExpr.Se
targetTypefor um número numérico integral, o resultado é truncado para um número inteiro.Caso contrário, o resultado é arredondado para se ajustar à escala disponível de
targetType.Se o resultado estiver fora do intervalo de
targetType, um erro de estouro será gerado.Use try_cast para converter erros de estouro em
NULL. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superiorO tipo de destino deve ser um número exato.
Dado um
INTERVAL upper_unit TO lower_unit, o resultado é medido em número total delower_unit. Se forlower_unitSECOND, os segundos fracionários são armazenados à direita da vírgula decimal. Para todos os outros intervalos, o resultado é sempre um número integral. -
Se
sourceExpré:-
true: O resultado é 1. -
false: O resultado é 0. -
NULL: O resultado éNULL.
-
-
Aplicam-se as regras do tipo do valor efetivo do tipo
VARIANT.
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
cadeia de caracteres
Se o sourceExpr for um STRING, o STRING resultante herda a ordenação de sourceExpr.
Em todos os outros casos, o agrupamento resultante STRING é, por padrão, o agrupamento .
Para alterar a ordenação, adicione a expressão collate.
Se o targetType é um STRING tipo e sourceExpr é do tipo:
-
O resultado é uma
NULLcadeia de caracteres. -
O resultado é o número literal com um sinal de menos opcional e sem zeros à esquerda, com exceção do único dígito à esquerda da vírgula decimal. Se o
targetTypeforDECIMAL(p, s)comsmaior que 0, um ponto decimal é adicionado e zeros à direita são adicionados até atingir a escala. -
Se o número absoluto for menor que
10,000,000e maior ou igual a0.001, o resultado é expresso sem notação científica, com pelo menos um algarismo de cada lado do ponto decimal.Caso contrário, o Azure Databricks usa uma mantissa seguida por
Ee um expoente. A mantissa tem um sinal de menos opcional à frente, seguido por um dígito à esquerda da vírgula decimal e pelo menor número possível de dígitos, maior que zero, à direita. O expoente tem um sinal de menos opcional à esquerda. -
Se o ano estiver entre 9999 a.C. e 9999 d.C., o resultado será uma dateString do formulário
-YYYY-MM-DDeYYYY-MM-DDrespectivamente.Para anos anteriores ou posteriores a este intervalo, o número necessário de algarismos é adicionado ao componente ano e
+é utilizado para CE. -
Se o ano estiver entre 9999 a.C. e 9999 d.C., o resultado será um timestampString do formulário
-YYYY-MM-DD hh:mm:sseYYYY-MM-DD hh:mm:ssrespectivamente.Para anos anteriores ou posteriores a este intervalo, o número necessário de algarismos é adicionado ao componente ano e
+é utilizado para CE.Se necessário, são adicionados segundos
.f...fracionários. -
Se o ano estiver entre 9999 a.C. e 9999 d.C., o resultado será um timestampString do formulário
-YYYY-MM-DD hh:mm:sseYYYY-MM-DD hh:mm:ssrespectivamente.Para anos anteriores ou posteriores a este intervalo, o número necessário de algarismos é adicionado ao componente ano e
+é utilizado para CE.Se necessário, são adicionados segundos
.f...fracionários. -
O resultado é a sua representação mais curta do intervalo literal. Se o intervalo for negativo, o sinal será incorporado no
interval-string. Para unidades menores que 10, zeros à esquerda são omitidos.Uma cadeia de caracteres típica de intervalo ano-mês tem a forma:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
O resultado é a sua representação mais curta do intervalo literal. Se o intervalo for negativo, o sinal será incorporado no
interval-string. Para unidades menores que 10, os zeros que antecedem são omitidos.Uma cadeia de caracteres típica de um intervalo de tempo durante o dia tem a forma:
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
truebooleano é oSTRINGliteraltrue. Parafalseé o literal STRINGfalse. ParaNULLé a cadeia de caracteres NULL. -
Um resultado é o binário
sourceExprinterpretado 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 nem gerará um erro. -
O resultado é uma lista separada por vírgulas de elementos, que está entre colchetes
[ ]. Um espaço segue cada vírgula. UmNULLelemento é traduzido para um literalnull.O Azure Databricks não cita nem marca elementos individuais, que podem conter colchetes ou vírgulas.
-
O resultado é uma lista separada por vírgulas de pares de chave-valor de tipo, que é delimitada por chaves
{ }. Um espaço segue cada vírgula. Cada par de valores de chave é separado por um->. UmNULLvalor de mapa é traduzido para literalnull.O Azure Databricks não cita ou marca chaves ou valores individuais, que podem conter chaves, vírgulas ou
->. -
O resultado é uma lista separada por vírgulas de valores de campo convertidos, que está entre chaves
{ }. Um espaço segue cada vírgula. UmNULLvalor de campo é traduzido para um literalnull.O Azure Databricks não cita ou marca valores de campo individuais, que podem conter chaves ou vírgulas.
-
Aplicam-se as regras do tipo do valor efetivo do tipo
VARIANT.
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 o targetType é um DATE tipo e sourceExpr é do tipo:
-
O resultado é um arquivo
NULLDATE. -
sourceExprdeve ser um dateString válido.Se
sourceExprnão for válidodateString, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é a parte de data do carimbo de data/hora
sourceExpr. -
O resultado é a parte de data do timestamp_ntz
sourceExpr. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
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
MARCA TEMPORAL
Se o targetType é um TIMESTAMP tipo e sourceExpr é do tipo:
-
O resultado é um arquivo
NULLDATE. -
sourceExpré 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, será gerado um erro de estouro.Use try_cast para converter erros de estouro em
NULL. -
sourceExprdeve ser um timestampString válido.Se
sourceExprnão for válidotimestampString, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é o
sourceExprDATEàs00:00:00h.
O resultado é um valor de timestamp com os mesmos campos de ano/mês/dia/hora/minuto/segundo de timestamp_ntz sourceExpr.
-
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
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 o targetType é um TIMESTAMP_NTZ tipo e sourceExpr é do tipo:
-
O resultado é um arquivo
NULLDATE. -
sourceExprdeve ser um timestampString válido.Se
sourceExprnão for válidotimestampString, o Azure Databricks retornará um erro.Use try_cast para transformar erros de dados inválidos em
NULL. -
O resultado é a
sourceExprDATA às00:00:00horas. -
O resultado é a hora local dentro do fuso
sourceExprhorário da sessão. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
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 ano-mês
Se o targetType for um intervalo de um ano e mês e sourceExpr for do tipo:
-
O resultado é um intervalo ano-mês
NULL. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superiorO valor numérico é interpretado como o número de unidades menores do
targetTypeanomêsIntervalQualifier. -
sourceExprdeve ser um yearMonthIntervalString válido.Se
sourceExprnão for válidoyearMonthIntervalString, 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 será 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 diurno
**
Se o targetType for um intervalo diurno e sourceExpr for do tipo:
-
O resultado é um
NULLintervalo de tempo diurno. -
Aplica-se a:
Databricks SQL
Databricks Runtime 11.3 LTS e superiorO numérico é interpretado como o número de unidades inferiores do
targetTypedayTimeIntervalQualifier. Se a unidade forSECOND, quaisquer frações são interpretadas como segundos fracionários. -
sourceExprdeve ser um dayTimeIntervalString válido.Se
sourceExprnão for válidodayTimeIntervalString, 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
sourceExprintervalo é 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 é um BOOLEANO e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipoBOOLEAN. -
Se
sourceExpré:0: O resultado éfalse.-
NULL: O resultado éNULL. -
special floating point value: O resultado étrue.
Caso contrário, o resultado é
true.-
-
Se
sourcEexprfor (sem distinção entre 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 retorna uma sintaxe de entrada inválida para erro booleano de tipo.
Use try_cast para transformar erros de dados inválidos em
NULL. -
-
Aplicam-se as regras do tipo do valor efetivo do tipo
VARIANT.
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 é um BINÁRIO e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipoBINARY. -
O resultado é a codificação UTF-8 do
surceExpr. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
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
MATRIZ
Se o targetType é um ARRAY < targetElementType > e sourceExpr é do tipo:
-
O resultado é um
NULLdostargeType. -
Se a conversão de
sourceElementTypeparatargetElementTypefor suportada, o resultado será umARRAY<targetElementType>com todos os elementos convertidos para otargetElementType.O Azure Databricks gera um erro se a transmissão não for suportada ou se algum dos elementos não puder ser transmitido.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL. -
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados.
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 é um MAP < targetKeyType, targetValueType > e sourceExpr é do tipo:
-
O resultado é um
NULLdostargetType. <MAP sourceKeyType, sourceValueType>
Se as conversões de
sourceKeyTypeparatargetKeyTypeesourceValueTypeparatargetValueTypeforem suportadas, o resultado será umMAP<targetKeyType, targetValueType>com todas as chaves convertidas para otargetKeyTypee todos os valores convertidos para otargetValueType.O Azure Databricks apresenta um erro se a conversão não for suportada ou se alguma das chaves ou valores não puder ser convertida.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.-
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Cada
sourceFieldNamedo tipoSTRINGé convertido emtargetKeyTypee mapeado para uma chave de mapa. Cada valor de campo de origem desourceFieldTypeé convertido e mapeado para o respetivo valor detargetValueTypemapa.O Azure Databricks gera um erro se não houver suporte para quaisquer transmissões ou se algum dos valores de campo ou valores de chave não puder ser transmitido.
Use try_cast para transformar dados inválidos ou erros de estouro 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 é um STRUCT <[targetFieldName : targetFieldType [NOT NULL] [COMMENT str] [, ...]] > e sourceExpr é do tipo:
-
O resultado é um
NULLdostargetType. STRUCT < [sourceFieldName : sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
O
sourceExprpode ser lançado paratargetTypese todas estas 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ções de origemNOT NULLe fonteCOMMENTs não precisam corresponder aotargetTypee são ignorados.O Azure Databricks gera um erro se a transmissão não for suportada ou se algum dos campos não puder ser transmitido.
Use try_cast para transformar dados inválidos ou erros de estouro em
NULL.-
Aplicam-se as regras de tipo para o valor real mantido pelo
VARIANTtipo de dados. OBJECT < [sourceFieldName : sourceFieldType [, ...]] >
Todos os
sourceFieldNames são emparelhados comsourceFieldNames. Cada valor do campo de origem desourceFieldTypeé transformado para combinar comtargetValueTypee mapeado para o respetivo valor no mapa.Se a
targetFieldNamenão tiver correspondência, o valor do campo éNULL.Se a
sourceFieldNamenão for compatível, o campo será ignorado.O Azure Databricks gera um erro se não houver suporte para quaisquer transmissões ou se algum dos valores de campo ou valores de chave não puder ser transmitido.
Use try_cast para transformar dados inválidos ou erros de estouro 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 é uma VARIANTE e sourceExpr é do tipo:
-
O resultado é um
NULLdo tipoVARIANT. -
O resultado é um
VARIANT, representando o valor numérico. A precisão dosDECIMALtipos deve ser <= 38.Todos os números integrais são mapeados para
BIGINT.Todos os valores
DECIMALsão mapeados com sua precisão e escala mais estreitas. -
O resultado é um
VARIANT, representando oSTRINGvalor. -
O resultado é um
VARIANT, representando oDATEvalor. -
O resultado é um
VARIANT, representando oTIMESTAMPvalor. -
O resultado é um
VARIANT, representando oTIMESTAMP NTZvalor. -
O resultado é um
VARIANT, representando oBOOLEANvalor. -
O resultado é um
VARIANT, representando oBINARYvalor. -
Se a conversão de
sourceElementTypeparaVARIANTfor suportada, o resultado seráVARIANT, representandoARRAY<sourceElementType>.O Azure Databricks gera um erro se a transmissão não for suportada.
-
Esta conversão não é diretamente suportada, uma vez que
VARIANTnão consegue preservar a ordem dos campos de struct. Use to_variant_object para converter oSTRUCTemVARIANTcomo umOBJECT. -
Esta conversão não é suportada diretamente, pois
VARIANTnão pode preservar o tipoMAP. Use to_variant_object para converter oMAPemVARIANTcomoOBJECT. As chaves de mapa devem ser strings.O Azure Databricks gera um erro se a transmissão não for suportada.
Use try_cast para transformar dados inválidos ou erros de estouro 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