.
operador (signo de punto)
Se aplica a: Databricks SQL Databricks Runtime
Devuelve un valor fieldIdentifier
en una STRUCT
o un valor por keyIdentifier
en una MAP
.
Sintaxis
structExpr . fieldIdentifier
mapExpr . keyIdentifier
Argumentos
structExpr
: expresiónSTRUCT
.fieldIdentifier
: identificador para el campo dentro destructExpr
.mapExpr
: expresiónMAP
con claves de tipoSTRING
.keyIdentifier
: identificador que coincide con un valor de clave enmapExpr
.
Devoluciones
Tipo que coincide con el de fieldIdentifier
o el tipo de los valores mapExpr
.
La resolución de nombres tiene prioridad sobre la resolución de este operador.
Es decir, dada una serie de identificadores separados por puntos, Azure Databricks resolverá el nombre completo más largo posible.
Si el nombre resuelto es una MAP
o STRUCT
, Azure Databricks interpretará los identificadores restantes mediante el operador de signo de punto.
Cuando se usa con STRUCT
, Azure Databricks comprueba la existencia de fieldIdentifier
en la estructura cuando se compila la instrucción.
Cuando se usa con MAP
y no hay ninguna clave que coincida con keyIdentifier
, Azure Databricks devuelve null.
Para devolver NULL
en su lugar, use la función try_element_at.
Advertencia
En Databricks Runtime, si spark.sql.ansi.enabled es false
, el resultado es NULL
si no se encuentra ninguna clave coincidente para el mapExpr
.
Ejemplos
-- 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