.(点号)运算符

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

返回 STRUCT 中的 fieldIdentifier 值,或者 MAPkeyIdentifier 表示的值。

语法

structExpr . fieldIdentifier

mapExpr . keyIdentifier

参数

  • structExpr:一个 STRUCT 表达式。
  • fieldIdentifierstructExpr 中字段的标识符
  • mapExpr:具有 STRING 类型的键的 MAP 表达式。
  • keyIdentifier:与 mapExpr 中的键值匹配的标识符

返回

fieldIdentifier 的类型或者与 mapExpr 值的类型匹配的类型。

names 的解优先于此运算符的解。 也就是说,如果用点分隔一系列标识符,则 Azure Databricks 将求解可能最长的限定名称。 如果解出的名称是 MAPSTRUCT,则 Azure Databricks 将使用点号运算符来解释剩余的标识符。

STRUCT 一起使用时,Azure Databricks 将在编译语句时验证 fieldIdentifier 是否在结构中存在。

当与 MAP 一起使用并且没有与 keyIdentifier 匹配的键时,Azure Databricks 将返回 null。 若要返回 NULL,请改用 try_element_at 函数

警告

在 Databricks Runtime 中,如果 spark.sql.ansi.enabledfalse,在找不到 mapExpr 的匹配键的情况下,结果为 NULL

示例

-- 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