在pig中, dump和store会分别完成两个MR,不会一起进行

1:加载名用正则表达式:

LOAD'/user/wizad/data/wizad/raw/2014-0{6,7-0,7-1,7-2,7-3,8}*/3_1/adwords*'

或者定义引用:%default cleanedLog/user/wizad/data/wizad/cleaned/2014-11-{0[3-9],1[0-8]}/*/part*正确,

而%default cleanedLog/user/wizad/data/wizad/cleaned/2014-11-{0[3-9],[10-18]}/*/part*(这语法居然错了, 用hadoop fs -ls/user/wizad/data/wizad/cleaned/2014-11-{0[3-9],[10-18]}/ 发现[10-18]不能使用,是错误的,所以只能用1[0-8]。原因是[]只能在10之内。我试了一年0[10-18]查的是01和08两个文件。而0[100-108] 查的10,11,18三个文件。所以只能在10之内使用。使用时格式为{[10-18]}也是一样的!)

注意:文件名读入不支持所有的正则表达式,是hadoop支持什么云可是用什么。hadoop2.0支持,

?

*

[abc]或者[^abc]

[a-z]或者[^a-z]

\c:转移字符表达,\d标示0到9的数字

{ab,cd}

2:filter的几种简单用法:

按值过滤

FILTERclickDate_all BY log_type=='2';

FILTERmapping_table BY mapping_ad_network_id=='3' AND mapping_type=='5';

test=FILTER allRow BY (ad_id=='14997' OR ad_id=='14998' OR ad_id=='14999') ANDlog_type==2;

test=FILTERallRow BY (INDEXOF(ad_id,'14997')==0 OR INDEXOF(ad_id,'14998')==0 OR INDEXOF(ad_id,'14999')==0)AND log_type==2;

配合size函数

FILTERcount_imei BY (SIZE(cimei)>14 AND SIZE(cimei)<17);

2:正则表达式

FILTERcimei2 BY NOT cimei MATCHES '^[0-9]*$';

FILTERcmac2 BY cmac MATCHES'/[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}:[A-F\d]{2}/';

3:排序

ORDER province_count BY $2 DESC;

注意order多个文件,比如hdfs上part00000和part00001,order后只生成一个文件,因为合并成一个文件的操作只能用一个reduce完成,所以结果可能生成很大的文件

4:CONCAT

可用于生成独立的一列,如count了的一个数,前面加一列名称

FOREACHorigin_cleaned_data GENERATE CONCAT('<-_','->') AS cou,guid,log_type;

read_social_14=FOREACH metadata_social_14 GENERATE CONCAT('14','=='),guid_social;

all_id=FOREACH allRow GENERATE id,CONCAT('_','-') as cc;

5:过滤空值,将空值改成取值unknown。

条件表达式“(判断式)?a:b”的应用:直接对列操作

origin_historical= FOREACH origin_cleaned_data GENERATE wizad_ad_id,guid,log_type,

((province_region_id== '') ? 'unknown' : province_region_id)

另外注意:pig判断取值为null,是用is null(is not null)或者== null(!= null)

6:切分成不同子集,按值:

SPLIT geelyTuiGuang INTO android IFos_id==1,ios IF os_id==2;

SPLIT ios INTO ios6 IF(INDEXOF(os_version,'7')!=0),ios7 IF INDEXOF(os_version,'7')==0;

SPLITallCleaned INTO log_42 IF (

((chararray)$34=='1'OR (chararray)$34=='2' OR (chararray)$34=='3' OR (chararray)$34=='1' OR(chararray)$34=='4')

AND

(INDEXOF((chararray)$35,'.')>0)

AND

((chararray)$36=='1'OR (chararray)$36=='')

),

log_43IF (

((chararray)$34=='1'OR (chararray)$34=='2')

AND

((chararray)$35=='1'OR (chararray)$35=='2' OR (chararray)$35=='3' OR (chararray)$35=='1' OR(chararray)$35=='4')

AND

(INDEXOF((chararray)$36,'.')>0)

);

7:replace函数替换值

FOREACH ios6 GENERATE imei,mac_address ascmac,REPLACE(idfa,'null','');

8:数据流过滤

en_guid =STREAM duimei THROUGH `awk-F"," '{if($3 == "null") print$1","$2","; else print $0}'`;

9:强制转换:

cleaned_data_42=FOREACH log_42 GENERATE

(chararray)$1  AS wizad_ad_id:chararray,

(chararray)$2  AS guid:chararray,

(chararray)$6  AS log_type:chararray,

(chararray)$18AS imei:chararray,

(chararray)$22AS idfa:chararray,

(chararray)$23AS mac_address:chararray

10内置函数REGEX_EXTRACT,使用正则表达式:

allAdId=FOREACH allRow GENERATE REGEX_EXTRACT((chararray)$3,'(.*) (.*)',1) AStime,REGEX_EXTRACT((chararray)$0,'(.*)_(.*)',1) AS adn,$6 AS ad_id;

allAdId=FOREACH allRow GENERATE REGEX_EXTRACT(create_time,'(.*) (.*)',1) AStime,ad_id;

11.SUBSTRING(aa,0,n)提取0到n-1个字符:

split jn_data into same_prov if(SUBSTRING(province,0,2) == SUBSTRING(province_ad,0,2)), diff_prov if(SUBSTRING(province,0,2)

!= SUBSTRING(province_ad,0,2));

