type
status
date
slug
summary
tags
category
icon
password
notion image
目前据了解 [[Hadoop]] 并没有能够直接存储表“最近访问时间”和“最近修改时间”的物理表,如果希望对表这两个属性进行查询,只能通过命令行或者API的方式。下面会分别介绍下这两种方法的查询,以 /usr/hive/ods.db/ 下的表为例: 首先我们需要明确的是,假如当前路径下有以下这些表:
直接查询ods_tbl_1所获得的信息是不准确的,大概率会得到类似这样的结果,很多表的访问时间都是默认值 1970-01-01 00:00:00"
notion image
这是因为 Hadoop 下的表都是以目录形式存储的,文件结构类似于:
所以想要得到准确的时间得循环遍历表对应目录下所有文件并取最新的访问时间和修改时间。

命令行

如果只是希望查询某个特定表的属性,而且表没有分区或者分区较少,那么用命令行会比较方便,直接终端中输入以下命令:
这会列出对应目录下所有文件的名称(%n)、最近访问时间(%x)、最近修改时间(%y),手动对比下就好。
但如果子目录层级、数量过多或者需要同时查询多表,命令行处理就略显复杂了,建议考虑用 API 方式查询。

[[Java]] API

推荐阅读官方文档:https://hadoop.apache.org/docs/stable/api/
notion image
Hadoop 提供了 FileStatus 的对象类,能够访问文件的访问时间和修改时间,所以实现思路就比较清晰了:
  1. 连接 Hadoop 并读取目标数据库目录,获取全部表名称;
  1. 递归遍历每个表对应的目录,找出全部子文件中最新的访问时间和修改时间;
  1. 格式化打印或者写入数据库。
代码示例如下:
注意替换上述脚本中的 <YOUR DATABASE PATH> 为你实际需要处理的数据库路径并按需要修改。
pdf.tocgen: 为PDF添加目录批量修改 Obsidian Frontmatter
  • Twikoo