Share via


. (點符號) 運算子

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

fieldIdentifier傳回 中的 STRUCT 值,或 中的 MAPkeyIdentifier

語法

structExpr . fieldIdentifier

mapExpr . keyIdentifier

參數

  • structExprSTRUCT:運算式。
  • fieldIdentifier:內 structExpr 欄位的識別碼
  • mapExprMAP:具有 型 STRING 別索引鍵的運算式。
  • keyIdentifier:符合 中 mapExpr 索引鍵值的識別碼

返回

符合 的 fieldIdentifier 型別,或 值的型 mapExpr 別。

名稱解析的優先順序高於這個運算子的解析。 也就是說,假設有一系列以點分隔 的識別碼 ,Azure Databricks 會解析最長的限定名稱。 如果解析的名稱是 MAPSTRUCT Azure Databricks,將會使用點符號運算子解譯其餘識別碼。

搭配 使用 STRUCT 時,Azure Databricks 會在編譯 語句時驗證 結構中是否存在 fieldIdentifier

搭配 MAP 使用 時,沒有符合 keyIdentifier 的索引鍵,Azure Databricks 會傳回 Null。 若要傳回 NULL ,請改用 try_element_at 函式

警告

在 Databricks Runtime 中,如果spark.sql.ansi.enabledfalse ,則如果找不到相符的 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