时间类型提取分钟,做计算

log_data= foreach click_log generate log_type,guid,ip,SUBSTRING(create_time,0,13) astime,SUBSTRING(create_time,14,16) as minute2,os_id,os_version,device_type;

12,ABS时间相差5分钟计算:

minute_compare= foreach join_data generatelog_type,cookie_id,guid,(int)minute1,(int)minute2,time_extract::os_version,log_data::os_version;

same_users= filter minute_compare by (ABS(minute1-minute2) <= 5);

13,统计个数

grp_diff_city= group diff_city all;

count_diff_city= foreach grp_diff_city generate COUNT_STAR($1);

dump count_same_city;

14,join by多个列(字段)

join_data= join time_extract by (ip,time,os_id), log_data by (ip,time,os_id);

从左向右依次比较

pig的一些实例(我常用的语法)的更多相关文章

  1. 常用markdown语法入门

    入门markdown常用基本语法,简单到让你怀疑人生~~ 不说废话,直接上图(如果图片显示不清晰,建议选中图片右键——在新标签页中打开图片,妥妥的呢!!) (左侧黑色背景为markdown语法,右侧为 ...

  2. 转 .md即markdown文件的基本常用编写语法(图文并茂)

    原文链接:.md即markdown文件的基本常用编写语法(图文并茂) 序言: 很久没有写博客了,感觉只要是不写博客,人就很变得很懒,学的知识点感觉还是记不住,渐渐地让我明白,看的越多,懂的越少(你这话 ...

  3. Vue常用模板语法

    常用模板语法   本篇将在上一篇的基础上记录文本渲染.表达式.过滤器以及常用指令的简单用法. 一.文本渲染 Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容.同时为了提高渲染效率,也支持只 ...

  4. EditPlus轻量级编辑器配置常用的语法规则!

    打开EditPlus编辑器:工具 ---- 参数设置 ---- 文件 ---- 设置&语法: 先配置简单的CSS语法: 勾选下面的 “自动完成” ,加载对应的ACP文件,配置一些常用的语法: ...

  5. Python3.x:常用基础语法

    Python3.x:常用基础语法 1,if else语句: 不执行if内的语句,需要用:pass if i>2: #跳过不执行 pass else: print("i= %s" ...

  6. grep的常用命令语法

    grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:"m y s t r i n g".这样做有两个原因,一是 ...

  7. layui js 常用语句语法

    烂笔头: layui组件使用 注意layui的版本. 在head里需要引入css/js文件. 出现 form.verify,form.val is not a function的错误信息时,注意版本, ...

  8. .md 即 markdown 文件的基本常用编写语法

    0. 前言 Markdown 是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式.现在的项目都使用了 git 仓库,再加上远程仓库 github 托管,那就难免要写一些 ...

  9. Oracle常用基础语法(未完待补和操作)

    这篇博客主要是Oracle常用基础语法, 另外,存储过程和存储函数很重要,这个后期看视频学习,还有DB优化,另外,还有plsql develop和navicat的使用,重点是数据的导入导出: ---- ...

随机推荐

  1. python3全栈开发-多进程的守护进程、进程同步、生产者消费者模式(重点)

    一.守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes a ...

  2. OSX 鼠标和键盘事件

    本文转自:http://www.macdev.io/ebook/event.html 事件分发过程 OSX 与用户交互的主要外设是鼠标,键盘.鼠标键盘的活动会产生底层系统事件.这个事件首先传递到IOK ...

  3. logback 三

    一.LoggerFactory.gerLogger()使用: private Logger vitalLogger= LoggerFactory.getLogger("vitalReques ...

  4. Deap Learning (吴恩达) 第一章深度学习概论 学习笔记

    Deap Learning(Ng) 学习笔记 author: 相忠良(Zhong-Liang Xiang) start from: Sep. 8st, 2017 1 深度学习概论 打字太麻烦了,索性在 ...

  5. Response ServletContext 中文乱码 Request 编码 请求行 共享数据 转发重定向

    Day35  Response 1.1.1 ServletContext概念 u 项目的管理者(上下文对象),服务器启动时,会为每一个项目创建一个对应的ServletContext对象. 1.1.2  ...

  6. 查找Mysql的安装路径

    在安装Mysql后,却忘记路径了!!!!!!!! 查找的方法:进入Mysql命令行输入,   show variables like "%char%"; 红色部分就是Mysql的安 ...

  7. ScalaPB(1): using protobuf in akka

    任何类型的实例作为消息在两端独立系统的机器之间进行传递时必须经过序列化/反序列化serialize/deserialize处理过程.假设以下场景:在一个网络里有两台连接的服务器,它们分别部署了独立的a ...

  8. env-cmd 从文件读取配置变量

    npm install --registry=https://registry.npm.taobao.org -D env-cmd So.. 这样你在npm run build的时候会发现输出文件里面 ...

  9. linux系统性能监控--内存利用率

    Linux提供了对物理内存进行合理.高效的访问并可以访问潜在的海量虚存的技术.虚存通常稍多于操作系统实际拥有的内存容量,以便将较少使用的数据卸载到磁盘存储器上,同时又呈现出系统拥有大量物理内存的假象. ...

  10. Java经典设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...