Share via


operador . (sinal de ponto)

Aplica-se a:marca de seleção positiva Databricks SQL marca de seleção positiva Databricks Runtime

Retorna um valor fieldIdentifier em um STRUCT ou um valor por keyIdentifier em um MAP.

Sintaxe

structExpr . fieldIdentifier

mapExpr . keyIdentifier

Argumentos

  • structExpr: uma expressão STRUCT.
  • fieldIdentifier: um identificador para o campo dentro de structExpr.
  • mapExpr: uma expressão MAP com as chaves do tipo STRING.
  • keyIdentifier: um identificador que corresponde ao valor de chave no mapExpr.

Retornos

Um tipo que corresponde ao fieldIdentifier ou ao tipo ou dos valores mapExpr.

A resolução de nomes tem precedência sobre a resolução desse operador. Ou seja, considerando uma série de identificadores separados por pontos, o Azure Databricks resolverá o nome qualificado mais longo possível. Se o nome resolvido for um MAP ou STRUCT, o Azure Databricks interpretará os identificadores restantes usando o operador de sinal de ponto.

Quando usado com um STRUCT, o Azure Databricks verifica a existência do fieldIdentifier na struct no momento em que a instrução é compilada.

Quando usado com um MAP e não há uma chave que corresponda a keyIdentifier, o Azure Databricks retorna nulo. Para retornar NULL, use a função try_element_at.

Aviso

No Databricks Runtime, se spark.sql.ansi.enabled for false o resultado, será NULL se nenhuma chave correspondente for encontrada para o mapExpr.

Exemplos

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