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

相关推荐
weixin_4723394616 分钟前
Doris查询Hive数据:实现高效跨数据源分析的实践指南
数据仓库·hive·hadoop
火龙谷2 小时前
【hadoop】相关集群开启命令
大数据·hadoop·分布式
神奇侠202417 小时前
Hive SQL常见操作
hive·hadoop·sql
itachi-uchiha1 天前
Docker部署Hive大数据组件
大数据·hive·docker
viperrrrrrrrrr71 天前
大数据学习(131)-Hive数据分析函数总结
大数据·hive·学习
qq_408413391 天前
spark 执行 hive sql数据丢失
hive·sql·spark
TDengine (老段)1 天前
TDengine 替换 Hadoop,彻底解决数据丢失问题 !
大数据·数据库·hadoop·物联网·时序数据库·tdengine·涛思数据
yt948322 天前
如何在IDE中通过Spark操作Hive
ide·hive·spark
火龙谷2 天前
【hadoop】Davinci数据可视化工具的安装部署
大数据·hadoop·分布式
£菜鸟也有梦2 天前
从0到1,带你走进Flink的世界
大数据·hadoop·flink·spark