当前位置: 首页 > 知识库问答 >
问题:

使用多列过滤器的Cassandra数据建模

丘飞
2023-03-14

我有一个 Cassandra 表,它有 4 列(项目(文本),市场(文本),位置(文本),时间(时间戳),值(int))项目是分区键和市场,位置和时间是相同顺序的聚类键。

item | market | location | time | value
 x   |  m1    | l1       | t1   | v1
 x   |  m1    | l2       | t2   | v2
 x   |  m1    | l3       | t3   | v3
 y   |  m1    | l1       | t4   | v4
 y   |  m1    | l2       | t5   | v5
 y   |  m1    | l3       | t6   | v6

应用程序需要在两种情况下查询 Cassandra 表

  1. 对于给定的项目,市场和位置通过查询库存表来获取记录。例如,将获取记录下面的项目x、市场l1和位置l1
 x   |  m1    | l1       | t1   | v1

对于给定的商品、市场和输入时间后的所有位置,通过查询库存表获取记录。例如,项目x,市场m1,将获取t1时间之后低于记录的所有位置

 x   |  m1    | l2       | t2   | v2
 x   |  m1    | l3       | t3   | v3

我理解Cassandra应用程序的需求,概念建模首先是形式化数据建模。我如何对数据进行建模以满足我的两个应用程序需求。

对于我的第二个要求,我无法查询

select <columns> from <table> where item =x and market= m1 and time > t2; // wrong as location missing 

不允许跳过位置,位置可以是多个。如何建模或查询以满足这两个要求。

共有1个答案

邓鸿彩
2023-03-14

对于第一个应用查询,分区键是市场位置都是聚类列:

CREATE TABLE items (
    item text,
    market text,
    location text,
    time timestamp,
    value int,
    PRIMARY KEY (item, market, location)
)

对于第二个应用程序查询,它看起来与< code>items表相似,只是数据是按< code>market和< code>time组织的:

CREATE TABLE locations_by_item (
    item text,
    market text,
    location text,
    time timestamp,
    value int,
    PRIMARY KEY (item, market, time)
)

当您使用以下方法从此表中检索数据时:

SELECT * FROM locations_by_item
  WHERE item = ?
  AND market = ?
  AND time > ?

它将返回位置的行。干杯!

 类似资料:
  • 问题内容: 我正在尝试使用作为df一部分的几个布尔变量来过滤df,但一直未能做到。 样本数据: C和D列的dtype是布尔值。我想仅使用C或D为True的行创建一个新的df(df1)。它看起来应该像这样: 我已经尝试过类似的事情,因为它无法处理布尔类型,因此会遇到问题: 有任何想法吗? 问题答案: In [82]: d Out[82]: A B C D 0 John Doe 45 True Fal

  • 我试图子集一个熊猫DataFrame在python基于两个逻辑语句 即。 但是第3行的语法无效。 有没有一种方法可以在一行中完成?

  • 问题内容: 我有包含单列和两列的数据行。我要做的是提取仅包含2列的行。 仅产生: 请注意,它们是制表符分隔的,即使对于只有一列的行,您也可以在其开头使用制表符。 怎么做呢? 我尝试了这个但是失败了: 问题答案: 您需要使用(字段数)变量来控制操作,例如以下记录: 如果字段数为2,将打印该行,否则将不执行任何操作。我之所以具有(看似)奇怪的构造,是因为如果没有任何规则匹配一行,则默认情况下将打印的某

  • 问题内容: 我有一组对象,它们只是项目。我还有一个下拉菜单,我希望使用该下拉菜单允许用户按价格或评分进行过滤,但是在页面加载时不应进行过滤。 如何根据当前选择选项映射项目数据以进行过滤? 我有一个笨拙的入门:LINK 问题答案: 首先,您选择的值不明确。它们包含可以对条目进行过滤和排序的值-将它们分开是两个功能,因此将它们分开。 接下来,您需要定义一个自定义过滤器,该过滤器将根据所选的评级过滤数据

  • 我们提供了一个数据过滤器来对接收到的表单数据进行过滤。整个数据过滤分四步: 非空验证 数据类型验证 数据长度验证 数据净化 过滤器定义了一些验证规则的常量,供你组合使用,采用位运算的形式,如果要同时验证多个指标,请使用与运算(|), 例如: DFILTER_STRING|DFILTER_SANITIZE_TRIM. 表示数据必须是字符串并对字符串进行去空格操作。 数据类型验证选项值 选项名称 选项

  • 表1: 表1的键和数据大小: 我的分区密钥为enterprise_id+campaign_id。每个企业可以有几个活动。datastore可能有几百个活动的数据。每个活动可以有多达200万-300万的记录。因此,在100个企业中可能有3000个分区,每个分区有2-3个miilion记录。 Cassandra查询:查询始终使用分区键+主键直到日期时间。订阅id包含在主键中,以保持每个记录的唯一性,因