Схема My Cassandra содержит таблицу с ключом раздела, которая является меткой времени, и столбец parameter
, который является ключом кластеризации.Spark SQL и Cassandra JOIN
Каждый раздел содержит 10k + строк. Это протоколирование данных со скоростью 1 раздела в секунду.
С другой стороны, пользователи могут определять «наборы данных», и у меня есть другая таблица, которая содержит в качестве ключа раздела «имя набора данных» и столбца кластеризации, который является меткой времени, относящейся к другой таблице (так что «набор данных» "- это список ключей раздела).
Конечно, то, что я хотел бы сделать, выглядит как анти-шаблон для Кассандры, поскольку я хотел бы присоединиться к двум таблицам.
Однако, используя Spark SQL, я могу запустить такой запрос и выполнить команду JOIN
.
SELECT * from datasets JOIN data
WHERE data.timestamp = datasets.timestamp AND datasets.name = 'my_dataset'
Теперь вопрос: является Спарк SQL достаточно умны, чтобы прочитать только разделы data
которые соответствуют timestamp
с определенными в datasets
?
Вы уверены, что может толкнуть предикаты вида столбец ' = column'? Если да, то вы можете дать некоторую ссылку. Из того, что я видел до сих пор, Spark рассматривает только предикаты формы 'column = value'. – zero323
Оптимизация для соединения отсутствует, но есть предикат push вниз для ** AND datasets.name = 'my_dataset' **. Если вы хотите, чтобы соединитель искры/кассандра оптимизировал соединение, вам нужно использовать программный API RDD (** joinWithCassandraTable **) – doanduyhai
Спасибо. Так что ответ должен быть нет, не так ли? Как жир, как я понимаю, ОП спрашивает о состоянии соединения, а не предикате. – zero323