我想檢索 dynamodb 表中的項目。然後我會將此數據添加到大查詢中表的最後一個數據下方。
client = boto3.client('dynamodb')
table = dynamodb.Table('table')
response = table.scan(FilterExpression=Attr('created_at').gt(max_date_of_the_table_in_big_query))
#first part
data = response['Items']
#second part
while response.get('LastEvaluatedKey'):
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
data.extend(response['Items'])
df=pd.DataFrame(data)
df=df[['query','created_at','result_count','id','isfuzy']]
# load df to big query
.....
日期過濾器工作正常,但在 while 循環會話(第二部分)中,代碼檢索所有項目。在第一部分之後,我有 100 行。但在這段代碼之後
while response.get('LastEvaluatedKey'):
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
data.extend(response['Items'])
我有 500.000 行。我只能使用第一部分。但我知道有 1 mb 的限制,這就是我使用第二部分的原因。我如何獲取給定日期範圍內的數據
您的第一個掃描 API 調用有一個FilterExpression
集合,它應用您的數據過濾器:
response = table.scan(FilterExpression=Attr('created_at').gt(max_date_of_the_table_in_big_query))
但是,第二次掃描 API 調用沒有一組,因此不會過濾您的數據:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
將 應用於FilterExpression
兩個調用:
while response.get('LastEvaluatedKey'):
response = table.scan(
ExclusiveStartKey=response['LastEvaluatedKey'],
FilterExpression=Attr('created_at').gt(max_date_of_the_table_in_big_query)
)
data.extend(response['Items'])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句