HBase क्वेरी उदाहरण: put(), get() और scan() कमांड

⚡ स्मार्ट सारांश

HBase में put, get और scan डेटा लिखने और पढ़ने के लिए मुख्य कमांड हैं, जो आपको पंक्ति और स्तंभ के अनुसार सेल मान संग्रहीत करने, एक पंक्ति प्राप्त करने या शेल से कई पंक्तियों को ब्राउज़ करने की अनुमति देते हैं। Java एपीआई।

  • ✍️ put का उपयोग करके लिखें: put कमांड किसी टेबल, पंक्ति, कॉलम और वैकल्पिक टाइमस्टैम्प में एक मान संग्रहीत करता है।
  • 🔍 Get के साथ पढ़ें: गेट कमांड टाइमरेंज, वर्जन और फिल्टर विकल्पों के साथ एक पंक्ति या सेल लौटाता है।
  • 📜 स्कैन के साथ ब्राउज़ करें: स्कैन कमांड किसी टेबल में मौजूद कई पंक्तियों और उनके कॉलम के मानों को सूचीबद्ध करता है।
  • Java एपीआई: वही ऑपरेशन चलते हैं Java Put, Get, Scan और Bytes हेल्पर क्लास का उपयोग करना।
  • 🧬 निर्देशांक: प्रत्येक मान को पंक्ति कुंजी, स्तंभ परिवार और स्तंभ क्वालिफायर द्वारा संबोधित किया जाता है।
  • 🤖 एआई सहायता: एआई सहायक पुट, गेट और स्कैन कोड का मसौदा तैयार करते हैं और कुशल पंक्ति-कुंजी डिजाइन का सुझाव देते हैं।

शेल में HBase के put(), get() और scan() क्वेरी कमांड का उपयोग करना। Java

HBase तालिका में डेटा लिखें: शेल

इन उदाहरणों में यह माना गया है कि HBase स्थापित हो गया है और चल रहा हैएचबेस शेल खुला है, और एक गुरु99 नाम की तालिका परिवारों की शिक्षा और परियोजनाओं से संबंधित स्तंभ पहले से ही मौजूद हैं।

पुट कमांड का उपयोग डेटा को टेबल में स्टोर करने के लिए किया जाता है।

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

इस कमांड का उपयोग निम्नलिखित कार्यों के लिए किया जाता है:

  • यह एक सेल 'मान' को एक परिभाषित या निर्दिष्ट तालिका या पंक्ति या स्तंभ पर रखेगा।
  • यह वैकल्पिक रूप से एक टाइम स्टैम्प को समन्वित करेगा।

उदाहरण के लिए, यहां हम "guru99" टेबल में पंक्ति r1 और स्तंभ c1 के अंतर्गत मान डाल रहे हैं:

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

हमने तालिका "guru99" में तीन मान, 10, 15 और 30 रखे हैं, जैसा कि नीचे दिए गए स्क्रीनशॉट में दिखाया गया है।

HBase शेल पुट कमांड का उपयोग करके गुरु99 टेबल में 10, 15 और 30 मान सम्मिलित करना

मान लीजिए कि "guru99" नामक तालिका में एक तालिका संदर्भ है, जैसे कि g। आप इस प्रकार तालिका संदर्भ पर भी कमांड चला सकते हैं:

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

“guru99” में मान डालने के बाद आउटपुट ऊपर दिए गए स्क्रीनशॉट में दिखाए अनुसार दिखाई देता है।

HBase तालिका से डेटा पढ़ें: शेल

इस अनुभाग में, हम निम्नलिखित की जाँच करते हैं एचबेस शेल:

  • वे मान जो HBase टेबल “guru99” में डाले गए हैं।
  • HBase टेबल guru99 में मौजूद मानों के साथ कॉलम नाम।

नीचे दिए गए स्कैन आउटपुट में "guru99" में डाले गए प्रत्येक मान को, उसकी पंक्ति और स्तंभ के नामों के साथ सूचीबद्ध किया गया है:

HBase शेल स्कैन कमांड का आउटपुट, गुरु99 तालिका में पंक्तियों और स्तंभों के मानों को सूचीबद्ध करता है।

उपरोक्त स्क्रीनशॉट से हम निम्नलिखित निष्कर्ष निकाल सकते हैं:

  • यदि हम HBase शेल में "स्कैन" कमांड चलाते हैं, तो यह "guru99" में डाले गए मानों को निम्नानुसार प्रदर्शित करेगा।
  • एचबेस शेल में, यह हमारे कोड द्वारा डाले गए मानों को कॉलम और पंक्ति नामों के साथ प्रदर्शित करेगा।
  • यहां हम देख सकते हैं कि डाले गए कॉलम के नाम "शिक्षा" और "परियोजनाएं" हैं।
  • उल्लिखित कॉलमों में "बिगडेटा" और "एचबेस ट्यूटोरियल" मान डाले गए हैं।

आप टेबल से डेटा पढ़ने के लिए गेट कमांड का भी उपयोग कर सकते हैं।

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

यहां अतिरिक्त पैरामीटर में TIMERANGE, TIMESTAMP, VERSIONS और FILTERS शामिल हैं। इस कमांड का उपयोग करके, आप टेबल में मौजूद किसी पंक्ति या सेल की सामग्री प्राप्त कर सकते हैं। किसी विशिष्ट पंक्ति या सेल की सामग्री को प्राप्त करने के लिए आप TIMESTAMP, TIMERANGE, VERSIONS या FILTERS जैसे अतिरिक्त पैरामीटर जोड़ सकते हैं। नीचे दी गई तालिका इन पैरामीटरों का सारांश प्रस्तुत करती है:

प्राचल उद्देश्य
समय सीमा यह उन सेल को लौटाता है जिनका टाइमस्टैम्प प्रारंभ और समाप्ति समय के भीतर आता है।
TIMESTAMP यह केवल एक निश्चित समय पर संग्रहीत सेल संस्करण को ही लौटाता है।
VERSIONS यह निर्धारित करता है कि किसी सेल के कितने संस्करण लौटाए जाएं (डिफ़ॉल्ट मान 1 है)।
फिल्टर यह फ़िल्टर लागू करके यह सीमित करता है कि कौन सी पंक्तियाँ या स्तंभ लौटाए जाएँ।
स्तंभ परिणाम को विशिष्ट कॉलम परिवारों या क्वालिफायर तक सीमित करता है।

यहां गेट कमांड के कुछ उदाहरण दिए गए हैं:

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

नीचे दिए गए स्क्रीनशॉट में दिखाए गए अनुसार, इस कमांड का उपयोग करके "guru99" तालिका के लिए पंक्ति r1 और स्तंभ c1 के मान प्रदर्शित किए जाएंगे।

HBase शेल गेट कमांड गुरु99 टेबल से एकल पंक्ति r1 लौटाता है

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

इस चरण में, हम एचबेस टेबल "guru99" में डेटा लिखने जा रहे हैं।

सबसे पहले, हमें HBaseLoading.java प्रोग्राम का उपयोग करके HBase से मान डालने और प्राप्त करने के लिए कोड लिखना होगा। कॉलम स्तर पर तालिका बनाने और उसमें मान डालने के लिए, नीचे दिखाए अनुसार कोड लिखें।

नीचे दिए गए स्क्रीनशॉट में दिखाया गया है Java वह कोड जो HBase कॉन्फ़िगरेशन बनाता है और "guru99" में मान सम्मिलित करता है:

Java यह कोड HBase कॉन्फ़िगरेशन बनाता है और Put API का उपयोग करके मान सम्मिलित करता है।

ऊपर दिए गए स्क्रीनशॉट से:

  • जब हम HBase कॉन्फ़िगरेशन बनाते हैं, तो यह उन सभी कॉन्फ़िगरेशन को इंगित करता है जिन्हें हमने HBase इंस्टॉलेशन के दौरान hbase-site.xml और hbase-default.xml फ़ाइलों में सेट किया था।
  • HTable विधि का उपयोग करके "guru99" नामक तालिका का निर्माण।
  • “guru99” टेबल में पहली पंक्ति जोड़ी जा रही है।
  • “शिक्षा” और “परियोजनाएँ” कॉलम नाम निर्दिष्ट करना और संबंधित पंक्ति 1 में इन कॉलम नामों में मान सम्मिलित करना। यहाँ सम्मिलित किए गए मान इस प्रकार हैं: BigData और “HBaseTutorials”।

HBase तालिका से डेटा पढ़ें: Java API

ऊपर दिए गए अनुभाग में हमने एचबेस टेबल में जो भी मान डाले थे, यहां हम उन मानों को प्राप्त करके प्रदर्शित करेंगे।

नीचे दिया गया कंसोल आउटपुट HBase टेबल "guru99" से डेटा को वापस पढ़ने को दर्शाता है:

Java कंसोल आउटपुट HBase टेबल guru99 से शिक्षा और परियोजना कॉलम के मान पढ़ रहा है

“guru99” में संग्रहीत परिणामों को पुनः प्राप्त करने के लिए:

  • यहां हम कॉलम परिवारों, यानी "शिक्षा" और "परियोजनाएं" में संग्रहीत मानों को प्राप्त करने जा रहे हैं।
  • “get” कमांड का उपयोग करके, हम HBase टेबल में संग्रहीत मानों को प्राप्त करने जा रहे हैं।
  • “स्कैन” कमांड का उपयोग करके स्कैनिंग परिणाम प्राप्त किए जा रहे हैं। पंक्ति 1 में संग्रहीत मान कंसोल पर प्रदर्शित होंगे।

कोड लिखने के बाद, आप उसे चलाते हैं। Java आवेदन इस तरह:

HBaseLoading.java पर राइट-क्लिक करें -> इस रूप में चलाएँ -> Java आवेदन।

“HBaseLoading.java” को चलाने के बाद, HBase में प्रत्येक कॉलम में “guru99” में मान डाले जाते हैं, और उसी प्रोग्राम में मानों को पुनः प्राप्त भी किया जा सकता है।

यहाँ पूरा कोड है:

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

एपीआई संस्करणों पर ध्यान दें: ऊपर दिए गए उदाहरण में HTable क्लास और उसके add() मेथड का उपयोग किया गया है, जो पुराने HBase क्लाइंट API को दर्शाता है। HBase 1.0 के बाद से HTable अप्रचलित हो गया है। आधुनिक कोड ConnectionFactory.createConnection(…).getTable(…) के माध्यम से एक Table प्राप्त करता है और add() के बजाय addColumn() का उपयोग करके Put स्टेटमेंट बनाता है। put, get और scan का लॉजिक वही रहता है।

अक्सर पूछे जाने वाले प्रश्न

गेट कमांड पंक्ति कुंजी द्वारा एक पंक्ति को पुनः प्राप्त करता है और तुरंत परिणाम देता है। स्कैन कमांड किसी तालिका या कुंजी श्रेणी में कई पंक्तियों को क्रमानुसार पढ़ता है, जिन्हें कॉलम या समय के आधार पर फ़िल्टर किया जा सकता है। एकल खोज के लिए गेट कमांड का उपयोग करें और कई पंक्तियों को ब्राउज़ करने या निर्यात करने के लिए स्कैन कमांड का उपयोग करें।

कॉलम फ़ैमिली, कॉलमों का एक नामयुक्त समूह होता है जिसे एक साथ संग्रहित किया जाता है और तालिका बनाते समय परिभाषित किया जाता है। कॉलम क्वालिफ़ायर उस फ़ैमिली के भीतर प्रत्येक कॉलम का नाम होता है, जैसे education:col1। फ़ैमिली का स्कीमा में मौजूद होना आवश्यक है; क्वालिफ़ायर को टेबल लिखते समय स्वतंत्र रूप से जोड़ा जा सकता है।

किसी एक सेल को हटाने के लिए डिलीट कमांड का उपयोग करें, उदाहरण के लिए delete 'guru99', 'r1', 'c1'। पूरी पंक्ति को हटाने के लिए deleteall कमांड का उपयोग करें: deleteall 'guru99', 'r1'। किसी टेबल को पूरी तरह से खाली करने के लिए, उसे निष्क्रिय करें, फिर truncate 'guru99' कमांड चलाएँ, जो उसे हटाकर पुनः बनाएगा।

HBase प्रत्येक सेल के कई टाइमस्टैम्प्ड संस्करण रखता है। रखे जाने वाले संस्करणों की संख्या प्रत्येक कॉलम परिवार के लिए VERSIONS विशेषता द्वारा निर्धारित की जाती है, जिसका डिफ़ॉल्ट मान 1 होता है। कई संस्करणों को प्राप्त करने के लिए get या scan कमांड में {VERSIONS => 3} जोड़ें, या एक सटीक संस्करण प्राप्त करने के लिए TIMESTAMP जोड़ें।

HBase में मौजूद सभी टेबल देखने के लिए 'list' कमांड चलाएँ। किसी टेबल में पंक्तियों की संख्या गिनने के लिए 'guru99' कमांड चलाएँ, प्रगति देखने के लिए आप चाहें तो एक अंतराल भी जोड़ सकते हैं। कॉलम परिवारों को देखने के लिए 'guru99' कमांड का वर्णन करें और क्लस्टर की स्थिति की जाँच करने के लिए 'simple' कमांड का उपयोग करें।

HBase में नेटिव SQL नहीं है, लेकिन Apache Phoenix एक SQL लेयर जोड़ता है जो क्वेरी को नेटिव पुट, गेट और स्कैन ऑपरेशन में बदल देता है। यह परिचित SELECT, UPSERT और JOIN सिंटैक्स को सपोर्ट करता है, जिससे SQL में निपुण टीमों के लिए HBase में क्वेरी करना आसान हो जाता है।

एआई कोडिंग सहायक और बड़े भाषा मॉडल एचबेस शेल कमांड तैयार कर सकते हैं और Java सरल भाषा में दिए गए प्रॉम्प्ट से क्लाइंट कोड प्राप्त करें, पंक्ति-कुंजी डिज़ाइन सुझाएं और स्कैन फ़िल्टर समझाएं। मशीन लर्निंग हॉट रीजन की भविष्यवाणी करके परफॉर्मेंस को बेहतर बनाने में भी मदद करती है, हालांकि इंजीनियर को हर जेनरेटेड क्वेरी को वेरिफाई करना चाहिए।

हां. गिटहब कोपिलॉट यह HBase put, get, और scan स्निपेट उत्पन्न कर सकता है। Java या फिर एक संक्षिप्त टिप्पणी से प्राप्त शेल, जिसमें Bytes.toBytes कॉल और स्कैन फ़िल्टर शामिल हैं। Revइसे चलाने से पहले सही टेबल नाम, कॉलम परिवार और वर्तमान टेबल एपीआई के लिए आउटपुट देखें।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: