hive启用LAST_ACCESS_TIME(访问时间)

文章讲述了如何在Hive的hive-site.xml配置文件中添加安全阀参数,用于允许特定的hook在执行阶段运行。示例中添加了hive.exec.pre.hooks参数,指定了org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec预执行钩子。之后,展示了查询表扩展信息和通过JavaAPI获取表的lastAccessTime的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.hive-site.xml 的 Hive 服务高级配置代码段(安全阀)中添加2个参数:

hive.security.authorization.sqlstd.confwhitelist=hive.exec.pre.hooks

hive.exec.pre.hooks=org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec

2.重启hive即可

<property>
	<name>hive.security.authorization.sqlstd.confwhitelist</name>
	<value>hive.exec.pre.hooks</value>
</property>

<property>
	<name>hive.exec.pre.hooks</name>
	<value>org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec</value>
</property>
SELECT *
FROM TBLS
WHERE TBL_NAME = 'student3';

在这里插入图片描述

show table extended like student3;
hive (default)>
              >
              >
              >
              >
              > show table extended like student3;
OK
tab_name
tableName:student3
owner:atguigu
location:hdfs://hadoop102:8020/user/hive/warehouse/student3
inputformat:org.apache.hadoop.mapred.TextInputFormat
outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
columns:struct columns { i32 id, string name}
partitioned:false
partitionColumns:
totalNumberFiles:1
totalFileSize:7
maxFileSize:7
minFileSize:7
lastAccessTime:1686048455210
lastUpdateTime:1685972721193

Time taken: 0.216 seconds, Fetched: 15 row(s)
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.HiveMetaStoreClient;
import org.apache.hadoop.hive.metastore.api.Table;
import org.apache.hadoop.hive.metastore.conf.MetastoreConf;

/**

 */
public class Test2 {

    public static void main(String[] args) throws Exception {

        HiveConf hiveConf = new HiveConf();
        MetastoreConf.setVar(hiveConf,MetastoreConf.ConfVars.THRIFT_URIS ,"thrift://hadoop102:9083" );

        HiveMetaStoreClient hiveClient = new HiveMetaStoreClient(hiveConf);

        Table aaa = hiveClient.getTable("default", "student3");
        int lastAccessTime = aaa.getLastAccessTime();
        System.out.println("lastAccessTime = " + lastAccessTime);

        System.out.println(aaa.getTableName());

//        String schema = "blending";
//        HCatClient client = HCatalogClient.getClient(null);
//        List<String> tables = client.listTableNamesByPattern(schema, "*");
//        for(String table : tables) {
//            HCatTable hTable = client.getTable(schema, table);
//            System.out.println("Table name is :" +hTable.getTableName());
//            System.out.println("Input file format is:"+hTable.getInputFileFormat());
//            System.out.println("Output file format is:"+hTable.getOutputFileFormat());
//        }
//
//        HCatCli hCatCli = new HCatCli();



    }


}

结果:

lastAccessTime = 1686049690

查询分区信息:

show table extended like dim_user_zip PARTITION(dt='9999-12-31');

在这里插入图片描述
在这里插入图片描述
查询总大小:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<think>好的,我现在需要回答用户关于Hivelast_modified_time字段的作用及用途的问题。首先,我得回忆一下Hive的表属性相关知识。根据引用[2],Hive会自动在表的TBLPROPERTIES中添加last_modified_by和last_modified_time这两个属性。所以,这两个字段是系统自动维护的,用于记录表的最后修改信息。 接下来,我需要具体说明last_modified_time的作用。这个字段应该记录了表结构或元数据的最后修改时间,比如添加字段、修改分区等操作的时间戳。用户可能需要用它来追踪表的变更历史,或者用于审计目的。比如,当有多个用户协作时,查看这个时间可以知道最近谁在什么时候修改了表结构。 然后,考虑用户的实际应用场景。例如,在数据仓库管理中,了解表的最后修改时间有助于进行版本控制或备份策略的制定。引用[4]提到了动态添加字段,这可能涉及到last_modified_time的更新。需要确认当表结构发生变化时,这个时间戳是否会自动更新。 另外,引用[3]中的分区表创建示例,虽然主要讲分区,但结合引用[2]的内容,每次对表进行DDL操作(如添加分区、修改字段)时,last_modified_time应该会被更新。因此,用户可以通过查询这个属性来监控表的元数据变更情况。 需要注意的是,Hive的自动维护机制可能因版本不同而有所差异,可能需要查阅官方文档确认,但根据现有引用,可以推断last_modified_time的主要用途是记录元数据变更时间。此外,引用[1]提到的严格模式虽然不直接相关,但说明了Hive配置对任务执行的影响,间接提示用户应关注元数据管理。 总结起来,回答应括以下几点: 1. last_modified_timeHive自动维护的表属性。 2. 记录表结构或元数据的最后修改时间。 3. 用途括审计追踪、版本管理、监控变更。 4. 与其他操作(如添加字段、修改分区)的关系。 5. 如何查询这个字段,比如使用SHOW TBLPROPERTIES命令。 现在需要将这些点组织成结构清晰的回答,并引用相关的引用来源。同时,生成相关问题时要围绕Hive的表属性、元数据管理、审计功能等方面展开。</think>### Hivelast_modified_time字段的作用及用途 1. **字段定义** `last_modified_time`是Hive自动维护的表属性(TBLPROPERTIES),用于记录表的元数据最后一次被修改的时间戳[^2]。与之关联的还有`last_modified_by`,记录最后一次修改的用户。 2. **核心作用** - **元数据变更追踪**:当表结构发生变更(如添加/删除字段、修改分区、调整存储路径等)时,该字段会自动更新为操作时间。例如,使用`ALTER TABLE`添加字段会触发更新[^4]。 - **审计与监控**:通过该字段可追踪表的元数据修改历史,辅助团队协作时的版本控制或合规性审计。 - **依赖关系管理**:在ETL流程中,结合时间戳可判断下游任务是否需要因元数据变更而重新执行。 3. **查询方法** 通过以下命令查看表的属性(含`last_modified_time`): ```sql SHOW TBLPROPERTIES table_name; ``` 4. **注意事项** - 该字段仅记录元数据变更,不反映实际数据修改(如插入或删除数据行)。 - 存储路径(LOCATION)的修改会更新该字段,但数据文件变动不影响它。 - 不同Hive版本可能对字段更新逻辑有差异,需结合具体环境验证。 --- ### 相关问题 1. 如何通过Hive表属性实现数据版本控制? 2. Hive中`last_modified_by`字段与权限管理如何关联? 3. 如何利用`LOCATION`属性优化Hive表的数据存储路径? 4. 动态添加字段对Hive表性能有何影响[^4]? 5. 分区表查询为何需要严格模式(strict mode)配置[^1]? --- 以上内容基于Hive元数据管理机制和表属性功能整理[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值