Thanks Dan for your input. I am able to try this at my end and it's working
as expected.

As a next steps I need to support somewhat complex queries, so updated a
ValueObject, like

public class ValueObject implements PdxSerializable {
    private static final long serialVersionUID = -754645299372860596L;
    private int versionId;   //1 for latest record; 0 for previous latest
    private String date;
    private String col_1;
    private String col_2;
    private String col_3;
    private String type;
    private Map<String, String> map;

    public ValueObject() {
    }

*Region*<String, ValueObject> : *Key:* random-string and *Value:*
ValueObject

Need to support queries that fetches columns for *latest record (whose
versionId is Max)* with filters and aggregation like
"SELECT date, col_1, col_2, col_3    <-----------Must be fetched from a row
where MAX(versionId)
     FROM /data-region d
     WHERE d.type='t1'
     AND d.date BETWEEN '2021-01-11' AND '2021-01-12'
    AND d.vesionId BETWEEN 0 AND 1
    AND d.col_1 IN SET ('111111', '222222')
    GROUP BY d.col_1"

*Team, Kindly guide on following,*
1. How can i form an OQL query (syntax) to fetch the latest row based on
MAX(versionId).
2. It seems *BETWEEN* support is not available, how can this be achieved.
3. What should be the* recommended index creation here*, for this query to
gain fast performance.
4. Any recommendation for Key, currently it's a random string.

Any suggestions on above will be really helpful.

Thank you
Ankit.

On Fri, 29 Jan 2021 at 23:23, Dan Smith <dasm...@vmware.com> wrote:

> For the best performance, you should store column2 as a java Map instead
> of a String which contains a json document. If column2 was Map<String,
> String>, you could do a query like this:
>
>
> SELECT * FROM /exampleRegion r WHERE r.column2['k1'] IN SET('v10', 'v15',
> 'v7')"
>
> You can create an index on the map to optimize this sort of query
>
> gfsh>create index --name="IndexName" --expression="r.column2[*]"
> --region="/exampleRegion r"
>
> This page might be helpful
>
>
> https://geode.apache.org/docs/guide/112/developing/query_index/creating_map_indexes.html
>
> In addition, I noticed that your value implements Serializable. You will
> get better performance out of the query engine if you configure PDX
> serialization for your object, either by configuring the auto serializer or
> implementing PdxSerializable. That avoids the need to deserialize your
> entire value on the server to query/index it.
>
> -Dan
>
>
> ________________________________
> From: ankit Soni <ankit.soni.ge...@gmail.com>
> Sent: Friday, January 29, 2021 9:32 AM
> To: dev@geode.apache.org <dev@geode.apache.org>
> Subject: Inputs for efficient querying
>
> Hello Team,
>
> I am loading data into Geode (V 1.12) with the following *Key (of type
> String)* and *value (custom java object - ValueObject)*.
>
> *public class ValueObject implements Serializable {*
> *     private int id;*
>
> *     private String keyColumn;   <--------- Region.Key *
>
> *     private String column_2;     <---------- Json document*
> *     private String column_3;*
>
> *     private String column_4*
>
>
>
> *     //few more string type members*
> *}*
>
> *Keycolum* is a normal string of around 8 chars, like "12345678",
> "23456789" etc...
>
> *In ValueObject, column_2 is of type string and having a values of type
> valid JSON doc as bellow; *
> {"k1" : "v1", "k3" : "v3", "k6" : "v6", "k7" : "v7", *"k10" : "v7"*, "k12"
> : "v12", "k13" : "v13"}
> {"k2" : "v2", "k3" : "v3", "k4" : "v4", "k6" : "v6", *"k10" : "v10"*, "k13"
> : "v13", "k14" : "v14"}
> {"k1" : "v1", "k2" : "v2", "k6" : "v6", "k8" : "v8", "k10" : "v7", "k12" :
> "v12", "k13" : "v13", "k14" : "v14"}
> .....
>
> after storing the data in Geode i need to run following two queries.
> *Query to be supported.*
>
>
> *Q1. //query with filter on keyColumn*
> "select d.keyColumn, d.column_2, d.column_3, d.column_4
> from /DATA_REGION.keyset key
> where (key IN SET('12345678', '23456789', '34567890'))"
>
>
> *Q2. //query with filter on column_2 attribute, something like "where
> d.column_2.k10 IN SET('v10', 'v15', 'v7'); *
> "select d.keyColumn, d.column_2, d.column_3, d.column_4
> from /DATA_REGION v
> where v.column_2.k10 INSET('v10', 'v15', 'v7')"
>
> I am able to run the Q1 but not sure *how to achieve Q2 (form a OQL for
> this case)*...?
>
> Request team to help, how can i efficiently form and execute above kind of
> queries with geode OQL...?
>
> Also advise, what kind of index are recommended to get higher query
> performance for above queries...?
>
> Thanks
> Ankit.
>

Reply via email to