【问题标题】:how to make a array query in voltDB?如何在 voltDB 中进行数组查询?
【发布时间】:2014-07-05 13:16:47
【问题描述】:

是否可以在voltDB中有一个数组列或者在json类型列中查询一个嵌套数组?

例如是否可以进行查询:查找数组包含值的行。

换句话说

  1. 数组 [1,2,3,4]
  2. 数组 [2,3,4,5]
  3. 数组 [3,4,5,6]

并找到数组包含 1 的位置返回第 01 行 查找数组包含 3 的位置返回第 01、02、03 行 查找数组包含 5 的位置返回 02, 03

【问题讨论】:

    标签: sql arrays database voltdb


    【解决方案1】:

    虽然 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 返回非零,则它存在。虽然这不像“列包含值”这样的语法那样优雅,但它会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2019-10-05
      • 2020-12-16
      • 2020-04-11
      • 1970-01-01
      相关资源
      最近更新 更多