2009-05-11 17 views
4

J'ai un client Thrift php et je veux écrire dans une table HBase et je fais ce qui suit:Ecrire tableau php dans HBase en utilisant Thrift

$mutations = array(
    new Mutation(array(
     'column' => 'entry:num', 
     'value' => array('a','b','c') 
    )), 
); 
    $client->mutateRow($t, $row, $mutations); 

Le problème est que lors de l'insertion dans HBase la valeur , qui est un tableau, est converti en 'Array' au lieu de stocker les éléments du tableau. Comment puis-je stocker la liste sous forme de tableau (ou tableau d'octets)

Répondre

2

Je dois admettre que je n'ai aucune idée de ce que vous essayez de faire (peut-être en raison d'un manque de connaissance concernant Thrift et HBase), mais si j'ai bien compris votre question, vous essayez d'écrire une structure de données PHP (tableau dans ce cas) sur un support de stockage. Pour ce faire, vous devez sérialiser vos données en quelque sorte. Cela pourrait utiliser une sérialisation XML personnalisée, une sérialisation binaire personnalisée ou, peut-être la solution la plus simple, le mécanisme de sérialisation interne PHP fourni par serialize() et le unserialize() correspondant. Si vous aspirez à l'interopérabilité inter-langues, vous devez utiliser une sérialisation personnalisée ou vous devez écrire une fonction de désérialisation qui désérialise le format de sérialisation PHP dans votre langue cible.

Juste un exemple rapide - je ne sais pas où vous auriez à mettre ce code, car je ne sais pas exactement ce que vous faites:

$mutations = array(
    new Mutation(array(
     'column' => 'entry:num', 
     'value' => array('a','b','c') 
    )), 
); 
$data = serialize($mutations); // $data now is a string 
// write $data to storage 
// read $readData from storage 
$readMutations = unserialize($readData); 
// $readMutations == $mutations 
// (but the Mutation instances are not the same instances any more) 

S'il vous plaît SEEE

+1

Merci pour la réponse, je connais le mécanisme de sérialisation Php mais ce que je me demandais était s'il y avait un moyen d'écrire le tableau PHP comme un tableau d'octets dans une colonne Hbase. J'ai utilisé le fichier HBase.thrift qui vient à hbase pour générer le client php, utilisé le fichier DemoClient.php pour faire le test, et HBAse thrift server pour faire le test. Je pense, mais pas sûr, que cela se rapporte à la façon dont les structures sont définies dans le fichier HBase.thrift –

3

Un objet de mutation HBase nécessite trois champs avec des valeurs booléennes/textuelles, et non des tableaux. Donc, vous devez transformer toute valeur structurée en une chaîne, quelque chose comme.

$mutations = array(
    new Mutation(array(
     'isDelete' => FALSE, 
     'column' => 'entry:num', 
     'value' => serialize(array('a','b','c')) 
    )), 
    ); 
    $client->mutateRow($t, $row, $mutations); 

La définition de l'API HBase Thrift est ici; http://svn.apache.org/viewvc/hbase/trunk/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?view=markup

Je n'ai pas testé cela.