2016-01-18 2 views
1

Скажем, у меня есть семья колонки в Кассандре, которая была создана с помощью cassandra-cli вроде этого:Преобразовать динамический столбец Cassandra семьи к статическому одного

create column family users with key_validation_class = UTF8Type and comparator = UTF8Type; 

С точки зрения thrift to CQL3 migration guide from Datastax этого является динамический столбец семьи.

При осмотре CQL3 клиента с помощью DESCRIBE TABLE users это выглядит следующим образом:

CREATE TABLE users (
    key text, 
    column1 text, 
    value blob, 
    PRIMARY KEY (key, column1) 
) WITH COMPACT STORAGE 
    AND CLUSTERING ORDER BY (column1 ASC); 

Это ожидаемое поведение. Я хочу добавить метаданные столбцов, чтобы семейство столбцов рассматривалось как static.

Так что я попытался это с помощью cassandra-cli:

update column family users 
    with column_metadata = [{column_name: email, validation_class: UTF8Type}]; 

Однако конечный результат в CQL3 не то, что я хотел:

CREATE TABLE users (
    key text, 
    column1 text, 
    value blob, 
    email text, 
    PRIMARY KEY (key, column1) 
) WITH COMPACT STORAGE 
    AND CLUSTERING ORDER BY (column1 ASC); 

Что я ожидал такой же результат, как при создании столбца семья с метаданными с начала:

create column family users2 
    with key_validation_class = UTF8Type 
    and comparator = UTF8Type 
    and column_metadata = [{column_name: email, validation_class: UTF8Type}]; 

В этом случае представление CQL3 это то, что я хочу:

CREATE TABLE users2 (
    key text PRIMARY KEY, 
    email text 
) WITH COMPACT STORAGE; 

Есть ли какой-нибудь способ, как я могу добавить метаданные столбца в семье колонке, которая была создана без каких-либо - так, что он будет смотреть CQL3 точно так же, как если бы метаданные были при создании семейства столбцов? Разумеется, без повторного создания семейства столбцов.

ответ

1

Это невозможно создать статический столбец, используя старый бережливости API. Фактически статический столбец - всего лишь трюк, например. столбец со значением кластеризации = NULL, поэтому для каждого ключа разделов всего 1 экземпляр.

Смотрите эти 2 горки для объяснения (извините текст на французском языке):

http://www.slideshare.net/doanduyhai/cassandra-techniques-de-modlisation-avance/218

http://www.slideshare.net/doanduyhai/cassandra-techniques-de-modlisation-avance/219

Вы должны воспользоваться этой возможностью, чтобы мигрировать в CQL. Бережливость является устаревшим и даже отключить по умолчанию, начиная с Кассандры 3.x

+0

Я не использую * статические столбцы *, но семейства столбцов, которые имеют одни и те же столбцы в каждой строке. Термин * статические семейства столбцов * был определен в справочнике [бережливость к CQL3] (http://www.datastax.com/dev/blog/thrift-to-cql3). И я перехожу из Thrift в CQL - я просто хочу иметь более яркие имена столбцов в запросах CQL, чем 'column1' и' value'. –

+0

См. Полный ответ ниже – doanduyhai

1

Ok Я понимаю, что вы имеете в виду. Посмотрите на систему keypace, table schema_columnfamilies.

Я думаю, что там хранятся метки ярлыков ключей разделов и кластеров.

Возможно, это возможно изменить, но я не знаю, правильно ли взламывать эти мета-таблицы непосредственно.

Если у вас есть п узлов, вам, возможно, потребуется обновить ярлык на всех этих узлов, так как система имеет пространство ключей LocalStrategy.

Выполнить этот запрос, чтобы увидеть фактические метки:

SELECT key_aliases,key_validator,column_aliases,comparator 
FROM system.schema_columnfamilies 
WHERE keyspace_name='xxx' 
AND columnfamily_name='users'; 
+0

Спасибо, что указали мне в правильном направлении (таблицы системных схем). Единственное существенное различие между таблицами 'users' и' users2' из моего вопроса заключается в том, что 'users' имеет' is_dense = True' в 'schema_columnfamilies', а' users2' имеет 'is_dense = False'. Однако кажется, что нет простого способа сделать то, что я хочу, помимо изменения системных таблиц, - и я не чувствую себя комфортно в этом. –

+0

@st_patriick, вы решили свою проблему? Пытался изменить таблицу 'system' без успеха. –

Смежные вопросы