【问题标题】:Is there is a way to select or filter the list of UDT in Cassandra table?有没有办法在 Cassandra 表中选择或过滤 UDT 列表?
【发布时间】:2019-04-26 13:11:54
【问题描述】:

从下面选择响应。如何添加 where 子句来过滤请求的到达时间之间的航班。

cqlsh:api_itl> select * from generic_response_1;

 trace-id                             | result-index | api | base_price | fare_selection | fare_type | flights                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | sale_price | special_instructions | total_duration
--------------------------------------+--------------+-----+------------+----------------+-----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+----------------------+----------------
 39485363-cc22-4eff-a502-6d860931c3fb |         IB56 | tbo |       8400 |         Retail |       ADT | [{arrival_date_time: '23-03-2019 14:10', carrier_iata: 'UK', carrier_id: 'UK 816', carrier_name: 'Air Vistara', class_code: 'Q', departure_date_time: '23-03-2019 11:30', flight_duration: 160, field_7_: 'BLR', to: 'DEL', via: ''}, {arrival_date_time: '23-03-2019 22:40', carrier_iata: 'UK', carrier_id: 'UK 835', carrier_name: 'Air Vistara', class_code: 'Q', departure_date_time: '23-03-2019 19:55', flight_duration: 165, field_7_: 'DEL', to: 'MAA', via: ''}] |       9485 |                 null |            670
 39485363-cc22-4eff-a502-6d860931c3fb |          OB4 | tbo |       1000 |         Retail |       ADT |                                                                                                                                                                                                                                            [{arrival_date_time: '08-03-2019 14:55', carrier_iata: '6E', carrier_id: '6E 119', carrier_name: 'Indigo', class_code: 'Q', departure_date_time: '08-03-2019 13:55', flight_duration: 60, field_7_: 'MAA', to: 'BLR', via: ''}] |       1770 |                 null |             60

(2 rows)
cqlsh:api_itl> 

给定输出的数据库结构


CREATE TYPE api_itl.flight (
    arrival_date_time text,
    carrier_iata text,
    carrier_id text,
    carrier_name text,
    class_code text,
    departure_date_time text,
    flight_duration int,
    "from" text,
    "to" text,
    via text
);


CREATE TABLE api_itl.generic_response_1(
    "trace-id" uuid,
    "result-index" text,
    api text,
    base_price float,
    fare_selection text,
    fare_type text,
    flights list<frozen<flight>>,
    sale_price float,
    special_instructions list<text>,
    total_duration int,
    PRIMARY KEY ("trace-id", "result-index")
) 

【问题讨论】:

  • 更改您的数据模型以在到达时间之前具有聚类键
  • @ChrisLohfink 如何建模?如果我的模型是错误的,建议我如何构建它?
  • @picadoh 你建议的是字典,在我的例子中,飞行栏是一个列表。你能建议我如何创建建议的 UDT。因为 My Udt 是 UDT 列表

标签: cassandra cassandra-3.0


【解决方案1】:

不能使用 CQL 过滤属于 TYPE 的数据。相反,请考虑更改数据模型。

首先,将 TYPE 设置为 TABLE。

  • 考虑将到达日期时间的数据类型更改为时间戳。
  • 另外,添加 trace-id、result-index 以维护对主表的引用。
CREATE TABLE api_itl.flight (
    arrival_date_time timestamp,
    carrier_iata text,
    carrier_id text,
    carrier_name text,
    class_code text,
    departure_date_time text,
    flight_duration int,
    "from" text,
    "to" text,
    via text,
    "trace-id" uuid,
    "result-index" text,
    PRIMARY KEY ("carrier_id", "arrival_date_time") );

接下来,从原始表中删除航班list&lt;frozen&lt;flight&gt;&gt;

现在您可以使用 两个 查询来获得您想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多