Я вижу, что вы просите. Нет, вы должны иметь возможность создавать все столбцы в одной таблице. Давайте предположим, что я создаю users
таблицу, как это:
CREATE TABLE users(
userid bigint,
username text,
email text,
dob text,
loc text,
mobile text,
landlinenum text,
PRIMARY KEY (userid));
А потом я ввожу несколько строк, как это:
INSERT INTO users (userid,username,email,loc,mobile) VALUES (0,'mreynolds','[email protected]','Minneapolis','111-555-1234');
INSERT INTO users (userid,username,email,loc,landlinenum,dob) VALUES (1,'jcobb','[email protected]','Minneapolis','111-555-3464','19620227');
INSERT INTO users (userid,username,email,loc,mobile) VALUES (2,'dbook','[email protected]','New York','111-555-2349');
INSERT INTO users (userid,username,email,loc,mobile,dob) VALUES (3,'stam','[email protected]','San Francisco','111-555-8899','19750416');
INSERT INTO users (userid,username,email,loc,dob) VALUES (4,'rtam','[email protected]','San Francisco','19810724');
Если я запускаю несвязанный запрос тянуть обратно все строки и столбцы, я вижу это:
[email protected]:stackoverflow> SELECT * FROM users;
userid | dob | email | landlinenum | loc | mobile | username
--------+----------+----------------------+--------------+---------------+--------------+-----------
2 | null | [email protected] | null | New York | 111-555-2349 | dbook
3 | 19750416 | [email protected] | null | San Francisco | 111-555-8899 | stam
4 | 19810724 | [email protected] | null | San Francisco | null | rtam
0 | null | [email protected] | null | Minneapolis | 111-555-1234 | mreynolds
1 | 19620227 | [email protected] | 111-555-3464 | Minneapolis | null | jcobb
(5 rows)
Так что это должно сказать вам пару вещей.
Кассандра на самом деле не «схема-менее» в том же смысле, что и в пред-CQL-мире. Вы должны определить каждый столбец в определении таблицы.
С номером 1, указанным вами, не должны указывать значение для каждого столбца.
Столбцам, у которых нет, присваивается значение как «null». Помните, что они не являются истинными нулевыми значениями, они просто отображаются таким образом.
В моих ВСТАВКАХ я указал только те столбцы, для которых у меня были соответствующие значения. Я не запретил другим пустым или пустым. При явной установке значения столбца в null создается надгробная плита.
Теперь, основываясь на ваших требованиях к запросам, вы обычно хотите создать таблицу для каждого требуемого запроса. У меня есть таблица «users» с ключом userid
... но действительно, насколько это полезно? Приложения обычно запрашивают такие вещи, как email
или loc
.
Чтобы обрабатывать электронную почту, я бы создал новую таблицу с теми же определениями столбцов, что и «users_by_email». Главное отличие (кроме названия), будет ОСНОВНОЕ определение KEY: PRIMARY KEY (email,username)
Тогда я мог бы запросить пользователь по электронной почте, как это:
[email protected]:stackoverflow> SELECT * FROM users_by_email WHERE email='[email protected]';
email | username | dob | landlinenum | loc | mobile | userid
--------------------+----------+----------+-------------+---------------+--------+--------
[email protected] | rtam | 19810724 | null | San Francisco | null | 4
(1 rows)
Вот почему, зная ваши шаблоны запросов делает разницу. В первом примере таблица «users» не может поддерживать запрос email
.
Cassandra требует подхода, основанного на запросах. Поскольку вы ничего не сказали о запросах, которые вам необходимы для поддержки, невозможно принимать обоснованные решения о том, как выглядят ваши таблицы (таблицы). – Aaron
Спасибо, Аарон.Я предполагаю, что данные должны храниться в семействах столбцов с соответствующими значениями ключа и столбца строки и столбца. Но как только это будет сделано, как мы решаем отображать информацию в таблицах CQL. –
Например, предположим, что у меня есть такие же данные: User (userid, uname, email, dob, loc, mobile, landlinenum) Поскольку cassandra поддерживает схему (динамические столбцы могут быть добавлены), может случиться, что один пользователь может иметь несколько столбцов и другой пользователь может иметь несколько других колонок (там есть строки, которые принимают одинаковое количество столбцов, а другие строки могут принимать и другие столбцы. Как мне преобразовать это в таблицу CQL, так как у меня есть разные столбцы для разных ключей строк. –