Je veux numériser des lignes dans un HTable à partir de hbase Shell où une famille de colonnes (i.e., Tweet) a une valeur particulière (i.e., user_id).
Maintenant, je veux trouver toutes les lignes où Tweet: user_id a la valeur test1
car cette colonne a la valeur 'test1'
column=Tweet:user_id, timestamp=1339581201187, value=test1
Bien que je puisse numériser la table pour une utilisation particulière,
scan 'tweetsTable',{COLUMNS => 'Tweet:user_id'}
mais je n'ai trouvé aucun moyen de numériser une ligne pour une valeur.
Est-il possible de le faire via HBase Shell?
J'ai également vérifié cette question .
C'est possible sans Hive:
scan 'filemetadata',
{ COLUMNS => 'colFam:colQualifier',
LIMIT => 10,
FILTER => "ValueFilter( =, 'binaryprefix:<someValue.e.g. test1 AsDefinedInQuestion>' )"
}
Remarque: afin de trouver toutes les lignes qui contiennent test1 comme valeur spécifiée dans la question, utilisez préfixe binaire: test1 dans le filtre (voir cette réponse pour plus d'exemples)
Nishu, voici la solution que j'utilise périodiquement. Il est en fait beaucoup plus puissant que ce dont vous avez besoin en ce moment, mais je pense que vous utiliserez son pouvoir un jour. Oui, c'est pour HBase Shell.
import org.Apache.hadoop.hbase.filter.CompareFilter
import org.Apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.Apache.hadoop.hbase.filter.SubstringComparator
import org.Apache.hadoop.hbase.util.Bytes
scan 'yourTable', {LIMIT => 10, FILTER => SingleColumnValueFilter.new(Bytes.toBytes('family'), Bytes.toBytes('field'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('AAA')), COLUMNS => 'family:field' }
Seule la colonne family:field
Est renvoyée avec un filtre appliqué. Ce filtre pourrait être amélioré pour effectuer des comparaisons plus compliquées.
Voici également des conseils que je considère comme les plus utiles:
Comme il y avait plusieurs demandes d'explication cette réponse cette réponse supplémentaire a été publiée.
Exemple 1
Si
scan '<table>', { COLUMNS => '<column>', LIMIT => 3 }
retournerais:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
puis ce filtre:
scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( =, 'binaryprefix:hello_value2') AND ValueFilter( =, 'binaryprefix:hello_value3')" }
retournerais:
ROW COLUMN+CELL
ROW2 column=<column>, timestamp=<timestamp>, value=hello_value2
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
Exemple 2
Sinon est également pris en charge:
scan '<table>', { COLUMNS => '<column>', LIMIT => 3, FILTER => "ValueFilter( !=, 'binaryprefix:hello_value2' )" }
retournerais:
ROW COLUMN+CELL
ROW1 column=<column>, timestamp=<timestamp>, value=hello_value
ROW3 column=<column>, timestamp=<timestamp>, value=hello_value3
Un exemple de recherche de texte pour une valeur BIGBLUE dans la table t1 avec la famille de colonnes d: a_content. Un scan du tableau montrera toutes les valeurs disponibles: -
scan 't1'
...
column=d:a_content, timestamp=1404399246216, value=BIGBLUE
...
Pour rechercher juste une valeur de BIGBLUE avec une limite de 1, essayez la commande ci-dessous: -
scan 't1',{ COLUMNS => 'd:a_content', LIMIT => 1, FILTER => "ValueFilter( =, 'regexstring:BIGBLUE' )" }
COLUMN+CELL
column=d:a_content, timestamp=1404399246216, value=BIGBLUE
Évidemment, la suppression de la limite affichera toutes les occurrences de ce tableau/cf.
Pour analyser une table dans hbase sur la base de n'importe quelle valeur de colonne, SingleColumnValueFilter peut être utilisé comme:
scan 'tablename' ,
{
FILTER => "SingleColumnValueFilter('column_family','col_name',>, 'binary:1')"
}
De HBAse Shell, je pense que ce n'est pas possible car il s'agit en quelque sorte d'une requête à partir de laquelle nous utilisons voulons trouver des données spécifiques. Comme tout ce que nous savons, HBAse est noSQL, donc lorsque nous voulons appliquer une requête ou si nous avons un cas comme vous, je pense que vous devriez utiliser Hive ou PIG alors que Hive est une bonne approche silencieuse car dans PIG, nous devons jouer avec des scripts.
Quoi qu'il en soit, vous pouvez obtenir de bonnes informations sur Hive d'ici Intégration de Hive avec HBase et Ici
Si votre seul but est de visualiser les données à ne pas obtenir du code (de n'importe quel client), vous pouvez utiliser HBase Explorer ou un nouveau et très bon produit mais il est dans sa version bêta "HBase manager". Vous pouvez l'obtenir auprès de HBase Manager
Son simple, et plus important encore, il aide à insérer et supprimer des données, en appliquant des filtres sur les qualificateurs de colonne de l'interface utilisateur comme d'autres DBclients. Essaye.
J'espère que cela vous sera utile :)