( 참고 : “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()