sql >> Database teknologi >  >> NoSQL >> HBase

Sådan gør du:Brug HBase Thrift Interface, del 2:Indsættelse/hentning af rækker

Den anden vejledning i en serie om brug af Apache HBase Thrift API

Sidste gang dækkede vi det grundlæggende om at oprette forbindelse til Thrift via Python. Denne gang lærer du, hvordan du indsætter og får flere rækker ad gangen.

Arbejd med tabeller

Ved at bruge Thrift-grænsefladen kan du oprette eller slette tabeller. Lad os tage et kig på Python-koden, der opretter en tabel:

client.createTable(tablename, [Hbase.ColumnDescriptor(name=cfname)])

I dette uddrag har du oprettet et Hbase.ColumnDescriptor-objekt. I dette objekt kan du indstille alle de forskellige parametre for en kolonnefamilie. I dette tilfælde angiver du kun kolonnefamilienavnet.

Du husker måske fra den tidligere vejledning, at det ofte er nyttigt at tilføje Hbase.thrift-fil til dit projekt. Dette er en af ​​de gange:Du kan åbne Hbase.thrift og finde ColumnDescriptor-definitionen med alle dens parametre og deres navne.

Du kan bekræfte, at en tabel eksisterer ved at bruge følgende kode:

tables = client.getTableNames()

found = False

for table in tables:
	if table == tablename:
		found = True

Denne kode får en liste over brugertabellerne, gentager dem og markerer fundet som sand, hvis tabellen findes.

Du kan slette en tabel ved hjælp af følgende kode:

client.disableTable(tablename)
client.deleteTable(tablename)

Husk, at du i HBase skal deaktivere en tabel, før du sletter den. Denne kode gør netop det.

Tilføjelse af rækker med sparsommelighed

Thrift giver os et par måder at tilføje eller opdatere rækker på: En række ad gangen eller flere rækker ad gangen. Thrift-grænsefladen bruger ikke det samme Put-objekt som Java API. Disse ændringer kaldes rækkemutationer og bruger objekterne Mutation og BatchMutation.

mutations = [Hbase.Mutation(
  column='columnfamily:columndescriptor', value='columnvalue')]
client.mutateRow('tablename', 'rowkey', mutations)

Hvert mutationsobjekt repræsenterer ændringerne i en enkelt kolonne. For at tilføje eller ændre en anden kolonne, skal du blot tilføje et andet mutationsobjekt til mutationslisten.

Når du er færdig med at tilføje mutationsobjekter, kalder du mutateRow-metoden. Denne metode tager tabelnavnet, rækkenøglen og mutationslisten som argumenter.

Tilføjelse af flere rækker ad gangen kræver et par ændringer:

# Create a list of mutations per work of Shakespeare
mutationsbatch = []

for line in shakespeare:
	rowkey = username + "-" + filename + "-" + str(linenumber).zfill(6)

	mutations = [
			Hbase.Mutation(column=messagecolumncf, value=line.strip()),
			Hbase.Mutation(column=linenumbercolumncf, value=encode(linenumber)),
			Hbase.Mutation(column=usernamecolumncf, value=username)
		]

       mutationsbatch.append(Hbase.BatchMutation(row=rowkey,mutations=mutations))

# Run the mutations for the work of Shakespeare
client.mutateRows(tablename, mutationsbatch)

I dette eksempel bruger du stadig Mutation-objektet, men denne gang skal du pakke dem ind i et BatchMutation-objekt. BatchMutation-objektet giver dig mulighed for at angive en anden rækketast for hver liste over mutationer. Du skifter også til mutateRows-metoden. Det kræver et tabelnavn og BatchMutation-objektet.

Få rækker med sparsommelighed

Ved at bruge getRow-metoden kan du hente en enkelt række baseret på dens rækkenøgle. Dette kald returnerer en liste over TRowResult-objekter. Her er koden til at få og arbejde med output:

rows = client.getRow(tablename, "shakespeare-comedies-000001")

for row in rows:
     message = row.columns.get(messagecolumncf).value
     linenumber = decode(row.columns.get(linenumbercolumncf).value)

     rowKey = row.row

Start koden med en getRow-anmodning. Denne get vil returnere rækken med nøglen "shakespeare-komedier-000001". Disse rækker vil komme tilbage som en liste over TRowResult. Ved hjælp af en rækkeløkke gennemgår du listen over rækker, der blev returneret.

For at få værdien af ​​en kolonne, brug columns.get(“COLUMNFAMILY:COLUMDESCRIPTOR”). Sørg for at bruge den korrekte navngivningssyntaks.

Husk, at når du beskæftiger dig med binære data som heltal, bliver du nødt til at konvertere dem fra en Python-streng til hvilken som helst type det skal være. I dette tilfælde tager du strengen og gør den til et heltal med afkodningsmetoden.

At få flere rækker ad gangen er meget lig at få en række. Her er koden:

rowKeys = [ "shakespeare-comedies-000001",
"shakespeare-comedies-000010",
"shakespeare-comedies-000020",
"shakespeare-comedies-000100",
"shakespeare-comedies-000201" ]

rows = client.getRows(tablename, rowKeys)

I stedet for at angive en enkelt række, sender du en række rækker ind. Du ændrer også metoden til getRows, som tager tabelnavnet og listen over rækker som argumenter.

En liste over TRowResult-objekter returneres, og du itererer derefter gennem listen ligesom i enkeltrækkeskoden.

I den næste og sidste vejledning lærer du, hvordan du bruger scanninger og får en introduktion til nogle overvejelser, når du skal vælge mellem REST- og Thrift-API'erne til udvikling.

Jesse Anderson er instruktør for Cloudera University.


  1. Transparent Database Failover til dine applikationer

  2. Hvilken er den bedste MongoDB GUI? - Opdatering 2019

  3. Docker-compose , alligevel for at angive en redis.conf fil?

  4. Hvad er den anbefalede måde at droppe indekser ved at bruge Mongoose?