【问题标题】:viewing as list in cassandra在 cassandra 中查看为列表
【发布时间】:2021-10-01 12:03:36
【问题描述】:

表格

CREATE TABLE vehicle_details (
    owner_name text,
    vehicle list<text>,
    price float,
    vehicle_type text,
    PRIMARY KEY(price , vehicle_type)
)

这里有两个问题

  1. 我正在尝试查看每个用户的车辆列表。如果 owner1 有 2 辆车,则应显示为 owner_name1 vehicle1 & owner_name1 vehicle2。是否可以使用选择查询? 我期待的输出
      owner_name_1 | vehicle_1
      owner_name_1 | vehicle_2
      owner_name_2 | vehicle_1
      owner_name_2 | vehicle_2
      owner_name_2 | vehicle_3
  1. 我试图在主键中使用 owner_name,但每当我使用 WHEREDISTINCTORDER BY 时,它都无法正常工作。大多数时候我要查询价格,车辆类型。但 Owner_name 将是唯一的,因此我正在尝试使用它。我尝试了几种组合。 以下是我尝试过的三种组合。
      PRIMARY KEY(owner_name, price, vehicle_type) WITH CLUSTERING ORDER BY (price)
      PRIMARY KEY((owner_name, price), vehicle_type)
      PRIMARY KEY((owner_name, vehicle_type), price) WITH CLUSTERING ORDER BY (price)

我正在运行的查询

SELECT owner_name, vprice, vehicle_type from vehicle_details WHERE vehicle_type='SUV';
SELECT Owner_name, vprice, vehicle_type from vehicle_details WHERE vehicle_type='SUV' ORDER BY price desc;

【问题讨论】:

    标签: cassandra cql cassandra-3.0 cqlsh


    【解决方案1】:

    因为你的桌子有:

    PRIMARY KEY(price , vehicle_type)
    

    您只能在分区键 (price) 或分区键 + 集群列 (price + vehicle_type) 上使用过滤器运行查询:

    SELECT ... FROM ... WHERE price = ?
    SELECT ... FROM ... WHERE price = ? AND vehicle_type = ?
    

    如果您希望能够按所有者名称查询,则需要创建一个按owner_name 分区的新表。我还建议不要将vehicle 存储在集合中:

    CREATE TABLE vehicles_by_owner
        owner_name text,
        vehicle text,
        ...
        PRIMARY KEY (owner_name, vehicle)
    )
    

    通过使用vehicle 作为聚类列,每个所有者将在表中拥有车辆行。干杯!

    【讨论】:

    • 我提供的输入是 (owner_name_1, 'Vehicle1, Vehicle2', SUV, 200000)。它会为此工作吗?我可以像我们在 SQL 中一样创建 owner_name 主键并使用分区、集群键吗?
    猜你喜欢
    • 2016-07-06
    • 2018-09-18
    • 1970-01-01
    • 2019-05-20
    • 2018-07-25
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多