JQ (Lakehouse v1)
JQ関数は、Variant列に格納されたJSONデータにjqフィルターを適用できる、集合を返すSQL関数です。この関数を使うと、指定したjqフィルターを適用してJSONデータを処理し、結果を行の集合として返すことができます。
JQ (<jq_expression>, <json_data>)| パラメーター | 説明 |
|---|---|
jq_expression |
jq 構文を使ってJSONデータの処理方法と変換方法を定義する、jq フィルター式です。この式では、JSONオブジェクトや配列内のデータを選択、変更、操作する方法を指定できます。jqがサポートする構文、フィルター、関数については、jq Manualを参照してください。 |
json_data |
jq フィルター式で処理または変換するJSON形式の入力です。JSONオブジェクト、配列、その他の有効なJSONデータ構造を指定できます。 |
JQ関数は、JSON値の集合を返します。各値は、<jq_expression> に基づいて変換または抽出された結果の要素に対応します。
まず、id 列と profile 列を持つ customer_data という名前のテーブルを作成します。profile は、ユーザー情報を格納するJSON型です。
CREATE TABLE customer_data ( id INT, profile JSON);
INSERT INTO customer_data VALUES (1, '{"name": "Alice", "age": 30, "city": "New York"}'), (2, '{"name": "Bob", "age": 25, "city": "Los Angeles"}'), (3, '{"name": "Charlie", "age": 35, "city": "Chicago"}');次の例では、JSONデータから特定のフィールドを抽出します。
SELECT id, jq('.name', profile) AS customer_nameFROM customer_data;
┌─────────────────────────────────────┐│ id │ customer_name │├─────────────────┼───────────────────┤│ 1 │ "Alice" ││ 2 │ "Bob" ││ 3 │ "Charlie" │└─────────────────────────────────────┘次の例では、ユーザーIDと、各ユーザーの年齢に1を加えた値を選択します。
SELECT id, jq('.age + 1', profile) AS updated_ageFROM customer_data;
┌─────────────────────────────────────┐│ id │ updated_age │├─────────────────┼───────────────────┤│ 1 │ 31 ││ 2 │ 26 ││ 3 │ 36 │└─────────────────────────────────────┘次の例では、都市名を大文字に変換します。
SELECT id, jq('.city | ascii_upcase', profile) AS city_uppercaseFROM customer_data;
┌─────────────────────────────────────┐│ id │ city_uppercase │├─────────────────┼───────────────────┤│ 1 │ "NEW YORK" ││ 2 │ "LOS ANGELES" ││ 3 │ "CHICAGO" │└─────────────────────────────────────┘