当前位置: 首页 > news >正文

Sampling采样与Virtual Columns虚拟列

1.大数据体系下,在真正的企业环境中,很容易出现很大的表,比如体积达到 TB 级别.对这种表一个简单的 SELECT * 都会非常的慢,哪怕 LIMIT 10 想要看 10 条数据,也会走 MapReduce 流程
这个时间等待是不合适的.Hive 提供的快速抽样的语法,可以快速从大表中随机抽取一些数据供用户查看。

2.TABLESAMPLE 函数

语法 1 ,基于随机分桶抽样:

SELECT ... FROM tbl TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand()))
• y 表示将表数据随机划分成 y 份( y 个桶)
• x 表示从 y 里面随机抽取 x 份数据作为取样
• colname 表示随机的依据基于某个列的值
• rand() 表示随机的依据基于整行

实例:

SELECT username,orderId,totalmoney FROM orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON orders.username);

SELECT * FROM orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON rand());

用rand()函数随机,所以select结果不一样

语法 2 ,基于数据块抽样SELECT ... FROM tbl TABLESAMPLE(num ROWS | num PERCENT | num(K|M|G));
num ROWS 表示抽样 num 条数据
num PERCENT 表示抽样 num 百分百比例的数据
num(K|M|G) 表示抽取 num 大小的数据,单位可以是 K 、 M 、 G 表示 KB 、 MB 、 GB

无法做到随机,只是按照数据顺序从前向后取。

3.Virtual Columns虚拟列

虚拟列是 Hive 内置的可以在查询语句中使用的特殊标记,可以查询数据本身的详细参数。

Hive 目前可用 3 个虚拟列:
INPUT__FILE__NAME,显示数据行所在的具体文件
BLOCK__OFFSET__INSIDE__FILE,显示数据行所在文件的偏移量
ROW__OFFSET__INSIDE__BLOCK,显示数据所在 HDFS块的偏移量
此虚拟列需要设置:SET hive.exec.rowoffset=true才可使用

SET hive.exec.rowoffset=true

SELECT *, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM course;

虚拟列的作用:更精准的查看到具体每一条数据在存储上的详细参数细节

虚拟列不仅仅可以用于 SELECT ,在 WHERE 、 GROUP BY 等均可使用

实例:

SELECT *, BLOCK__OFFSET__INSIDE__FILE FROM course WHERE BLOCK__OFFSET__INSIDE__FILE > 50;

SELECT INPUT__FILE__NAME, COUNT(*) FROM orders GROUP BY INPUT__FILE__NAME;


http://www.mrgr.cn/news/59778.html

相关文章:

  • matplotlib 实现横坐标固定间隔(不根据数值)
  • C#生成SVG文件(文本、线段、圆、椭圆、多边形的示例)
  • 关于在windows10系统64位安装luasocket问题
  • 音视频开发之旅(98) -潜扩散模型(Latent Diffusion Model)原理及源码解析
  • list 的实现
  • react 框架应用+总结+参考
  • 2024年最新Java毕业设计选题题目参考,2000+ Java毕业设计题目,值得收藏
  • 使用Python进行办公楼电能消耗数据的机器学习分析与预测
  • 【Qt】系统相关——多线程、Qt多线程介绍、常用函数、线程安全、网络、UDP Socket、TCP Socket
  • 2024年汽车修理工(高级)证模拟考试题库及汽车修理工(高级)理论考试试题
  • 逆向破解真随机数系统的思路
  • Axure设置文本——元件动作三
  • 算法|牛客网华为机试10-20C++
  • mysql中的视图表
  • 【Python】Python字典深入剖析:哈希映射与常见操作
  • 120.WEB渗透测试-信息收集-ARL(11)
  • 【golang】 lo.Map使用
  • 202.快乐数
  • ts:数组的常用方法(forEach、map)
  • 微服务篇SpringCloud
  • C++——string的模拟实现(下)
  • kubernetes中的ingress-nginx
  • Mybatis中的参数占位符:${...} 、#{...}的区别
  • SD2.0 Specification之响应(Responses)
  • 小样本语义分割(MSDNet网络详解)
  • 【iOS】使用AFNetworking进行网络请求