sql >> Database >  >> NoSQL >> HBase

How-to:gebruik de Apache HBase REST-interface, deel 3

Deze how-to is de derde in een serie die het gebruik van de Apache HBase REST-interface onderzoekt. Deel 1 omvatte de basisprincipes van HBase REST, enkele kanttekeningen bij Python en tabelbeheer. Deel 2 liet je zien hoe je meerdere rijen tegelijk invoegt met XML en JSON. Deel 3 hieronder laat zien hoe je meerdere rijen kunt krijgen met XML en JSON.

Rijen ophalen met XML

Een GET gebruiken werkwoord, kunt u een enkele rij of een groep rijen ophalen op basis van hun rijsleutels. (Je kunt hier meer lezen over de URL-indeling met meerdere waarden.) Hier gaan we het eenvoudige jokerteken of sterretje (*) gebruiken om alle rijen te krijgen die met een specifieke tekenreeks beginnen. In dit voorbeeld kunnen we elke regel van Shakespeare's komedies laden met "shakespeare-comedies-*". Dit vereist ook dat onze rijsleutel(s) worden ingedeeld door "AUTHOR-WORK-LINENUMBER".

Hier is de code om de XML-uitvoer te verkrijgen en ermee te werken:

request = requests.get(baseurl + "/" + tablename + "/shakespeare-comedies-*", headers={"Accept" : "text/xml"})

root = fromstring(request.text)

# Go through every row passed back
for row in root:
     message = ''
     linenumber = 0
     username = ''
    
     # Go through every cell in the row
     for cell in row:
          columnname = base64.b64decode(cell.get('column'))

          if cell.text == None:
               continue
    
          if columnname == cfname + ":" + messagecolumn:
               message = base64.b64decode(cell.text)
          elif columnname == cfname + ":" + linenumbercolumn:
               linenumber = decode(cell.text)
          elif columnname == cfname + ":" + usernamecolumn:
               username = base64.b64decode(cell.text)

     rowKey = base64.b64decode(row.get('key'))

We beginnen de code met een get  verzoek. Deze get  zal alle regels in de komedies van Shakespeare teruggeven. Deze rijen komen terug als XML vanwege de wijziging in de Accept koptekst.

Vervolgens nemen we de XML die door het verzoek wordt geretourneerd en veranderen we deze in een XML DOM. Elke rij van HBase staat in een apart rij-element. We gebruiken een for lus om door elke rij te gaan.

Elke cel in de rij is een afzonderlijk XML-element. We gebruiken een andere for lus om door al deze cellen te gaan. (Dit codeblok kan eenvoudiger worden gemaakt door XPath te gebruiken om de juiste elementen te vinden.) Als elke kolom wordt gevonden, wordt de waarde opgeslagen in een variabele. (De decodeermethode wordt besproken in deel 1 van deze serie.) Alle waarden die terugkomen in XML zijn base64-gecodeerd en moeten worden gedecodeerd voordat ze worden gebruikt.

Ten slotte wordt de rijsleutel opgehaald en gedecodeerd.

Zodra alle gegevens zijn gevonden en gedecodeerd, kunt u deze gaan gebruiken. Uw code zou beginnen na het decoderen van de rij. Houd er rekening mee dat sommige van deze variabelen niet hoeven te worden gedecodeerd - ik doe ze hier allemaal voor de volledigheid.

Rijen krijgen met JSON

Werken met JSON is net als werken met XML:een get  . gebruiken werkwoord, je kunt een enkele rij of een groep rijen ophalen op basis van hun rijsleutel.

Hier is de code om de JSON-uitvoer te verkrijgen en ermee te werken:

request = requests.get(baseurl + "/" + tablename + "/shakespeare-comedies-*", headers={"Accept" : "application/json"})

bleats = json.loads(request.text)

for row in bleats['Row']:
     message = ''
     lineNumber = 0
     username = ''

     for cell in row['Cell']:
          columnname = base64.b64decode(cell['column'])
          value = cell['$']
         
          if value == None:
               continue

          if columnname == cfname + ":" + messagecolumn:
               message = base64.b64decode(value)
          elif columnname == cfname + ":" + linenumbercolumn:
               lineNumber = decode(str(value))
          elif columnname == cfname + ":" + usernamecolumn:
               username = base64.b64decode(value)

     rowKey = base64.b64decode(row['key'])

We beginnen de code met een get  verzoek dat alle regels in de komedies van Shakespeare zal retourneren. Deze rijen komen terug als JSON vanwege de wijziging in de Accept koptekst.

Vervolgens nemen we de JSON die door het verzoek is geretourneerd en veranderen deze in een JSON-object. Elke rij van HBase bevindt zich in een aparte index in de rij-array. We gebruiken een for lus om door elke rij te gaan.

Elke cel in de rij is een afzonderlijke matrixindex. We gebruiken een andere for lus om door al deze cellen te gaan. Als elke kolom wordt gevonden, wordt de waarde opgeslagen in een variabele. Alle waarden die terugkomen in JSON zijn base64-gecodeerd en moeten worden gedecodeerd voordat ze worden gebruikt. (Nogmaals, de decodeermethode wordt besproken in Deel 1 van deze serie.) Merk op dat de waarden terugkomen in het dollarteken ($) item.

Ten slotte wordt de rijsleutel opgehaald en gedecodeerd.

Zodra alle gegevens zijn gevonden en gedecodeerd, kunt u ze gaan gebruiken.

krul gebruiken

Zoals te zien is in de documentatie van de REST-interface, kunt u curl gebruiken om XML of JSON rechtstreeks naar de console uit te voeren. U kunt bijvoorbeeld hetzelfde krijgen als we net deden met curl. Het commando is:

curl -H "Accept: text/xml" http://localhost:8070/tablename/shakespeare-comedies-*

Dat commando zou je de XML-uitvoer geven. Om de JSON-uitvoer te krijgen, is de opdracht:

curl -H "Accept: application/json" http://localhost:8070/tablename/shakespeare-comedies-*

Met dit soort opdrachten kun je snel zien wat er terugkomt of hoe de gegevens eruitzien. U kunt curl gebruiken om de statuscode van een REST-oproep te zien met:

[user@localhost HBaseREST]$ curl -I -H "Accept: text/xml" http://localhost:8070/messagestable/shakespeare-comedies-*
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/xml

Conclusie

De HBase REST-interface is een goede manier om HBase te gebruiken als u geen Java wilt gebruiken. Het biedt u een vertrouwde REST-interface die in vele talen is ingebouwd, evenals een vertrouwd gegevensformaat.

Hopelijk besparen de codevoorbeelden en uitleg in deze serie u veel Googlen bij het starten van uw RESTful HBase-project.

Jesse Anderson is docent aan Cloudera University.


  1. Mongos installeren/instellen in elastische bonenstaak

  2. groeperen op datums in mongodb

  3. Probleem bij het retourneren van gegevens die zijn opgehaald uit DB-query's die in de lus worden aangeroepen

  4. Voorloopnullen toevoegen in SQL