是否可以在 voltDB 中有一个数组列或在 json 类型列中查询一个嵌套数组?
例如,是否可以进行查询:查找数组包含值的行。
换句话说
- 数组 [1,2,3,4]
- 数组 [2,3,4,5]
- 数组 [3,4,5,6]
查找数组包含 1 的位置返回第 01 行 查找数组包含的位置 3 返回行 01、02、03 查找数组包含的位置 5 返回 02、03
虽然 VoltDB 中没有 Array 列类型,但这可以通过使用 JSON 来解决。例如,假设我们有以下表定义:
CREATE TABLE JSONDocContainer (
idCol BIGINT NOT NULL,
jsonDoc VARCHAR(2048) NOT NULL
);
PARTITION TABLE JSONDocContainer ON COLUMN idCol;
jsonDoc 的值如下:
{"Info": {"FirstName":"Dheeraj", "LastName":"Remella", "Grades":["A","B","B","C","A","F"]}}
然后您可以按如下方式运行查询:
select POSITION('["F",' IN FIELD(FIELD(JSONDOC, 'Info'), 'Grades')),
POSITION(',"F",' IN FIELD(FIELD(JSONDOC, 'Info'), 'Grades')),
POSITION(',"F"]' IN FIELD(FIELD(JSONDOC,'Info'), 'Grades'))
from jsondoccontainer where idcol=2;
回报:
C1 C2 C3
--- --- ---
0 0 21
如果 C1 或 C2 或 C3 返回非零,则它存在。虽然这不像“列包含值”这样的语法那样优雅,但它会起作用。