`
superlxw1234
  • 浏览: 551264 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44428
社区版块
存档分类
最新评论

[一起学Hive]之十七-从Hive表中进行数据抽样-Sampling

    博客分类:
  • hive
阅读更多

关键字:Hive数据取样、Hive Sampling、Hive TABLESAMPLE.

在Hive中提供了数据取样(SAMPLING)的功能,用来从Hive表中根据一定的规则进行数据取样,Hive中的数据取样支持分桶表取样和数据块取样。

 

16.1 数据块取样(Block Sampling)

  • block_sample: TABLESAMPLE (n PERCENT)

根据输入的inputSize,取样n%。

比如:输入大小为1G,TABLESAMPLE (50 PERCENT)将会取样512M的数据;

看例子:

表lxw1总大小约为64816816,总记录数为:2750714

Hive sampling

使用下面的语句,从表lxw111中取样50%的数据,创建一个新表:

CREATE TABLE lxw1234 AS

SELECT * FROM lxw1 TABLESAMPLE (50 PERCENT);

完成后看看表lxw1234的记录数和大小:

Hive sampling

结果表记录数:1376390,总大小:32432626,基本上是原表的50%。

  • block_sample: TABLESAMPLE (nM)

这种方式指定取样数据的大小,单位为M。

比如,下面的语句:

CREATE TABLE lxw1234_2 AS

SELECT * FROM lxw1 TABLESAMPLE (30M);

将会从表lxw1中取样30M的数据:

Hive sampling

  • block_sample: TABLESAMPLE (n ROWS)

这种方式可以根据行数来取样,但要特别注意:这里指定的行数,是在每个InputSplit中取样的行数,也就是,每个Map中都取样n ROWS。

下面的语句:
SELECT COUNT(1) FROM (SELECT * FROM lxw1 TABLESAMPLE (200 ROWS)) x;

Hive sampling

有5个Map Task(InputSplit),每个取样200行,一共1000行。

16.2 分桶表取样(Sampling Bucketized Table)

关于Hive中的分桶表(Bucket Table),在以后的文章中将会介绍,其实就是根据某一个字段Hash取模,放入指定数据的桶中,比如将表lxw1234按照ID分成100个桶,其算 法是hash(id) % 100,这样,hash(id) % 100 = 0的数据被放到第一个桶中,hash(id) % 100 = 1的记录被放到第二个桶中。分桶表在创建时候使用CLUSTER BY语句创建。

 

Hive中分桶表取样的语法是:

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

其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列,y表示桶的数量。

例子1

SELECT COUNT(1)

FROM lxw1 TABLESAMPLE (BUCKET 1 OUT OF 10 ON rand());

该语句表示将表lxw1随机分成10个桶,抽样第一个桶的数据;

前面介绍过,表lxw1总大小约为64816816,总记录数为:2750714

Hive sampling

出来的结果基本上是原表的十分之一,注意:这个结果每次运行是不一样的,因为是按照随机数进行分桶取样的。

例子2

如果基于一个已经分桶表进行取样,将会更有效率。

执行下面的语句,创建一个分桶表,并插入数据:

CREATE TABLE lxw1_bucketed (pcid STRING)

CLUSTERED BY(pcid) INTO 10 BUCKETS;

 

INSERT overwrite TABLE lxw1_bucketed

SELECT pcid FROM lxw1;

表lxw1_bucketed按照pcid字段分成10个桶,下面的语句表示从10个桶中抽样第一个桶的数据:

SELECT COUNT(1) FROM lxw1_bucketed TABLESAMPLE(BUCKET 1 OUT OF 10 ON pcid);

很好理解。

再看这个:

SELECT COUNT(1) FROM lxw1_bucketed TABLESAMPLE(BUCKET 1 OUT OF 20 ON pcid)

表只有10个桶,如果指定20,看结果:

Hive sampling

结果差不多是源表记录的1/20,Hive在运行时候,会在第一个桶中抽样一半的数据。

还有一点:

如果从源表中直接分桶抽样,也能达到一样的效果,比如:

SELECT COUNT(1) FROM lxw1 TABLESAMPLE(BUCKET 1 OUT OF 20 ON pcid);

区别在于基于已经分桶的表抽样,查询只会扫描相应桶中的数据,而基于未分桶表的抽样,查询时候需要扫描整表数据,先分桶,再抽样。

其它更详细的用法请参考Hive的官方文档说明。

 

更多关于Hadoop、Spark、Hive等的文章,请关注 我的博客

 

Hive相关文章(持续更新)

一起学Hive系列

—-Hive概述,Hive是什么

—-Hive函数大全-完整版

—-Hive中的数据库(Database)和表(Table)

—-Hive的安装配置

—-Hive的视图和分区

—-Hive的动态分区

—-向Hive表中加载数据

—-使用Hive命令行

—-Hive的查询语句SELECT

—-Hive中Join的原理和机制

—-Hive中Join的类型和用法

—-Hive SQL的优化

—-Hive整合HBase,操作HBase表

—-Hive的元数据表结构详解

—-分析Hive表和分区的统计信息(Statistics)

—-Hive的WEB页面接口-HWI

Hive分析函数系列

Hive索引

hive优化之——控制hive任务中的map数和reduce数

 

1
0
分享到:
评论
1 楼 annmi_cai 2016-03-11  
好好学习,天天向上!

相关推荐

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...

    hive案例之---------微博数据分析及答案.zip

    在这个“hive案例之---------微博数据分析及答案”的项目中,我们将会探索如何利用Hive进行大规模的微博数据挖掘与分析。 首先,项目说明文档.docx可能会详细阐述了该项目的目标、背景、数据来源以及预期的结果。...

    apache-hive-2.1.1-bin.tar

    apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tar apache-hive-2.1.1-bin.tarapache-hive-2.1.1-bin.tar apache-hive-2.1.1-...

    Hive-2.1.1-CDH-3.6.1 相关JDBC连接驱动 Jar 包集合

    02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许我们对存储在HDFS上的大数据进行结构化查询和分析。Hive JDBC驱动是Hive与各种数据库管理工具、应用程序之间建立连接的关键组件,使得用户可以通过标准的...

    Apache Hive(apache-hive-3.1.3-bin.tar.gz)

    Apache Hive(apache-hive-3.1.3-bin.tar.gz、apache-hive-3.1.3-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    1. 下载驱动:首先,你需要从官方源或可靠的第三方网站下载"hive-jdbc-uber-2.6.5.0-292.jar"驱动包,确保版本与你的Hive服务器兼容。 2. 添加驱动:在DBeaver中,选择“工具”-> "数据库" -> "驱动管理器",点击右...

    Apache Hive(apache-hive-1.2.2-bin.tar.gz)

    Apache Hive(apache-hive-1.2.2-bin.tar.gz、apache-hive-1.2.2-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    安装Yanagishima时,需要将"Hive-jdbc-uber-3.1.2.jar"配置到其类路径中,以便与Hive服务通信。同时,还需要配置Kerberos认证的相关参数,如principal和keytab文件的位置,以确保Yanagishima能够在安全模式下正常...

    hive-jdbc-jar-多版本.zip

    "hive-jdbc-jar-多版本.zip"是一个压缩包,包含了不同版本的Hive JDBC Uber Jars,覆盖了从1.5到1.8的多个Hive版本,适应不同的项目需求。 首先,我们要理解Uber JAR的概念。Uber JAR(也称为Shaded JAR)是一个...

    hive-jdbc-uber-2.6.5.0-292.zip

    标题中的“hive-jdbc-uber-2.6.5.0-292.zip”指的是Hive JDBC驱动的Uber版本,版本号为2.6.5.0-292。Uber JAR是一种包含所有依赖的单一JAR文件,便于分发和使用,特别是对于连接工具如DataGrip这样的集成开发环境...

    Apache Hive(hive-storage-2.8.1.tar.gz)

    Apache Hive(hive-storage-2.8.1.tar.gz、hive-storage-2.7.3.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache ...

    hive-jdbc-3.1.2-standalone

    hive-jdbc-3.1.2-standalone适用于linux

    hive-1.1.0-cdh5.7.0.tar.gz.rar

    本篇将深入探讨如何安装、配置和使用Hive-1.1.0-cdh5.7.0,以及其在大数据处理中的核心功能和优势。 1. **Hive-1.1.0-cdh5.7.0 版本特性** Hive 1.1.0是Hive发展过程中的一个重要里程碑,它带来了诸多性能改进和新...

    apache-hive-3.1.2-bin.tar.gz

    在大数据处理领域,Hive 提供了一个灵活、可扩展的框架,使得数据分析人员能够对存储在Hadoop分布式文件系统(HDFS)中的大规模数据集进行分析。Hive 3.1.2 是其稳定版本之一,提供了许多性能优化和新功能。 标题中...

    hive-jdbc-uber-2.6.5.0-292.jar

    在实际项目中,"hive-jdbc-uber-2.6.5.0-292.jar"可以作为大数据分析工具链的一部分,与其他Java应用(如ETL工具、数据可视化工具等)集成,实现对Hive数据仓库的高效访问。尽管下载途径有限,但这个特定版本的JDBC...

    hive-jdbc-uber-2.6.3.0-292.jar

    Hive JDBC Uber Driver,即“hive-jdbc-uber-2.6.3.0-292.jar”,是Apache Hive提供的一种集成型JDBC驱动,它使得Java应用程序能够通过标准的JDBC接口与Hive服务器进行通信,实现数据查询、操作和管理。这个特定版本...

    hive-jdbc-1.2.1-standalone

    在给定的标题“hive-jdbc-1.2.1-standalone”中,"standalone"表示这是一个独立的版本,包含了运行Hive JDBC所需的所有依赖,无需额外安装或配置其他Hive或Hadoop组件。 描述中提到的“hadoop-common-2.6.4”是...

    hive-jdbc-1.1.0-cdh5.12.1 连接库 jar包

    Hive JDBC 1.1.0-cdh5.12.1 连接库是Apache Hive项目中的一个重要组件,主要用于允许客户端程序通过Java数据库连接(JDBC)接口与Hive服务器进行交互。这个连接库是专为CDH(Cloudera Distribution Including Apache...

    hive-exec-2.1.1.jar

    hive-exec-2.1.1 是 Apache Hive 的一部分,特别是与 Hive 的执行引擎相关的组件。Apache Hive 是一个构建在 Hadoop 之上的数据仓库基础设施,它允许用户以 SQL(结构化查询语言)的形式查询和管理大型数据集。Hive ...

Global site tag (gtag.js) - Google Analytics