.
(点号)运算符
适用于: Databricks SQL Databricks Runtime
返回 STRUCT
中的 fieldIdentifier
值,或者 MAP
中 keyIdentifier
表示的值。
语法
structExpr . fieldIdentifier
mapExpr . keyIdentifier
参数
structExpr
:一个STRUCT
表达式。fieldIdentifier
:structExpr
中字段的标识符。mapExpr
:具有STRING
类型的键的MAP
表达式。keyIdentifier
:与mapExpr
中的键值匹配的标识符。
返回
与 fieldIdentifier
的类型或者与 mapExpr
值的类型匹配的类型。
names 的解优先于此运算符的解。
也就是说,如果用点分隔一系列标识符,则 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
,在找不到 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