sql >> Databáze >  >> NoSQL >> HBase

Jak na to:Použijte rozhraní HBase Thrift, Část 2:Vkládání/získávání řádků

Druhý návod ze série o používání Apache HBase Thrift API

Minule jsme probrali základy připojení k Thriftu přes Python. Tentokrát se naučíte, jak vložit a získat více řádků najednou.

Práce s tabulkami

Pomocí rozhraní Thrift můžete vytvářet nebo mazat tabulky. Podívejme se na kód Pythonu, který vytváří tabulku:

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

V tomto úryvku jste vytvořili objekt Hbase.ColumnDescriptor. V tomto objektu můžete nastavit všechny různé parametry pro rodinu sloupců. V tomto případě nastavíte pouze název Column Family.

Z předchozího návodu si možná pamatujete, že přidání souboru Hbase.thrift do vašeho projektu je často užitečné. Toto je jeden z těch okamžiků:Můžete otevřít Hbase.thrift a najít definici ColumnDescriptor se všemi jejími parametry a jejich názvy.

Pomocí následujícího kódu můžete potvrdit, že tabulka existuje:

tables = client.getTableNames()

found = False

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

Tento kód získá seznam uživatelských tabulek, iteruje je a označí jako pravdivé, pokud je tabulka nalezena.

Tabulku můžete odstranit pomocí následujícího kódu:

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

Pamatujte, že v HBase musíte tabulku před odstraněním deaktivovat. Tento kód dělá právě to.

Přidávání řádků pomocí Thrift

Thrift nám nabízí několik způsobů, jak přidat nebo aktualizovat řádky: jeden řádek po druhém nebo více řádků najednou. Rozhraní Thrift nepoužívá stejný objekt Put jako Java API. Tyto změny se nazývají řádkové mutace a používají objekty Mutation a BatchMutation.

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

Každý objekt Mutation představuje změny v jednom sloupci. Chcete-li přidat nebo změnit další sloupec, jednoduše byste přidali další objekt Mutation do seznamu mutací.

Po dokončení přidávání objektů Mutation zavoláte metodu mutateRow. Tato metoda bere jako argumenty název tabulky, klíč řádku a seznam mutací.

Přidání více řádků najednou vyžaduje několik změn:

# 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)

V tomto příkladu stále používáte objekt Mutation, ale tentokrát je musíte zabalit do objektu BatchMutation. Objekt BatchMutation umožňuje zadat jiný klíč řádku pro každý seznam mutací. Můžete také přejít na metodu mutateRows. Vyžaduje název tabulky a objekt BatchMutation.

Získávání řádků šetrně

Pomocí metody getRow můžete načíst jeden řádek na základě jeho klíče řádku. Toto volání vrátí seznam objektů TRowResult. Zde je kód pro získání a práci s výstupem:

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

Spusťte kód požadavkem getRow. Tento get vrátí řádek s klíčem „shakespeare-comedies-000001“. Tyto řádky se vrátí jako seznam TRowResult. Pomocí smyčky řádků procházíte seznam řádků, které byly vráceny.

Chcete-li získat hodnotu sloupce, použijte columns.get(“COLUMNFAMILY:COLUMDESCRIPTOR”). Ujistěte se, že používáte správnou syntaxi pojmenování.

Pamatujte, že když pracujete s binárními daty, jako jsou celá čísla, budete je muset převést z řetězce Pythonu na jakýkoli typ, který by měl být. V tomto případě vezmete řetězec a pomocí metody dekódování z něj uděláte celé číslo.

Získání více řádků najednou je velmi podobné získání jednoho řádku. Zde je kód:

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

rows = client.getRows(tablename, rowKeys)

Místo zadání jednoho řádku předáte seznam řádků. Můžete také změnit metodu na getRows, která přebírá název tabulky a seznam řádků jako argumenty.

Vrátí se seznam objektů TRowResult a vy jej poté iterujete stejně jako v jednořádkovém kódu.

V dalším a posledním návodu se naučíte používat skenování a získáte úvod do některých úvah při výběru mezi REST a Thrift API pro vývoj.

Jesse Anderson je instruktorem Cloudera University.


  1. MongoDB $toObjectId

  2. Redis:Amazon EC2 vs Elasticache

  3. Jak hledat klíčový vzor v redis hash?

  4. Ověření MongoDB-CR se nezdařilo