Как создать таблицу в каждом кеше воспламенения Apache, используя оператор SQL JAVA? - PullRequest
0 голосов
/ 27 мая 2018

Я могу создать кэш воспламенения, используя следующий код в java:

    Ignition.setClientMode(true);
    Set<String> set = new HashSet<>();
    set.add("127.0.0.1:48500..48520");

    discoveryMulticastIpFinder.setAddresses(set);

    TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
    discoverySpi.setIpFinder(discoveryMulticastIpFinder);

    cfg.setDiscoverySpi(discoverySpi);

    Ignite ignite = Ignition.start(cfg);
    cacheConfiguration = new CacheConfiguration<>(CACHENAME);
    cacheConfiguration.setName(CACHENAME);
    cacheConfiguration.setSqlSchema("PUBLIC");
    cacheConfiguration.setAtomicityMode(CacheAtomicityMode.ATOMIC);
    cache = ignite.getOrCreateCache(cacheConfiguration).withKeepBinary();

    System.out.println("All Available Cache on server : "+ignite.cacheNames());

ignite.cacheNames() печатает все мои созданные кэши в консоли.Теперь я хочу создать таблицу, как MYTABLE в каждом кэше.

Я пытался:

cache.query(new SqlFieldsQuery("CREATE TABLE IF NOT EXISTS MYTABLE( TAG VARCHAR,TIMECREATED TIMESTAMP,VALUE DOUBLE, PRIMARY KEY(TAG,TIMECREATED) )")); 

, но этот запрос создает только одну таблицу для всех кэшей.Я не могу написать запрос, подобный приведенному ниже, для приведенного выше сценария.

SELECT * FROM "CACHENAME".MYTABLE WHERE SOME_CONDITION = 1;

Я ссылался [1]: Apache Ignite: Как вывести список всех таблиц и всех кешей вопрос из stackoverflow, но этокажется, не очень помогает ответить на мой вопрос.

 Collection<QueryEntity> entities = cacheConfiguration.getQueryEntities();
 System.out.println("All available tables in "+CACHENAME+"cache : "+entities); 

Используя приведенный выше код, я вижу имя кэша, но внутри этого кэша не создается таблица.

В конечном счете, я хочу создать одну таблицу MYTABLE в каждом кеше иЯ должен быть в состоянии запросить, используя JAVA SQL_QUERY метод в ignite:

 SELECT * FROM "CACHE_NAME".MYTABLE WHERE SOME_CONDITION = 1; 

Ваши ответы действительно ценятся и ценятся.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Если я правильно понимаю ваш вопрос:

У вас может быть несколько таблиц, использующих один и тот же кеш в Apache Ignite (различающихся по типу значения), но вы не можете иметь одну таблицу, которая использует более одного кеша длясохраняя свои данные.Таким образом, отображение кэшей в таблицы выполняется один ко многим.

Другой ответ заключается в том, что CREATE TABLE всегда создает таблицу в схеме PUBLIC.В схеме не может быть более одной таблицы с именем MYTABLE.Вы можете CREATE TABLE создать кеш с заданным именем, указав подсказку CACHE_NAME.Но вы все еще можете создать только один MYTABLE.

0 голосов
/ 29 января 2019

Вы можете указать имя кэша в SQL-запросе создания таблицы.CACHE_NAME =

Синтаксис: CREATE TABLE сотрудник (имя varchar, телефон varchar) с "шаблоном = разделены, резервные копии = 1, affinityKey = CountryCode, CACHE_NAME = риск;

0 голосов
/ 28 мая 2018

Если вы хотите иметь таблицу для каждого кэша, вы должны определить их, используя CacheConfiguration # indexedTypes или CacheConfiguration # queryEntities свойства.

Таким образом, вы будете иметьсозданы следующие таблицы: "cacheName".TypeName.

Вы можете изменить имя таблицы, изменив свойство QueryEntity # tableName .

Подробнее см. на следующей странице документации.информация: https://apacheignite -sql.readme.io / docs / schema-and-indexes

...