Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция
Область применения:
Databricks SQL
Databricks Runtime
Приводит значение expr к типу данных type. Этот оператор является синонимом оператора ::.
Синтаксис
cast(sourceExpr AS targetType)
Аргументы
-
sourceExpr: любое выражение, допускающее приведение. -
targetType— тип данных результата.
Возвраты
Результат имеет тип targetType.
Допустимы следующие сочетания приведения типов данных:
| Источник (строка) Цель (столбец) | ПУСТОТА | числовой | СТРУНА | ДАТА | TIMESTAMP | TIMESTAMP_NTZ | Интервал в годах и месяцах | интервал дня | БУЛЕВ | ДВОИЧНЫЙ | МАССИВ | КАРТА | СТРУКТУРА | ВАРИАНТ | ОБЪЕКТ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ПУСТОТА | У | У | У | У | У | У | У | У | У | У | У | У | У | У | Н |
| числовой | Н | У | У | Н | У | Н | У | У | У | Н | Н | Н | Н | У | Н |
| СТРУНА | Н | У | У | У | У | У | У | У | У | У | Н | Н | Н | У | Н |
| ДАТА | Н | Н | У | У | У | У | Н | Н | Н | Н | Н | Н | Н | У | Н |
| TIMESTAMP | Н | У | У | У | У | У | Н | Н | Н | Н | Н | Н | Н | У | Н |
| TIMESTAMP_NTZ | Н | Н | У | У | У | У | Н | Н | Н | Н | Н | Н | Н | У | Н |
| Интервал в годах и месяцах | Н | У | У | Н | Н | Н | У | Н | Н | Н | Н | Н | Н | Н | Н |
| интервал дня | Н | У | У | Н | Н | Н | Н | У | Н | Н | Н | Н | Н | Н | Н |
| БУЛЕВ | Н | У | У | Н | У | Н | Н | Н | У | Н | Н | Н | Н | У | Н |
| ДВОИЧНЫЙ | Н | У | У | Н | Н | Н | Н | Н | Н | У | Н | Н | Н | У | Н |
| МАССИВ | Н | Н | У | Н | Н | Н | Н | Н | Н | Н | У | Н | Н | У | Н |
| КАРТА | Н | Н | У | Н | Н | Н | Н | Н | Н | Н | Н | У | Н | Н | Н |
| СТРУКТУРА | Н | Н | У | Н | Н | Н | Н | Н | Н | Н | Н | Н | У | Н | Н |
| ВАРИАНТ | Н | У | У | У | У | У | Н | Н | У | У | У | У | У | У | Н |
| ОБЪЕКТ | Н | Н | Н | Н | Н | Н | Н | Н | Н | Н | Н | У | У | Н | Н |
Правила и ограничения на основе targetType.
Предупреждение
В Databricks Runtime, если параметр spark.sql.ansi.enabledfalse, переполнение не приведет к ошибке, но вместо этого будет "упаковывать" результат.
Значение sourceExpr с недопустимым форматом или недопустимыми символами targetType приведет к NULL.
числовой
Если targetType является числом, а sourceExpr имеет тип:
-
Результатом является
NULLзаданного числового типа. -
Если
targetTypeэто целочисленное число, результатsourceExprусечен до целого числа.В противном случае результат округляется
sourceExprдо подходящего масштабаtargetType.Если значение выходит за диапазон
targetType, возникает ошибка переполнения.Используйте try_cast для преобразования ошибок переполнения в
NULL. -
sourceExprсчитывается как литеральное значениеtargetType.Если
sourceExprне соответствует формату литеральных значений, возникает ошибка.Если значение не входит в диапазон
targetType, возникает ошибка переполнения.Используйте try_cast, чтобы преобразовать ошибки переполнения и недопустимого формата в
NULL. -
Результатом будет число секунд между
1970-01-01 00:00:00 UTCиsourceExpr.Если
targetTypeявляется целочисленным, результат усекается до целого числа.В противном случае результат округляется, чтобы соответствовать доступной шкале
targetType.Если результат не входит в диапазон
targetType, возникает ошибка переполнения.Используйте try_cast для преобразования ошибок переполнения в
NULL. -
Область применения:
Databricks SQL
Databricks Runtime 11.3 LTS и вышеЦелевой тип должен быть точным числовым значением.
Учитывая
INTERVAL upper_unit TO lower_unit, результат измеряется в общем числеlower_unit. Еслиlower_unitравноSECOND, дробные секунды хранятся справа от десятичной запятой. Для всех остальных интервалов результатом всегда является целое число. -
Если
sourceExprравно:-
true— результатом будет 1. -
false— результатом будет 0. -
NULL— результатом будетNULL.
-
-
Правила типа фактического
VARIANTзначения типа применяются.
Примеры
> 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
СТРУНА
Если sourceExpr является STRING, результирующий STRING, наследует коллацию из sourceExpr.
Во всех остальных случаях сортировка результирующего STRING — это сортировка по умолчанию .
Чтобы изменить коллацию, добавьте выражение collate.
Если targetType является типомSTRING, а sourceExpr имеет тип:
-
Результатом является
NULLстрока. -
Результатом будет литеральное число с необязательным знаком минуса и без начальных нулей, за исключением одной цифры слева от десятичной точки. Если
targetTypeявляетсяDECIMAL(p, s), в которомsбольше 0, добавляется десятичная точка и конечные нули для масштаба. -
Если абсолютное число меньше
10,000,000и больше или равно0.001, результат выражается без экспоненциального представления по меньшей мере с одной цифрой на обеих сторонах десятичной точки.В противном случае Azure Databricks использует мантиссу, за которой следует
Eи экспонент. Мантисса имеет необязательный начальный знак минуса, за которым следует одна цифра слева от десятичной точки, и минимальное число цифр больше нуля справа. Экспонента имеет необязательный начальный знак минуса. -
Если год находится в диапазоне от 9999 г. до нашей эры до 9999 г. нашей эры, результатом будет dateString в виде
-YYYY-MM-DDиYYYY-MM-DDсоответственно.Для лет до или после этого диапазона к компоненту года добавляется необходимое количество цифр, и для обозначения нашей эры используется
+. -
Если год находится в диапазоне от 9999 г. до нашей эры до 9999 г. нашей эры, результатом будет timestampString в виде
-YYYY-MM-DD hh:mm:ssиYYYY-MM-DD hh:mm:ssсоответственно.Для лет до или после этого диапазона к компоненту года добавляется необходимое количество цифр, и для обозначения нашей эры используется
+.При необходимости добавляются доли секунд
.f.... -
Если год находится в диапазоне от 9999 г. до нашей эры до 9999 г. нашей эры, результатом будет timestampString в виде
-YYYY-MM-DD hh:mm:ssиYYYY-MM-DD hh:mm:ssсоответственно.Для лет до или после этого диапазона к компоненту года добавляется необходимое количество цифр, и для обозначения нашей эры используется
+.При необходимости добавляются доли секунд
.f.... -
Результатом будет его самое краткое представление как литерала интервала. Если интервал отрицательный, знак вставляется в
interval-string. Для единиц меньше 10 начальные нули опускаются.Типичная строка year-month interval имеет следующий вид:
INTERVAL 'Y' YEARINTERVAL 'Y-M' YEAR TO MONTHINTERVAL 'M' MONTH
-
Результатом будет его самое краткое представление как литерала интервала. Если интервал отрицательный, знак вставляется в
interval-string. Для единиц меньше 10 начальные нули опускаются.Типичная строка day-time interval имеет следующий вид:
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
-
Результат
trueявляется логическим значениемSTRINGлитералаtrue. Дляfalseэто строковый литералfalse. ДляNULLэто NULL-строка. -
Результатом будет двоичное свойство
sourceExpr, которое интерпретируется как последовательность символов UTF-8.Azure Databricks не проверяет символы UTF-8. Приведение от
BINARYкSTRINGникогда не приводит к внедрению символов подстановки или не вызывает ошибок. -
Результатом будет разделенный запятыми список приведенных элементов, которые заключаются в квадратные скобки
[ ]. За каждой запятой следует один пробел. ЭлементNULLпереводится в литералnull.Azure Databricks не заключает отдельные элементы в кавычки и не выделяет их, даже если они содержат скобки или запятые.
-
Результатом будет разделенный запятыми список приведенных пар "ключ — значение", которые заключаются в фигурные скобки
{ }. За каждой запятой следует один пробел. Каждая пара "ключ — значение" разделяется->. Значение отображенияNULLпреобразуется в буквальное значениеnull.Azure Databricks не берет в кавычки или иначе помечает отдельные ключи или значения, которые сами могут содержать фигурные скобки,
->или запятые. -
Результат представляет собой список значений полей приведения, разделенных запятыми и заключенных в фигурные скобки
{ }. За каждой запятой следует один пробел. Значение поляNULLпреобразуется в литеральное значениеnull.Azure Databricks не цитирует или помечает отдельные значения полей, которые могут содержать фигурные скобки или запятые.
-
Правила типа фактического
VARIANTзначения типа применяются.
Примеры
> 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
Дата
Если targetType является типомDATE, а sourceExpr имеет тип:
-
Результатом является
NULLDATE. -
sourceExprдолжно быть допустимым значением dateString.Если
sourceExprне является допустимымdateString, Azure Databricks возвращает ошибку.Используйте try_cast, чтобы преобразовать ошибки о недопустимых данных в
NULL. -
Результатом будет дата из временной метки
sourceExpr. -
Результатом является часть даты timestamp_ntz
sourceExpr. -
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются.
Примеры
> 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
Если targetType является типомTIMESTAMP, а sourceExpr имеет тип:
-
Результатом является
NULLDATE. -
sourceExpr— это количество секунд с момента1970-01-01 00:00:00 UTC.Доли времени меньше микросекунды усекаются.
Если значение не входит в диапазон
TIMESTAMP, возникает ошибка переполнения.Используйте try_cast для преобразования ошибок переполнения в
NULL. -
sourceExprдолжно быть допустимым значением timestampString.Если
sourceExprне является допустимымtimestampString, Azure Databricks возвращает ошибку.Используйте try_cast, чтобы преобразовать ошибки о недопустимых данных в
NULL. -
Результатом является
sourceExprDATEв00:00:00часах.
Результатом является значение метки времени с полями года, месяца, дня, часа, минуты и секунды из timestamp_ntz sourceExpr.
-
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются.
Примеры
> 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
Если targetType является типомTIMESTAMP_NTZ, а sourceExpr имеет тип:
-
Результатом является
NULLDATE. -
sourceExprдолжно быть допустимым значением timestampString.Если
sourceExprне является допустимымtimestampString, Azure Databricks возвращает ошибку.Используйте try_cast, чтобы преобразовать ошибки о недопустимых данных в
NULL. -
Результатом будет DATE для
sourceExprв00:00:00ч. -
Результатом является локальное время как
sourceExprв часовом поясе сеанса. -
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются.
Примеры
> 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
Интервал год-месяц
Если targetType является интервалом "год-месяц", а sourceExpr — типа:
-
Результатом является годо-месячный
NULLинтервал. -
Область применения:
Databricks SQL
Databricks Runtime 11.3 LTS и вышеЧисловое значение интерпретируется как число нижних единиц
targetTypeгодаmonthIntervalQualifier. -
sourceExprдолжно быть допустимым значением yearMonthIntervalString.Если
sourceExprне является допустимымyearMonthIntervalString, Azure Databricks возвращает ошибку.Используйте try_cast, чтобы преобразовать ошибки о недопустимых данных в
NULL. -
targetTypeЕсли yearMonthIntervalQualifier содержитMONTHзначение остается неизменным, но переосмыслено для соответствия целевому типу.В противном случае, если yearMonthIntervalQualifier исходного типа включает
MONTH, то результат усекается до целого числа лет.
Примеры
> 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
Интервал времени дня
Если targetType — это дневной временной интервал, а sourceExpr относится к типу:
-
Результатом является
NULLдневной интервал. -
Область применения:
Databricks SQL
Databricks Runtime 11.3 LTS и вышеЧисловое значение интерпретируется как число нижних единиц
targetTypedayTimeIntervalQualifier. Если единицей являетсяSECOND, доли интерпретируются как доли секунды. -
Строка
sourceExprдолжна быть допустимой строкой dayTimeIntervalString.Если
sourceExprне является допустимымdayTimeIntervalString, Azure Databricks возвращает ошибку.Используйте try_cast, чтобы преобразовать ошибки о недопустимых данных в
NULL. -
Если dayTimeIntervalQualifier
targetTypeвключает наименьшую единицу исходного типа dayTimeIntervalQualifier, значение остается неизменным, но переосмыслено для соответствия целевому типу.В противном случае интервал
sourceExprусекается для обеспечения соответствия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
Булевый
Если targetType является типом BOOLEAN, а sourceExpr — типом:
-
Результатом является
NULLтипаBOOLEAN. -
Если
sourceExprравно:0— результатом будетfalse.-
NULL— результатом будетNULL. -
special floating point value— результатом будетtrue.
В противном случае результат будет
true.-
-
Если
sourcEexprимеет значение (без учета регистра):-
'T', 'TRUE', 'Y', 'YES', or '1'— результатом будетtrue. -
'F', 'FALSE', 'N', 'NO', or '0'— результатом будетfalse. -
NULL— результатом будетNULL.
В противном случае Azure Databricks возвращает ошибку недопустимого синтаксиса ввода для типа boolean.
Используйте try_cast, чтобы преобразовать ошибки о недопустимых данных в
NULL. -
-
Правила типа фактического
VARIANTзначения типа применяются.
Примеры
> 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
ДВОИЧНЫЙ
Если targetType имеет тип BINARY, а sourceExpr относится к типу:
-
Результатом является
NULLтипаBINARY. -
Результатом будет кодирование UTF-8 для
surceExpr. -
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются.
Примеры
> 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
МАССИВ
Если targetType — это ARRAY < targetElementType > и sourceExpr имеет тип:
-
Результатом является
NULLtargeTypeрезультат . -
Если приведение
sourceElementTypeкtargetElementTypeподдерживается, результатом будетARRAY<targetElementType>, в котором все элементы приведены кtargetElementType.Azure Databricks вызывает ошибку, если приведение не поддерживается или если любой из элементов не может быть приведён.
Используйте try_cast, чтобы преобразовать недопустимые данные или ошибки переполнения в
NULL. -
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются.
Примеры
> 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]
Карта
Если targetType является MAP < targetKeyType, targetValueType > и sourceExpr имеет тип:
-
Результатом является
NULLtargetTypeрезультат . MAP <sourceKeyType, sourceValueType >
Если приведения от
sourceKeyTypeкtargetKeyTypeиsourceValueTypeкtargetValueTypeподдерживаются, результатом будетMAP<targetKeyType, targetValueType>, в котором все ключи приведены кtargetKeyType, а все значения — кtargetValueType.Azure Databricks вызывает ошибку, если приведение не поддерживается или если любой из ключей или значений не может быть приведен.
Используйте try_cast, чтобы преобразовать недопустимые данные или ошибки переполнения в
NULL.-
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Каждый
sourceFieldNameтипаSTRINGприводится кtargetKeyTypeи отображается на ключ карты. Каждое значение поляsourceFieldTypeпреобразуетсяtargetValueTypeи отображается на соответствующее значение из отображения.Azure Databricks вызывает ошибку, если какие-либо преобразования не поддерживаются или если какое-либо из значений полей или ключевых значений не может быть преобразовано.
Используйте try_cast, чтобы преобразовать недопустимые данные или ошибки переполнения в
NULL.
Примеры
> 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}
структура
targetType Если используется STRUCT <[targetFieldName: targetFieldType [NOT NULL] [COMMENT str] [, ...]] > и sourceExpr имеет тип:
-
Результатом является
NULLtargetTypeрезультат . STRUCT < [sourceFieldName: sourceFieldType [NOT NULL] [COMMENT str] [, ...]] >
Можно
sourceExprпривести кtargetType, если все эти условия истинны.- Тип источника имеет такое же количество полей, что и целевой объект.
- Для всех полей
sourceFieldTypeNможно привести кtargetFieldTypeN. - Для всех значений полей: значение исходного поля N может быть приведено к типу
targetFieldTypeN, и значение не равно null, если целевое поле N помечено какNOT NULL.
Значения
sourceFieldName, ограниченияNOT NULLисточника иCOMMENTисточника не обязаны соответствоватьtargetTypeи игнорируются.Azure Databricks вызывает исключение, если приведение не поддерживается или если какие-либо поля не могут быть приведены.
Используйте try_cast, чтобы преобразовать недопустимые данные или ошибки переполнения в
NULL.-
Правила типов для фактического значения, содержащегося в типе данных
VARIANT, применяются. OBJECT < [sourceFieldName: sourceFieldType [, ...]] >
Все
sourceFieldNames совпадают сsourceFieldNames. Каждое значение исходного поляsourceFieldTypeприводится к сопоставленнойtargetValueTypeи отображается на соответствующую карту.Если
targetFieldNameне совпадает, то значение равноNULL.Если
sourceFieldNameне совпадает, поле игнорируется.Azure Databricks вызывает ошибку, если какие-либо преобразования не поддерживаются или если какое-либо из значений полей или ключевых значений не может быть преобразовано.
Используйте try_cast, чтобы преобразовать недопустимые данные или ошибки переполнения в
NULL.
Примеры
> 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"}
ВАРИАНТ
targetType Если используется вариант VARIANT и sourceExpr имеет тип:
-
Результатом является
NULLтипаVARIANT. -
Результатом является значение
VARIANT, представляющее числовое значение. Точность типовDECIMALдолжна быть равна <= 38.Все целочисленные числовые значения сопоставляются с
BIGINT.Все
DECIMALзначения сопоставляются с самой узкой точностью и масштабом. -
Результатом является
VARIANT, представляющее собой значениеSTRING. -
Результатом является
VARIANT, представляющее собой значениеDATE. -
Результатом является
VARIANT, представляющее собой значениеTIMESTAMP. -
Результатом является
VARIANT, представляющее собой значениеTIMESTAMP NTZ. -
Результатом является
VARIANT, представляющее собой значениеBOOLEAN. -
Результатом является
VARIANT, представляющее собой значениеBINARY. -
Если приведение из
sourceElementTypeвVARIANTподдерживается, результатом будетVARIANT, который представляетARRAY<sourceElementType>.Azure Databricks возвращает ошибку, если приведение не поддерживается.
-
Это приведение не поддерживается напрямую, так как
VARIANTне может сохранять порядок полей структуры. Используйте to_variant_object для преобразованияSTRUCTвVARIANTв качествеOBJECT. -
Этот приведение типов не поддерживается напрямую, так как
VARIANTне может сохранить типMAP. Используйте to_variant_object для преобразованияMAPвVARIANTв качествеOBJECT. Ключи карты должны быть строками.Azure Databricks возвращает ошибку, если приведение не поддерживается.
Используйте try_cast, чтобы преобразовать недопустимые данные или ошибки переполнения в
NULL.
Примеры
> SELECT cast(NULL AS VARIANT);
NULL
> SELECT cast(5.1000 AS VARIANT);
5.1
> SELECT schema_of_variant(cast(5 AS VARIANT));
BIGINT