簡體   English   中英

Spark SQL是否使用Cassandra二級索引?

[英]Does Spark SQL use Cassandra secondary indexes?

我們使用Cassandra存儲許多分析表,例如“用戶點擊數”,“用戶登錄名”等。我們的數據模型的設計方式是使我們的應用程序始終按分區鍵查詢,例如“獲取用戶ID的登錄名”有時,但是,我們需要進行一些臨時性的分析,例如“過去6個月中每個用戶每月平均登錄次數是多少?” 為此,我們使用Spark SQL。

我的問題是這樣的:我的理解是,Spark SQL基本上將遍歷Cassandra中的每一行,並將SQL查詢的條件應用於每一行,丟棄不匹配的條件並返回符合條件的條件(最后應用任何聚合等等)。 如果我在Cassandra列上創建二級索引(例如'login time'),然后在Spark SQL中執行類似“從登錄名中選擇* *,其中logintime>'2016-05-17'”的Spark SQL會推送使用二級索引過濾到Cassandra,還是會遍歷每一行? 我是否需要設置一些配置以手動告訴它哪些列具有索引,以便下推索引的謂詞?

Spark SQL將使用輔助索引將過濾向下推到Cassandra,還是會遍歷每一行?

是的,當可用時,SparkSQL將使用輔助索引將謂詞下推到CQL

我是否需要設置一些配置以手動告訴它哪些列具有索引,以便下推索引的謂詞?

您需要聲明的唯一一件事是激活謂詞下推

1)使用數據框

val df = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "words", "keyspace" -> "test", "pushdown" -> true ))
  .load()

2)使用純SparkSQL

CREATE TEMPORARY TABLE words
USING org.apache.spark.sql.cassandra
OPTIONS (table "words", keyspace "test", pushdown "true")

連接器將在引導時從Cassandra獲取元數據,並自動找出哪些索引可用於下推

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM