簡體   English   中英

DynamoDB主鍵時間戳

[英]DynamoDB primarykey timestamp

我試圖在dynamodb中查詢主鍵是時間戳的數據集。 首先,我想獲取特定傳感器ID的所有數據。 我嘗試了掃描(scan.json):

{
"sensorId": {
    "AttributeValueList": [{
        "S": "1234"
    }],
    "ComparisonOperator": "EQ"
}
  }

此Json通過CLI命令使用:

aws dynamodb scan --table-name sensorData --scan-filter file://scan.json 

那成功了,並為我提供了指定sensorid的所有數據。

現在,如果我只希望將時間戳記和sensorId作為結果,那么我將了解有關projection-expression的信息,並嘗試執行查詢(query.json):

{
    ":Id":{"S":"1234"}
}

aws cli命令

aws dynamodb query --table-name sensorData --key-condition-expression "sensorId= :Id" --expression-attribute-values file://query2.json --projection-expression "timestamp"

給我 :

調用Query操作時發生錯誤(ValidationException):無效的ProjectionExpression:屬性名稱是保留的關鍵字; 保留關鍵字:時間戳記

但是出於測試目的,將“ timestamp”替換為“ sensorId”給了我:

調用Query操作時發生錯誤(ValidationException):查詢條件缺少關鍵架構元素:時間戳記

而且我知道該sensorId對於鍵表達式無效。。KeyConditionExpression僅接受鍵屬性,哈希鍵和范圍鍵。 但是如何得到結果呢?

我只需要sensorId的時間戳。 我的主鍵錯了嗎? 最好使用sensorId作為主鍵以及將時間戳作為范圍鍵?

根據您的方案,最好更改密鑰。 使用SensorID作為分區鍵,並使用時間戳作為排序鍵。

這樣,您可以查詢(不掃描所有項目)給定SensorID的項目。 也可以按時間戳順序對它們進行排序。

如果您有一個較大的數據集(超過幾個千字節),則創建LSI或GSI來投影給定查詢所需的屬性將很有效。

注意:TimeStamp是DynamoDB中的保留字 您可以使用表達式屬性名稱來避免在查詢表達式中使用保留屬性時出現錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM