pig中各种sql语句的实现

2024-08-20 18:18
文章标签 sql 实现 语句 database pig

本文主要是介绍pig中各种sql语句的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pig中各种sql语句的实现  

     Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。使用pig可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。我们可以在不熟悉map/reduce的情况下使用类似与sql语句的pig latin语句来实现复杂的数据处理。  

    我这里以Mysql 5.1.x为例,Pig的版本是0.8

   同时我将数据放在了两个文件,存放在/tmp/data_file_1和/tmp/data_file_2中.文件内容如下:

    tmp_file_1:

Txt代码  收藏代码
  1. zhangsan    23  1  
  2. lisi    24  1  
  3. wangmazi    30  1  
  4. meinv   18  0  
  5. dama    55  0  

   tmp_file_2:

Txt代码  收藏代码
  1. 1   a  
  2. 23  bb  
  3. 50  ccc  
  4. 30  dddd  
  5. 66  eeeee  

 

       1.从文件导入数据

          1)Mysql (Mysql需要先创建表).

             CREATE TABLE TMP_TABLE(USER VARCHAR(32),AGE INT,IS_MALE BOOLEAN);

             CREATE TABLE TMP_TABLE_2(AGE INT,OPTIONS VARCHAR(50));   -- 用于Join

             LOAD DATA LOCAL INFILE '/tmp/data_file_1'  INTO TABLE TMP_TABLE ;

             LOAD DATA LOCAL INFILE '/tmp/data_file_2'  INTO TABLE TMP_TABLE_2;

          2)Pig

              tmp_table = LOAD '/tmp/data_file_1' USING PigStorage('\t') AS (user:chararray, age:int,is_male:int);

              tmp_table_2= LOAD '/tmp/data_file_2' USING PigStorage('\t') AS (age:int,options:chararray);

 

      2.查询整张表

         1)Mysql

            SELECT * FROM TMP_TABLE;

         2)Pig

            DUMP tmp_table;

      3. 查询前50行

         1)Mysql

            SELECT * FROM TMP_TABLE LIMIT 50;

         2)Pig

             tmp_table_limit = LIMIT tmp_table 50;

             DUMP tmp_table_limit; 

     4.查询某些列

        1)Mysql

            SELECT USER FROM TMP_TABLE;

        2)Pig

            tmp_table_user = FOREACH tmp_table GENERATE user;

            DUMP tmp_table_user;

 

    5. 给列取别名

        1)Mysql

           SELECT USER AS USER_NAME,AGE AS USER_AGE FROM TMP_TABLE;

        2)Pig

           tmp_table_column_alias = FOREACH tmp_table GENERATE user AS user_name,age AS user_age;

           DUMP tmp_table_column_alias; 

 

     6.排序

        1)Mysql

           SELECT * FROM TMP_TABLE ORDER BY AGE;

        2)Pig

            tmp_table_order = ORDER tmp_table BY age ASC;

            DUMP tmp_table_order;

 

     7.条件查询

        1)Mysql

            SELECT * FROM TMP_TABLE WHERE AGE>20;

        2) Pig

            tmp_table_where = FILTER tmp_table by age > 20;

            DUMP tmp_table_where;

 

     8.内连接Inner Join

        1)Mysql

           SELECT * FROM TMP_TABLE A JOIN TMP_TABLE_2 B ON A.AGE=B.AGE;

        2)Pig

            tmp_table_inner_join = JOIN tmp_table BY age,tmp_table_2 BY age;

            DUMP tmp_table_inner_join;

    9.左连接Left  Join

       1)Mysql

           SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE;

       2)Pig

          tmp_table_left_join = JOIN tmp_table BY age LEFT OUTER,tmp_table_2 BY age;

          DUMP tmp_table_left_join;

    10.右连接Right Join

         1)Mysql

            SELECT * FROM TMP_TABLE A RIGHT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE;

         2)Pig

            tmp_table_right_join = JOIN tmp_table BY age RIGHT OUTER,tmp_table_2 BY age;

            DUMP tmp_table_right_join;

    11.全连接Full Join

         1)Mysql

            SELECT * FROM TMP_TABLE A  JOIN TMP_TABLE_2 B ON A.AGE=B.AGE

                UNION SELECT * FROM TMP_TABLE A LEFT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE

                UNION SELECT * FROM TMP_TABLE A RIGHT JOIN TMP_TABLE_2 B ON A.AGE=B.AGE;

         2)Pig

            tmp_table_full_join = JOIN tmp_table BY age FULL OUTER,tmp_table_2 BY age;

            DUMP tmp_table_full_join;

 

     12.同时对多张表交叉查询

          1)Mysql

             SELECT * FROM TMP_TABLE,TMP_TABLE_2;

          2)Pig

             tmp_table_cross = CROSS tmp_table,tmp_table_2;

             DUMP tmp_table_cross;

 

     13.分组GROUP BY

         1)Mysql

            SELECT * FROM TMP_TABLE GROUP BY IS_MALE;

         2)Pig

            tmp_table_group = GROUP tmp_table BY is_male;

            DUMP tmp_table_group;

      14.分组并统计

           1)Mysql

             SELECT IS_MALE,COUNT(*) FROM TMP_TABLE GROUP BY IS_MALE;

           2)Pig

              tmp_table_group_count = GROUP tmp_table BY is_male;

              tmp_table_group_count = FOREACH tmp_table_group_count GENERATE group,COUNT($1);

              DUMP tmp_table_group_count;
 

      15.查询去重DISTINCT

           1)MYSQL

              SELECT DISTINCT IS_MALE FROM TMP_TABLE;

           2)Pig

              tmp_table_distinct = FOREACH tmp_table GENERATE is_male;

              tmp_table_distinct = DISTINCT tmp_table_distinct;

              DUMP  tmp_table_distinct;

注:如果想查看pig的详细使用说明,请参考“pig学习教程”:http://blog.csdn.net/zhu_xun/article/details/16819169

这篇关于pig中各种sql语句的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090814

相关文章

golang 对象池sync.Pool的实现

《golang对象池sync.Pool的实现》:本文主要介绍golang对象池sync.Pool的实现,用于缓存和复用临时对象,以减少内存分配和垃圾回收的压力,下面就来介绍一下,感兴趣的可以了解... 目录sync.Pool的用法原理sync.Pool 的使用示例sync.Pool 的使用场景注意sync.

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

golang中slice扩容的具体实现

《golang中slice扩容的具体实现》Go语言中的切片扩容机制是Go运行时的一个关键部分,它确保切片在动态增加元素时能够高效地管理内存,本文主要介绍了golang中slice扩容的具体实现,感兴趣... 目录1. 切片扩容的触发append 函数的实现2. runtime.growslice 函数gro

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed