跳到主要内容
版本:Candidate-4.1

variant_query

查询 VARIANT 对象中可以通过路径表达式定位的元素的值,并返回 VARIANT 值。

此函数用于从 Parquet 格式的 Iceberg 表中读取的 VARIANT 数据中导航和提取子元素。

语法

variant_query(variant_expr, path)

参数

  • variant_expr:表示 VARIANT 对象的表达式。通常是来自 Iceberg 表的 VARIANT 列。

  • path:表示 VARIANT 对象中元素路径的表达式。此参数的值是一个字符串。路径语法类似于 JSON 路径:

    • $ 表示根元素
    • . 用于访问对象字段
    • [index] 用于访问数组元素(基于 0 的索引)
    • 包含特殊字符的字段名可以用引号括起来:$."field.name"

返回值

返回 VARIANT 值。

如果元素不存在或路径无效,函数返回 NULL。

示例

示例 1:查询 VARIANT 值的根元素。

SELECT variant_query(data, '$') AS root_data
FROM bluesky
LIMIT 1;
+-------------------------------------------------------------------------------------------+
| root_data |
+-------------------------------------------------------------------------------------------+
| {"commit":{"collection":"app.bsky.graph.follow","operation":"delete","rev":"3lcgs4mw...} |
+-------------------------------------------------------------------------------------------+

示例 2:查询 VARIANT 对象中的嵌套字段。

SELECT variant_query(data, '$.commit') AS commit_info
FROM bluesky
LIMIT 1;
+--------------------------------------------------------------------------------+
| commit_info |
+--------------------------------------------------------------------------------+
| {"collection":"app.bsky.graph.follow","operation":"delete","rev":"3lcgs4mw...} |
+--------------------------------------------------------------------------------+

示例 3:使用 variant_typeof 检查嵌套字段的类型。

SELECT
variant_typeof(variant_query(data, '$.commit')) AS commit_type,
variant_typeof(variant_query(data, '$.time_us')) AS time_type
FROM bluesky
LIMIT 1;
+-------------+-----------+
| commit_type | time_type |
+-------------+-----------+
| Object | Int64 |
+-------------+-----------+

示例 4:将结果转换为 SQL 类型。

SELECT CAST(variant_query(data, '$.commit') AS STRING) AS commit_info
FROM bluesky
LIMIT 1;
+-----------------------------------------------------------------------------------+
| commit_info |
+-----------------------------------------------------------------------------------+
| {"cid":"bafyreia3k...","collection":"app.bsky.feed.repost","operation":"create"...} |
+-----------------------------------------------------------------------------------+

示例 5:使用 variant_query 结果进行过滤。

SELECT COUNT(*) AS total
FROM bluesky
WHERE variant_query(data, '$.commit.record') IS NOT NULL;
+---------+
| total |
+---------+
| 9500118 |
+---------+

keyword

VARIANT_QUERY,VARIANT

Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.