Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 如何更改Cassandra索引以允许查询_Indexing_Cassandra - Fatal编程技术网

Indexing 如何更改Cassandra索引以允许查询

Indexing 如何更改Cassandra索引以允许查询,indexing,cassandra,Indexing,Cassandra,我用Cassandra存储页面浏览量,非常简单。但是,我无法执行我想要的查询,因为我设置了错误的索引 CREATE TABLE my_site.pageviews ( url text, createdat timestamp, userid text, PRIMARY KEY ((url, createdat, userid)) ) 我发现了我无法查询的困难之处,除非我在查询中指定了主键的所有部分 我需要如何配置主键以允许这些查询 SELECT * FROM

我用Cassandra存储页面浏览量,非常简单。但是,我无法执行我想要的查询,因为我设置了错误的索引

CREATE TABLE my_site.pageviews (
    url text,
    createdat timestamp,
    userid text,
    PRIMARY KEY ((url, createdat, userid))
)
我发现了我无法查询的困难之处,除非我在查询中指定了主键的所有部分

我需要如何配置主键以允许这些查询

SELECT * FROM pageviews WHERE url = ? AND createdat > ?

SELECT * FROM pageviews WHERE userid = ? AND createdat > ?

任何指导都将不胜感激

对于查找类型,您需要使用两个如下所示的表:

CREATE TABLE my_site.pageviews_by_url (
    url text,
    createdat timestamp,
    userid text,
    PRIMARY KEY ((url), createdat, userid)
)

CREATE TABLE my_site.pageviews_by_userid (
    url text,
    createdat timestamp,
    userid text,
    PRIMARY KEY ((userid),createdat,url)
)
如果你注意到细微的差别。表“pageviews\u by\u url”只有“url”作为分区键,其他列作为集群键。表“pageviews\u by\u userid”基本上是同一个表,但分区键为“userid”。在SELECT查询中,在分区键上使用一个=,然后在第一个集群列上使用>将在执行以下查询时获得您要查找的结果:

SELECT * FROM pageviews WHERE url = ? AND createdat > ?

SELECT * FROM pageviews WHERE userid = ? AND createdat > ?

将数据插入这些表时,最好使用批处理语句。同时插入到两个表中

谢谢你的解释。我能够创建这两个表并复制数据。我现在可以运行这两个查询,并让它再次运行一段时间。谢谢!