首页 > 解决方案 > 使用全局二级索引查询 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)

除了创建索引之外,我还应该更改其他内容吗?可用的文档太少。

谢谢!

标签: indexingaws-lambdaamazon-dynamodb

解决方案


我刚刚找到了解决方案。当我们使用索引时,我们必须提供一个参数 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)

推荐阅读