220 likes | 398 Views
An Abstract Semantics and Concrete Language for Continous Queries o0ver Streams and Relations. Stream Group. 内容提示. 抽象语义 流与关系的形式定义 他们之间的映射 关系查询语言 具体语言 CQL SQL SQL-99 优化等. Introduction. 基于 “ 黑盒 ” 组件定义了一个抽象语义 - 任何关系查询语言,任何窗口描述语言,和一组关系 - 流操作符 接下来定义了一个具体的语言来实例化黑盒。. 以下几个目标.
E N D
An Abstract Semantics and Concrete Language for Continous Queries o0ver Streams and Relations Stream Group
内容提示 • 抽象语义 流与关系的形式定义 他们之间的映射 关系查询语言 • 具体语言CQL SQL SQL-99 • 优化等
Introduction • 基于“黑盒”组件定义了一个抽象语义-任何关系查询语言,任何窗口描述语言,和一组关系-流操作符 • 接下来定义了一个具体的语言来实例化黑盒。
以下几个目标 1。我们希望利用被很好的理解的关系语义 2。我们希望执行简单任务的查询也能简单 且写起来紧凑。相反的,我们希望看起来简单的查询能作希望做到的事。 3。既然转换对查询优化来说很重要,我们不想用标准关系变换限制我们的新的构造和操作符,或者我们的语义解释。更进一步,我们想构造特别对于流的转换。
运行实例 • 在线拍卖 • 由用户,用户的交易,和用户或系统管理员注册的连续查询组成 • 用户提供名字和居住当前状态来注册。 • 注册过的用户以后可以注销 • 三种交易是可行的:用户可以放置一个交易物品,并提供一个起始价,他可以关闭一个他先前开始的交易,他可以向由别人开始的交易投标。
流和关系 • 定义4。1(流)流S是elements(s,t)的包(bag),s是一个符合schema的元组,г∈Г是这个元素的时间标记。 • 定义 4。2(关系)关系R是一个从Г到有限无界元组集的映射,每一个元组都符合这个关系的schema。
运行实例的建模 • 我们的在线拍卖系统由如下五个流组成: • *注册(用户id,姓名,状态) • *注销(用户id) • *开始(物品id,卖出者,起价) • *关闭(物品Id) • *竞价(物品id,竞标者id。成交价)
映射操作符 • 我们考虑三种流和关系上的操作符:流-关系,关系-关系,关系-流操作符。流-流操作符由这三种操作符组成。
映射操作符(Contd) • 流-关系操作符将流S作为输入,产生一个与S有相同Schema的关系R作为输出。在任何时间t,R(t)应该可由到t为止的S的元素算出。
映射操作符(Contd) • 关系-关系操作符由一个或多个关系R1,R2。。。Rn作为输入,产生一个关系R作为输出。 • 关系-流操作符将R作为输入,产生与R有相同schema的流S
抽象语义 • 我们假定任何一个查询由以下三个块组成: • 1。任何关系查询语言,可以抽象的看成一组关系到关系操作符。 • 2。一个窗口规格语言,用来从流中抽取元组。我们可以看成一组流到关系操作符。 • 3。三个关系到流操作符:Istream,Dstream,Rstream。
Streams Relations Window Specification Language Streams Relations Relational Query language Relation to Streamoperators
CQL CQL包含了三个SQL的句法扩展: • 1。在SQL中引用关系的任何位置,在CQL中可以引用流。 • 2.在CQL中,任何对基流的引用,及任何子查询产生的流,后面都要跟一个窗口规格说明。 • CQL中任何对关系或子查询产生的关系的引用可以通过Istream,Dstream,Rstream转换为流。
CQL Example 1。流过滤 找出所有起价超过100的交易,并且以流的形式输出结果。 Select * From Open Where start_price > 100
CQL Example 3.流子查询 维持一个当前开着,而未结束的拍卖的表 Select * From Open Where item_id Not In (Select * From Close)
CQL Example 4。派生的关系 计算包含当前未注销的注册用户的用户关系 Select user_id, name, state From Register[Partition By user_id Rows 1] Where user_id Not In (Select * From Deregister)
CQL Example 5。窗口化的流连接 在所有的拍卖中输出item_id流,对于这个 拍卖,从开始到结束的时间在5小时内。 Select Istream(Close.item_id) From Close[Now],Open[Range 5 Hours] Where Close.item_id = Open.item_id
等价查询转换 我们的抽象语义保证了所有的SQL中的等 价变换CQL中也支持,包括子查询展平, 连接重排序,谓词下推,等。此外,以内 任何CQL查询和子查询产生一个关系,能 被看作一个物化视图,所有的物化视图维 护的等价变换也可以用在CQL中。
考虑两个基于流的转换 • 窗口缩减 • 过虑窗口交换
窗口缩减 • 将有Unbouinded窗口和Istream操作符的查询转换为用Now窗口和Rstream操作符的等价形式。 • Select Istream(L) From S[Range Unbounded] Where C = Select Rstream(L) From S[Now] Where C
过虑窗口交换 • selection条件与基于时间的窗口的交换。 • Select Istream(L) From S[Range Unbounded] Where C = Select Rstream(L) From S[Now] Where C
结论 • 这篇文章是第一篇为流和关系提供说明性通用连续查询语言的文章。 • 我门首先展示了一个基于任何关系查询语言,任何窗口规格语言,和一组将关系映射到流的操作符的抽象语义, • 接着我们提出了CQL,一个具体语言,实现了我们的语义中提出的“黑盒”,用SQL作为关系查询语言,用派生于SQl-99的窗口查询语言。