HBase 쿼리 예제: put(), get() 및 scan() 명령어

⚡ 스마트 요약

HBase의 put, get, scan은 데이터를 쓰고 읽는 핵심 명령어로, 이를 통해 행과 열별로 셀 값을 저장하거나, 단일 행을 가져오거나, 셸에서 여러 행을 탐색할 수 있습니다. Java API.

  • put을 사용하여 작성하세요: put 명령어는 테이블의 행, 열, 그리고 선택적으로 타임스탬프에 값을 저장합니다.
  • 🔍 get으로 읽기: get 명령은 TIMERANGE, VERSIONS 및 FILTERS 옵션과 함께 단일 행 또는 셀을 반환합니다.
  • 📜 스캔으로 찾아보기: scan 명령은 테이블 전체의 여러 행과 해당 열 값을 나열합니다.
  • Java API : 동일한 작업이 실행됩니다. Java Put, Get, Scan 메서드와 Bytes 헬퍼 클래스를 사용합니다.
  • 🧬 좌표 : 모든 값은 행 키, 열 패밀리 및 열 한정자를 통해 참조됩니다.
  • 🤖 AI 지원: AI 비서는 입력, 가져오기 및 스캔 코드를 작성하고 효율적인 행 키 설계를 제안합니다.

HBase put(), get() 및 scan() 쿼리 명령을 셸에서 실행 Java

HBase 테이블에 데이터 쓰기: 셸

이 예제들은 HBase가 다음과 같다고 가정합니다. 설치 및 실행 중HBase 셸이 열려 있고, guru99라는 이름의 테이블 이미 컬럼 패밀리 교육 및 프로젝트가 존재합니다.

`put` 명령어는 데이터를 테이블에 저장하는 데 사용됩니다.

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

이 명령어는 다음과 같은 용도로 사용됩니다.

  • 정의되거나 지정된 테이블이나 행 또는 열에 셀 '값'을 입력합니다.
  • 선택적으로 타임스탬프를 연동할 수 있습니다.

예를 들어, 여기서는 "guru99" 테이블의 r1행 c1열에 값을 입력합니다.

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

아래 스크린샷에서 볼 수 있듯이, “guru99” 테이블에 10, 15, 30이라는 세 가지 값을 입력했습니다.

HBase 셸 put 명령어를 사용하여 guru99 테이블에 10, 15, 30 값을 삽입합니다.

테이블 "guru99"에 g와 같은 테이블 참조가 있다고 가정해 보겠습니다. 다음과 같이 테이블 참조에 대해 명령을 실행할 수도 있습니다.

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

"guru99"에 값을 입력하면 위 스크린샷과 같은 결과가 나타납니다.

HBase 테이블에서 데이터 읽기: 셸

이 섹션에서는 다음 사항을 확인합니다. HBase 셸:

  • HBase 테이블 "guru99"에 삽입되는 값입니다.
  • HBase 테이블 guru99에 있는 열 이름과 해당 값입니다.

아래 스캔 출력은 "guru99"에 삽입된 모든 값과 해당 행 및 열 이름을 나열합니다.

HBase 셸 스캔 명령 출력 결과: guru99 테이블의 행 및 열 값 목록

위 스크린샷을 통해 다음과 같은 사실을 추론할 수 있습니다.

  • HBase 셸에서 "scan" 명령을 실행하면 "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열 값이 표시됩니다.

HBase 셸 get 명령이 guru99 테이블에서 단일 행 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

이 단계에서는 HBase 테이블 "guru99"에 데이터를 기록할 것입니다.

먼저, HBaseLoading.java 프로그램을 사용하여 HBase에서 값을 삽입하고 검색하는 코드를 작성해야 합니다. 열 수준에서 테이블을 생성하고 값을 삽입하는 코드는 아래와 같습니다.

아래 스크린샷은 다음을 보여줍니다. Java HBase 구성을 생성하고 "guru99"에 값을 삽입하는 코드:

Java HBase 구성을 생성하고 Put API를 사용하여 값을 삽입하는 코드입니다.

위 스크린샷에서:

  • HBase 구성을 생성할 때, HBase 설치 중에 hbase-site.xml 및 hbase-default.xml 파일에 설정한 구성을 참조하게 됩니다.
  • HTable 방식을 사용하여 "guru99" 테이블을 생성합니다.
  • "guru99" 테이블에 1행을 추가합니다.
  • "교육"과 "프로젝트"라는 열 이름을 지정하고 해당 열에 값을 삽입합니다(1행). 여기에 삽입된 값은 다음과 같습니다. BigData 그리고 “HBaseTutorials”.

HBase 테이블에서 데이터 읽기: Java API

위 섹션에서 HBase 테이블에 입력한 값이 무엇이든, 여기서는 해당 값을 가져와 표시할 것입니다.

아래 콘솔 출력은 HBase 테이블 "guru99"에서 읽어온 데이터를 보여줍니다.

Java 콘솔 출력: HBase 테이블 guru99에서 education 및 projects 열 값을 읽는 중

“guru99”에 저장된 결과를 검색하려면 다음 단계를 따르세요.

  • 여기서는 "교육"과 "프로젝트"라는 컬럼 패밀리에 저장된 값을 가져올 것입니다.
  • "get" 명령어를 사용하여 HBase 테이블에 저장된 값을 가져오겠습니다.
  • "scan" 명령어를 사용한 스캔 결과입니다. row1에 저장된 값이 콘솔에 표시됩니다.

코드를 작성한 후에는 실행합니다. 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();
}
}
}

API 버전에 대한 참고 사항: 위 예제는 HTable 클래스와 해당 add() 메서드를 사용하는데, 이는 이전 HBase 클라이언트 API를 반영합니다. HTable은 HBase 1.0부터 더 이상 사용되지 않습니다. 최신 코드에서는 ConnectionFactory.createConnection(…).getTable(…)을 통해 테이블을 가져오고 add() 대신 addColumn()을 사용하여 Put 요청을 생성합니다. Put, Get, Scan의 로직은 동일하게 유지됩니다.

자주 묻는 질문

`get` 명령은 행 키를 사용하여 한 행을 검색하고 빠르게 결과를 반환합니다. `scan` 명령은 테이블 또는 키 범위에서 여러 행을 순차적으로 읽으며, 필요에 따라 열 또는 시간으로 필터링할 수 있습니다. 단일 행 조회에는 `get`을 사용하고, 여러 행을 탐색하거나 내보낼 때는 `scan`을 사용하십시오.

컬럼 패밀리는 테이블을 생성할 때 정의되는, 함께 저장되는 컬럼들의 명명된 그룹입니다. 컬럼 한정자는 해당 패밀리 내의 개별 컬럼 이름으로, education:col1과 같은 형태입니다. 패밀리는 스키마에 반드시 존재해야 하지만, 한정자는 쓰기 시점에 자유롭게 추가할 수 있습니다.

하나의 셀을 삭제하려면 delete 명령을 사용합니다. 예를 들어 delete 'guru99', 'r1', 'c1'과 같이 입력합니다. 행 전체를 삭제하려면 deleteall 명령을 사용합니다. deleteall 'guru99', 'r1'과 같이 입력합니다. 테이블을 완전히 비우려면 테이블을 비활성화한 다음 truncate 'guru99' 명령을 실행하여 테이블을 삭제하고 다시 생성합니다.

HBase는 각 셀에 대해 여러 타임스탬프 버전을 보관합니다. 보관되는 버전 수는 컬럼 패밀리별로 VERSIONS 속성에 의해 설정되며 기본값은 1입니다. 여러 버전을 반환하려면 get 또는 scan 문에 {VERSIONS => 3}을 추가하고, 특정 버전 하나만 가져오려면 TIMESTAMP를 추가하세요.

`list` 명령을 실행하면 HBase의 모든 테이블을 볼 수 있습니다. `count 'guru99'` 명령을 실행하면 테이블의 행 수를 계산할 수 있으며, 필요에 따라 `INTERVAL` 값을 지정하여 진행률을 표시할 수 있습니다. `describe 'guru99'` 명령을 사용하면 컬럼 패밀리를 확인할 수 있고, `status 'simple'` 명령으로 클러스터 상태를 확인할 수 있습니다.

HBase는 자체 SQL 기능을 제공하지 않지만, Apache Phoenix는 쿼리를 네이티브 put, get, scan 작업으로 컴파일하는 SQL 레이어를 추가합니다. 익숙한 SELECT, UPSERT, JOIN 구문을 지원하므로 SQL에 이미 능숙한 팀이라면 HBase를 더 쉽게 쿼리할 수 있습니다.

AI 코딩 도우미와 대규모 언어 모델은 HBase 셸 명령어를 작성할 수 있습니다. Java 클라이언트 코드는 일반 언어로 작성된 프롬프트에서 생성되고, 행 키 설계가 제안되며, 스캔 필터가 설명됩니다. 머신 러닝은 또한 사용량이 많은 영역을 예측하여 성능을 최적화하는 데 도움이 되지만, 엔지니어는 생성된 모든 쿼리를 검증해야 합니다.

예. GitHub 부조종사 HBase put, get 및 scan 코드 조각을 생성할 수 있습니다. Java 또는 Bytes.toBytes 호출 및 스캔 필터를 포함한 짧은 주석에서 셸을 가져올 수도 있습니다. Rev실행하기 전에 출력 결과를 확인하여 올바른 테이블 이름, 컬럼 패밀리 및 현재 테이블 API를 확인하십시오.

이 게시물을 요약하면 다음과 같습니다.