tutorial - crear bd en cassandra
Cassandra no está recuperando el valor entero correcto (2)
Estoy usando cql 3.0.0
He ejecutado la consulta:
INSERT INTO emp (empID, deptID, first_name, last_name)
VALUES (104, 15, ''jane'', ''smith'')
Al recuperar este registro, obtengo los siguientes valores:
empid = h
deptid = (blank value)
first_name = ''jane''
last_name = ''smith''
Al buscarlo, encontré que h es equivalente al carácter 104 de utf-8. También 15 en utf-8 está en blanco. (Enlace de referencia: http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec&unicodeinhtml=dec )
Establecí los tipos de columna en int durante crear tabla, pero al recuperar no obtengo los valores int.
¿Cómo puedo recuperar los valores correctos? No quiero los valores utf-8.
Gracias
Estoy usando cassandra 1.2.4
Debajo está mi código escrito en phpcassa:
require_once(__DIR__.''/../lib/autoload.php'');
use phpcassa/Connection/ConnectionPool;
use phpcassa/ColumnFamily;
use phpcassa/SystemManager;
use phpcassa/Schema/StrategyClass;
use cassandra/Compression;
use cassandra/ConsistencyLevel;
$pool = new ConnectionPool("prod",array(''X.X.X.X'',''X.X.X.X''));
$raw = $pool->get();
$rows = $raw->client->set_cql_version("3.0.0");
$rows = $raw->client->execute_cql3_query(''USE prod;'', Compression::NONE, ConsistencyLevel::ONE );
$rows = $raw->client->execute_cql3_query(''CREATE TABLE emp (
empID int,
deptID int,
first_name varchar,
last_name varchar,
PRIMARY KEY (empID, deptID));
'', Compression::NONE, ConsistencyLevel::ONE );
$rows = $raw->client->execute_cql3_query(''INSERT INTO emp (empID, deptID, first_name, last_name)
VALUES (104, 15, /'jane/', /'smith/');
'', Compression::NONE, ConsistencyLevel::ONE );
$rows = $raw->client->execute_cql3_query(''SELECT * FROM emp WHERE empID IN (2,104) ORDER BY deptID ASC;'', Compression::NONE, ConsistencyLevel::ONE );
echo "<pre>";
print_r($rows);
echo "<pre>";
La salida generada es:
cassandra/CqlRow Object
(
[key] =>
[columns] => Array
(
[0] => cassandra/Column Object
(
[name] => empid
[value] => h
[timestamp] =>
[ttl] =>
)
[1] => cassandra/Column Object
(
[name] => deptid
[value] =>
[timestamp] =>
[ttl] =>
)
[2] => cassandra/Column Object
(
[name] => first_name
[value] => jane
[timestamp] =>
[ttl] =>
)
[3] => cassandra/Column Object
(
[name] => last_name
[value] => smith
[timestamp] =>
[ttl] =>
)
)
)
Diré por favor revise su solución, he intentado exactamente lo mismo que usted describió como su problema, pero funciona normalmente para mí. Puede ser que en el momento de la creación haya usado utf-8 como su tipo.
Esquema
CREATE COLUMNFAMILY test(empID int, deptID int, first_name text, last_name text, PRIMARY KEY(empID));
Insertar
INSERT INTO emp (empID, deptID, first_name, last_name) VALUES (104, 15, ''jane'', ''smith'');
Recuperar
SELECT * FROM test ;
empid | deptid | first_name | last_name
-------+--------+------------+-----------
104 | 15 | jane | smith
Aunque fue un poco tarde para responder, pero estaba buscando desesperadamente la solución mientras escribía mi propio cassandra-wrapper para el framework Yii. Se me ocurrió algo así como la siguiente clase que elimina el problema del binario incorrecto para diferentes tipos de datos en cassandra, incluidos los tipos enteros:
Yii::import(''ext.phpcassa.autoload'');
require_once(''protected/extensions/phpcassa/autoload.php'');
use phpcassa/Connection/ConnectionPool;
use phpcassa/ColumnFamily;
use phpcassa/ColumnSlice;
use phpcassa/SystemManager;
use phpcassa/Schema/StrategyClass;
use phpcassa/Schema/DataType;
class ACassandraConnection extends CApplicationComponent {
protected $_pool = null;
public $keyspace = null;
public $servers = null;
/**
* Establish connection to cassandra cluster
* @return object
*/
private function _get_raw() {
if ($this->_pool === null) {
$this->_pool = new ConnectionPool($this->keyspace, $this->servers);
}
return $this->_pool->get();
}
public function cql_query($query) {
$raw = $this->_get_raw();
$cql_result = $raw->client->execute_cql3_query($query, cassandra/Compression::NONE, cassandra/ConsistencyLevel::ONE);
$this->_pool->return_connection($raw);
return $cql_result;
}
public function cql_get_rows($cql_result) {
if ($cql_result->type == 1) {
$rows = array();
foreach ($cql_result->rows as $rowIndex => $cqlRow) {
$cols = array();
foreach ($cqlRow->columns as $colIndex => $column) {
$type = DataType::get_type_for($cql_result->schema->value_types[$column->name]);
$cols[$column->name] = $type->unpack($column->value);
}
$rows[] = $cols;
}
return $rows;
} else {
return null;
}
}
/**
* Perform garbage collection
*/
public function __destruct() {
if($this->_pool !== null) {
$this->_pool->close();
}
}
}