我的Cassandra模式包含一个带有时间戳分区键和一个作为聚簇键的“参数”列的表。
每个分区包含10k+行。这是以每秒1个分区的速率记录数据。
另一方面,用户可以定义“数据集”,我有另一个表,其中包含“数据集名称”作为分区键和指向另一个表的时间戳作为聚簇列(因此,“数据集”是分区键列表)。
当然,我想做的看起来像是Cassandra的反模式,因为我想连接两个表。
但是使用Spark SQL,我可以运行这样的查询并执行JOIN。
现在的问题是:Spark SQL是否足够智能,只读取与数据集中定义的时间戳相对应的分区?
每个分区包含10k+行。这是以每秒1个分区的速率记录数据。
另一方面,用户可以定义“数据集”,我有另一个表,其中包含“数据集名称”作为分区键和指向另一个表的时间戳作为聚簇列(因此,“数据集”是分区键列表)。
当然,我想做的看起来像是Cassandra的反模式,因为我想连接两个表。
但是使用Spark SQL,我可以运行这样的查询并执行JOIN。
SELECT * from datasets JOIN data
WHERE data.timestamp = datasets.timestamp AND datasets.name = 'my_dataset'
现在的问题是:Spark SQL是否足够智能,只读取与数据集中定义的时间戳相对应的分区?
column = column
的谓词吗?如果可以,能否提供一些参考资料。就我目前所见,Spark 只考虑形如column = value
的谓词。 - zero323AND data.timestamp IN (x)
这样的内容,其中x
是通过读取datasets
表中某个分区获取的时间戳列表。这样做有意义吗? - Cedric H.