Кассандра, где предложение как кортеж - PullRequest
1 голос
/ 27 мая 2020
      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)

???

Таким образом, ввод - это кортеж, но столбцы не кортеж, а скорее отдельные столбцы.

1 Ответ

2 голосов
/ 27 мая 2020

Конечно, это возможно. Но только по ключам кластеризации. Это означает, что мне нужно использовать что-то еще в качестве ключа раздела или «корзины». В этом примере я предполагаю, что маркетинговые кампании чувствительны ко времени и что мы получим хорошее распределение и простоту запросов, используя «месяц» в качестве сегмента (раздела).

CREATE TABLE stackoverflow.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:stackoverflow> 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)
...