我有一个系统可以在s3上的镶木地板数据集中存储数据。每个数据集包含单个日历日期的数据。
我希望能够以简单的SQL术语查询单个日期,一组日期或一系列日期。 但是,我不是只需要取出所有数据集来丢弃大部分数据集,而是希望拦截查询解释并根据与日期相关的条款进行明显的优化。
如何自定义spark数据帧/ dataest查询解释?例如select * from X where day = '2018-06-16'
应仅在/datasets/X/2018-06-16
中获取数据集。同样的问题适用于使用数据帧DSL,而不是真正依赖于使用SQL。
第三方连接器(例如Cassandra)必须对查询AST进行相同类型的拦截。如果它太乱了,使用UDF是一个可行的起点吗?
我找不到相关文档,但可能是因为搜索错误的术语
答案 0 :(得分:2)
如果您能够将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子句条件中提到的特定日期