HBase Sorgu Örneği: put(), get() ve scan() Komutları

⚡ Akıllı Özet

HBase'de put, get ve scan komutları, veri yazma ve okuma için kullanılan temel komutlardır; bu komutlar sayesinde hücre değerlerini satır ve sütun bazında saklayabilir, tek bir satırı alabilir veya shell üzerinden birçok satırı inceleyebilirsiniz. Java API.

  • ✍️ Put komutuyla yazın: `put` komutu, bir değeri tablo, satır, sütun ve isteğe bağlı zaman damgası düzeyinde saklar.
  • 🔍 "Get" ile okuyun: `get` komutu, TIMERANGE, VERSIONS ve FILTERS seçenekleriyle tek bir satır veya hücre döndürür.
  • 📜 Tarama özelliğiyle göz atın: Scan komutu, bir tablodaki birçok satırı ve bu satırların sütun değerlerini listeler.
  • Java API: Aynı işlemler burada da yürütülüyor. Java Put, Get, Scan fonksiyonları ve Bytes yardımcı sınıfı kullanılarak.
  • 🧬 Koordinatlar: Her değer, satır anahtarı, sütun ailesi ve sütun niteleyicisi ile adreslenir.
  • 🤖 Yapay zeka desteği: Yapay zekâ asistanları, kod yazma, kod alma ve kod tarama işlemlerini gerçekleştirir ve verimli satır anahtarı tasarımları önerir.

HBase'de put(), get() ve scan() sorgu komutları shell'de ve Java

HBase Tablosuna Veri Yaz: Kabuk

Bu örnekler HBase'in şu şekilde olduğunu varsaymaktadır: yüklendi ve çalışıyorHBase kabuğu açık ve bir guru99 adlı tablo Aile eğitimi ve projeleri sütununda zaten mevcut.

`PUT` komutu, verileri bir tabloya kaydetmek için kullanılır.

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

Bu komut aşağıdaki amaçlar için kullanılır:

  • Tanımlanmış veya belirtilen bir tabloya, satıra veya sütuna bir hücre 'değeri' koyacaktır.
  • İsteğe bağlı olarak bir zaman damgası da eşleştirecektir.

Örneğin, burada “guru99” tablosuna r1 satırı ve c1 sütununa değerler yerleştiriyoruz:

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

Aşağıdaki ekran görüntüsünde gösterildiği gibi, "guru99" tablosuna 10, 15 ve 30 olmak üzere üç değer yerleştirdik.

HBase shell put komutu, guru99 tablosuna 10, 15 ve 30 değerlerini ekliyor.

Diyelim ki "guru99" tablosunun g gibi bir tablo referansı var. Bu tablo referansı üzerinde de şu komutu çalıştırabilirsiniz:

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

“guru99” alanına değerler girildikten sonra çıktı yukarıdaki ekran görüntüsünde gösterildiği gibi görünür.

HBase Tablosundan Verileri Okuyun: Kabuk

Bu bölümde aşağıdakileri kontrol edeceğiz. HBase kabuğu:

  • HBase tablosu "guru99"a eklenen değerler.
  • HBase tablosu guru99'da bulunan değerlere sahip sütun adları.

Aşağıdaki tarama çıktısı, "guru99"a girilen her değeri, satır ve sütun adlarıyla birlikte listeler:

HBase shell scan komutunun çıktısı, guru99 tablosundaki satır ve sütun değerlerini listeliyor.

Yukarıdaki ekran görüntüsünden şu çıkarımları yapabiliriz:

  • HBase kabuğunda "scan" komutunu çalıştırdığımızda, "guru99" değişkenine eklenen değerler aşağıdaki gibi görüntülenecektir.
  • HBase kabuğunda, kodumuz tarafından eklenen değerler sütun ve satır adlarıyla birlikte görüntülenecektir.
  • Burada eklenen sütun adlarının "eğitim" ve "projeler" olduğunu görüyoruz.
  • Bahsi geçen sütunlara "BigData" ve "HBase Tutorials" değerleri girilmiştir.

Tablodan veri okumak için `get` komutunu da kullanabilirsiniz.

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

Burada ek parametreler arasında TIMESTAMP, TIMESTAMP, VERSIONS ve FILTERS yer almaktadır. Bu komutu kullanarak tablodaki bir satırı veya hücre içeriğini alabilirsiniz. Belirli bir satırı veya hücre içeriğini almak için TIMESTAMP, TIMERANGE, VERSIONS veya FILTERS gibi ek parametreler ekleyebilirsiniz. Aşağıdaki tablo bu parametreleri özetlemektedir:

Parametre Amaç
ZAMAN ARALIĞI Belirtilen başlangıç ​​ve bitiş zamanı aralığında zaman damgası bulunan hücreleri döndürür.
TIMESTAMP Yalnızca belirli bir zaman damgasında saklanan hücre sürümünü döndürür.
VERSIONS Bir hücrenin kaç farklı sürümünün döndürüleceğini belirler (varsayılan değer 1'dir).
FİLTRELER Hangi satırların veya sütunların görüntüleneceğini kısıtlamak için bir filtre uygular.
SÜTUN Sonucu belirli sütun aileleri veya niteleyicilerle sınırlandırır.

İşte `get` komutunun bazı örnek çalışmaları:

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

Aşağıdaki ekran görüntüsünde gösterildiği gibi, bu komut kullanılarak "guru99" tablosunun r1. satırı ve c1. sütunundaki değerler görüntülenecektir.

HBase shell get komutu, guru99 tablosundan tek bir satır olan r1'i döndürüyor.

hbase> get 'guru99', 'r1'

“guru99” tablosu için, r1 satırındaki değerler bu komut kullanılarak görüntülenecektir.

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

Bu komut kullanılarak “guru99” tablosu için ts1 ile ts2 zaman aralığındaki r1 satırının değerleri görüntülenecektir.

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

Bu komut kullanılarak “guru99” tablosu için r1 satırı ve c1, c2 ve c3 sütun ailelerinin değerleri görüntülenecektir.

HBase Tablosuna Veri Yazma: JAVA API

Bu adımda, verileri HBase'deki "guru99" tablosuna yazacağız.

Öncelikle, HBaseLoading.java programını kullanarak HBase'den değer eklemek ve almak için kod yazmalıyız. Bir tabloya sütun düzeyinde değer oluşturmak ve eklemek için aşağıdaki gibi kod yazabilirsiniz.

Aşağıdaki ekran görüntüsü şunu gösteriyor: Java HBase yapılandırmasını oluşturan ve değerleri "guru99" değişkenine ekleyen kod:

Java HBase yapılandırması oluşturan ve Put API'sini kullanarak değerler ekleyen kod.

Yukarıdaki ekran görüntüsünden:

  • HBase yapılandırmasını oluşturduğumuzda, bu yapılandırma HBase kurulumu sırasında hbase-site.xml ve hbase-default.xml dosyalarında belirlediğimiz yapılandırmaları işaret eder.
  • HTable metodu kullanılarak “guru99” tablosu oluşturuldu.
  • "guru99" tablosuna 1. satır ekleniyor.
  • "Eğitim" ve "projeler" sütun adlarını belirterek, ilgili satır 1'deki sütun adlarına değerler giriyoruz. Buraya girilen değerler şunlardır: BigData ve “HBaseTutorials”.

HBase Tablosundan Verileri Okuyun: Java API

Yukarıdaki bölümde HBase tablosuna yerleştirdiğimiz değerleri burada alıp görüntüleyeceğiz.

Aşağıdaki konsol çıktısı, HBase tablosu "guru99"dan okunan verileri göstermektedir:

Java HBase tablosundaki "eğitim" ve "projeler" sütun değerlerini okuyan konsol çıktısı guru99

“guru99”da saklanan sonuçları almak için:

  • Burada, "eğitim" ve "projeler" sütun ailelerinde saklanan değerleri alacağız.
  • “Get” komutunu kullanarak HBase tablosunda saklanan değerleri alacağız.
  • “Scan” komutu kullanılarak tarama sonuçları görüntüleniyor. row1'de saklanan değerler konsolda gösterilecektir.

Kod yazıldıktan sonra çalıştırırsınız. Java uygulama bunun gibi:

HBaseLoading.java dosyasına sağ tıklayın -> Farklı Çalıştır -> Java Uygulama.

“HBaseLoading.java” çalıştırıldıktan sonra, değerler HBase'deki her sütuna “guru99” alanına eklenir ve aynı programda değerler de alınabilir.

İşte kodun tamamı:

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 sürümleriyle ilgili not: Yukarıdaki örnek, eski HBase istemci API'sini yansıtan HTable sınıfını ve add() yöntemini kullanmaktadır. HBase 1.0'dan beri HTable kullanımdan kaldırılmıştır. Modern kod, ConnectionFactory.createConnection(…).getTable(…) aracılığıyla bir Tablo elde eder ve add() yerine addColumn() ile bir Put oluşturur. Put, get ve scan mantığı aynı kalır.

SSS

`get` komutu, satır anahtarına göre tek bir satırı alır ve hızlı bir şekilde geri döner. `scan` komutu, bir tabloda veya anahtar aralığında birden fazla satırı sırayla okur; isteğe bağlı olarak sütunlara veya zamana göre filtreleyebilir. Tekli aramalar için `get`, birden fazla satırı taramak veya dışa aktarmak için ise `scan` komutunu kullanın.

Sütun ailesi, tablo oluşturulurken tanımlanan ve birlikte depolanan adlandırılmış bir sütun grubudur. Sütun niteleyicisi, o aile içindeki tek tek sütun adıdır, örneğin education:col1. Ailelerin şemada mevcut olması gerekir; niteleyiciler yazma zamanında serbestçe eklenebilir.

Tek bir hücreyi silmek için `delete` komutunu kullanın, örneğin `delete 'guru99', 'r1', 'c1'`. Tüm bir satırı silmek için `deleteall` komutunu kullanın: `deleteall 'guru99', 'r1'`. Bir tabloyu tamamen boşaltmak için, tabloyu devre dışı bırakın, ardından `truncate 'guru99'` komutunu çalıştırın; bu komut tabloyu siler ve yeniden oluşturur.

HBase, her hücrenin zaman damgalı birden fazla sürümünü saklar. Saklanan sürüm sayısı, varsayılan değeri 1 olan VERSIONS özniteliğiyle sütun ailesi başına belirlenir. Birden fazla sürüm döndürmek için bir get veya scan isteğine {VERSIONS => 3} ekleyin veya tam bir sürümü almak için TIMESTAMP ekleyin.

HBase'deki tüm tabloları görmek için `list` komutunu çalıştırın. Bir tablodaki satır sayısını saymak için `count 'guru99'` komutunu çalıştırın (isteğe bağlı olarak ilerleme için `INTERVAL` değeri de ekleyebilirsiniz). Sütun ailelerini görüntülemek için `describe 'guru99'` komutunu, küme sağlığını kontrol etmek için ise `status 'simple'` komutunu kullanın.

HBase'in yerleşik SQL'i yoktur, ancak Apache Phoenix, sorguları yerel PUT, GET ve SCAN işlemlerine derleyen bir SQL katmanı ekler. Tanıdık SELECT, UPSERT ve JOIN sözdizimini destekleyerek, SQL konusunda zaten yetkin olan ekipler için HBase'i sorgulamayı kolaylaştırır.

Yapay zekâ kodlama asistanları ve büyük dil modelleri, HBase kabuk komutlarını taslak haline getirebilir ve Java Makine öğrenimi, düz dil komut isteminden istemci kodu oluşturur, satır anahtarı tasarımları önerir ve tarama filtrelerini açıklar. Ayrıca, sıcak bölgeleri tahmin ederek performansı iyileştirmeye yardımcı olur, ancak oluşturulan her sorgunun bir mühendis tarafından doğrulanması gerekir.

Evet. GitHub Yardımcı Pilotu HBase put, get ve scan kod parçacıkları oluşturabilir. Java veya Bytes.toBytes çağrıları ve Scan filtreleri de dahil olmak üzere kısa bir yorumdan kabuk çıktısı. RevÇalıştırmadan önce doğru tablo adını, sütun ailelerini ve geçerli Tablo API'sini görmek için çıktıyı inceleyin.

Bu yazıyı şu şekilde özetleyin: