首页 > 其他分享 >Hive学习之抽样(Sampling)

Hive学习之抽样(Sampling)

时间:2023-05-17 21:07:34浏览次数:55  
标签:TABLESAMPLE 抽样 plain Hive Sampling print copy view


当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法

      Hive支持桶表抽样和块抽样,下面分别学习。所谓桶表指的是在创建表时使用CLUSTERED BY子句创建了桶的表。桶表抽样的语法如下:


[sql]  view plain  copy


 print

?

1. table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname])


      TABLESAMPLE子句允许用户编写用于数据抽样而不是整个表的查询,该子句出现FROM子句中,可用于任何表中。桶编号从1开始,colname表明抽取样本的列,可以是非分区列中的任意一列,或者使用rand()表明在整个行中抽取样本而不是单个列。在colname上分桶的行随机进入1到y个桶中,返回属于桶x的行。下面的例子中,返回32个桶中的第3个桶中的行:


[sql]  view plain  copy


 print

?


1. SELECT *  
2. FROM source TABLESAMPLE(BUCKET 3 OUT OF 32 ON rand()) s;


      通常情况下,TABLESAMPLE将会扫描整个表然后抽取样本,显然这种做法效率不是很高。替代方法是,由于在使用CLUSTERED BY时指定了分桶的列,如果抽样时TABLESAMPLE子句中指定的列匹配CLUSTERED BY子句中的列,TABLESAMPLE只扫描表中要求的分区。假如上面的例子中,source表在创建时使用了CLUSTEREDBY id INTO 32 BUCKETS,那么下面的语句将返回第3个和第19个簇中的行,因为每个桶由(32/16)=2个簇组成。为什么是3和19呢,因为要返回的是第3个桶,而每个桶由原来的2个簇组成,第3个桶就由原来的第3个和19个簇组成,根据简单的哈希算法(3%16=19%16)。


[sql]  view plain  copy


 print

?


1. TABLESAMPLE(BUCKET 3 OUT OF 16 ON id)

      相反,下面的语句将会返回第3个簇的一半,因为每个桶由(32/64)=1/2个簇组成。


[sql]  view plain  copy


 print

?



    1. TABLESAMPLE(BUCKET 3 OUT OF 64 ON id)


          从hive-0.8开始可以使用块抽样,语法为:


    [sql]  view plain  copy


     print

    ?


    1. block_sample: TABLESAMPLE (n PERCENT)

          该语句允许抽取数据大小的至少n%(不是行数,而是数据大小)做为输入,支持CombineHiveInputFormat而一些特殊的压缩格式是不能够被处理的,如果抽样失败,MapReduce作业的输入将是整个表。由于在HDFS块层级进行抽样,所以抽样粒度为块的大小,例如如果块大小为256MB,即使输入的n%仅为100MB,也会得到256MB的数据。下面的例子中输入的0.1%或更多将用于查询:


    [sql]  view plain  copy


     print

    ?



      1. SELECT *  
      2. FROM source TABLESAMPLE(0.1 PERCENT) s;


            如果希望在不同的块中抽取相同的数据,可以改变下面的参数:


      [java]  view plain  copy


       print

      ?


      1. set hive.sample.seednumber=<INTEGER>;

            也可以指定读取数据的长度,该方法与PERCENT抽样具有一样的限制,为什么有相同的限制,是因为该语法仅将百分比改为了具体值,但没有改变基于块抽样这一前提条件。该语法为:


      [sql]  view plain  copy


       print

      ?



        1. block_sample: TABLESAMPLE (ByteLengthLiteral)  
        2.    
        3. ByteLengthLiteral : (Digit)+ ('b' | 'B' | 'k' | 'K' | 'm' | 'M' | 'g' | 'G')


        下面的例子中输入的100M或更多将用于查询:


        [sql]  view plain  copy


         print

        ?



          1. SELECT *  
          2. FROM source TABLESAMPLE(100M) s;


                Hive也支持基于行数的输入限制,当效果与上面介绍的两个不同。首先不需要CombineHiveInputFormat,这意味着可以被用在非原生表中。其次行数被用在每个split中。因此总的行数根据输入的split数而变化很大。语法格式为:


          [sql]  view plain  copy


           print

          ?



            1. block_sample: TABLESAMPLE (n ROWS)


                  例如下面的查询将从每个split中抽取10行:


            [sql]  view plain  copy


             print

            ?



            1. SELECT * FROM source TABLESAMPLE(10 ROWS);

            标签:TABLESAMPLE,抽样,plain,Hive,Sampling,print,copy,view
            From: https://blog.51cto.com/u_6468453/6293605

            相关文章

            • 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
               大数据Spark“蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战selectsum_all(age)from...hive>usedefault;showtables;select*fromemployeeforhaving;一:udf编码importorg.apache.hadoop.hive.ql.exec.UDF;importorg.apache.hadoop.io.Text;pub......
            • 第92课作业,通过SerDes的方式对一下数据进行Hive的存储和查询操作
               第92课作业,通过SerDes的方式对一下数据进行Hive的存储和查询操作: 0^^Hadoop^^America^^5000|8000|12000|level8^^male1^^Spark^^America^^8000|10000|15000|level9^^famale2^^Flink^^America^^7000|8000|13000|level10^^male3^^Hadoop^^America^^9000|11000|12000|level10^^f......
            • hive(一)
              数据仓库数据仓库,英文名称为DataWarehouse,可简写为DW。是一个用于存储,分析,报告的数据系统.数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持.数据库和数据仓库区别数据库和数据仓库的区别实际就是OLTP和OLAP的区别OLTP系统的典型应用就是RDBMS,也......
            • HIVE跨集群迁移
              查看mysql使用端口ps-ef|grepmysqlss-antp|grep[ps查出来的pid]停止HIVE写入服务创建备份路径mkdir-p/root/hivebackup/执行备份数据库命令:(在目标集群执行)mysqldump-uroot-pPassword-h1.1.1.1-P3306--databaseshive_prode>/root/jws/hiveba......
            • impala jdbc导出hive数据字典
              业务需求太多了,给完整导出为html文件,以及之前搞的publicstaticvoidmain(String[]args)throwsException{kerberos();}publicstaticvoidkerberos(){URLresource=Thread.currentThread().getContextClassLoader().getResource("");......
            • 样本及其抽样分布
              《随机样本》总体X对总体X进行n次重复的,独立的观察,得到:X1,X2,X3....,Xn注意Xi是随机变量,被称为样本,而且Xi与X同分布,Xi之间相互独立当(X1,X2,....,Xn)有确定的值后为(x1,x2,....,xn)这个被称为样本值 《统计量》 常见统计量: 《重要定理》注意......
            • 1、通过亿级数据量在hive和impala中查询比较text、orc和parquet性能表现(二)
              文章目录9、分别在hive和impala中查询验证结果(比較HDFS存儲三種格式文件的查詢性能textfile、orc、parquet)1)、查詢總條數2)、隨便找一條信息,按照name查詢3)、按照多条件查询4)、按照時間區間查詢5)、兩張表join6)、總結1、文件存儲2、hive查詢與impala查詢速度3、不同查詢類型的查詢......
            • 小知识:设置archive_lag_target参数强制日志切换
              为客户测试一个ADG场景问题,发现测试环境的日志切换频率过低,总是需要定期手工切换,这非常影响测试心情。实际上,可以设置archive_lag_target参数强制日志切换。比如设置:altersystemsetarchive_lag_target=1800;这样即使库没任何压力,半小时也会切换一次日志。该设置同时也适......
            • 【大数据】Hive 小文件治理和 HDFS 数据平衡讲解
              目录一、Hive小文件概述二、Hive小文件产生的背景三、环境准备四、Hive小文件治理1)小文件合并(常用)1、示例演示一(非分区表)2、示例演示二(分区表)3、示例演示三(临时表)2)文件压缩3)存储格式优化4)分区表5)垃圾回收五、HDFS数据平衡1)HDFS数据倾斜2)HDFS数据平衡一、Hive小文件概述......
            • 消息推送平台的实时数仓?!flink消费kafka消息入到hive
              大家好,3y啊。好些天没更新了,并没有偷懒,只不过一直在安装环境,差点都想放弃了。上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了,austin常规的功能已经更新得差不多了,剩下的就是各种细节的完善。不知道大......