Παράδειγμα ερωτήματος HBase: εντολές put(), get() & scan()

⚡ Έξυπνη Σύνοψη

Οι εντολές HBase put, get και scan είναι οι βασικές εντολές για την εγγραφή και την ανάγνωση δεδομένων, επιτρέποντάς σας να αποθηκεύετε μια τιμή κελιού ανά γραμμή και στήλη, να ανακτάτε μία μόνο γραμμή ή να περιηγείστε σε πολλές γραμμές από το κέλυφος ή Java API.

  • ✍️ Γράψτε με put: Η εντολή put αποθηκεύει μια τιμή σε έναν πίνακα, μια γραμμή, μια στήλη και μια προαιρετική χρονική σήμανση.
  • 🔍 Διαβάστε με get: Η εντολή get επιστρέφει μία μόνο γραμμή ή κελί, με τις επιλογές TIMERANGE, VERSIONS και FILTERS.
  • 📜 Περιήγηση με σάρωση: Η εντολή σάρωσης παραθέτει πολλές γραμμές και τις τιμές των στηλών τους σε έναν πίνακα.
  • Java API: Οι ίδιες λειτουργίες εκτελούνται σε Java χρησιμοποιώντας τις συναρτήσεις Put, Get, Scan και την βοηθητική κλάση Bytes.
  • 🧬 Συντεταγμένες: Κάθε τιμή αντιμετωπίζεται από το κλειδί γραμμής, την οικογένεια στηλών και τον προσδιοριστή στήλης.
  • 🤖 Βοήθεια με Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης συντάσσουν κώδικα put, get και scan και προτείνουν αποτελεσματικά σχέδια row-key.

Εντολές ερωτήματος HBase put(), get() και scan() σε shell και Java

Εγγραφή δεδομένων στον πίνακα HBase: Shell

Αυτά τα παραδείγματα υποθέτουν ότι το HBase είναι εγκατεστημένο και σε λειτουργία, το κέλυφος HBase είναι ανοιχτό και ένα πίνακας με όνομα guru99 υπάρχει ήδη με τη στήλη «Εκπαίδευση και έργα για οικογένειες».

Η εντολή put χρησιμοποιείται για την αποθήκευση δεδομένων σε έναν πίνακα.

Syntax:  put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>

Αυτή η εντολή χρησιμοποιείται για τα ακόλουθα πράγματα:

  • Θα βάλει μια «τιμή» κελιού σε έναν καθορισμένο ή καθορισμένο πίνακα ή γραμμή ή στήλη.
  • Προαιρετικά, θα συντονίσει μια χρονική σήμανση.

Για παράδειγμα, εδώ τοποθετούμε τιμές στον πίνακα "guru99" κάτω από τη γραμμή r1 και τη στήλη c1:

hbase> put 'guru99', 'r1', 'c1', 'value', 10

Έχουμε τοποθετήσει τρεις τιμές, 10, 15 και 30, στον πίνακα "guru99", όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.

Η εντολή put του shell HBase εισάγει τις τιμές 10, 15 και 30 στον πίνακα guru99

Ας υποθέσουμε ότι ο πίνακας "guru99" έχει μια αναφορά πίνακα, όπως το g. Μπορείτε επίσης να εκτελέσετε την εντολή στην αναφορά πίνακα, ως εξής:

hbase> g.put 'guru99', 'r1', 'c1', 'value', 10

Η έξοδος εμφανίζεται όπως φαίνεται στο παραπάνω στιγμιότυπο οθόνης μετά την τοποθέτηση τιμών στο "guru99".

Διαβάστε δεδομένα από τον πίνακα HBase: Shell

Σε αυτήν την ενότητα, ελέγχουμε τα ακόλουθα Κέλυφος HBase:

  • Τιμές που εισάγονται στον πίνακα HBase "guru99".
  • Ονόματα στηλών με τις τιμές που υπάρχουν στον πίνακα HBase guru99.

Το παρακάτω αποτέλεσμα σάρωσης παραθέτει κάθε τιμή που εισάγεται στο "guru99", μαζί με τα ονόματα γραμμών και στηλών της:

Έξοδος εντολής σάρωσης κελύφους HBase που παραθέτει τιμές γραμμών και στηλών στον πίνακα guru99

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να συμπεράνουμε τα εξής:

  • Αν εκτελέσουμε την εντολή "scan" στο κέλυφος HBase, θα εμφανιστούν οι τιμές που έχουν εισαχθεί στο "guru99" ως εξής.
  • Στο κέλυφος HBase, θα εμφανιστούν οι τιμές που εισάγονται από τον κώδικά μας, με τα ονόματα των στηλών και των γραμμών.
  • Εδώ μπορούμε να δούμε ότι τα ονόματα των στηλών που έχουν εισαχθεί είναι «εκπαίδευση» και «έργα».
  • Οι τιμές που εισάγονται είναι "BigData" και "HBase Tutorials" στις προαναφερθείσες στήλες.

Μπορείτε επίσης να χρησιμοποιήσετε την εντολή get για να διαβάσετε δεδομένα από έναν πίνακα.

Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}

Εδώ, οι πρόσθετες παράμετροι περιλαμβάνουν τα TIMERANGE (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), TIMESTAMP (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), VERSIONS (ΕΚΔΟΣΕΙΣ) και FILTERS (ΦΙΛΤΡΑ). Χρησιμοποιώντας αυτήν την εντολή, λαμβάνετε μια γραμμή ή τα περιεχόμενα κελιού που υπάρχουν στον πίνακα. Μπορείτε να προσθέσετε πρόσθετες παραμέτρους, όπως TIMESTAMP (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), TIMERANGE (ΧΡΟΝΟΜΕΤΡΙΚΟ ΕΥΡΟΣ), VERSIONS (ΕΚΔΟΣΕΙΣ) ή FILTERS (ΦΙΛΤΡΑ), για να ανακτήσετε ένα συγκεκριμένο περιεχόμενο γραμμής ή κελιού. Ο παρακάτω πίνακας συνοψίζει αυτές τις παραμέτρους:

Παράμετρος Σκοπός
ΧΡΟΝΟΔΙΑΓΡΑΜΜΑ Επιστρέφει κελιά των οποίων η χρονική σήμανση εμπίπτει σε μια ώρα έναρξης και λήξης.
ΧΡΟΝΟΣΗΜΑ Επιστρέφει μόνο την έκδοση κελιού που είναι αποθηκευμένη σε μια ακριβή χρονική σήμανση.
ΕΚΔΟΣΕΙΣ Ορίζει πόσες εκδόσεις ενός κελιού θα επιστραφούν (η προεπιλογή είναι 1).
ΦΙΛΤΡΑ Εφαρμόζει ένα φίλτρο για να περιορίσει ποιες γραμμές ή στήλες επιστρέφονται.
ΣΤΗΛΗ Περιορίζει το αποτέλεσμα σε συγκεκριμένες οικογένειες στηλών ή προσδιοριστές.

Ακολουθούν μερικά λειτουργικά παραδείγματα της εντολής get:

hbase> get 'guru99', 'r1', {COLUMN => 'c1'}

Για τον πίνακα "guru99", οι τιμές της σειράς r1 και της στήλης c1 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.

Η εντολή get του κελύφους HBase επιστρέφει μια μόνο γραμμή r1 από τον πίνακα guru99

hbase> get 'guru99', 'r1'

Για τον πίνακα "guru99", οι τιμές της γραμμής r1 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή.

hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}

Για τον πίνακα "guru99", οι τιμές της γραμμής r1 στο χρονικό εύρος ts1 έως ts2 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή.

hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}

Για τον πίνακα "guru99", οι τιμές της σειράς r1 και των οικογενειών στηλών c1, c2 και c3 θα εμφανιστούν χρησιμοποιώντας αυτήν την εντολή.

Εγγραφή δεδομένων στον πίνακα HBase: JAVA API

Σε αυτό το βήμα, θα γράψουμε δεδομένα στον πίνακα HBase "guru99".

Αρχικά, πρέπει να γράψουμε κώδικα για την εισαγωγή και ανάκτηση τιμών από το HBase, χρησιμοποιώντας το πρόγραμμα HBaseLoading.java. Για τη δημιουργία και την εισαγωγή τιμών σε έναν πίνακα σε επίπεδο στήλης, ο κώδικας φαίνεται παρακάτω.

Το παρακάτω στιγμιότυπο οθόνης δείχνει το Java κώδικας που δημιουργεί τη διαμόρφωση HBase και εισάγει τιμές στο "guru99":

Java κώδικας που δημιουργεί μια διαμόρφωση HBase και εισάγει τιμές με το Put API

Από το παραπάνω στιγμιότυπο οθόνης:

  • Όταν δημιουργούμε τη διαμόρφωση του HBase, αυτή υποδεικνύει τις διαμορφώσεις που ορίσαμε στα αρχεία hbase-site.xml και hbase-default.xml κατά την εγκατάσταση του HBase.
  • Δημιουργία πίνακα “guru99” χρησιμοποιώντας τη μέθοδο HTable.
  • Προσθήκη γραμμής 1 στον πίνακα "guru99".
  • Καθορισμός των ονομάτων στηλών «εκπαίδευση» και «έργα» και εισαγωγή τιμών στα ονόματα στηλών στην αντίστοιχη γραμμή1. Οι τιμές που εισάγονται εδώ είναι BigData και «Εκπαιδευτικά σεμινάρια HBase».

Διαβάστε δεδομένα από τον πίνακα HBase: Java API

Όποιες τιμές κι αν τοποθετήσαμε στον πίνακα HBase στην παραπάνω ενότητα, εδώ θα ανακτήσουμε και θα εμφανίσουμε αυτές τις τιμές.

Η παρακάτω έξοδος της κονσόλας δείχνει τα δεδομένα που διαβάζονται από τον πίνακα HBase "guru99":

Java Εκπαιδευτική ανάγνωση εξόδου κονσόλας και έργα τιμών στηλών από τον πίνακα HBase guru99

Για την ανάκτηση αποτελεσμάτων που είναι αποθηκευμένα στο "guru99":

  • Εδώ θα ανακτήσουμε τις τιμές που είναι αποθηκευμένες στις οικογένειες στηλών, δηλαδή, "εκπαίδευση" και "έργα".
  • Χρησιμοποιώντας την εντολή "get", θα ανακτήσουμε τις αποθηκευμένες τιμές στον πίνακα HBase.
  • Αποτελέσματα σάρωσης χρησιμοποιώντας την εντολή «σάρωση». Οι τιμές που είναι αποθηκευμένες στη γραμμή 1 θα εμφανιστούν στην κονσόλα.

Μόλις γραφτεί ο κώδικας, εκτελείτε το Java εφαρμογή σαν αυτό:

Κάντε δεξί κλικ στο HBaseLoading.java -> Εκτέλεση ως -> Java Εφαρμογή.

Μετά την εκτέλεση του "HBaseLoading.java", οι τιμές εισάγονται στο "guru99" σε κάθε στήλη στο HBase και στο ίδιο πρόγραμμα μπορεί επίσης να ανακτήσει τιμές.

Εδώ είναι ο πλήρης κώδικας:

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();
}
}
}

Σημείωση σχετικά με τις εκδόσεις API: Το παραπάνω παράδειγμα χρησιμοποιεί την κλάση HTable και τη μέθοδο add(), οι οποίες αντικατοπτρίζουν το παλαιότερο API πελάτη HBase. Από την έκδοση 1.0 και μετά, το HTable έχει καταργηθεί. Ο σύγχρονος κώδικας λαμβάνει έναν πίνακα μέσω του ConnectionFactory.createConnection(…).getTable(…) και δημιουργεί ένα Put με addColumn() αντί για add(). Η λογική των put, get και scan παραμένει η ίδια.

Συχνές Ερωτήσεις

Η εντολή get ανακτά μία γραμμή με το κλειδί γραμμής της και την επιστρέφει γρήγορα. Η εντολή scan διαβάζει πολλές γραμμές διαδοχικά σε έναν πίνακα ή σε ένα εύρος κλειδιών, προαιρετικά φιλτραρισμένες κατά στήλες ή χρόνο. Χρησιμοποιήστε την εντολή get για μεμονωμένες αναζητήσεις και την εντολή scan για περιήγηση ή εξαγωγή πολλαπλών γραμμών.

Μια οικογένεια στηλών είναι μια ονομασμένη ομάδα στηλών που αποθηκεύονται μαζί και ορίζονται όταν δημιουργείτε τον πίνακα. Ένας προσδιοριστής στήλης είναι το όνομα της μεμονωμένης στήλης μέσα σε αυτήν την οικογένεια, όπως education:col1. Οι οικογένειες πρέπει να υπάρχουν στο σχήμα. Οι προσδιοριστές μπορούν να προστεθούν ελεύθερα κατά τη στιγμή της εγγραφής.

Χρησιμοποιήστε την εντολή delete για να καταργήσετε ένα κελί, για παράδειγμα διαγράψτε 'guru99', 'r1', 'c1'. Χρησιμοποιήστε την εντολή deleteall για να καταργήσετε μια ολόκληρη γραμμή: deleteall 'guru99', 'r1'. Για να αδειάσετε εντελώς έναν πίνακα, απενεργοποιήστε τον και, στη συνέχεια, εκτελέστε την εντολή truncate 'guru99', η οποία τον αποσύρει και τον δημιουργεί ξανά.

Το HBase διατηρεί πολλαπλές εκδόσεις με χρονική σήμανση για κάθε κελί. Ο αριθμός που διατηρείται ορίζεται ανά οικογένεια στηλών από το χαρακτηριστικό VERSIONS, το οποίο έχει προεπιλεγμένη τιμή 1. Προσθέστε {VERSIONS => 3} σε ένα get ή scan για να επιστρέψετε πολλές εκδόσεις ή σε ένα TIMESTAMP για να ανακτήσετε μία ακριβή έκδοση.

Εκτελέστε τη λίστα για να δείτε κάθε πίνακα στο HBase. Εκτελέστε την εντολή count 'guru99' για να μετρήσετε τις γραμμές σε έναν πίνακα, προαιρετικά με ένα INTERVAL για την πρόοδο. Χρησιμοποιήστε την εντολή description 'guru99' για να δείτε τις οικογένειες στηλών και την εντολή status 'simple' για να ελέγξετε την εύρυθμη λειτουργία του συμπλέγματος.

Το HBase δεν έχει εγγενή SQL, αλλά το Apache Phoenix προσθέτει ένα επίπεδο SQL που μεταγλωττίζει ερωτήματα σε εγγενείς λειτουργίες put, get και scan. Υποστηρίζει την οικεία σύνταξη SELECT, UPSERT και JOIN, καθιστώντας την HBase ευκολότερη στην υποβολή ερωτημάτων για ομάδες που ήδη γνωρίζουν άπταιστα SQL.

Οι βοηθοί κωδικοποίησης τεχνητής νοημοσύνης και τα μεγάλα γλωσσικά μοντέλα μπορούν να συντάξουν εντολές κελύφους HBase και Java κώδικα πελάτη από μια απλή προτροπή, προτείνετε σχέδια πλήκτρων γραμμών και εξηγήστε τα φίλτρα σάρωσης. Η μηχανική μάθηση βοηθά επίσης στη ρύθμιση της απόδοσης προβλέποντας θερμές περιοχές, αν και ένας μηχανικός θα πρέπει να επαληθεύει κάθε δημιουργούμενο ερώτημα.

Ναί. GitHub Copilot μπορεί να δημιουργήσει αποσπάσματα HBase put, get και scan σε Java ή το κέλυφος από ένα σύντομο σχόλιο, συμπεριλαμβανομένων των κλήσεων Bytes.toBytes και των φίλτρων σάρωσης. RevΔείτε την έξοδο για το σωστό όνομα πίνακα, τις οικογένειες στηλών και το τρέχον API πίνακα πριν το εκτελέσετε.

Συνοψίστε αυτήν την ανάρτηση με: