ตัวอย่างการสืบค้นข้อมูลใน HBase: คำสั่ง put(), get() และ scan()
⚡ สรุปอย่างชาญฉลาด
คำสั่ง put, get และ scan ใน HBase เป็นคำสั่งหลักสำหรับการเขียนและอ่านข้อมูล ช่วยให้คุณสามารถจัดเก็บค่าเซลล์ตามแถวและคอลัมน์ ดึงข้อมูลแถวเดียว หรือเรียกดูหลายแถวจากเชลล์ได้ Java API
เขียนข้อมูลลงในตาราง HBase: Shell
ตัวอย่างเหล่านี้สมมติว่า HBase คือ ติดตั้งและใช้งานได้แล้วหน้าต่าง HBase shell เปิดอยู่ และ ตารางชื่อ guru99 มีอยู่แล้วในส่วนของโครงการด้านการศึกษาและโครงการสำหรับครอบครัว
คำสั่ง put ใช้สำหรับบันทึกข้อมูลลงในตาราง
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
คำสั่งนี้ใช้สำหรับสิ่งต่อไปนี้:
- มันจะใส่ 'ค่า' ของเซลล์ไว้ที่ตารางหรือแถวหรือคอลัมน์ที่กำหนดหรือระบุ
- ระบบจะทำการประสานการประทับเวลาตามความเหมาะสม (ถ้าต้องการ)
ตัวอย่างเช่น ในที่นี้เรากำลังใส่ค่าลงในตาราง “guru99” ในแถว r1 และคอลัมน์ c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
เราได้ใส่ค่าสามค่า ได้แก่ 10, 15 และ 30 ลงในตาราง “guru99” ดังที่แสดงในภาพหน้าจอด้านล่าง
สมมติว่าตาราง “guru99” มีการอ้างอิงตาราง เช่น g คุณสามารถเรียกใช้คำสั่งบนการอ้างอิงตารางได้ดังนี้:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
ผลลัพธ์จะปรากฏดังที่แสดงในภาพหน้าจอข้างต้น หลังจากใส่ค่าลงในช่อง “guru99” แล้ว
อ่านข้อมูลจากตาราง HBase: Shell
ในส่วนนี้ เราจะตรวจสอบสิ่งต่อไปนี้ใน เปลือก HBase:
- ค่าต่างๆ ที่ถูกแทรกเข้าไปในตาราง HBase ชื่อ “guru99”
- ชื่อคอลัมน์พร้อมค่าที่มีอยู่ในตาราง HBase ชื่อ guru99
ผลลัพธ์การสแกนด้านล่างนี้แสดงค่าทั้งหมดที่ถูกแทรกเข้าไปใน “guru99” พร้อมด้วยชื่อแถวและชื่อคอลัมน์:
จากภาพหน้าจอข้างต้น เราสามารถสรุปได้ดังนี้:
- หากเรารันคำสั่ง “scan” ใน HBase shell ระบบจะแสดงค่าที่แทรกเข้าไปใน “guru99” ดังต่อไปนี้
- ใน HBase shell จะแสดงค่าที่โค้ดของเราแทรกเข้าไป พร้อมด้วยชื่อคอลัมน์และแถว
- จากภาพนี้ เราจะเห็นว่าชื่อคอลัมน์ที่ถูกแทรกเข้าไปคือ “การศึกษา” และ “โครงการ”
- ค่าที่ใส่ลงในคอลัมน์ที่ระบุคือ “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 จะแสดงผลโดยใช้คำสั่งนี้ ดังที่แสดงในภาพหน้าจอด้านล่าง
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":
จากภาพหน้าจอข้างต้น:
- เมื่อเราสร้างการกำหนดค่า HBase ระบบจะชี้ไปยังการกำหนดค่าใดๆ ก็ตามที่เราตั้งไว้ในไฟล์ hbase-site.xml และ hbase-default.xml ระหว่างการติดตั้ง HBase
- การสร้างตาราง “guru99” โดยใช้วิธี HTable
- เพิ่มแถวที่ 1 ลงในตาราง “guru99”
- ระบุชื่อคอลัมน์ “education” และ “projects” และแทรกค่าลงในชื่อคอลัมน์ในแถวที่ 1 ตามลำดับ ค่าที่แทรกเข้าไปมีดังนี้ BigData และ “HBaseTutorials”
อ่านข้อมูลจากตาราง HBase: Java API
ค่าใดก็ตามที่เราใส่ลงในตาราง HBase ในส่วนด้านบน เราจะดึงค่าเหล่านั้นมาแสดงในส่วนนี้
ข้อความแสดงผลในคอนโซลด้านล่างแสดงข้อมูลที่อ่านกลับมาจากตาราง HBase ชื่อ “guru99”:
สำหรับการเรียกดูผลลัพธ์ที่บันทึกไว้ใน “guru99”:
- ต่อไปนี้เราจะดึงค่าที่จัดเก็บไว้ในคอลัมน์แฟมิลี ได้แก่ "การศึกษา" และ "โครงการ"
- เราจะใช้คำสั่ง “get” เพื่อดึงค่าที่จัดเก็บไว้ในตาราง HBase
- กำลังสแกนผลลัพธ์โดยใช้คำสั่ง “scan” ค่าที่เก็บไว้ใน row1 จะแสดงบนคอนโซล
เมื่อเขียนโค้ดเสร็จแล้ว ก็รันโค้ดนั้น 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 รุ่นเก่า เนื่องจาก HBase เวอร์ชัน 1.0 เป็นต้นไป HTable ถูกยกเลิกการใช้งานแล้ว โค้ดสมัยใหม่จะเรียกใช้ Table ผ่าน ConnectionFactory.createConnection(…).getTable(…) และสร้าง Put ด้วย addColumn() แทน add() ตรรกะของ put, get และ scan ยังคงเหมือนเดิม






