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的更多相关文章

  1. [书目20140902]实战Windows Azure——微软云计算平台技术详解 --徐子岩

    目录第1章  云计算技术简介    1.1  云计算所要解决的问题    1.2  云计算平台的分类    1.3  微软云计算平台Windows Azure        1.3.1  高可用性   ...

  2. Multithreading C++ Out of Core Sotring for Massive Data|多线程C++的大规模数据外部排序

    先说一下,这个其实是我为实现PantaRay或者是类似Dreamworks的Out of Core点云GI的技术储备,为大规模点云光线跟踪所准备的第一步.在实际的应用中,int类型会被64bit的ui ...

  3. 高手问答精选:Go 语言 —— 云计算时代的 C 语言(类似于一个FAQ)

    Go 语言被称为云计算时代的 C 语言,它在软件开发效率和运行效率之间做出了绝佳的权衡.这使得它既适应于互联网应用的极速开发,又能在高并发.高性能的开发场景中如鱼得水.正因如此,许多互联网公司,尤其是 ...

  4. MindV编入微软云计算中小企业解决方案

    鹰翔MindV思维导图软件基于云计算,曾作为windows azure云计算的一个样例介绍,收入中小企业解决方案中.http://www.microsoft.com/hk/smb/cloud/azur ...

  5. Interviews3D: APlatform for Interactive Handing of Massive Data Sets 读后感

    横向比较: Inadequacy of current system design( 现代系统和一些软件的不足) 软件特点: Output sensitivity Out-of core data h ...

  6. Massive Data Mining学习记录

    第一周: 学习PageRank, 知识点:每个节点的权值由其他节点的投票决定,所有节点的权值和为1 当节点很多时候必须转换成矩阵运算来计算节点的最终值,由马尔可夫链可以证明,这个值可以迭代得到 问题: ...

  7. 微软的R语言发行版本MRO及开发工具RTVS

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软在收购R语言的开发商后,也独立发行或在自己的产品中集成了R语言,这里就介绍下它们包 ...

  8. Win7 SP1语言包微软官方下载地址及使用方法 2

    情形一:如果您的系统版本是企业版.旗舰版,可以在Windows update中检测语言包按照提示下载安装即可.如果觉得Windows update不方便的话,可以在本文第二部分中下载所需的语言包,下载 ...

  9. C# VS2010中,用微软自带的System.Data.OracleClient来连接Oracle数据库

    由于微软在.Net框架4.0中已经决定撤销使用System.Data.OracleClient,造成在VS2010中无法连接Oracle数据库,但它还依旧存在于.Net架构中,我们可以通过自己引用 C ...

随机推荐

  1. 【NOIP2015提高组】 Day1 T2 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

  2. Git相关操作一

    1.将目录变为Git项目: 输入git init将当期目录变为Git项目 git init git项目可以被认为分为三个区域,Working Directory,Staging Area,Reposi ...

  3. PHP垃圾回收机制

    一.引用计数基本知识 每个php变量存在一个叫"zval"的变量容器中,当一个变量被赋常量值时,就会生成一个zval变量容器.一个zval变量容器,除了包含变量的类型和值,还包括两 ...

  4. LeetCode 162. Find Peak Element (找到峰值)

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  5. du和df显示磁盘空间使用差异大的几种情况

     接触客户多了,发现经常有客户遇到du看到系统只使用了一部分磁盘空间,但df看时磁盘空间已经满了,或者差异较大,我遇到过三次不一样的原因,下面做一下总结,恶补一下!也希望对大家有点帮助! 现象:有客户 ...

  6. hadoop2.6环境中部署hive1.2.2的错误

    1.hive配置遇到的问题( Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D) 解决 ...

  7. Problem F

    Problem Description "Yakexi, this is the best age!" Dong MW works hard and get high pay, h ...

  8. 1.Nginx 简介

    Nginx是Apache服务器不错的替代品,它能支持高达50 000个并发连接数的响应,而内存,CPU等系统资源消耗却非常低,运行非常稳定. 1.选择Nginx的理由 1.1 可以高并发连接 1.2 ...

  9. visual studio 2013使用github获取代码

    如图点击"视图""团队资源管理器".   点击主页上方的那个插头形状按钮"连接到团队项目".点击"克隆"   然后在克隆 ...

  10. Mongoose之 SchemaTypes 数据类型

    SchemaTypes 数据类型 SchemaTypes handle definition of path defaults, validation, getters, setters, field ...