indexing - 使用全局二级索引查询 DynamoDB 表
问题描述
我试图使用 Lambda 函数查询 DynamoDB 表。
我的表的分区键是id
. 我正在尝试在另一个名为dipl_idpp
. 我认为那是不可能的。
我在这里找到了一个解决方案:我需要在要查询的列上创建一个全局二级索引(在我的情况下dipl_idpp
)。
我在 Dynamo 上做到了。但是当我执行我的函数时,我仍然遇到同样的问题:
An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: id', 'occurred at index 0')"
这是我使用的代码:
def query_dipl_dynamo(key_table,valeur_query,name_table):
dynamoDBResource = boto3.resource('dynamodb')
table = dynamoDBResource.Table(name_table)
response = table.query(
KeyConditionExpression=Key(key_table).eq(valeur_query))
df_fr = pd.DataFrame([response['Items']])
if len(df_fr.columns) > 0 :
print("hellooo1")
df = pd.DataFrame([response['Items'][0]])
return valeur_query, df["dipl_libelle"].iloc[0]
//
//
df9_tmp["dipl_idpp"] = df8_tmp.apply(lambda x : query_dipl_dynamo("dipl_idpp",x["num_auto"], "ddb-dev-PS_LibreAcces_Dipl_AutExerc")[0], axis=1)
除了创建索引之外,我还应该更改其他内容吗?可用的文档太少。
谢谢!
解决方案
我刚刚找到了解决方案。当我们使用索引时,我们必须提供一个参数 namde IndexName,它采用 Dynamo 中的索引名称。我不得不将我的代码更改为:
def query_dipl_dynamo(key_table,valeur_query,name_table):
dynamoDBResource = boto3.resource('dynamodb')
table = dynamoDBResource.Table(name_table)
response = table.query(
IndexName:"NameOfTheIndexInDynamoDB",
KeyConditionExpression=Key(key_table).eq(valeur_query))
df_fr = pd.DataFrame([response['Items']])
if len(df_fr.columns) > 0 :
df = pd.DataFrame([response['Items'][0]])
return valeur_query, df["dipl_libelle"].iloc[0]
//
//
df9_tmp["dipl_idpp"] = df8_tmp.apply(lambda x : query_dipl_dynamo("dipl_idpp",x["num_auto"], "ddb-dev-PS_LibreAcces_Dipl_AutExerc")[0], axis=1)
推荐阅读
- android - 找不到 com.google.firebase:firebase-crashlytics 颤动
- sql - SQL 最大订单数
- laravel-5.6 - Laravel 5.6:不支持的操作数类型
- azure - 我们需要向 API M 门户添加同意书
- javascript - 自定义样式安装在 Angular 应用程序中的包的最佳方式
- installation - 如何使用 wix 安装程序添加公司名称
- java - 使用 MapStruct 时存在多个构造函数时出现“发现不明确的构造函数”错误
- c++ - 警告:支持指针的对象将在 std::pair 的完整表达式结束时被销毁
- java - 在 Android 中单击按钮播放声音给出空指针异常
- r - 同时向多个数据表(帧)添加多列