簡體   English   中英

Python中的DynamoDB查詢(以GroupBy計數)

[英]DynamoDB Querying in Python (Count with GroupBy)

這可能是微不足道的,但是我加載了一個本地DynamoDB實例,其中包含我聚合的30GB的Twitter數據。

主鍵是id(來自Tweet JSON的tweet_id),我還存儲了日期/文本/用戶名/地理代碼。

我基本上對提到兩個主題感興趣(比如說“蜜蜂”和“瘋狂”)。 我想按狀態逐個逐一統計這些數據。

因此,最后,我應該知道每個州在一天中被提及多少次。 而且我想將其導出為CSV或其他內容以供以后分析是很好的。

我這樣做的一些問題...

首先,地理編碼信息是[緯度,經度]元組,因此對於每個條目,我都需要將其映射到狀態。 我能做的。

其次,最有效的方法是遍歷每個條目並手動檢查它是否包含兩個關鍵詞,然后每個字典都有一個映射日期/位置/計數的字典嗎?

編輯:

由於花了20個小時將所有數據加載到表中,因此我不想刪除並重新創建它。 也許我應該創建一個全局二級索引(?),並使用它來搜索查詢中的其他字段? 這樣,我不必掃描所有內容。 那是正確的軌道嗎?

編輯2:

好吧,由於該表位於我的本地計算機上,所以我可以只使用昂貴的操作(如“掃描”)就可以了嗎?

因此,如果我做了這樣的事情:

query = table.scan(
     FilterExpression=Attr('text').contains("Booze"),
     ProjectionExpression='id, text, date, geo', 
     Limit=100)

並對每個關鍵字進行一次掃描,然后我就可以瀏覽得到的過濾列表,並在給定的一天獲得針對每個州的每個主題的提及計數,對嗎?

EDIT3:

response = table.scan(
   FilterExpression=Attr('text').contains("Booze"),
   Limit=100)
//do something with this set
while 'LastEvaluatedKey' in response:
   response = table.scan(
      FilterExpression=Attr('text').contains("Booze"),
      Limit=100, 
      ExclusiveStartKey=response['LastEvaluatedKey']
   )
   //do something with each batch of 100 entries

兩個關鍵字都是這樣的。 這樣,我將能夠遍歷生成的過濾集並執行我想要的操作(在這種情況下,請確定位置和日期並使用該信息創建最終數據集)。 對?

編輯4

如果我添加:

ProjectionExpression='date, location, user, text' 

進入掃描請求時,出現錯誤消息“ botocore.exceptions.ClientError:調用掃描操作時發生錯誤(ValidationException):無效的ProjectionExpression:屬性名稱是保留關鍵字; reserved關鍵字:location”。 我該如何解決?

NVM我明白了。 答案是調查ExpressionAttributeNames(請參閱: http : //docs.aws.amazon.com/amazondynamodb/latest/developerguide/ExpressionPlaceholders.html

是的,掃描表格中的“ Booze”並計算結果中的項目,即可得出總數。 請注意,您需要進行遞歸掃描,直到LastEvaluatedKey為null。

也請參考獨占啟動鍵

掃描

編輯:-

是的,代碼看起來不錯。 需要注意的一件事是,結果集並不總是包含100個項目。 請參考下面的LIMIT定義(與SQL數據庫不同)。

限制—(整數)要評估的最大項目數(不一定是匹配的項目數)。 如果DynamoDB在處理結果時處理的項目數達到最大限制,它將停止操作並返回到該點為止的匹配值,並返回LastEvaluatedKey中的一個鍵以應用於后續操作,以便您可以在要提取的位置進行提取離開。 此外,如果在DynamoDB達到此限制之前處理的數據集大小超過1 MB,它將停止該操作並返回匹配的值直至該限制,並返回LastEvaluatedKey中的鍵以應用於后續操作以繼續該操作。 有關更多信息,請參閱Amazon DynamoDB開發人員指南中的查詢和掃描。

暫無
暫無

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

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