Материализованный взгляд Кассандры не позволит мне отфильтровать - PullRequest
1 голос
/ 17 апреля 2019

Я создал материализованное представление:

СОЗДАНИЕ МАТЕРИАЛИЗИРОВАННОГО ПРОСМОТРА test_view КАК ВЫБРАТЬ штат, город, zip, loc, pop ИЗ списка городов ГДЕ состояние НЕ НУЛЬ И город НЕ НУЛЬ И МОДУЛЬ НЕNULL И pop не равен NULL
ПЕРВИЧНЫЙ КЛЮЧ (штат, город, pop, zip) С КЛАСТЕРНЫМ ЗАКАЗОМ BY (штат ASC).

, и я получаю результаты запроса "SELECT * FROM"test_view Где штат = 'NY'LIMIT 15; "as:

state | city         | pop   | zip   | loc
-------+--------------+-------+-------+-------------------------
    NY |       ACCORD |  2695 | 12404 | [-74.235336, 41.808308]
    NY |         ACRA |   525 | 12405 | [-74.085723, 42.330367]
    NY |  ADAMS BASIN |   989 | 14410 | [-77.853905, 43.190644]
    NY | ADAMS CENTER |  2649 | 13606 |  [-76.00415, 43.863106]
    NY |      ADDISON |  4967 | 14801 |  [-77.266027, 42.09825]
    NY |   ADIRONDACK |   105 | 12808 | [-73.782486, 43.716479]
    NY |        AFTON |  2801 | 13730 | [-75.536604, 42.241737]
    NY |        AKRON |  7924 | 14001 | [-78.508365, 43.024944]
    NY |      ALABAMA |    68 | 14003 | [-78.385231, 43.071888]
    NY |       ALBANY |  2709 | 12207 | [-73.752327, 42.658133]
    NY |       ALBANY |  6927 | 12204 | [-73.735364, 42.684667]
    NY |       ALBANY |  9374 | 12210 |   [-73.76052, 42.65677]
    NY |       ALBANY | 10008 | 12209 | [-73.785385, 42.641665]
    NY |       ALBANY | 11097 | 12202 | [-73.764071, 42.641314]
    NY |       ALBANY | 17230 | 12206 | [-73.774406, 42.668326]

Теперь, когда я добавляю еще один оператор фильтрации условий для выполнения запроса:

SELECT * FROM test_view Where state = 'NY' И pop> 2000 ORDER BYгород ASC LIMIT 15;

Я получаю сообщение об ошибке:

InvalidRequest: ошибка сервера: код = 2200 [неверный запрос] message = "столбец PRIMARY KEY" pop "не может быть ограничено, так как предыдущий столбец "city" не ограничен "

Я хочу иметь возможность сохранять порядок записей в таблице / результатах выше, но также разрешить фильтрацию с использованием" pop ".Как я отредактирую свое материализованное представление для этого?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Если вы не собираетесь запрашивать, используя штат и город, вы можете изменить свой вид на показанный ниже.

СОЗДАТЬ МАТЕРИАЛИЗОВАННЫЙ ВИД ПЕРВИЧНЫЙ КЛЮЧ (штат, pop, city, zip) С КЛАСТЕРНЫМ ЗАКАЗОМ (pop ASC, city ASC)

Тогда вы можете запросить, как это SELECT * FROM test_view, где state = 'NY' И pop> 2000 ORDER BY pop, city ASC LIMIT 15;

При представлении выше он не сохранит порядок городов для государства. Это будет порядок населения для городов, а не по названию городов для данного государства. Если вы хотите сохранить порядок по названиям городов в пределах штата, вам нужно будет указать город вместе со штатом при фильтрации по населению. Еще фильтр по населению, но жертвоприношения упорядочены по названиям городов.

Причина, по которой вы получаете ошибку, состоит в том, что вы можете запрашивать только в порядке кластеризации столбцов после указания ключа раздела. Нельзя опускать предыдущий столбец в порядке ключей кластеризации при фильтрации по столбцу кластеризации.

0 голосов
/ 17 апреля 2019
CREATE MATERIALIZED VIEW test_view AS SELECT state, city, zip, loc, pop FROM citylist WHERE state IS NOT NULL AND city IS NOT NULL AND zip IS NOT NULL AND pop IS NOT NULL
PRIMARY KEY (state,pop,city,zip) WITH CLUSTERING ORDER BY (state ASC).

Порядок, в котором создаются ключи, имеет значение - вы не можете ограничить столбец без ограничения предыдущего столбца в списке составных ключей (без разрешения фильтрации, что в любом случае не очень хорошая идея)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...