我试图找出复合分区键可以提供的优点。请看下面着名的气象站示例。
创建表温度( 国家文本, 城市文字, event_time时间戳, 温度文本, PRIMARY KEY((州,市),event_time) );
现在,我大部分时间都在一组城市和一系列日期中查询一个州。所以查询就像
SELECT * FROM temperature WHERE state = 'NY' AND city IN ('mahattan', 'brooklyn','queens') AND event_time > '2016-01-01'
。
假设我有一个大型数据集,从某种意义上说我有几个状态(#< 1000)但是对于每个州,我有很多城市(#> 100M)。我复制数据并将它们分发到不同的节点。
问题:您可以使用
比较差异吗?PRIMARY KEY (**(state, city)**,event_time)
PRIMARY KEY (**(city, state)**,event_time)
PRIMARY KEY (state, city,event_time)
PRIMARY KEY (zipcode, event_time)
谢谢!
答案 0 :(得分:1)
PRIMARY KEY (**(state, city)**,event_time)
PRIMARY KEY (**(city, state)**,event_time)
功能相同。复合分区键将是城市和州的组合值。如果没有这两个部分,您将无法完全指定分区。在分区内,单元格将按event_time
排序。您将拥有#State * #City
分区
[city, state] -> [event_time_0, event_time_1, event_time_2, event_time_3, ...]
您将能够编写像
这样的查询SELECT * FROM TABLE WHERE CITY = X AND STATE = Y AND event_time (><=) SomeValue
PRIMARY KEY (state, city,event_time)
为每个州制作一个分区。这可能是不好的,因为有100x州/省的顺序,这意味着你将只有非常少的分区。数据将按城市和event_time在分区内布局。
[Illinois] --> [Chicago, 0], [Chicago, 1], [Peoria, 0], [Peoria, 1]
如果他们也限制了活动时间,则查询必须限制城市。
PRIMARY KEY (zipcode, event_time)
您将拥有多达10k个分区,每个事件时间都有一个单元格。