У меня есть таблица в Кассандре, где дата не является частью ключа раздела, но является частью ключа кластеризации.При чтении таблицы в спарк я применяю фильтр даты, и он нажимается вниз.Я хочу понять, как работает push down, потому что через cql мы не можем напрямую запрашивать ключ кластеризации.Данные фильтруются где-то?
Реализация на Java:
transactions.filter(transactions.col("timestamp").gt(timestamp)) //column timestamp is of type timestamp
и физический план выглядит как
== Physical Plan ==
*Project [customer_user_id#67 AS customerUserId#111, cast(timestamp#66 as date) AS date#112, city#70]
+- *Filter (isnotnull(timestamp#66) && isnotnull(city#70))
+- *Scan org.apache.spark.sql.cassandra.CassandraSourceRelation@571db8b4 [customer_user_id#67,timestamp#66,city#70] PushedFilters: [IsNotNull(timestamp), *GreaterThan(timestamp,2018-08-13 00:00:00.0), IsNotNull(city)], ReadSchema: struct<customerUserId:int,date:date,city:string>
Также длявременная отметка это работало нормально, но если столбец имеет тип date
, то если фильтр не выдвигался, даже если дата была частью ключа раздела.Я должен был написать это как transactions.filter("date >= cast('" + timestamp + "'as date)")
, чтобы это работало.(дата столбца имеет тип date)