Hive表生命周期管理

时间:2021-09-25 09:02:05

Hive数据仓库中随着越来越多业务方的使用,会产生非常多的库表。如何对数据生命周期进行管理成了很重要的工作。

经过验证发现,通过对Hive表执行以下语句会详细展现该表的很多统计信息,其中就有lastAccessTime。 (前提是该执行用户必须有对应表所在hdfs文件目录的读权限)

    > show table extended in order like wy_order;
OK
tableName:wy_order
owner:wwy_admin
location:hdfs://weiyun-test-hadoop/warehouse/wy/mysql/order/wy_order
inputformat:org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
outputformat:org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
columns:struct columns { i64 id, i64 source_order_id, i64 webuser_id, string pin, i32 payment_type, string online_payment_type, i64 shop_id, string shop_name, i32 shipment_type, string shipment_date, i32 shipment_option, i32 order_type, i32 order_origin, i32 invoice_flag, string invoice_title, string invoice_content, i64 freight_fee, i64 use_coupon, string use_coupon_id, i64 use_card, string use_card_id, i64 use_balance, i64 promotion_id, i64 promotion_price, i64 ware_total_price, i64 total_price, i64 order_price, i32 order_status, i32 status_code, i32 return_status, i32 refund_flag, string order_pay_time, string order_cancel_time, string order_complete_time, string user_ip, string order_sn, i32 sent_flag, i32 financial_status, i32 comment_num, string remarks, string properties, string created, string modified, i32 yn, i32 vender_id, string vender_name, i32 erp_store_id, string order_main_mark, string self_code, i32 display_status, string payment_trade_num, i32 order_sku_type, string invoice_type, string order_create_time, string shipment_time, i64 offline_pay_cash, i32 sale_type, string order_tag, string coupon_code, i32 coupon_code_amount, i32 versions, i64 use_dps_card_fee, i32 ware_tag, i32 split_times, i64 parent_id, i32 lock_type, string unique_id, string trade_type, string custom_tag, string ship_start_time, string ship_end_time, string external_store_code, string payment_detail}
partitioned:true
partitionColumns:struct partition_columns { string dt}
totalNumberFiles:0
totalFileSize:0
maxFileSize:0
minFileSize:0
lastAccessTime:0
lastUpdateTime:1504687914320

虽然hive可以查询到这些信息,但发现多访问几下居然没更新那个最后访问时间了。原来是由于hdfs有个默认配置会只记录1小时精度的最后访问时间,参数为dfs.namenode.accesstime.precision(默认小时粒度)


就算客户端是通过spark、impala,一样可以反映到最后访问时间。原因是他们都会直接访问文件读取数据而被hdfs记录到。


可以在元信息上根据这些进行数据生命周期管理。开发定时任务扫描出过期的数据表,邮件发出来。