Building_Energy DB migration

ewillwin·2022년 7월 5일
0

TSMtech Record

목록 보기
8/39

건물에너지 data는 이미 관계형 DB (RDS)로 구축했는데 data 분석의 다각화를 위해 비정형 데이터 처리가 필요해짐
-> DB migration 작업 진행 (from SQL(RDS) to NoSQL(DynamoDB))

작업 중 문제점

  • AWS DynamoDB console에 partition key와 sort key가 같은 row가 들어감 (들어간 것처럼 보임)
  • data를 축소했지만 그래도 250만개 정도의 row가 있는 대용량 데이터임 -> AWS의 과금 서비스를 이용하지 않고 한 줄 씩 insert 하기에는 너무 오래 걸림 (naive로 짜면 대충 하루 넘게 걸림)
  • [DB 구축 후] GET API를 구현하였는데 대용량 데이터라 제대로 search 하지를 못함
import pandas as pd
from typing import final
from venv import create
import multiprocessing
import base64
import os
import sys
import pymysql
import requests
from sqlalchemy import create_engine
#from crawler import crawl
import boto3
import json

dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2', aws_access_key_id='비밀', aws_secret_access_key='ㅂㅁ')
table = dynamodb.Table('buildingenergy')

db_connection_str='ㅂㅁ'
db_connection=create_engine(db_connection_str)
conn = pymysql.connect(host="ㅂㅁ",
                       user='root',
                       password='ㅂㅁ',
                       db='EnergyConsumption',
                       charset='utf8')
cur = conn.cursor()
cur.execute("SELECT * FROM energy_temp")

i = 0
with table.batch_writer() as batch:
    while(True):
        row = cur.fetchone()
        print(i)
        i += 1
        if row is None:
            break
        dict = {
            'date': row[0],
            'addr': row[1],
            'electricity': row[2],
            'gas': row[3],
            'energy_sum': row[4],
            'electricity_co2': row[5],
            'gas_co2': row[6],
            'co2_sum': row[7],
            'count': row[8]
        }
        batch.put_item(
            Item = dict
        )

conn.close()

cursor에 "SELECT * FROM energy_temp" query 결과를 저장 후 row is None이 될 때까지 한 줄씩 읽으면서 DynamoDB에 row 하나씩 insert

  • 대용량데이터처리 -> batchwriteitem 사용 + DynamoDB Table 온디맨드로
  • 그리고 대용량데이터일 경우 AWS DynamoDB Table console이 제대로 표시가 안되는듯
  • 그리고 대용량데이터일 경우 scan()은 오류남 (제대로 search를 못함) -> query()를 이용해 partition key로 search 해야함
profile
Software Engineer @ LG Electronics

0개의 댓글