2017-06-21 53 views
0

我已經將定位類型定義爲一個靜態列。如何查詢cassandra使用靜態列?

我想過濾靜態列上的數據。

select count(*) from device_stats_by_location where locationtype = "garage"; 

但我面對的例外 -

InvalidRequest: code=2200 [Invalid query] message="Predicates on non-primary-key columns (locationtype) are not yet supported for non secondary index queries" 

所以嘗試...

cqlsh:device_data> CREATE INDEX locationtype_indx on device_stats_by_location (locationtype); 

生成錯誤消息...

InvalidRequest: code=2200 [Invalid query] message="Secondary indexes are not allowed on static columns" 

我的問題是 - 我如何在CQL查詢中使用靜態列?

+1

爲什麼使用靜態列?你的用例是什麼? –

+0

locationtype對於所有具有相同分區鍵的行都是固定的 –

+0

DataType => ** locationid(Pk),endof10minwindow(Ck1),devicecategory(Ck2),devicecount,locationtype(S),region(S)** => for一個給定的位置ID將有2000行聚集在一起,它們將具有相同的位置類型和區域=>多數民衆贊成爲什麼**指定它們爲靜態** =>什麼是通過位置類型查詢數據的最佳方法? –

回答

1

在Cassandra中,您無法使用靜態列過濾數據,也無法在靜態列上創建索引和實例化視圖。

你可以使用使用以下任何解決方案

  • 改變靜態列專欄,並創建索引或物化視圖

  • 創建另一個表,使的locationType作爲分區鍵和locationid,endof10minwindow,devicecategory作爲集羣密鑰。無論何時在基表上插入/更新,也在此表上插入/更新。現在您可以使用locationtype過濾數據。