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中的位置)

sql 复制代码
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文件的偏移量:
代码

java 复制代码
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中数据的具体位置。从而,进行问题溯源。

相关推荐
香山上的麻雀100820 小时前
Hive内部表(MANAGED_TABLE)的“批量删除分区”特性详解
数据仓库·hive·hadoop
牛奶咖啡132 天前
大数据Hadoop运维应用实践——双NameNode高可用Hadoop集群架构(上)
hadoop·高可用hadoop集群搭建·给服务器做免密信任·修改服务器主机名称·服务器本地配置主机名与ip映射·服务器配置jdk环境·服务器安装zooker
jjjava2.03 天前
SpringMVC入门指南:从零掌握核心要点
数据仓库·hive·hadoop
ljs6482739514 天前
Hadoop集群部署常见问题
大数据·hadoop·分布式
TTBIGDATA4 天前
【Ambari Plus】14.Hue 安装
大数据·hadoop·ambari·hdp·hue·cdh·bigtop
AllData公司负责人5 天前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2501_942389555 天前
特斯拉的车辆摄像头每四天为AI训练集采集的数据量
人工智能·hadoop·zookeeper·oracle·时序数据库·memcache
AllData公司负责人5 天前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
牛奶咖啡135 天前
大数据Hadoop运维应用实践——Hadoop大数据平台基础与架构(hadoop伪分布式的安装部署)
大数据·hadoop·分布式·hadoop是什么?有啥用?·hadoop的适用与不适用场景·hadoop伪分布式的安装部署·hadoop分布式存储操作
TTBIGDATA6 天前
【Ambari Plus】15.Livy 安装
大数据·运维·hadoop·ambari·hdp·cdh·bigtop