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

Hive3:常用的虚拟列(Virtual Columns)

一、作用

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

Hive目前可用3个虚拟列

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

二、实操

INPUT__FILE__NAME:通过这个虚拟列,我们可以确定数据所在文件位置(HDFS中的位置)

SET hive.exec.rowoffset=true
SELECT orderid , INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM itheima.orders o ;

在这里插入图片描述


BLOCK__OFFSET__INSIDE__FILE:偏移量,就是每条数据,在文件中的起始index下标。
比如上图的第302条数据,显示,165
这里我用Java程序验证一下order2.txt文件的偏移量:
代码

package com.atguigu.mapreduce.test;import java.io.IOException;
import java.io.RandomAccessFile;public class FileOffsetReader {public static void main(String[] args) {String filePath = "C:\\Users\\admin\\Desktop\\orders\\order2.txt";int offset = 0; // 指定偏移量try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) {// 将文件指针移动到指定偏移量while (true && offset<=200){file.seek(offset);int ch = file.read(); // 读取偏移量处的字符(或使用readByte()读取字节)if (ch != -1) {System.out.println("字符偏移量 " + offset + " 处的字符: " + (char) ch);offset++;} else {System.out.println("已到达文件末尾");break;}}} catch (IOException e) {e.printStackTrace();}}
}

在这里插入图片描述
偏移量,就是行数据的起始下标。
注意,一个中文占据3个偏移量数值,所以,偏移量和string length的含义还是有所不同!


ROW__OFFSET__INSIDE__BLOCK:数据块偏移量
即可以通过该字段,查看数据所在HDFS中块的信息。

三、总结

三个虚拟字段都很实用。
我们如果发现数据有问题,可以通过这三个字段,定位到HDFS中数据的具体位置。从而,进行问题溯源。


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

相关文章:

  • 【手撕数据结构】链式二叉树
  • 二叉树(四)
  • 低代码: 组件库测试之渲染和元素获取,触发事件,更新表单,验证事件以及异步请求
  • 2024开源资产管理系统推荐 8款免费开源IT资产管理系统/软件
  • C++遍历for_each
  • ervlet、jsp、Cookie、Ajax学习
  • 使用WINUI3 编写一个小软件1 C#
  • Zabbix图形乱码处理
  • C++中的多态性
  • 基于xilinx IP的频域脉冲压缩算法的实现和matlab仿真
  • STM32后备区域:读写BKP备份寄存器与使用RTC实时时钟详解
  • 无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络
  • Android Studio SQLite Manage
  • 狄利克雷卷积
  • 批量修改SOLIDWORKS文件属性,可以用这款工具!
  • 软件需求设计分析报告(Word原件)
  • 如何输入百度,显示本地下载的html文件页面,地址栏还显示百度的地址??
  • 陕西文无文化与韩国RB娱乐签订2000亿韩元合作备忘录
  • 开发物联网驱动拍卖软件平台:如何实现了服务质量的全面提升
  • GraalVM与SpringBoot