( 참고 : “FastCampus, 데이터 엔지니어링 올인원” )

[ Data Engineering ]

DynamoDB에서 데이터 불러오기


1. Basic Setup

import sys
import os
import boto3

from boto3.dynamodb.conditions import Key, Attr

try:
    dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2', endpoint_url='http://dynamodb.ap-northeast-2.amazonaws.com')
except:
    logging.error('could not connect to dynamodb')
    sys.exit(1)


2. DynamoDB에서 데이터 불러오기

(1) get_item

table.get_item은, partition key값인 artist_id 뿐만 아니라, 우리가 추가했던 sort key인 id 또한 같이 input으로 넣어줘야 한다.

response = table.get_item(
    Key={
        'artist_id':'xxxxxxxxx'
        'id':'xxxxxxxx'
    }
)


(2) query

table.query는, 해당 Key값을 알 때 사용한다

response = table.query(
    KeyConditionExpression=Key('artists_id').eq('아티스트 아이디') # eq = equal
	FilterExpression=Attr('popularity').gt(80) # gt = greater than
)


(3) scan

table.scan은, 해당 Key값을 모를 때 사용한다.

  • scan은 key값을 모를 때만 사용하도록하자. 모든 데이터를 일일히 다 scan하는데에 시간이 오래 걸리기 때문에, key값을 알 경우에는 query문을 사용하자!
response = table.scan(
    FilterExpression=Attr('popularity').gt(80) # gt =greater than
)


3. Code Summary

def main():
    try:
        dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2', endpoint_url='http://dynamodb.ap-northeast-2.amazonaws.com')
    except:
        logging.error('could not connect to dynamodb')
        sys.exit(1)

    table = dynamodb.Table('top_tracks')
    
    # key (O)
    response = table.query(
        KeyConditionExpression=Key('artists_id').eq('아티스트아이디')        
        FilterExpression=Attr('popularity').gt(80) # gt =greater than
    )
    
    # key (X)
    response = table.scan(
        FilterExpression=Attr('popularity').gt(80) # gt =greater than
    )

if __name__=='__main__':
    main()