微软云计算 Massive Data 处理语言Scope 1
Massive Data处理一直是云计算中很重要的一个环节.目前像Google,Yahoo在相关方面都有自己专有的技术.例如Google的基于MapReduce的Sawzall语言.和Yahoo基于Hadoop的Pig。
Cosmos是微软的一个运行在大规模服务器集群上的分布式技术平台.专门用来存储和分析Massive Data.有了SCOPE,相信微软自己的云计算架构将会更有吸引力.不同于Google,和Yahoo的是微软的SCOPE语言虽然像SQL语句,但其实是来自C#语言扩展。
什么是Scope?,首先:
1.Scope is the Query Language for Cosmos
2.Scope Is Not SQL
Scope 中的数据类型:
|
bool |
Long |
|
byte[] |
Ulong |
|
binary (an alias for byte[]) |
Float |
|
byte |
Double |
|
sbyte |
decimal |
|
Char |
String |
|
Guid |
Short |
|
Int |
ushort |
|
Uint |
User-Defined Types |
Scope基本语法
逻辑运算符:AND(与,不能用 &&),OR(或,不能用 ||),==(等于,不能用 =)
SELECT:与SQL相同,通过 AS 关键字给列分配名称。
rs1 = SELECT Market, DwellTime + 1.0 AS DwellTime2 FROM searchlog;
WHERE:过滤输入的行数据;
rs1 =
SELECT Start, Market, DwellTime, DwellTime /60.0 AS DwellTimeInMinutes
FROM searchlog;
rs2 =
SELECT *
FROM rs1
;
HAVING:过滤输出的行数据;
rs1 =
SELECT Start, Market, DwellTime/60.0 AS DwellTimeInMinutes
FROM searchlog
;
TOP n:获取前n行记录;
rs1 =
Market, DwellTime
FROM searchlog;
DISTINCT:用法与SQL相同;
rs1 =
SELECT DISTINCT Market
FROM searchlog;
ORDER BY + ASC /DESC:
rs1 =
SELECT Start, Market, DwellTime
FROM searchlog
ORDER BY DwellTime ASC;
RANK:列序号;
rs1 =
SELECT RANK AS RowNumber, Start, Market
FROM searchlog
ORDER BY Start;
聚集函数:
ARGMAX AVG COUNT COUNTIF FIRST LAST LIST MAX MIN SUM VAR STDE
ARGMAX(a,b): 查找a列的最大值,并返回相应的b列的值。
UNION DISTINC:后续
UNION ALL:后续
INSERT DISTINC:后续
INSERT ALL:后续
EXCEPT DISTINC:后续
EXCEPT ALL:后续
关联操作(与SQL相同,不做详细介绍):
INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN (没有限制条件的 INNER JOIN ) LEFT SEMIJOIN (Is more like a filter than a join. It is the syntactical way of expressing) RIGHT SEMIJOIN
预处理参数:
#DECLARE str1 string = "Hello World"; #DECLARE str2 string = "BEGIN" + @str1 + "END"; #}END", @str1); #");
脚本参数:
@@foo@@
类型转换:部分类型可以相互转换
rs1 = SELECT Market, ((double) DwellTime) AS DwellTimeDouble FROM searchlog;
调用 C# 方法:MyHelper.SecondsToMinutes() 是c#语言定义的方法
rs1 = SELECT Market, MyHelper.SecondsToMinutes(DwellTime) AS DwellTimeInMinutes FROM searchlog;
三目运算:
cond ? a : b IF (<cond>, <a>, <b> )
非结构化文本流
Scope处理的内容(输入和输出)可以分为结构化文本流和非结构化文本流。其中,结构化文本流(.ss文件)中包含了列名,数据类型等数据(Schema),并且已经确定了各行以及各列的数据结构,你可以把它看作是数据库中的一张表,因此我们一般不会手动修改.ss文件中的内容。而非结构化文本流一般为普通的文本文件,没有明确规定列名以及格式,甚至是每行和每列的分隔符。但是一般情况下,我们更习惯用Tab(\t)作为列分隔,换行(\n)作为行分隔。
非结构化文本流基本概念:
- 不适用SSTREAM;
- 使用 提取器 (Extrator) 提取并转换 行集 (Rowset);
- 使用 输出器(Outputer) 输出 流(Stream);
- 默认的提取器和输出器,以及用户自定义的提取器和输出器
读取非结构化文本流使用 EXTRACT 关键字,需要指定Extractor ,当然你也可以使用默认的Extractor,用法如下:
rs0 =
EXTRACT
FirstName : string,
LastName : string,
Age : int
FROM
"/test_input.txt"
USING DefaultTextExtractor()
;
DefaultTextExtractor() 以Tab(\t)作为列分隔符。当然,你也可以自己实现一种Extractor,来读取文本内容:
public class MyExtractor : Extractor
{
public override IEnumerable<Row> Extract(StreamReader reader, Row outputRow, string[] args)
{
string line;
while ((line = reader.ReadLine()) != null)
{
var urls = new List<string>();
string[] datas = line.Split('\t');
].Split(';');
foreach(var item in urlDatas)
{
if(!string.IsNullOrEmpty(item))
{
outputRow[].UnsafeSet(datas[]);
outputRow[].UnsafeSet(item);
yield return outputRow;
}
}
}
}
public override Schema Produces(string[] requestedColumns, string[] args)
{
return new Schema("Name:string,Email:string");
}
}
对应的Scope脚本:
input =
EXTRACT *
FROM @"input\test.txt"
USING MyExtractor();
OUTPUT input
TO "result.txt";
以及输入输出:
input\test.txt: Jadfine djatr@outlook.com;tojadfine@outlook.com Kinsan kjmint@outlook.com;sun308@outlook.com;kin_sun@hotmail.com result.txt: Jadfine djatr@outlook.com Jadfine tojadfine@outlook.com Kinsan kjmint@outlook.com Kinsan sun308@outlook.com Kinsan kin_sun@hotmail.com
和我们预想的一样,第二列的Emails 以 ;作为分隔符被分隔成了多条记录。还要特别说明一下,我们要使用自己定义的Extractor,需要继承ScopeRuntime.Extractor类,并重写Extract和Product方法。
Extract方法有三个参数:IEnumerable<Row> Extract(StreamReader reader, Row outputRow, string[] args) 。其中StreamReader 读的是 FROM @"input\test.txt" 中的内容。Row是要输出的行,其中包含 Name(string 类型),Email(string 类型)两列。Row的数量,名称是由Product方法定义的。关于如何通过重写Product方法修改,新增,删除列,将在后续介绍。最后一个参数 string[] args 传递的是我们在Scope脚本中调用此方法时传递的参数,如: USING MyExtractor("arg1","arg2");
结构化文本流
后续。。

微软云计算 Massive Data 处理语言Scope 1的更多相关文章
- [书目20140902]实战Windows Azure——微软云计算平台技术详解 --徐子岩
目录第1章 云计算技术简介 1.1 云计算所要解决的问题 1.2 云计算平台的分类 1.3 微软云计算平台Windows Azure 1.3.1 高可用性 ...
- Multithreading C++ Out of Core Sotring for Massive Data|多线程C++的大规模数据外部排序
先说一下,这个其实是我为实现PantaRay或者是类似Dreamworks的Out of Core点云GI的技术储备,为大规模点云光线跟踪所准备的第一步.在实际的应用中,int类型会被64bit的ui ...
- 高手问答精选:Go 语言 —— 云计算时代的 C 语言(类似于一个FAQ)
Go 语言被称为云计算时代的 C 语言,它在软件开发效率和运行效率之间做出了绝佳的权衡.这使得它既适应于互联网应用的极速开发,又能在高并发.高性能的开发场景中如鱼得水.正因如此,许多互联网公司,尤其是 ...
- MindV编入微软云计算中小企业解决方案
鹰翔MindV思维导图软件基于云计算,曾作为windows azure云计算的一个样例介绍,收入中小企业解决方案中.http://www.microsoft.com/hk/smb/cloud/azur ...
- Interviews3D: APlatform for Interactive Handing of Massive Data Sets 读后感
横向比较: Inadequacy of current system design( 现代系统和一些软件的不足) 软件特点: Output sensitivity Out-of core data h ...
- Massive Data Mining学习记录
第一周: 学习PageRank, 知识点:每个节点的权值由其他节点的投票决定,所有节点的权值和为1 当节点很多时候必须转换成矩阵运算来计算节点的最终值,由马尔可夫链可以证明,这个值可以迭代得到 问题: ...
- 微软的R语言发行版本MRO及开发工具RTVS
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软在收购R语言的开发商后,也独立发行或在自己的产品中集成了R语言,这里就介绍下它们包 ...
- Win7 SP1语言包微软官方下载地址及使用方法 2
情形一:如果您的系统版本是企业版.旗舰版,可以在Windows update中检测语言包按照提示下载安装即可.如果觉得Windows update不方便的话,可以在本文第二部分中下载所需的语言包,下载 ...
- C# VS2010中,用微软自带的System.Data.OracleClient来连接Oracle数据库
由于微软在.Net框架4.0中已经决定撤销使用System.Data.OracleClient,造成在VS2010中无法连接Oracle数据库,但它还依旧存在于.Net架构中,我们可以通过自己引用 C ...
随机推荐
- centos7安装shipyard没有本地容器及镜像
目前docker的使用越来越多,自然需要docker的管理工具.现在使用web管理的较多,web基本上实现了跨平台,只需要浏览器,不要额外的管理客户端.web管理主要推荐shipyard和kubern ...
- vs2012建一个空解决方案添加以前老版本的Web项目调试弹出window安全
解决方法:NTLM身份验证去掉就行.
- [mysql使用(3)] 使用mysql的时候遇到的一些错误
1.Err1055,出现这个问题往往是在执行sql语句时候,在最后一行会出现这个问题. [Err] 1055 - Expression #1 of ORDER BY clause is not in ...
- Javascript里的if判断与逻辑运算符(||, &&)和比较运算符的特别之处
写JS时不可避免要用到 if 与 逻辑运算符( ||, &&). 如果你经常阅读Js的第三方组件源码, 会发现有一种写法作为初始化变量的方法经常出现. var variable = v ...
- ssm框架的整合
首先创建一个web工程,我这里使用的IDE为eclipse. 结果目录如下: 添加相关的jar包: 接下来是完成配置文件 首先我们先配置web.xml: <?xml version=" ...
- 移动端通过ajax上传图片(文件)并在前台展示——通过H5的FormData对象
前些时候遇到移动端需要上传图片和视频的问题,之前一直通过ajax异步的提交数据,所以在寻找通过ajax上传文件的方法.发现了H5里新增了一个FormData对象,通过这个对象可以直接绑定html中的f ...
- centos6.5配置uwsgi与nginx支持django
一.centos中升级python 1. > wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz # https://ww ...
- 使用Mongodb+Shiro+SpringMVC实现动态权限分配
此次的文档只对Mongodb整合Shiro并且实现动态权限分配做整理,其它的内容以后会补上. 第一步.创建在web.xml中配置 Spring .Shiro shiroFilter 过滤器是用来将请求 ...
- python添加自定义cookies
import cookielib,urllib2 class AddCookieHandler(urllib2.BaseHandler): def __init__(self,cookieValue) ...
- 零基础如何迅速学习HTML5?新手小白学习web前端H5自白!
很多的人在毕业之后才发现原来学的专业不是自己想做的工作,或者专业对口的工作待遇让人觉得并不满意,于是很多人选择培训机构学新的一门技能转换行业.IT行业的web前端H5受到很多学员的青睐.那么学习web ...