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)
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)