.
Оператор . (точка)
Область применения: Databricks SQL Databricks Runtime
Возвращает значение fieldIdentifier
в STRUCT
или значение от keyIdentifier
в MAP
.
Синтаксис
structExpr . fieldIdentifier
mapExpr . keyIdentifier
Аргументы
-
structExpr
: ВыражениеSTRUCT
. -
fieldIdentifier
: идентификатор для поля вstructExpr
. -
mapExpr
: выражениеMAP
с ключами типаSTRING
. -
keyIdentifier
: идентификатор сопоставления значения ключа вmapExpr
.
Возвраты
Тип, соответствующий fieldIdentifier
или типу значений mapExpr
.
Разрешение имен имеет приоритет над разрешением этого оператора.
То есть, учитывая ряд идентификаторов, разделенных точками, Azure Databricks будет разрешать самое длинное возможное полное имя.
Если разрешенным именем является MAP
или STRUCT
, Azure Databricks интерпретирует оставшиеся идентификаторы с помощью оператора знака точки.
При использовании с STRUCT
Azure Databricks проверяет наличие fieldIdentifier
в структуре при компиляции инструкции.
При использовании с ключом MAP
, который соответствует keyIdentifier
, Azure Databricks возвращает значение NULL.
Чтобы вернуть NULL
, используйте функцию try_element_at.
Предупреждение
В Databricks Runtime, если для параметра spark.sql.ansi.enabled нет false
NULL
соответствующего mapExpr
ключа.
Примеры
-- Names take precedence over the dot sign operator
> CREATE SCHEMA a;
> CREATE TABLE a.a(a struct<a INT, b STRING>);
> INSERT INTO a.a VALUES (named_struct('a', 5, 'b', 'Spark'));
-- Column `a` in table `a`
> SELECT a.a FROM a.a;
{"a":5,"b":"Spark"}
-- Field `b` in column `a`
> SELECT a.b FROM a.a;
Spark
-- Column `a` in table `a.a`
> SELECT a.a.a FROM a.a;
{"a":5,"b":"Spark"}
-- Field `a` in column `a` in table `a.a`
> SELECT a.a.a.a FROM a.a;
5
-- Resolving a map value:
> SELECT map('three', 3).three;
3
-- Resolving a map value using the [ ] notation:
> SELECT map('three', 3)['three']
3
-- Resolving a map value using back quotes:
> SELECT map('서울시', 'Seoul').`서울시`;
Seoul
-- Cannot resolve a non existing key
> SELECT map('three', 3).four;
NULL