Indexing 使用全局二级索引查询DynamoDB表

Indexing 使用全局二级索引查询DynamoDB表,indexing,aws-lambda,amazon-dynamodb,Indexing,Aws Lambda,Amazon Dynamodb,我试图使用Lambda函数查询DynamoDB表 我的表的分区键是id。我试图在另一个名为dipl\u idpp的键上查询它。我相信这是不可能的 我找到了一个解决方案:我需要在我要查询的列上创建一个全局二级索引点(在我的例子中是dipl\u idpp) 我在迪纳摩做的。但是当我执行我的函数时,我仍然有同样的问题: An error occurred (ValidationException) when calling the Query operation: Query condition mi

我试图使用Lambda函数查询DynamoDB表

我的表的分区键是
id
。我试图在另一个名为
dipl\u idpp
的键上查询它。我相信这是不可能的

我找到了一个解决方案:我需要在我要查询的列上创建一个全局二级索引点(在我的例子中是
dipl\u idpp

我在迪纳摩做的。但是当我执行我的函数时,我仍然有同样的问题:

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)