.
Operator (punkttecken)
Gäller för: Databricks SQL Databricks Runtime
Returnerar ett fieldIdentifier
värde i ett STRUCT
eller ett värde med keyIdentifier
i en MAP
.
Syntax
structExpr . fieldIdentifier
mapExpr . keyIdentifier
Argument
structExpr
: EttSTRUCT
uttryck.fieldIdentifier
: En identifierare för fältet istructExpr
.mapExpr
: EttMAP
uttryck med nycklar av typenSTRING
.keyIdentifier
: En identifierare som matchar ett nyckelvärde imapExpr
.
Returer
En typ som matchar värdenas fieldIdentifier
eller typen mapExpr
.
Namnmatchning har företräde framför den här operatorns lösning.
Med tanke på en serie identifierare avgränsade med punkter löser Azure Databricks det längsta möjliga kvalificerade namnet.
Om det lösta namnet är ett MAP
eller STRUCT
om Azure Databricks tolkar de återstående identifierarna med hjälp av punktteckenoperatorn.
När det används med en STRUCT
verifierar Azure Databricks förekomsten av fieldIdentifier
i -structen när -instruktionen kompileras.
När den används med , MAP
och det inte finns någon nyckel som matchar keyIdentifier
, returnerar Azure Databricks null.
Om du vill returnera NULL
använder du i stället funktionen try_element_at.
Varning
Om spark.sql.ansi.enabled är i Databricks Runtime blir NULL
resultatet om ingen matchande nyckel hittas för mapExpr
.false
Exempel
-- 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