Variant
VARIANT 类型可以存储任何其他类型的值,包括 NULL、BOOLEAN、NUMBER、STRING、ARRAY 和 OBJECT,其内部值可以是任意层级的嵌套结构,非常灵活,适用于存储各种数据。VARIANT 也可以称为 JSON,更多信息请参考 JSON 网站。
以下是在 Databend 中插入和查询 Variant 数据的示例:
创建表:
CREATE TABLE customer_orders(id INT64, order_data VARIANT);
向表中插入不同类型的数据:
INSERT INTO
customer_orders
VALUES
(
1,
'{"customer_id": 123, "order_id": 1001, "items": [{"name": "Shoes", "price": 59.99}, {"name": "T-shirt", "price": 19.99}]}'
),
(
2,
'{"customer_id": 456, "order_id": 1002, "items": [{"name": "Backpack", "price": 79.99}, {"name": "Socks", "price": 4.99}]}'
),
(
3,
'{"customer_id": 123, "order_id": 1003, "items": [{"name": "Shoes", "price": 59.99}, {"name": "Socks", "price": 4.99}]}'
);
查询结果:
SELECT * FROM customer_orders;
结果:
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ id │ order_data │
├─────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 1 │ {"customer_id":123,"items":[{"name":"Shoes","price":59.99},{"name":"T-shirt","price":19.99}],"order_id":1001} │
│ 2 │ {"customer_id":456,"items":[{"name":"Backpack","price":79.99},{"name":"Socks","price":4.99}],"order_id":1002} │
│ 3 │ {"customer_id":123,"items":[{"name":"Shoes","price":59.99},{"name":"Socks","price":4.99}],"order_id":1003} │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
访问 JSON 中的元素
通过索引访问
VARIANT 类型包含一个数组,该数组是一个从零开始的数组,类似于许多其他编程语言。数组中的每个元素也是 VARIANT 类型。可以使用方括号通过索引访问元素。
示例
创建表:
-- 创建一个表来存储用户的兴趣爱好
CREATE TABLE user_hobbies(user_id INT64, hobbies VARIANT NULL);
向表中插入示例数据:
INSERT INTO user_hobbies
VALUES
(1, '["Cooking", "Reading", "Cycling"]'),
(2, '["Photography", "Travel", "Swimming"]');
检索每个用户的第一个兴趣爱好:
SELECT
user_id,
hobbies [0] AS first_hobby
FROM
user_hobbies;
结果:
┌─────────────────────────────────────┐
│ user_id │ first_hobby │
├─────────────────┼───────────────────┤
│ 1 │ "Cooking" │
│ 2 │ "Photography" │
└─────────────────────────────────────┘
检索每个用户的第三个兴趣爱好:
SELECT
hobbies [2],
count() AS third_hobby
FROM
user_hobbies
GROUP BY
hobbies [2];