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];