scanで件数を取得するときの正しい件数の取り方がわからなかったので作成しました。
Pythonコード
import json
import boto3
dynamodb = boto3.client('dynamodb')
TABLENAME='テーブル名'
def dcnt(flt,val):
nkey=''
cnt=0
while True:
if nkey=='':
response = dynamodb.scan(
TableName=TABLENAME,
FilterExpression=flt,
ExpressionAttributeValues=val,
Select='COUNT'
)
else:
response = dynamodb.scan(
TableName=TABLENAME,
FilterExpression=flt,
ExpressionAttributeValues=val,
Select='COUNT',
ExclusiveStartKey=nkey
)
cnt=cnt+response['Count']
if 'LastEvaluatedKey' in response:
nkey=response['LastEvaluatedKey']
else:
break
return cnt
def main():
tdata = dcnt(
'begins_with(path, :t1) and flag = :t2',
{":t1":{"S":"/START"},":t2":{"BOOL":True}},
)
print("%d\n" % (tdata))
if __name__ == '__main__':
main()
フィルターをかけてその件数を出力する例です。
pathが’/START’で始まっていて、かつflagが真のものをカウントしています。
FilterExpressionに条件を書き、ExpressionAttributeValuesに検索する値を設定します。
DynamoDB scan 件数の取得方法
Select=’COUNT’を指定すると、response[‘Count’]に件数が返ってきます。
件数の場合も、responseに’LastEvaluatedKey’が返っていますので、ループさせて足していく必要があります。
