0

counter_incメソッドが動作しない理由はわかりませんが、エミュレータは開発実インスタンスを指しています。Bigtable GoogleハッピーベースのPython KeyErrorがcounter_incを実行しようとしています

スニペット:

from google.cloud import bigtable 
from google.cloud import happybase 

client = bigtable.Client(project='robbie-ai', admin=True) 
instance = client.instance('visio-bt-staging') 
connection = happybase.Connection(instance=instance) 
connection.create_table('commons_TestBTModelsTable', {'family': None, 'counters': None}) 
table = connection.table('commons_TestBTModelsTable') 
table.put('row-key1', {'family:surname': 'Trump'}) 
print("Getting row 'row-key1': {}".format(table.row(b'row-key1'))) 
table.counter_inc(b'row1', b'counters:qual1') 

私はtable.counter_inc(b'row1', 'counters:qual1')を行う場合と全く同じです。

スクリプトとして実行:

[email protected]:/app# python scripts/counters.py 
Getting row 'row-key1': {b'family:surname': b'Trump'} 
Traceback (most recent call last): 
    File "scripts/counters.py", line 28, in <module> 
    table.counter_inc(b'row1', b'counters:qual1') 
    File "/usr/local/lib/python3.5/dist-packages/google/cloud/happybase/table.py", line 591, in counter_inc 
    column_cells = modified_cells[column_family_id][column_qualifier] 
KeyError: 'qual1' 

それはバグですか、このスニペットは問題がありますか?あなたは、分割から得た1がSTRにデコードしている間に決定的にバグ

答えて

0

、彼らはここに

、列ID修飾子と返されたdictのキータイプ、それがcommit()によって返されるいずれかの異なる種類を持っています:ここhttps://github.com/GoogleCloudPlatform/google-cloud-python-happybase/blob/master/src/google/cloud/happybase/table.py#L577

https://github.com/GoogleCloudPlatform/google-cloud-python-happybase/blob/master/src/google/cloud/happybase/table.py#L582

、ここhttps://github.com/GoogleCloudPlatform/google-cloud-python-happybase/blob/master/src/google/cloud/happybase/table.py#L591

あなたは低いレベルに行く場合:

# As it is in the source code 
row = table._low_level_table.row(b'row-key1', append=True) 
column_family_id, column_qualifier = 'qual1'.split(':') 
row.increment_cell_value(column_family_id, column_qualifier, 1) 
row.commit() 
"""outputs 
{'counters': {b'qual1': [(b'\x00\x00\x00\x00\x00\x00\x00\x01', 
datetime.datetime(2017, 6, 12, 14, 2, 28, 858000, tzinfo=<UTC>))]}} 
""" 
# of course if using the original portion code it breaks with KeyError as the returned key type is bytes 
# Get the cells in the modified column, 
column_cells = modified_cells[column_family_id][column_qualifier] 
"""outputs 
KeyError         Traceback (most recent call last) 
<ipython-input-24-fe55fb8c47c5> in <module>() 
     1 # Get the cells in the modified column, 
----> 2 column_cells = modified_cells[column_family_id][column_qualifier] 

KeyError: 'counters' 
""" 
# But it works if re-encoded the column 
# Get the cells in the modified column, 
column_cells = modified_cells[column_family_id][column_qualifier.encode()] 
column_cells 
[(b'\x00\x00\x00\x00\x00\x00\x00\x04', 
    datetime.datetime(2017, 6, 12, 14, 16, 18, 150000, tzinfo=<UTC>))] 

これは、とにかくcommitレスポンスが異種キータイプを返すということは間違っています。私には間違っているようです。

策それらはは、PyPIにそれを修正するまで、上記符号化

counter_incメソッドをオーバーライド
関連する問題