¿Hay alguna forma de enumerar todas las tablas presentes en un caché específico y enumerar todos los cachés presentes en un servidor Apache Ignite?
----------------------------------ACTUALIZADO--------------- ----------- Hola, estoy ejecutando el siguiente código para conocer el nombre de la caché y enumerar todas las tablas presentes en mi caché. Esta lista de programas muestra todos los nombres de caché presentes en el servidor. Sin embargo, la lista de tablas se imprime como una colección en blanco. Mientras tanto, la consulta SQL presente en el ejemplo funciona bien.
public static void main(String[] args) throws Exception { System.out.println("Run Spring example!!"); Ignition.setClientMode(true); IgniteConfiguration cfg = new IgniteConfiguration(); cfg.setIncludeEventTypes( EVTS_CACHE); cfg.setPeerClassLoadingEnabled(true); TcpDiscoveryMulticastIpFinder discoveryMulticastIpFinder = new TcpDiscoveryMulticastIpFinder(); Set<String> set = new HashSet<>(); set.add("hostname:47500..47509"); discoveryMulticastIpFinder.setAddresses(set); TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi(); discoverySpi.setIpFinder(discoveryMulticastIpFinder); cfg.setDiscoverySpi(discoverySpi); cfg.setPeerClassLoadingEnabled(true); cfg.setIncludeEventTypes(EVTS_CACHE); Ignite ignite = Ignition.start(cfg); System.out.println("All Available Cache on server : "+ignite.cacheNames()); CacheConfiguration<String, BinaryObject> cacheConfiguration = new CacheConfiguration<>(CACHE_NAME); Collection<QueryEntity> entities = cacheConfiguration.getQueryEntities(); System.out.println("All available tables in cache : "+entities); cacheConfiguration.setIndexedTypes(String.class, BinaryObject.class); //cacheConfiguration.setCacheMode(CacheMode.PARTITIONED); IgniteCache<String, BinaryObject> cache = ignite.getOrCreateCache(cacheConfiguration).withKeepBinary(); System.out.println(); QueryCursor<List<?>> query = cache.query(new SqlFieldsQuery("select Field1 from table1 where Field1='TEST'")); List<List<?>> all = query.getAll(); for (List<?> l : all) { System.out.println(l); } }Obtenga todos los nombres de caché: Ignite.cacheNames() . Luego use Ignite.cache(String) para obtener la instancia de caché.
Obtener tablas SQL:
CacheConfiguration ccfg = cache.getConfiguration(CacheConfiguration.class); Collection<QueryEntity> entities = ccfg.getQueryEntities();Cada entidad de consulta representa una tabla.
Puede leer usando la consulta h2. SELECCIONE TABLE_NAME FROM INFORMATION_SCHEMA.TABLES donde TABLE_SCHEMA es el nombre de caché
ClientConfiguration cfg = new ClientConfiguration().setAddresses(host+":"+port). setUserName(username).setUserPassword(pwd); private static IgniteClient igniteClient = Ignition.startClient(cfg); private static ClientCache<Integer, String> cache=igniteClient.getOrCreateCache(cacheName); QueryCursor<List<?>> cursor =cache.query(new SqlFieldsQuery("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='"+cacheName+"'")); for (List<?> row : cursor) { System.out.println(row.get(0)); }Puede obtener todos los nombres de caché usando Ignite.cacheNames() . Para obtener todos los nombres de las tablas, puede usar el comando SHOW TABLES :
QueryCursor<List<?>> cursor = cache.query(new SqlFieldsQuery("SHOW TABLES FROM \""+CACHE_NAME+"\"")); for (List<?> row : cursor) { System.out.println(row.get(0)); } Puede encontrar más detalles sobre el comando SHOW aquí: http://www.h2database.com/html/grammar.html#show