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

相关推荐
孤雪心殇17 小时前
快速上手数仓基础知识
数据仓库·hive·spark
隐于花海,等待花开1 天前
39.ROUND / FLOOR / CEIL 函数深度解析
hive·hadoop
看海的四叔2 天前
【SQL】SQL-管好你的字符串
大数据·数据库·hive·sql·数据分析·字符串
坚持就完事了2 天前
YARN资源管理器
大数据·linux·hadoop·学习
渣渣盟2 天前
大数据技术栈全景图:从零到一的入门路线(深度实战版)
大数据·hadoop·python·flink·spark
WL_Aurora2 天前
Hadoop 通过 Web 界面上传文件到 HDFS 失败解决方案
hadoop·hdfs
ClouderaHadoop3 天前
CDH 最隐蔽的坑:NTP 时间同步导致的 5 类故障
hadoop·hbase·kerberos·cloudera·cdh
Gent_倪3 天前
Hadoop生态组件介绍
大数据·hadoop
YaBingSec3 天前
玄机网络安全靶场:Hadoop YARN ResourceManager 未授权 RCE WP
大数据·数据库·hadoop·redis·笔记·分布式·web安全
曹牧4 天前
Java Web 开发:servlet-mapping‌
java·数据仓库·hive·hadoop