.
opérateur (signe point)
S’applique à : Databricks SQL Databricks Runtime
Retourne une valeur fieldIdentifier
dans STRUCT
ou une valeur keyIdentifier
dans MAP
.
Syntaxe
structExpr . fieldIdentifier
mapExpr . keyIdentifier
Arguments
structExpr
: expressionSTRUCT
.fieldIdentifier
: identificateur du champ dansstructExpr
.mapExpr
: une expressionMAP
avec des clés de typeSTRING
.keyIdentifier
: une identificateur correspondant à une valeur de clé dansmapExpr
.
Retours
Type correspondant à celui de fieldIdentifier
ou au type des valeurs mapExpr
.
La résolution des noms est prioritaire sur la résolution de cet opérateur.
Autrement dit, pour une série d’identificateurs séparés par des points, Azure Databricks résout le nom qualifié le plus long possible.
Si le nom résolu est un MAP
ou STRUCT
Azure Databricks interprète les identificateurs restants à l’aide de l’opérateur de signe point.
Lorsqu’il est utilisé avec un STRUCT
, Azure Databricks vérifie l’existence du fieldIdentifier
dans le struct lorsque l’instruction est compilée.
Utilisé avec un MAP
, en l’absence de clé correspondant à keyIdentifier
, Azure Databricks retourne Null.
Pour retourner NULL
à la place, utilisez la fonction try_element_at.
Avertissement
Dans Databricks Runtime, si spark.sql.ansi.enabled est false
, le résultat est NULL
si aucune clé correspondante n’est trouvée pour le mapExpr
.
Exemples
-- 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