Cassandra where 子句作为元组

Cassandra where clause as a tuple

      Table12
CustomerId   CampaignID
  1              1
  1              2
  2              3
  1              3
  4              2                   
  4              4
  5              5
val CustomerToCampaign = ((1,1),(1,2),(2,3),(1,3),(4,2),(4,4),(5,5))

是否可以像这样写一个查询

select CustomerId, CampaignID  from Table12 where (CustomerId, CampaignID) in (CustomerToCampaign_1, CustomerToCampaign_2)

???

所以输入是一个元组,但列不是元组而是单独的列。

当然,这是可能的。但仅限于集群键。这意味着我需要使用其他东西作为分区键或 "bucket." 对于这个例子,我假设营销活动是时间敏感的,并且我们将通过使用 [=19 获得良好的分布并且易于查询=]作为桶(分区)。

CREATE TABLE Whosebug.customertocampaign (
    campaign_month int,
    customer_id int,
    campaign_id int,
    customer_name text,
    PRIMARY KEY (campaign_month, customer_id, campaign_id)
);

现在,我可以 INSERT 您的 CustomerToCampaign 变量中描述的数据。然后,此查询有效:

aploetz@cqlsh:Whosebug> SELECT campaign_month, customer_id, campaign_id
                             FROM customertocampaign WHERE campaign_month=202004 
                             AND (customer_id,campaign_id) = (1,2);

 campaign_month | customer_id | campaign_id
----------------+-------------+-------------
         202004 |           1 |           2

(1 rows)