Cassandra (CQL) оператор выбора с 'где' не работает
Я использую Кассандру последние несколько дней. Я использую библиотеку PHPCassa для этого.
Когда я пытаюсь использовать следующий код, он не работает правильно.
require_once('phpcassa/connection.php');
require_once "phpcassa/columnfamily.php";
// Create new ConnectionPool like you normally would
$pool = new ConnectionPool("newtest");
// Retrieve a raw connection from the ConnectionPool
$raw = $pool->get();
$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE KEY='phpqa'", cassandra_Compression::NONE);
echo "<pre>";
print_r($rows);
echo "<pre>";
// Return the connection to the pool so it may be used by other callers. Otherwise,
// the connection will be unavailable for use.
$pool->return_connection($raw);
unset($raw);
Это ничего не возвращает, я также попытался следующие запросы
$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE age='32'", cassandra_Compression::NONE);
$rows = $raw->client->execute_cql_query("SELECT * FROM User WHERE name='jack'", cassandra_Compression::NONE);
Но когда я пытался
$rows = $raw->client->execute_cql_query("SELECT * FROM User", cassandra_Compression::NONE);
Дан правильный ответ, отображены все строки. Посоветуйте, пожалуйста, как правильно использовать "ГДЕ".
Детали Keyspace
Strategy Class: org.apache.cassandra.locator.SimpleStrategy
Strategy Options: None
Replication Factor: 1
Ring
Start Token: 6064078270600954295
End Token: 6064078270600954295
Endpoints: 127.0.0.1
3 ответа
В Кассандре вы не можете просто запросить "таблицу", как обычно. Вам нужно настроить вторичные индексы для каждого столбца, который вы можете запросить.
Скажем, у нас есть стол:
key | User | Age
----------+----------------
phpqa | Jack | 20
Вы можете запросить непосредственно по ключу:
SELECT * FROM User WHERE key='phpqa';
Но для выполнения других запросов WHERE вам потребуется вторичный индекс для столбцов, которые вы хотите иметь в предложении WHERE.
Что вы можете сделать, чтобы сделать запрос более гибким и удобным для вас:
- Вторичные индексы как описано выше.
- Используйте составные столбцы в качестве ключа. Это хорошая идея, если у вас есть только 2-3 столбца, которые вы хотите запросить, но прочитайте эту статью, подробно рассказывающую, как и когда использовать составные ключи, и вот ссылка на то, как реализовать это в phpcassa.
Добавьте "имя" и "возраст" в качестве вторичных индексов:
CREATE INDEX name_key on User( name );
CREATE INDEX age_key on User( age );
Тогда вы сможете использовать свой select
заявления).
Узнайте больше здесь.
Вы используете зарезервированное слово в качестве имени столбца:
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
$raw->client->execute_cql_query("SELECT * FROM User WHERE KEY='phpqa'",
cassandra_Compression::NONE)