Exemple de requête HBase : commandes put(), get() et scan()
⚡ Résumé intelligent
Les commandes HBase `put`, `get` et `scan` sont essentielles pour l'écriture et la lecture de données. Elles permettent de stocker la valeur d'une cellule par ligne et colonne, de récupérer une seule ligne ou de parcourir plusieurs lignes depuis l'interface de ligne de commande. Java API.
Écrire des données dans la table HBase : Shell
Ces exemples supposent que HBase est installé et en fonctionnement, le shell HBase est ouvert, et un table nommée guru99 Il existe déjà une colonne consacrée à l'éducation et aux projets des familles.
La commande put est utilisée pour stocker des données dans une table.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Cette commande sert aux opérations suivantes :
- Il placera une « valeur » de cellule dans une table, une ligne ou une colonne définie ou spécifiée.
- Il permettra éventuellement de coordonner un horodatage.
Par exemple, nous plaçons ici des valeurs dans le tableau « guru99 » à la ligne r1 et à la colonne c1 :
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Nous avons placé trois valeurs, 10, 15 et 30, dans le tableau « guru99 », comme indiqué dans la capture d'écran ci-dessous.
Supposons que la table « guru99 » contienne une référence de table, par exemple « g ». Vous pouvez également exécuter la commande sur cette référence de table, comme ceci :
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Le résultat apparaît comme indiqué dans la capture d'écran ci-dessus après avoir saisi des valeurs dans « guru99 ».
Lire les données de la table HBase : Shell
Dans cette section, nous vérifions les éléments suivants dans le Coque HBase:
- Valeurs insérées dans la table HBase « guru99 ».
- Noms des colonnes avec les valeurs présentes dans la table HBase guru99.
Le résultat de l'analyse ci-dessous répertorie chaque valeur insérée dans « guru99 », ainsi que ses noms de ligne et de colonne :
D'après la capture d'écran ci-dessus, nous pouvons déduire ce qui suit :
- Si nous exécutons la commande « scan » dans le shell HBase, elle affichera les valeurs insérées dans « guru99 » comme suit.
- Dans l'interface HBase, les valeurs insérées par notre code s'afficheront, avec les noms des colonnes et des lignes.
- On peut voir ici que les noms de colonnes insérés sont « éducation » et « projets ».
- Les valeurs insérées dans les colonnes mentionnées sont « BigData » et « HBase Tutorials ».
Vous pouvez également utiliser la commande get pour lire des données à partir d'une table.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Les paramètres supplémentaires incluent TIMERANGE, TIMESTAMP, VERSIONS et FILTERS. Cette commande permet d'obtenir une ligne ou le contenu d'une cellule du tableau. Vous pouvez ajouter des paramètres supplémentaires, tels que TIMESTAMP, TIMERANGE, VERSIONS ou FILTERS, pour extraire une ligne ou le contenu d'une cellule en particulier. Le tableau ci-dessous récapitule ces paramètres :
| Paramètres | Interet |
|---|---|
| INTERVALLE DE TEMPS | Renvoie les cellules dont l'horodatage se situe entre une heure de début et une heure de fin. |
| TIMESTAMP | Renvoie uniquement la version de la cellule stockée à un horodatage précis. |
| VERSIONS | Définit le nombre de versions d'une cellule à renvoyer (la valeur par défaut est 1). |
| FILTRES | Applique un filtre pour limiter les lignes ou les colonnes renvoyées. |
| COLONNE | Limite le résultat à des familles de colonnes ou à des qualificateurs spécifiques. |
Voici quelques exemples d'utilisation de la commande get :
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Pour le tableau « guru99 », les valeurs de la ligne r1 et de la colonne c1 s'afficheront à l'aide de cette commande, comme indiqué dans la capture d'écran ci-dessous.
hbase> get 'guru99', 'r1'
Pour le tableau « guru99 », les valeurs de la ligne r1 seront affichées à l'aide de cette commande.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Pour le tableau « guru99 », les valeurs de la ligne r1 dans la plage de temps ts1 à ts2 seront affichées à l'aide de cette commande.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Pour le tableau « guru99 », les valeurs de la ligne r1 et des familles de colonnes c1, c2 et c3 seront affichées à l'aide de cette commande.
Écrire des données dans la table HBase : API JAVA
Dans cette étape, nous allons écrire des données dans la table HBase « guru99 ».
Tout d'abord, il faut écrire le code permettant d'insérer et de récupérer des valeurs depuis HBase, à l'aide du programme HBaseLoading.java. Pour créer et insérer des valeurs dans une table au niveau des colonnes, le code est similaire à celui présenté ci-dessous.
La capture d'écran ci-dessous montre Java code qui construit la configuration HBase et insère des valeurs dans « guru99 » :
D'après la capture d'écran ci-dessus :
- Lorsque nous créons la configuration HBase, elle pointe vers les configurations que nous avons définies dans les fichiers hbase-site.xml et hbase-default.xml lors de l'installation de HBase.
- Création de la table « guru99 » à l'aide de la méthode HTable.
- Ajout de la ligne 1 au tableau « guru99 ».
- Spécifiez les noms de colonnes « éducation » et « projets » et insérez des valeurs dans les colonnes correspondantes de la ligne 1. Les valeurs insérées ici sont : BigData et « HBaseTutorials ».
Lire les données de la table HBase : Java API
Quelles que soient les valeurs que nous avons placées dans la table HBase dans la section précédente, nous allons ici les récupérer et les afficher.
La sortie console ci-dessous affiche les données lues depuis la table HBase « guru99 » :
Pour récupérer les résultats stockés dans « guru99 » :
- Nous allons ici récupérer les valeurs stockées dans les familles de colonnes, à savoir « éducation » et « projets ».
- À l'aide de la commande « get », nous allons récupérer les valeurs stockées dans la table HBase.
- Résultats de l'analyse à l'aide de la commande « scan ». Les valeurs stockées dans la ligne 1 s'afficheront sur la console.
Une fois le code écrit, vous exécutez le Java application comme ça:
Cliquez avec le bouton droit sur HBaseLoading.java -> Exécuter en tant que -> Java Application.
Après l'exécution de « HBaseLoading.java », les valeurs sont insérées dans « guru99 » dans chaque colonne de HBase, et dans le même programme, il est également possible de récupérer des valeurs.
Voici le code complet:
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseLoading { public static void main(String[] args) throws IOException { /* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/ org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); /*This instantiates an HTable object that connects you to the "test" table*/ HTable table = new HTable(config, "guru99"); /* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/ Put p = new Put(Bytes.toBytes("row1")); /*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/ p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData")); p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials")); // Once you've adorned your Put instance with all the updates you want to make, to commit it do the following table.put(p); // Now, to retrieve the data we just wrote. Get g = new Get(Bytes.toBytes("row1")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1")); byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2")); String valueStr = Bytes.toString(value); String valueStr1 = Bytes.toString(value1); System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1); Scan s = new Scan(); s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1")); s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2")); ResultScanner scanner = table.getScanner(s); try { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row : " + rr); } } finally { // Make sure you close your scanners when you are done! scanner.close(); } } }
Note concernant les versions de l'API : L'exemple ci-dessus utilise la classe HTable et sa méthode add(), qui correspondent à l'ancienne API client HBase. Depuis HBase 1.0, HTable est obsolète. Le code moderne obtient une table via ConnectionFactory.createConnection(…).getTable(…) et effectue une opération Put avec addColumn() au lieu de add(). La logique des opérations put, get et scan reste inchangée.






