Introduction to flat files

Data Frame

  • pandas - 2차원의 구조 (행, 열)

Flat Files

  • 간단하고 만들기 쉬움
  • 색상이나 볼드체 서식이 없는 일반 텍스트
  • 한 라인마다 하나의 행을 의미
  • delimiter로 필드가 구분됨
  • 일반적으로 delimiter는 콤마,( csv)
  • pandas는 delimiter와 상관없이 모든 플랫 파일을 불러올 수 있다.
import pandas as pd

tax_data = pd.read_csv('us-tax-data-2016.csv')
tax_data.head(5)

Loading other flat files

  • delimiter를 sep= 인자에 넣어준다.
import pandas as pd
tax_data = pd.read_csv('us_tax_data_2016.tsv', sep='\t')

Modifying flat file imports

Limiting Columns

  • usecols 인자를 이용해 로드할 열을 선택한다.
  • 모든 열 이름이나 열 번호의 리스트를 사용할 수 있다.
col_names = ['STATEFIPS', 'STATE', 'zipcode', 'agi_stub', 'N1']
col_nums = [0, 1, 2, 3, 4]

# choose columns to load by name
tax_data_v1 = pd.read_csv('us_tax_data_2016.csv', usecols=col_names)

tax_data_v1 = pd.read_csv('us_tax_data_2016.csv', usecols=col_nums)

Limiting Rows

  • nrows 인자를 이용해서 불러올 행의 수를 제한한다.
  • skiprows 인자는 건너뛸 행의 수를 선택한다. 이 경우 header=None으로 설정해야 한다.

Assigning Columns Names

  • names 인자 사용
  • 모든 열의 이름의 리스트가 있어야 함
  • 일부 열만 바꾸려면 불러온 후에 수행해야 함
col_names = list(tax_data_first1000)

tax_data_next500 = pd.read_csv('us_tax_data_2016.csv', nrows=500, skiprows=1000, header=None, names=col_names)

Handing errors and missing data

Common Flat File import issue

  • 열 데이터 타입이 잘못됨
  • 값이 누락됨
  • pandas가 읽을 수 없는 값

Specifying data types

  • pandas는 자동으로 열의 데이터 타입을 유추한다.
  • 데이터 타입을 특정해주기 위해 dtype 인자를 사용한다. 각 키는 열 이름이고 값은 데이터 타입이 들어 있는 딕셔너리를 받는다.

Customizing Missing Data values

  • pandas는 자동적으로 결측치를 해석한다
  • na_value 인자를 이용해 missing values를 커스텀할 수 있다.
  • single value, list, dictionary가 들어갈 수 있다.
tax_data = pd.read_csv('us_tax_data_2016.csv', na_values={'zipcode':0})

Lines with errors

  • pandas가 읽을 수 없는 레코드
  • error_bad_lines=False인자를 추가하면 pandas는 에러가 나는 행을 건너 뛴다.
  • warn_bad_lines=True 인자를 추가하면 파싱할 수 없는 줄을 건너뛸 때, 메시지를 표시하게 된다.

Introduction to spreadsheets

spreadsheet

  • excel
  • 행과 열이 있는 데이터 셀이 있는 테이블에 데이터가 저장됨
  • 플랫 파일과 달리 자동으로 업데이트 되는 공식이 있을 수 있음
  • 여러 시트가 있을 수 있음

Loading spreadsheet

  • read_excel()
  • usecols'A:P'와 같은 excel 열문자의 범위 문자열도 허용함
survey_data = pd.read_excel('fcc_survey_with_headers.xlsx',
                           skiprows=2, 
                           usecols='W:AB, AR')

Getting data from multiple worksheets

Selecting sheet to Load

  • read_excel()는 기본으로 첫번째 sheet만 가져온다
  • sheet_name인자를 사용해서 달느 시트를 가져올 수 있다.
  • 시트의 이름이나 인덱스 넘버를 받는다(zero index).
  • read_excel()에 들어간 인자는 모든 시트에 적용된다.

Loading All sheet

  • sheet name에 None을 전달한다
  • OrderedDict 리턴

Putting It All Together

all_responses = pd.DataFrame()

# Key는 시트이름, value는 프레임
for sheet_name, frame in survey_responses.items():
    frame['Year'] = sheet_name
    all_responses = all_responses.append(frame)

Modifying imports: true/false type

Boolean Data

  • True/False
  • pandas는 True/False column을 float 데이터로 로드한다.
  • read_excel()dtype 인자로 어떤 column을 bool 타입으로 만들어 줄지 정할 수 있다.
  • 오직 True와 False 값만 가져야 하므로 N/A 값은 True로 인코딩된다.
  • 'Yes', 'No' 같이 0과 1이 아니고 값이 다를 경우 true_value 인자를 사용한다.
bool_data = pd.read_excel('fcc_survey_boolean.xlsx',
                         dtype={'AttendedBootcamp': bool,
                               ...},
                         true_values=['Yes'],
                         false_values=['No'])

Modifying imports: parding date

Date and Time Data

  • python의 datetime 데이터타입으로 저장된다.
  • pandas는 날짜/시간 데이터를 객체로 불러온다.
  • timespan을 계산하려면 datetime 데이터 타입을 이용해야 한다.
  • dtype이 아닌 parse_dates 인자를 사용한다!
# 시간 데이터가 여러 열에 분산되어 있을 경우 중첩 리스트 넣기
date_cols = ['Part1StartTime', 'Part1EndTime', [['Part2StartDate', 'Part2StartTime']]]

survey_df = pd.read_excel('fcc_survey.xlsx',
                         parse_dates=date_cols)

# 컬럼의 이름을 지정해주고 싶으면 dict
date_cols = {'Part1Start': 'Part1StartTime',
            'Part1End': 'Part1EndTime',
            'Part2Start':['Part2StartDate',
                         'Part2StartTime']}

Non-Standard Dates

  • parse_date는 pandas가 이해할 수 있는 형식에만 작동함
  • to_datetime() 인자를 이용
  • 데이터 프레임과 column을 format 형식을 이용해 datetime format으로 바꿔줌
  • strftime.org
format_string = '%m%d%Y %H:%M:%S'
survey_df['Part2EndTime'] = pd.to_datetime(survey_df['Part2EndTime'],
                                          format=format_string)

Introduction to databases

Relational Databases

  • table로 정리된 데이터
  • row와 column으로 이루어짐
  • primary key를 이용해 테이블들이 연결될 수 있음
  • 스프레드 시트나 플랫파일보다 더 많은 데이터를 처리하고 더 많은 동시 사용자를 지원함
  • SQL을 통해 데이터베이스와 인터페이스

Common realational databases

  • SQLite
    • 컴퓨터 파일로 저장되는 데이터 베이스

Connecting to Databases

  • 데이터 베이스로 연결할 수 있는 way를 만든다
  • database를 쿼리한다.

Creating a Database Engine

  • SQLAlchemy
    • create_engine()은 데이터베이스 커넥션을 다룰 수 있게 해준다.
      • database에 대한 문자열 URL이 필요함
      • sqlite:///filename.db

Quering Database

  • 데이터 베이스에서 데이터를 로드하기 위해pd.read_sql(query, engine) 사용

Refining imports with SQL queries

SELECTing Columns

  • SELECT [column names] FROM [table name];
  • WHERE을 이용해 필터링
    • 표준 연산자
      • =, >, >=, <, <=, <>
    • 문자열 필터링
    • AND, OR과 사용 가능

More complex SQL queries

  • Get unique values for one or more columns with SELECT DISTINCT
  • Aggregate function
    • sum, avg, max, min
    • count
    • group by

Loading multiple tables with join

  • database records는 unique한 identifier가 있다.
  • JOIN ON을 이용해 서로 다른 테이블을 identifier로 조인할 수 있다.
  • SQL 키워드의 순서
    • SELECT
    • FROM
    • JOIN
    • WHERE
    • GROUP BY

Introduction to JSON

  • common web data format(자바스크립트)
  • 테이블 형식이 아님
  • record가 모두 동일한 컬럼을 가질 필요가 없음
  • 속성-값 쌍을 가진 collection(dictiㅐnary와 비슷)
  • 중첩 가능

Reading JSON Data

  • read_json()
    • json 파일 경로나 json 문자열을 넣을 수 있음
    • dtype 인자로 데이터타입 명시
    • orient 인자로 레코드들이 어떻게 정렬될 것인지 정한다.(record oriented or column oriented)

Introduction to APIs

API

  • 어플리케이션이 다른 프로그램들과 어떻게 소통할지 정의한다.
  • 데이터베이스 구조를 몰라도 api를 통해 데이터를 얻을 수 있다.

request

  • request.get(url_string):url에서 데이터 가져오기
    • params: 딕셔너리를 받아 api에 값을 전달한다.
    • header: 딕셔너리를 받아 사용자 인증키를 전달한다.
  • response 객체를 리턴하며 response.json()메소드를 사용해야 결과값만 가져올 수 있다.

Working with nested JSONs

Nested JSONs

  • value 자체가 객체인 경우 JSON이 중첩된다.
  • pandas.io.json
    • JSON을 읽고 쓰기 위한 판다스의 서브모듈
    • json_normalize(): 딕셔너리나 딕셔너리의 리스트를 받아 데이터 프레임을 반환한다.
      • record_path인자는 파일경로에 폴더를 나열하는 것과 같이 중첩 데이터에 대한 속성 문자열 또는 문자열 목록을 사용한다.
      • meta: 속성의 리스트를 받아 어떤 속성을 로드할 것인지 결정
      • meta_prefix: 속성의 출처를 명확히하고 열 이름이 중복되지 않기 위해서 접두사 사용

Combining multiple datasets

  • appending: 데이터 프레임을 다른 데이터프레임에 row로 추가한다. (df1.append(df2, ignore_index=True))
  • merging: dataset을 column을 더해 합친다. merge()는 SQL의 조인과 같은 메소드다.
    • df.merge()
      • on
      • left_on, right-on

'Data Science > [DSF] Data engineering' 카테고리의 다른 글

What is Data Engineering?  (0) 2022.05.15
Data engineering for everyone  (0) 2022.04.10

What is data engineering?

In comes the data engineer

  • 데이터가 흩어져 있음
  • 데이터베이스가 어플리케이션에 최적화 되어 있고 분석에 최적화되어 있지 않음
  • 레가시 코드들이 데이터를 손상시킴

What is parallel

  • 메모리의 프로세싱 파워의 이득
  • 아이디어: task를 subtask로 나누어 여러 컴퓨터에 분산시킨다.

병렬처리의 리스크

  • 통신 오버헤드
    • task가 너무 작을 때
    • 프로세싱 유닛이 적을 때
    • 이 오버헤드로 인해 프로세싱 유닛이 늘어나도 속도가 선형으로 증가하지 않는다(pararell slowdown)

병렬 처리 구현방법

multiprocessing.Pool: 동일한 컴퓨터의 여러 코어에 작업을 분산처리

from multiprocessing import Pool
import pandas as pd

def take_mean_age(year_and_group):
    year, group = year_and_group
    return pd.DataFrame({'Age': group['Age'].mean()}, index=[year])

with Pool(4) as p:
    result = p.map(take_mean_age, athlete_events.groupby('Year'))

result_df = pd.concat(result)

dask: 추상화 제공 프레임워크

import dask.dataframe as dd

# partition dataframe into 4
athelte_events_dask = dd.from_pandas(athlete_events, npartitions=4)

result_df = athlete_events_dask.groupby('Year').Age.mean().compute()

Parallel computation frameworks

Hadoop

  • HDFS: 분산 파일 시스템
  • MapReduce: 빅데이터 처리 시스템

Hive

  • 하둡 에코시스템의 최상위 계층
  • SQL의 변형인 Hive SQL을 사용하여 구조화된 방식으로 쿼리를 할 수 있다.
  • 다른 데이터 처리 툴과 통합됨

Hive: an example

  • 일반 SQL 쿼리와 비슷하지만 분산처리로 작동한다
SELECT year, AVG(age)
FROM views.athlete_events
GROUP BY year 

Spark

  • 맵리듀스는 job 사이에 디스크를 많이 쓰지만, Spark는 가능한 한 메모리에서 작동한다.
  • 맵리듀스의 단점 보완

Resilient distributed datasets(RDD)

  • spark에서 사용
  • 여러개의 노드에 분산되어 저장하는 데이터
  • 데이터프레임과 달리 컬럼에 이름이 없음
  • 튜플의 리스트와 비슷함
  • Operation
    • Transformation: .map() or .filter() -> RDD 리턴
    • Action: .count() or .first() -> single result

PySpark

  • 스파크의 프로그래밍 언어 인터페이스
  • Python interface
  • pandas와 유사함

PySpark: an example

(athlete_events_spark
    .groupBy('Year')
    .mean('Age')
    .show())

Workflow scheduling frameworks

An example pipeline

  • 어떻게 스케줄링?
    • 매일 수동으로: 확장하기 어려움
    • cron: dependency 처리가 어려움(작업의 순서...)

DAGs(Directed Acyclic Graph)

  • Set of nodes
  • Directed edges
  • No cycles

The tools for the job

  • Linux's cron
  • spotify's Luigi
  • Airflow

Airflow: an example

# Create the DAG object
dag = DAG(dag_id='example_dag', ..., schedule_interval="0 * * * *")

# Define operations
start_cluster = StartClusterOperator(task_id='start_cluster', dag=dag)
ingest_customer_data = SparkJobOperator(task_id='ingest_customer_data', dag=dag)
ingest_product_data = SparkJobOperator(task_id='ingest_product_data', dag=dag)
enrich_customer_data = PythonOperator(task_id='enrich_customer_data', ..., dag=dag)

# Set up dependecy flow
start_cluster.set_downstream(ingest_customer_data)
ingest_customer_data.set_downstream(enrich_customer_data)
ingest_product_data.set_downstream(enrich_customer_data)

Extract

  • 의미: 데이터 스토리지에서 데이터를 추출하는 것

Extract from text files

  • unstructured
  • flat file은 row와 column으로 이루어져 있다.(ex. csv, tsv)

JSON

  • JavaScript Object Notation
  • semi-structured
  • number, string, boolean, null
  • array, object
  • python의 딕셔너리와 비슷, 매핑이 잘 됨(json 패키지)
  • 많은 웹서비스가 이 형태로 데이터를 전달함

Data on the Web

  • request

    • ex. Browss to Google
    • Request to Google server
    • Google responds with Web page
  • APIs

    • 데이터를 JSON 포맷으로 보냄
    • API: application programming interface
  • database

    • 기존 애플리케이션 데이터베이스에서 추출
      • 많은 Transaction(행 삽입)
      • OLTP
      • row-oriented
    • Analytical database
      • OLAP
      • Column-oriented
  • connection string/uri

    • postgresql://[user[:password]@][host][:port]

    • import sqlalchemy
      connection_uri = 'postgresql://repl:password@localhost:5432/pagila'
      db_engine = sqlalchemy.create_engine(connection_uri)
      
      import pandas as pd
      pd.read_sql('SELECT * FROM customer', db_engine)

Transform

  • selection of attribute (ex. email)
  • Transaltion of code values (ex. New York -> NY)
  • Data validation (ex. date input in 'created_at')
  • Splitting columns into multiple columns(email -> user, domain)
  • Joining from multiple sources

pyspark

import pyspark.sql

spark = pyspark.sql.SparkSession.builder.getOrCreate()
spark.read.jdbc('jdbc:postgresql://localhost:5432/pagila',
               properties={'user':'repl', 'password':'password'})

# jdbc: Spark가 여러 관계형 데이터베이스에 연결하는 데 도움이 되는 소프트웨어

example: join

customer_df # pyspark dataframe with customer data
rating_df # pyspark dataframe with rating data

# Groupby ratings
ratings_per_customer = ratings_df.groupBy('customer_id').mean('rating')

# Join on Customer ID
customer_df.join(
rating_per_customer,
customer_df.customer_id=ratings_per_customer.customer_id)

Loading

Analytics or applications databases

  • Analytics
    • Aggregate queries
    • online analysis processing(OLAP)
    • column-oriented
    • columns subset에 대해 쿼리함
    • 병렬화에 적합
  • Applications
    • lots of transaction
    • online transaction processing(OLTP)
    • row-oriented
    • 레코드를 넣고 빼는 것이 쉽고 빠름

MPP Databases

  • Massively parallel processing database
  • 쿼리가 하위작업으로 분리되어 여러 노드로 분산됨

example: Redshift

# Pandas .to_parquet() method
df.to_parquet('./s3://path/to/bucket/customer.parquet')
# pyspark .write.parquet() method
df.write.parquet('./s3://path/to/bucket/customer.parquet')
COPY customer
FROM 's3://path/to/bucket/customer.parquet'
FORMAT as parquet

Load to PostgrSQL

# Transformation on data
recommendations = transform_find_recommecdatins(ratings_df)

# Load into PostgreSQL database
recommendations.to_sql('recommendations',
                      db_engine,
                      schema='store',
                      if_exists='replace')

Putting it all together

  • ETL 과정을 하나의 함수로 초기화
def extract_table_to_df(tablename, db_engine):
    return pd.read_sql('SELECT * FROM {}'.format(tablename), db_engine)

def split_columns_transform(df, column, pat, suffixes):
    # Converts column into str and splits it on pat

def load_df_into_dwh(film_df, tablename, schema, db_engine):
    return pd.to_sql(tablename, db_engine, schema=schema, if_exists='replace')

db_engine = {...}

def etl():
    film_df = extract_table_to_df('film', db_engine['store'])
    film_df = split_columns_transform(film_df, 'rental_rate', '.', ['_dollar', '_cents'])
    load_df_into_dwh(film_df, 'film', 'store', db_engine['dwh'])

Airflow refresher

  • python으로 작성된 워크플로우 스케줄러
  • 비선형 그래프 작성 가능
  • DAGs

scheduling with DAGs in Airflow

from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator

dag = DAG(dag_id='etl_pipeline',
         ...,
         schedule_interval='0 0 * * *') # cron 표현식

etl_task = pythonOperator(task_id='etl_task',
                         python_callable=etl,
                         dag=dag)

etl_task.set_upstream(wait_for_this_task)
# wait_for_this_task가 끝난 후 실행
  • cron 표현식: 분, 시간, 일, 월, 요일

From rating to recommendation

Our recommendation transform

  • 사용자가 대부분 높게 평가한 기술의 코스를 추천
  • 이미 평가 한 코스를 추천하지 않음
  • 가장 높은 등급의 코스 3개를 추천

Scheduling daily jobs

The loading phase

# pandas dataframe to sql
recommendations.to_sql(
"recommendations",
db_engine,
if_exists="append")

전체 ETL

def etl(db_engines):
    # Extract the data
    course = extract_course_data(db_engines)
    rating = extract_rating_data(db_engines)

    # Clean up courses data
    courses = transform_fill_programming_language(courses)

    # Get the average course rating
    avg_course_rating = transform_avg_rating(rating)
    courses_to_recommend = transform_courses_to_recommend(
    rating,
    courses,
    )

    # Calculate the recommendation
    recommendations = transform_recommendations(
    avg_course_rating,
    course_to_recommend,
    )

    # Load the recommendations into the database
    load_to_dwh(recommendations, db_engine)

Creating the DAG

from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator

dag = DAG(dag_id='recommendations',
         scheduled_interval='0 0 * * *')

task_recommendations = PythonOperator(
task_id='recommendations_task',
python_callable=etl)

'Data Science > [DSF] Data engineering' 카테고리의 다른 글

Introduction to flat file  (0) 2022.05.15
Data engineering for everyone  (0) 2022.04.10

Data engineering for every one[Data camp]

Data Workflow

  • 데이터 수집 및 저장 -> 데이터 엔지니어링
  • 데이터 정리(preparation)
  • 탐색, 시각화
  • 실험, 예측

데이터 엔지니어

  • 데이터 엔지니어가 제공하는 것

    • 정확한 데이터

    • 올바른 형태로

    • 올바른 사람들에게

    • 효율적인 형태로

  • 데이터 엔지니어가 하는 일

    • 데이터 수집
    • 데이터베이스 최적화
    • 데이터 손상 관리
    • 데이터베이스 아키텍처 개발, 구성, 테스트 및 유지

데이터 엔지니어 vs 데이터 사이언티스트

  • 데이터 엔지니어
    • ingest and store data
    • set up database
    • build data pipeline
    • strong software skills
  • 데이터 사이언티스트
    • exploit data
    • access database
    • use pipeline output
    • strong analytical skills

Data pipeline

  • 데이터 수집
  • 처리
  • 저장
  • 파이프라인이 필요하다!
  • 모든 station을 자동화
  • 정확하고 relevant한 데이터를 제시간에 제공
  • 데이터 파이프라인은 데이터가 조직 전체에 흐르게 한다
  • 자동화한다
    • 추출
    • 변환
    • 결합
    • 검증
    • 로드
  • 줄인다
    • 인간의 개입
    • 에러
    • 걸리는 시간

ETL

  • 데이터 파이프라인을 디자인하는 프레임웍
    • Extract
    • Transform
    • Load
  • 데이터를 한 시스템에서 다른 시스템으로 이동시킨다.

데이터 스트럭쳐

구조화된 데이터

  • 쉽게 검색하고 구성
  • 행과 열의 엄격한 구조
  • 각 열은 특정 데이터 타입이 있음
  • 관계를 형성하기 쉽게 그룹화됨
  • 관계형 데이터 베이스에 저장됨
  • 거의 20%의 데이터가 구조화된 데이터다
  • SQL을 사용하여 만들어지고 쿼리된다.

semi-structured data

  • 검색하고 구조화하기 쉬움
  • 구조에 덜 엄격함
  • 여러가지 타입가능
  • 그룹화될 수 있지만 더 많은 작업이 필요함
  • NoSQL database: Json, XML, YAML

Unstructured data

  • 행과 열 형식으로 표현될 수 없는 데이터
  • 검색 및 구조화가 어려움
  • 텍스트, 사운드, 사진, 비디오
  • 일반적으로 데이터 레이크에 저장됨
  • 거의 대부분의 데이터는 unstructure다
  • 매우 가치있을 수 있음

Adding some structure

  • unstructured 데이터를 검색하고 구조화하기 위해 AI를 사용

  • semi-structure로 만들기 위해 정보를 더한다.(장르, 태그...)

SQL 데이터베이스

SQL

  • Structured Query Language
  • RDBMS에서 쿼리를 하는 데 사용됨
  • 한번에 많은 레코드에 엑세스할 수 있고 그룹화, 필터링, 집계할 수 있다.
  • 영어에 가까워서 쓰기와 이해가 쉽다
  • 데이터 엔지니어는 데이터베이스를 유지하고 만드는데 사용
  • 데이터 과학자는 SQL를 이용해 쿼리함
CREATE TABLE employee (
    employee_id INT,
    first_name VARCHAR(255),
    last_name VARCHAR(255),
    role VARCHAR(255),
    team VARCHAR(255),
    full_time BOOLEAN,
    office VARCHAR(255)
);

데이터베이스 스키마

  • 데이터 베이스는 많은 테이블로 구성된다.
  • 데이터 베이스 스키마는 테이블이 어떻게 related 되는지 관리한다.

데이터 웨어하우스 & 데이터 레이크

  • 데이터 레이크
    • 모든 raw data 저장
    • 정형, 반정형, 비정형 모든 타입
    • 비용이 적게 듬
    • 분석하기 어려움
    • 데이터 카탈로그를 최신상태로 유지해야 함
    • 데이터 사이언티스트에게 쓰임
    • 큰 데이터, 실시간 데이터
  • 데이터 웨어하우스
    • 특수 목적을 위해 특정한 데이터를 수집
    • 상대적으로 작음
    • Structured data 상태로 저장하기 때문에 업데이트에 비용이 듬
    • 분석에 최적화되어 잇음
    • data analytics에게 주로 쓰임
    • read only queries

data catalog for data lakes

  • 데이터의 출처
  • 어떻게 사용?
  • 누가 유지 관리를 하는가
  • 얼마나 업데이트가 자주 되는가
  • 데이터 거버넌스(가용성, 사용성 무결성, 보안)
  • 프로세스의 재현을 보장

Database vs data warehouse

  • Databasse
    • 일반적인 용어
    • organized data stored and accessed on computer
  • Data warehouse
    • 데이터베이스의 한 종류

Processing data

  • 원시데이터를 의미있는 정보로 바꾸는 것

Data processing value

  • 원하지 않는 데이터 제거
  • 메모리, 프로세스, 네트워크 비용을 최적화 한다.
  • 사용하기 쉬운 타입으로 데이터를 변경한다.
  • 데이터를 구조화 함
  • 특정 스키마와 구조를 갖게 함
  • 생산성 향상

데이터 엔지니어가 data processing을 하는 법

  • 데이터 조작, 정리
    • 자동화될 수 있음
  • 데이터를 적절이 구조화 된 데이터베이스에 저장
  • create views on top of database tables(뷰 생성)
  • 데이터베이스 성능 최적화 (ex. 데이터 인덱싱)

Scheduling data

  • 데이터 프로세싱의 모든 과정에 적용 가능
  • 데이터 엔지니어링 시스템의 접착제
  • task가 특정 순서로 작동되고 모든 종속성을 해결되도록 한다.

Manual, time, sensor scheduling

  • 수동으로
  • 특정시간, 조건(sensor scheduling)에 처리가 실행되도록 자동화
  • sensor scheduling은 항상 조건을 확인하기위해 수신 대기 상태에 있어야 하는 단점
  • 수동과 자동의 합성

Batches and stream

  • Batches

    • 한 인터벌마다 기록을 모음
    • 더 저렴
  • Streams

    • 개별 데이터를 바로 전송(ex. 유저 가입)
  • 스케줄링 툴: airflow, Luigi

Parallel computing

  • 최신 데이터 처리 툴의 기초
  • 메모리와 프로세싱 파워를 늘려줌
  • 데이터 처리 툴이 작업을 할때 task를 더 작은 subtask로 나누고 이 것들을 여러 컴퓨터에 분산시킴

pararell computing의 장점/e단점

  • 장점
    • 더 많은 프로세싱 파워
    • reduce memory footprint
  • 단점
    • 데이터를 이동시키는 것이 비용을 발생시킴
    • 통신 시간이 필요

Cloud computing

  • severs on premise
    • 직접 구입
    • 공간 필요
    • 전기요금, 유지 관리 비용
    • 피크타임에 적절한 프로세싱 파워
  • servers on cloud
    • 대여
    • 공간이 필요 없음
    • 필요할때만 자원 사용
    • 서버와 사용자가 가깝게 함
    • 데이터베이스 안정성

cloud computing for data storage

  • 데이터 베이스 안정성
  • 민감한 데이터에 대한 위험관리

AWS

  • File Storage: S3
  • computation: EC2
  • database: RDS

Microsoft Azure

  • File Storage: Blob Storage
  • computation: Virtual Machine
  • database: SQL Database

Google Cloud

  • File Storage: google cloud storage
  • computation: google compute engine
  • database: google cloud SQL

Multi cloud

  • 장점
    • 한 공급자에 대한 의존도를 줄임
    • 비용 절감
    • 법률
    • 재난에 대비
  • 단점
    • 클라우드 공급자는 서비스를 통합해 가두고자 한다
    • 호환성
    • 보안 및 거버넌스 관리를 어렵게 한다.

'Data Science > [DSF] Data engineering' 카테고리의 다른 글

Introduction to flat file  (0) 2022.05.15
What is Data Engineering?  (0) 2022.05.15

+ Recent posts