Slick的主要目的是使关系数据库能更容易、更自然的融入函数式编程模式,它可以使使用者像对待scala集合一样来处理关系数据库表。也就是说可以用scala集合的那些丰富的操作函数来处理库表数据。...Slick把数据库编程融入到scala编程中,编程人员可以不需要编写SQL代码。我把Slick官方网站上Slick3.1.1文档的Slick介绍章节中的一些描述和例子拿过来帮助介绍Slick的功能。...的所有记录Query 6 // 相当于 SQL: select * from COFFEES where PRICE < 10.0 7 coffees.filter(_.price Slick把Query编写与scala语言集成,这使编程人员可以用熟悉惯用的scala来表述SQL Query,直接的好处是scalac在编译时就能够发现Query错误: 1 //coffees.map...from COFFEES 29 coffees.map(_.name) 30 // 选择 price 的所有记录Query 31 // 相当于 SQL: select * from COFFEES
Scala 的数据库访问框架:Slick 3.0 移除了 session 相关的 API Slick 3 对于 Slick 2 的改变相当于 Python 3 至于 Python 2 的改变。...Slick 3 的新特性集中在 :大量使用组合的设计模式,不需要显式声明session,非阻塞,stream支持的 reactive 等 。 不过我最喜欢这个方法: setFetchSize 。...具体来说: 在Scala slick 2.x 中: db.withSession{ implicit session => query.run } 在Scala slick 3.x 中需要替换为.../blob/master/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/CountTest.scala 从Slick 2.X...迁移到 Slick 3.X http://stackoverflow.com/questions/30718671/how-to-port-slick-2-1-plain-sql-queries-to-slick
在上一集的讨论里我们介绍并实现了强类型返回结果行。使用强类型主要的目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便、准确、高效地选定数据字段。...在上集讨论示范里我们用集合的foreach方式模拟了一个最简单的数据流,并把从数据库里批次读取的数据集转换成一串连续的数据行来逐行使用。...一般来说完整的流式数据处理流程包括了从数据库中读取数据、根据读取的每行数据状态再对后台数据库进行更新,包括:插入新数据、更新、删除等。...{ 4 type FDAAction[T] = DBIO[T] 5 } 记得有一次在一个Scala讨论区里遇到这样一个问题:如何把a表里的status字段更新成b表的status字段值,转化成SQL...这个问题用Slick Query还真的不太容易解决(能不能解决就不想费功夫去想了),这是因为FRM的SQL批次处理弱点。
JDBC方式我是亲自测试过的,在geotrellis使用(十一)实现空间数据库栅格化以及根据属性字段进行赋值一文中,我详细讲述了如何从PostGIS中读取空间数据并进行栅格化操作;然而我也有极度强迫症,...2.4 操作类 上文讲到slick的优势就在于我们可以像使用scala集合那样读取数据库中信息,并能够对数据库进行操作。...从这段代码大致能看出slick的整个操作模式,其所有操作都要执行db.run函数,传入的是进行的操作,无论是增删改查还是创建、删除表等。...} 从这段代码能看出slick对数据操作的基本流程,首先使用for循环生成想要处理的数据的集合,而后使用db.run对此集合执行相应的操作。...上述代码中q表示的是全部数据,db.run传入的也是q.delete,则表中所有数据都会被删除。
我在上期讨论里已经成功的创建了一个简单的Slick项目,然后又尝试使用了一些最基本的功能。...Slick是一个FRM(Functional Relational Mapper),是为fp编程提供的scala SQL Query集成环境,可以让编程人员在scala编程语言里用函数式编程模式来实现对数据库操作的编程...所以上面我所指的函数式思考方式主要是从Slick函数的类型匹配角度来分析函数所起的作用和具体使用方式。...Query可以说是Slick最核心的类型了。所有针对数据库的读写操作都是通过Query产生SQL语句发送到数据库实现的。Query是个函数式类型,即高阶类型Query[A]。...从qInsert3产生的SQL语句来看:jdbc返回数据后还必须由Slick进一步处理后才能返回用户要求的结果值。
看完Slick官方网站上关于Slick3.1.1技术文档后决定开始动手建一个项目来尝试一下Slick功能的具体使用方法。我把这个过程中的一些了解和想法记录下来和大家一起分享。...Slick是集成jdbc的更高层的Query编程语言,可以通过jdbc的url、DataSource等来指定目标数据库类型及相关的参数。...对应Slick中的具体函数有: val db = Database.forConfig("mydb") val db = Database.forURL("jdbc:h2:mem:test1;DB_CLOSE_DELAY...$" db = ${h2mem} } 在我使用的application.conf文件中汇集了一些常用数据库的配置,我一并提供出来。...好了,选择了数据库,下面我们就来试试使用它。基本流程是这样的:首先在数据库里创建表,跟着写入一些数据,然后再读出显示。
FunDA的特点之一是以数据流方式提供逐行数据操作支持。这项功能解决了FRM如Slick数据操作以SQL批次模式为主所产生的问题。...在前面的一篇讨论中我们介绍了通过Shape来改变Slick Query结果行类型。不过这样的转变方式需要编程人员对Slick有较深的了解。更重要的是这种方式太依赖Slick的内部功能了。...我们希望FunDA可以支持多种FRM,所以应当尽量避免与任何FRM的紧密耦合。看来从FRM的返回结果开始进行数据行类型格式转换是一种比较现实的选择。...一般来说我们还是可以假定任何FRM的使用者对于FRM的Query结果集类型是能理解的,因为他们的主要目的就是为了使用这个结果集。...下面是这篇讨论中的源代码: FunDA函数库: 1 package com.bayakala.funda.rowtypes 2 3 import scala.concurrent.duration
流元素在管道流动的过程中被使用或者更新。...承上篇的示范所产生的数据表AIRQM。这是一个直接导入cvs文件产生的数据表,所有字段都是String类型的。...)(512,512)() 注意我们使用了slick的plain sql来示范创建这个数据源。...我们把数据导入的流程分成下面几个步骤: 1、载入数据源 >>> 数据行类型转换:从AQMRowModel转成AQMRPTModel >>> 把新类型的数据行传给下游 2、把上游传来的数据行转换成动作行...本次示范的源代码如下: import slick.jdbc.meta._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions
一般情况下,在开发Web应用程序的时候,从模型和流程定义开始,深入到软件开发中,都是使用TDD(测试驱动开发)方法:先写测试,考虑我们真正想要的,以及我们如何使用它; 但微服务(microservices...我认为这是一项非常好的技术,它可以满足构建微服务所需的所有基本要求: 易于实现 快速 健壮性 很好的支持和文档记录 在数据方面,我选择了Slick作为库,将数据库交互和FlyWay抽象为数据库迁移框架。...forgePact方式使用的对象verifyPact,Pact文件的来源target/pacts在我们的例子中定义(但可以是共享位置或Pact Broker),设置执行所需的数据或环境所需的最终代码所有交互...Config 默认情况下,Flayway会在src/main/resources/db/migration中查找迁移的sql脚本文件,它需要具有特定名称格式的文件: image.png 从官方迁移文档获取更多信息...最后一件事是将我们的新数据源与业务逻辑关联起来,改变路线以便从DB中检索类别: Routes.scala package com.fm.mylibrary.producer import akka.http.scaladsl.server.Directives
首先谈谈Slick的特点:主体方面Slick为函数式编程模式带来了SQL编程,可以把数据库表当作scala语言中的集合来对待。...是了,Slick把jdbc的resultset隐藏起来了。其目的可以理解:这样可以实现语法安全(type safety),才能把SQL编程融入FP编程,即scala集合编程。...综合以上分析,如果从一个有多年信息管理系统(MIS)开发经验的程序员需求出发,能在工作中使用FRM是一种崭新的体验。与习惯用的ORM比较,从scala编程表达形式和程序运算方式上都有较大的改善。...library)分享给scala数据库编程的朋友使用。...希望无论在开发过程中或者将来的使用中都能得到有共同志愿朋友的参与和帮助。
在对上两篇讨论中我们介绍了并行运算的两种体现方式:并行构建数据源及并行运算用户自定义函数。我们分别对这两部分进行了示范。本篇我准备示范把这两种情况集成一体的并行运算模式。...我们知道在AQMRPT表里有从1999年到2xxx年的空气质量测量数据,我们可以试着并行把按年份生成的数据流构建成一个数据源。...直接使用上期示范中的铺垫代码包括NORMAQM表初始化和从STATES和COUNTIES里用名称搜索对应id的函数: val db = Database.forConfig("h2db") /...) fda_skip case _ => fda_skip } 跟着是本篇新增代码,我们先构建一个所有年份的流: //create parallel sources...= fda_staticSource(yearSeq)() 下面是一个按年份从AQMRPT表读取数据的函数: //strong row type implicit def toAQMRPT(row
我认为这是一项非常好的技术,它可以满足构建微服务所需的所有基本要求: 易于实现 快速 健壮性 很好的支持和文档记录 在数据方面,我选择了Slick作为库,将数据库交互和FlyWay抽象为数据库迁移框架。...,Pact文件的来源target/pacts在我们的例子中定义(但可以是共享位置或Pact Broker),设置执行所需的数据或环境所需的最终代码所有交互,然后是服务器正在侦听请求的主机和端口。...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。...Config 默认情况下,Flayway会在src/main/resources/db/migration中查找迁移的sql脚本文件,它需要具有特定名称格式的文件: ?...最后一件事是将我们的新数据源与业务逻辑关联起来,改变路线以便从DB中检索类别: Routes.scala 我们刚刚调用dao中的findAll方法替换了静态列表。
FunDA可以通过函数组件从数据行中产生新数据行或者指令行并且在数据流的任何位置运算用户提供的功能函数,使其能使用该位置的数据行进行数据更新或者数据(指令)行产生操作。...我们将在下面几个章节进行FunDA功能的使用示范。 Slick运算Query返回的结果集合内的数据行类型一般是Tuple类型。因为无法使用字段名,是弱类型。...除了从方便使用角度考虑,还因为FunDA开发是基于Scala函数式编程模式的,静态类型系统(static type system)对类型要求比较严格,所以FunDA的数据流内元素必须是强类型的,大部分是...下面我们就示范一下如何把Slick的数据结果集合转变成强类型数据流: 从世界银行公开数据网站下载了一份美国州县空气质量报告原始数据,cvs格式的,30万条左右。导入h2数据库后作为示范数据。...在这个调用例子里如果出现异常,新数据流状态是一个代表异常的元素类型。无论在正常完成或中断情况下都会显示“the end finally!“信息。
在Slick官方文档中描述:连接后台数据库后,需要通过定义Projection,即def * 来进行具体库表列column的选择和排序。...从Slick源代码中我们可以找到Projection定义: abstract class AbstractTable[T](val tableTag: Tag, val schemaName: Option...我们来看看Slick官方文件上的例子: import scala.reflect.ClassTag // A custom record class case class Pair[A, B...造成的后果是返回的结果行不含字段名,只有字段位置。使用这样的行数据很容易错误对应,或者重复确认正确的列值会影响工作效率。...结果我们都能使用强类型(strong typed)的字段名称来进行操作了。
但是,现实中的数据交换远远不止针对request和response操作能够满足的。系统之间数据交换经常涉及文件或者数据库表类型的数据上传下载。...虽然在Http标准中描述了如何通过MultiPart消息类型进行批量数据的传输,但是这个标准涉及的实现细节包括数据内容描述、数据分段方式、消息数据长度计算等等简直可以立即令人却步。...我们知道:Akka-stream提供了功能强大的FileIO和Data-Streaming,可以用Stream-Source代表文件或数据库数据源。...("slick.h2") val db = dbConfig.db case class CountyModel(id: Int, name: String) case class CountyTable...("slick.h2") val db = dbConfig.db case class CountyModel(id: Int, name: String) case class CountyTable
关系数据库系统和混合/云数据管理解决方案的用户都可以使用SQL灵活地访问业务数据,并以创新的方式进行转换或显示。...一、计算滚动平均 使用时间序列数据时,为观察值计算滚动平均值或附加历史值可能会有所帮助。假设我想获取一家公司每天售出的小部件数量。...我可能想包括7天移动平均线,或附上上周出售的工作日小部件,以查看业务与上周相比的表现。我可以通过将数据集连接到自身上,并使用日期列上的操作来选择单个值或观察范围来做到这一点。...首先,让我们开始使用Db2库中名为WIDGET_ORDER_HISTORY的表中的以下代码,按日销售小部件: select t1.date , sum(t1.widgets_sold) as total_widgets_sold...通过使用伪代码对逻辑规则进行周到的设计可以帮助避免由于不正确/不一致的规则而导致的错误。了解如何在SQL中编码嵌套逻辑对于释放数据中的潜力至关重要。
,date) 返回日期date中,interval指定部分所对应的整数值 DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 其中DatePart...206天DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年 Sql 取当天或当月的记录 表中的时间格式是这样的:2007-02-02 16:50:...-2-2,然后格式化数据库表中的日期 Convert(varchar(10),TimeFiled,120),最后我们就可以用一条Sql语句得到当天的数据了....不能使用用户定义的数据类型。第二个参数是你要转换的字段,我这里是[time]。...====================================================== T-Sql查找表中当月的记录 思路:将要查找的时间字段用Month()函数取出其中的月份,然后再取出当前月的月份
主要查询过程包括: 1)在Elasticsearch中存放用于检索条件的数据,并将rowkey 也存储进去; 2)使用Elasticsearch的 API 根据组合标签的条件查询出...在Elasticsearch中documentid是文档的唯一标识,在HBase中rowkey是记录的唯一标识。...在工程实践中,两者可同时选用用户在平台上的唯一标识(如userid或deviceid)作为rowkey或documentid,进而解决 HBase 和 Elasticsearch 索引关联的问题。...在与 Elasticsearch 数据同步完成并通过校验后,向在 MySQL 中维护的状态表中插入一条状态记录,表示当前日期的 Elasticsearch 数据可用,线上计算用户人群的接口则读取最近日期对应的数据...为了避免从 Hive 向 Elasticsearch 中灌入数据时发生数据缺失,在向状态表更新状态位前需要校验 Elasticsearch 和 Hive 中的数据量是否一致。
spring-cloud,网上有很多适合入门的使用文档,但在实际项目应用中,我们需要进一步挖掘spring-cloud的特性。...for play 使用原生sql查询以及拼接sql 在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了....还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL … Linux_Shell_grep grep [选项] “搜索内容” 文件名 选项列表...(asp.net) 原文:如何让Gridview在没有数据的时候显示表头(asp.net) 1.前言 当对GridView控件进行数据绑定时,如果绑定的记录为空,网页上就不显示....Java中的泛型是什么?
导读 我们在工作中时常需要处理某个时间段的数据,例如: 如何求解上周的销量? 如何求解上月第一天的销售金额? 如何求解去年同期的在线人数?...这些都是涉及到具体或者以当前为参照的时间段的数据。 我们该如何从海量数据中找出准确的时间段呢?...美国是把每周的星球日当第一天,而我国通常把星期一当为每周的第一天。 比如我想知道上周第3天的销量,你就需要先定义上周的星期几是第1天,才能进一步计算第3天的销量。...此函数可在 SQL Server 2012 (11.x) 及更高版本的服务器上执行远程处理。 它不能无法在版本低于 SQL Server 2012 (11.x) 的服务器上执行远程处理。...date、time、或 datetime 值,则返回 1;否则返回 0 。
领取专属 10元无门槛券
手把手带您无忧上云