メインコンテンツまでスキップ
バージョン: Candidate-4.1

variant_query

VARIANT オブジェクト内でパス式によって特定できる要素の値を取得し、VARIANT 型の値として返します。

本関数は、Parquet 形式の Iceberg テーブルから読み取った VARIANT データに対して、サブ要素のナビゲーションおよび抽出を行うために使用されます。

構文

variant_query(variant_expr, path)

パラメータ

  • variant_expr: VARIANT オブジェクトを表す式です。通常は、Iceberg テーブルの VARIANT 列を指定します。

  • path: VARIANT オブジェクト内の要素を指定するパスを表す式です。文字列型で指定します。パスの構文は JSON Path に類似しています。

    • $:ルート要素を表します。
    • .:オブジェクトのフィールドにアクセスします。
    • [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 |
+---------+

Keywords

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.