Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

apache ignite query

Tags:

java

sql

ignite

I have created a cache using Automatic Persistence, connecting to Mysql database. 1 million rows are populated on startup into that node. Node is in PARTITIONED mode

When I try retrieving data from that Cache using SQL queries, it always returns empty array. I have indexed the cache using "CacheTypeMetadata".

Please could anyone point out what I have missed out, or done incorrectly. I have been following the tutorials, but I cannot figure out why my query is not working fine.

Thanks in advance!

Cache:

CacheConfiguration<Dataloadermd5Key, DataLoaderMd5> cfg =
                        CacheConfigMd5.cache("DataMd5Cache", 
                            new JDBCFactory<Dataloadermd5Key, DataLoaderMd5>());

DataLoaderMd5Key:

public class Dataloadermd5Key implements Serializable {
    /** */
    private static final long serialVersionUID = 0L;

    /** Value for idClient. */
    private int idClient;

    /** Value for clientPropId. */
    private String clientPropId;
    //...
}

DataLoaderMd5:

public class DataLoaderMd5 implements Serializable {
    /** */
    private static final long serialVersionUID = 0L;

    /** Value for idClient. */
    private int idClient;

    /** Value for clientPropId. */
    private String clientPropId;

    /** Value for md5. */
    private String md5;
    //...
}

CacheConfigMd5:

public static <K, V> CacheConfiguration<K, V> cache(String name,
                                                    Factory<CacheStore<K, V>> storeFactory) {
    if (storeFactory == null)
        throw new IllegalArgumentException("Cache store factory cannot be null.");

    CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(name);

    ccfg.setCacheStoreFactory(storeFactory);
    ccfg.setReadThrough(true);
    ccfg.setWriteThrough(true);

    // Configure cache types. 
    Collection<CacheTypeMetadata> meta = new ArrayList<>();

    // DataLoaderMd5.
    CacheTypeMetadata type = new CacheTypeMetadata();

    meta.add(type);

    type.setDatabaseSchema("abc");
    type.setDatabaseTable("dfg");
    type.setKeyType(Dataloadermd5Key.class.getName());
    type.setValueType(DataLoaderMd5.class.getName());

    // Key fields for DataLoaderMd5.
    Collection<CacheTypeFieldMetadata> keys = new ArrayList<>();
    keys.add(new CacheTypeFieldMetadata("id_client", Types.INTEGER,
            "idclient", int.class));
    keys.add(new CacheTypeFieldMetadata("client_prop_id", Types.VARCHAR,
            "clientPropId", String.class));
    type.setKeyFields(keys);

    // Value fields for DataLoaderMd5.
    Collection<CacheTypeFieldMetadata> vals = new ArrayList<>();
    vals.add(new CacheTypeFieldMetadata("id_client", Types.INTEGER,
            "idclient", int.class));
    vals.add(new CacheTypeFieldMetadata("client_prop_id", Types.VARCHAR,
            "clientPropId", String.class));
    vals.add(new CacheTypeFieldMetadata("Md5", Types.VARCHAR,
            "md5", String.class));
    type.setValueFields(vals);

    // Query fields for DataLoaderMd5.
    Map<String, Class<?>> qryFlds = new LinkedHashMap<>();

    qryFlds.put("idclient", int.class);
    qryFlds.put("clientPropId", String.class);
    qryFlds.put("md5", String.class);

    type.setQueryFields(qryFlds);

    // Groups for DataLoaderMd5.
    Map<String, LinkedHashMap<String,
            IgniteBiTuple<Class<?>, Boolean>>> grps = new LinkedHashMap<>();

    LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>> grpItems =
            new LinkedHashMap<>();

    grpItems.put("idclient", new IgniteBiTuple<Class<?>,
            Boolean>(int.class, false));
    grpItems.put("clientPropId", new IgniteBiTuple<Class<?>,
            Boolean>(String.class, false));

    grps.put("PRIMARY", grpItems);

    type.setGroups(grps);

    ccfg.setTypeMetadata(meta);

    return ccfg;
}

Query:

Ignite ignite = Ignition.start("examples/config/example-cache.xml");
 IgniteCache<Dataloadermd5Key, DataLoaderMd5> cache = ignite.cache(CACHE_NAME);
  Dataloadermd5Key key = new Dataloadermd5Key();
    key.setIdClient(98255);
    key.setClientPropId("1000008");

 SqlQuery<Dataloadermd5Key, DataLoaderMd5> qry =
        new SqlQuery<Dataloadermd5Key, DataLoaderMd5>(
            DataLoaderMd5.class, "idClient = ? and clientPropId = ?");



//Excecute query
System.out.println("sqlQuery Lookup result :: " +
        cache.query(qry).getAll());

System.out.println("sqlQuery Lookup result :: " +
        cache.query(qry.setArgs(key.getIdClient(), key.getClientPropId())).getAll());
like image 225
GGN Avatar asked Jun 22 '15 00:06

GGN


People also ask

Is Apache ignite SQL?

Starting the 2.13 version, Apache Ignite includes a new SQL engine based on the Apache Calcite framework. Apache Calcite is a dynamic data management framework, which mainly serves for mediating between applications, one or more data storage locations, and data processing engines.

How do you run Ignite?

Download the Ignite binary as a zip archive. Unzip the zip archive into the installation folder in your system. (Optional) Enable required modules. (Optional) Set the IGNITE_HOME environment variable or Windows PATH to point to the installation folder and make sure there is no trailing / (or \ for Windows) in the path.


1 Answers

I found out the problem. It was because of my Ignite version. I updated the version on my maven to 1.1.0, and the code started working fine.

 <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-indexing</artifactId>
        <version>1.1.0-incubating</version>
    </dependency>
like image 50
GGN Avatar answered Sep 23 '22 04:09

GGN