4.本地执行要强制本地执行查询,请使用SqlFieldsQuery.setLocal(true). 在这种情况下,查询是针对存储在运行查询的节点上的数据执行的 。这意味着查询的结果几乎总是不完整的 。仅当您确信自己了解此限制时才使用本地模式 。
5.WHERE子句中的子查询SELECT在INSERTandMERGE语句中使用的查询以及SELECT由UPDATEandDELETE操作生成的查询以colocated 或 non-colocated 分布式模式分布和执行 。
但是,如果有一个子查询作为WHERE子句的一部分执行,则它只能在 colocated 模式下执行 。
例如 , 让我们考虑以下查询:
DELETE FROM Person WHERE id IN(SELECT personId FROM Salary s WHERE s.amount > 2000);SQL 引擎生成SELECT查询以获取要删除的条目列表 。该查询在整个集群中分布和执行,如下所示:
SELECT _key, _val FROM Person WHERE id IN(SELECT personId FROM Salary s WHERE s.amount > 2000);但是,IN子句 ( SELECT personId FROM Salary …?) 中的子查询不会进一步分布 , 而是在节点上可用的本地数据集上执行 。
6.插入、更新、删除和合并SqlFieldsQuery您可以执行其他 DML 命令以修改数据:
// 插入IgniteCache<Long, Person> cache = ignite.cache("personCache");cache.query(new SqlFieldsQuery("INSERT INTO Person(id, firstName, lastName) VALUES(?, ?, ?)").setArgs(1L, "John", "Smith")).getAll();// 更新IgniteCache<Long, Person> cache = ignite.cache("personCache");cache.query(new SqlFieldsQuery("UPDATE Person set lastName = ? " + "WHERE id >= ?").setArgs("Jones", 2L)).getAll();// 删除IgniteCache<Long, Person> cache = ignite.cache("personCache");cache.query(new SqlFieldsQuery("DELETE FROM Person " + "WHERE id >= ?").setArgs(2L)).getAll();// 合并IgniteCache<Long, Person> cache = ignite.cache("personCache");cache.query(new SqlFieldsQuery("MERGE INTO Person(id, firstName, lastName)"+ " values (1, 'John', 'Smith'), (5, 'Mary', 'Jones')")).getAll();用于SqlFieldsQuery执行 DDL 语句时 , 必须调用getAll()从query(…?)方法返回的游标 。
7.指定架构默认情况下,执行的任何 SELECT 语句SqlFieldsQuery都将针对 PUBLIC 模式进行解析 。但是,如果您要查询的表在不同的架构中 , 您可以通过调用来指定架构SqlFieldsQuery.setSchema(…?) 。在这种情况下,语句在给定的模式中执行 。
SqlFieldsQuery sql = new SqlFieldsQuery("select name from City").setSchema("PERSON");或者,您可以在语句中定义架构:
SqlFieldsQuery sql = new SqlFieldsQuery("select name from Person.City");8.创建表您可以将任何受支持的 DDL 语句传递到SqlFieldsQuery缓存并在缓存上执行,如下所示 。
IgniteCache<Long, Person> cache = ignite.getOrCreateCache(new CacheConfiguration<Long, Person>().setName("Person"));// Creating City table.cache.query(new SqlFieldsQuery("CREATE TABLE City (id int primary key, name varchar, region varchar)")).getAll();在 SQL 模式方面,执行代码会创建以下表:
- “Person”模式中的表“Person”(如果之前没有创建过) 。
- “人员”模式中的表“城市” 。
9.取消查询有两种方法可以取消长时间运行的查询 。
第一种方法是通过设置查询执行超时来防止查询失控 。
SqlFieldsQuery query = new SqlFieldsQuery("SELECT * from Person");// Setting query execution timeoutquery.setTimeout(10_000, TimeUnit.SECONDS);第二种方法是通过使用来停止查询QueryCursor.close() 。
SqlFieldsQuery query = new SqlFieldsQuery("SELECT * FROM Person");// Executing the queryQueryCursor<List<?>> cursor = cache.query(query);// Halting the query that might be still in progress.cursor.close();2.6.6 机器学习Apache Ignite 机器学习 (ML) 是一组简单、可扩展且高效的工具,无需昂贵的数据传输即可构建预测机器学习模型 。
将机器和深度学习 (DL) 添加到 Apache Ignite 的基本原理非常简单 。今天的数据科学家必须处理阻碍 ML 被主流采用的两个主要因素:
- 首先,在不同的系统中训练和部署模型(训练结束后) 。数据科学家必须等待 ETL 或其他一些数据传输过程才能将数据移动到 Apache Mahout 或 Apache Spark 等系统中以进行培训 。然后他们必须等待此过程完成并在生产环境中重新部署模型 。整个过程可能需要数小时才能将数 TB 的数据从一个系统转移到另一个系统 。此外 , 训练部分通常发生在旧数据集上 。
- 第二个因素与可扩展性有关 。必须处理不再适合单个服务器单元的数据集的 ML 和 DL 算法正在不断增长 。这促使数据科学家提出复杂的解决方案,或者转向分布式计算平台,如 Apache Spark 和 TensorFlow 。然而 , 这些平台大多只解决了模型训练的一部分难题,这使得开发人员决定以后如何在生产中部署模型成为负担 。
推荐阅读
- 快读《ASP.NET Core技术内幕与项目实战》WebApi3.1:WebApi最佳实践
- IQueryable和IEnumerable 快读《ASP.NET Core技术内幕与项目实战》EFCore2.5:集合查询原理揭秘
- Spring事务传播行为实战
- 四十八 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架
- React +SpreadJS+Echarts 项目实战:在线报价采购系统
- 四十七 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
- Module XAF新手入门 - 模块
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 机器学习实战-AdaBoost