i resolved it by setting KEY_TYPE and VALUE_TYPE. ________________________________ 发件人: Huang Meilong <ims...@outlook.com> 发送时间: 2018年8月16日 17:42:33 收件人: user@ignite.apache.org 主题: problem when streaming data to a sql table
Hi, I'm streaming data to a sql table like this, ''' public static void main(String[] args) throws Exception { Class.forName("org.apache.ignite.IgniteJdbcThinDriver"); Connection conn = DriverManager.getConnection("jdbc:ignite:thin://worker-1/"); System.out.println("started jdbc connection..."); // Create database tables Statement stmt = conn.createStatement(); // Create table based on PARTITIONED template with one backup stmt.executeUpdate("drop table if EXISTS MX;"); stmt.executeUpdate("CREATE TABLE IF NOT EXISTS MX (" + " timeStamp LONG, metricName VARCHAR, clusterId VARCHAR, hostName VARCHAR, metricValue FLOAT," + " PRIMARY KEY (timeStamp, metricName, clusterId, hostName)) " + " WITH \"backups=1, CACHE_NAME=MX, DATA_REGION=MX_24GB_Region\""); stmt.executeUpdate("CREATE INDEX idx_timestamp_v1 ON MX (timeStamp)"); stmt.executeUpdate("CREATE INDEX idx_metric_name_v1 ON MX (metricName)"); stmt.executeUpdate("CREATE INDEX idx_cluster_id_v1 ON MX (clusterId)"); stmt.executeUpdate("CREATE INDEX idx_hostname_v1 ON MX (hostName)"); System.out.println("created table..."); Ignition.setClientMode(true); IgniteConfiguration cfg = new IgniteConfiguration(); TcpDiscoveryVmIpFinder ipFinder1 = new TcpDiscoveryVmIpFinder(); ipFinder1.setAddresses(Arrays.asList("worker-1:47500..47502", "worker-2:47500..47502", "worker-3:47500..47502")); TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi(); TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder(); ipFinder.setAddresses(Arrays.asList("worker-1:47500..47502", "worker-2:47500..47502", "worker-3:47500..47502")); discoverySpi.setIpFinder(ipFinder); cfg.setDiscoverySpi(discoverySpi); // cfg.setActiveOnStart(true); Ignite ignite = Ignition.start(cfg); System.out.println("start ignite..."); IgniteCache<String, MX> stmCache = ignite.getOrCreateCache("MX"); IgniteDataStreamer<String, MX> stmr = ignite.dataStreamer(stmCache.getName()); MX mx = new MX(); mx.setClusterId("MX"); mx.setMetricName("metric"); mx.setHostName("host-1"); mx.setMetricValue(80.0); stmr.addData("MX", mx); try (ResultSet rs = stmt.executeQuery("SELECT AVG(metricValue) FROM MX")) { System.out.println("Query result:"); while (rs.next()) System.out.println(">>> " + rs.getString(1)); } } ''' after putting data to the streamer, the result set is empty where execute query on that table. class MX is as below: public class MX implements Serializable { @QuerySqlField(index = true) private Long timesTamp; @QuerySqlField(index = true) private String metricName; @QuerySqlField(index = true) private String clusterId; @QuerySqlField(index = true) private String hostName; @QuerySqlField private Double metricValue; public Long getTimesTamp() { return timesTamp; } public void setTimesTamp(Long timesTamp) { this.timesTamp = timesTamp; } public String getMetricName() { return metricName; } public void setMetricName(String metricName) { this.metricName = metricName; } public String getClusterId() { return clusterId; } public void setClusterId(String clusterId) { this.clusterId = clusterId; } public String getHostName() { return hostName; } public void setHostName(String hostName) { this.hostName = hostName; } public Double getMetricValue() { return metricValue; } public void setMetricValue(Double metricValue) { this.metricValue = metricValue; } } can anyone give me some suggestions, thank you very much!