hadoop - hive,请求特定范围内的文件
问题描述
假设在 HDFS 上我有以下内容的文件:data1-2018-01-01.txt
, data1-2018-01-02.txt
, data1-2018-01-03.txt
, data1-2018-01-04.txt
,data1-2018-01-06.txt
现在我想根据日期查询文件:
select * from mytable where date > 2018-01-03 and date < 2018-01-06 ;
我的问题是:是否可以仅在满足我查询的这些文件上创建一个外部表?或者,也许您有任何解决方法?
我知道,我可以使用分区,但它们需要在新数据集到达时手动获取数据。
解决方案
将这些文件放入一个目录并在其上创建新表。Hive 还具有 INPUT__FILE__NAME 虚拟列,您可以将其用于过滤:
where INPUT__FILE__NAME like '%2018-01-03%'
也可以使用 substr 或 regexp_extract 从 filename 获取日期,然后使用IN
or>, <
过滤它们。
推荐阅读
- firebase - 我可以在 Firestore 搜索中过滤多个字段吗?
- javascript - 使用 UTF-8 编码导出 CSV 文件
- html - 多行文本值会破坏布局的水平对齐方式
- java - java插件在Android Studio项目中工作,但不在Unity中
- css - 插入 dom 元素后未应用 CSS
- facebook-messenger - 接收到的图像有时会在 Facebook Messenger 上调整大小(更小)
- d3.js - 你如何将 d3-contour 多多边形输出绘制到画布上?
- r - 如何使用 Openxlsx 包创建带有工作表名称的命名范围
- ansible - 我们是否有 Ansible 命令来运行用户交互式 shell 脚本而不使用 playbook?
- android - 如何将自定义查询段传递给 RoomDb 中的 @query