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

相关推荐
都是蠢货19 小时前
Servlet的生命周期
hive·hadoop·servlet
沧海寄馀生20 小时前
Apache Hadoop生态组件部署分享-Kafka
大数据·hadoop·分布式·kafka·apache
沧海寄馀生20 小时前
Apache Hadoop生态组件部署分享-Spark
大数据·hadoop·分布式·spark·apache
yumgpkpm21 小时前
接入Impala、Hive 的AI平台、开源大模型的国内厂商(星环、Doris、智谱AI、Qwen、DeepSeek、 腾讯混元、百川智能)
人工智能·hive·hadoop·zookeeper·spark·开源·hbase
沧海寄馀生21 小时前
Apache Hadoop生态组件部署分享-Sqoop
大数据·hadoop·分布式·apache·sqoop
沧海寄馀生21 小时前
Apache Hadoop生态组件部署分享-Ranger
大数据·hadoop·分布式·apache
juma90021 天前
反激式开关电源设计全解析:从理论到实操
hadoop
还是大剑师兰特2 天前
Hadoop入门基础教程(110 问题+ 答案)
hadoop·大剑师·hadoop教程·hadoop入门
笨蛋少年派2 天前
Sqoop数据迁移简介
hive·hadoop·sqoop
zhangkaixuan4562 天前
Flink Checkpoint 全生命周期深度解析
大数据·hadoop·flink·apache·paimon