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.

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

  1. Вторичные индексы как описано выше.
  2. Используйте составные столбцы в качестве ключа. Это хорошая идея, если у вас есть только 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)
Другие вопросы по тегам