>我有一个将数据存储在 s3 上的镶木地板数据集中的系统。每个数据集都包含单个日历日期的数据。
我希望能够以普通 sql 术语查询单个日期、一组日期或一系列日期。 但是,我不需要获取所有数据集只是为了丢弃其中的大部分数据集,而是想拦截查询解释并根据与日期相关的子句进行明显的优化。
如何自定义火花数据帧/数据查询解释? 例如select * from X where day = '2018-06-16'
应该只获取/datasets/X/2018-06-16
中的数据集。同样的问题也适用于使用数据帧DSL,而不是真正附加到使用SQL。
第三方连接器(例如 Cassandra(必须对查询 AST 执行相同类型的拦截。如果它太混乱,使用 UDF 是一个可行的起点吗?
我未能找到相关文档,但可能是由于搜索了错误的术语
如果您能够将 s3 目录从/datasets/X/2018-06-16
更改为/datasets/X/dt=2018-06-16
. 然后像这样创建数据集
val ds = spark.read.parquet("/datasets/X")
您可以轻松查询
ds.where("dt = '2018-06-16'")
或
ds.where("dt >= '2018-06-10' and dt <= '2018-06-16'")
它只是读取您在 where 子句条件中提到的特定日期