[英]How to use date filter correctly on aws dynamodb boto3
我想在 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 循环 session(第二部分)中,代码检索所有项目。 在第一部分之后,我有 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'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.