Поделиться через


. Оператор . (точка)

Область применения: флажок 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 нет falseNULL соответствующего 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