Data Ingestion: 데이터 수집, 데이터를 추출하여 다른 소스로 로드하는 행위라고 한다.

 

Data ingestion하는 과정을 실습해본다. 그 전에 꿀팁을 하나 가져왔다.

주피터 노트북으로 만든 ipynb 파일을 python script로 변경해주는 방법이다! (나만 몰랐을 수도..?)

Jupyter nbconvert —to=script file_name.ipynb

 

다음 코드를 사용하면 file_name.py로 변환되어 파일이 생성된다. 그러나 주의할점이 하나 있다.

주석으로 실행순서등이 따라오기 때문에 한번정도는 주석제거를해서 코드를 보기 좋게 만드는 작업이 권장된다.


수집용 파이썬 코드 생성하기

argparse를 사용해서 인자 받기.

python에서 argument를 받아서 사용하기 위해 내장 라이브러리인 argparse를 사용하였다.

parser를 설정해주고, 내가 원하는 인자들을 입력해주면된다.

parser = argparse.ArgumentParser(description='Ingest parquet to postgres') 

# user, password, host, port, database name, table_name, url
parser.add_argument('--user', help='user name for postgres')
parser.add_argument('--password', help='password for postfres')
...
parser.add_argument('--url', help='url of the parquet file')

args = parser.parse_args()

 

마지막으로 args에 parser들을 담아서 함수에 넣어 사용하면 끝!

 

함수 변경 해주기

지난 실습에서 사용한 코드를 받아와 약간의 수정을 진행했다.

ef main(params):
    user = params.user
    password = params.password
	...
    url = params.url

	...
    engine = create_engine(f'postgresql://{user}:{password}@{host}:{port}/{db}')

Docker 이미지 생성 & 실행

Dockerfile

이미지 생성 전에 파이썬을 사용하면서 설치했던 추가 라이브러리들을 같이 적용시켜야한다.

따라서 Dockerfile을 수정해준다!

FROM python:3.9

RUN apt-get install wget
RUN pip install pandas sqlalchemy psycopg2 pyarrow

WORKDIR /app
COPY ingest_data.py ingest_data.py

ENTRYPOINT ["python", "ingest_data.py"]

 

wget을 설치해주고, sqlalchemy, psycopg2, pyarrow 라이브러리도 같이 설치해주었다.

그리고 사용할 파이썬 파일을 copy해준 후에, ENTRYPOINT(시작 시 실행)에도 넣어주었다.

 

Image build & run

이미지 빌드는 다음 코드로 진행했다. 가벼운(?) 빌드 코드이다.

docker build -t taxi_ingest:v001 .

 

이제 docker run을 해줘야하는데 신경써야할 부분이 많다.

우선 우리의 수집용 파이썬 코드가 어떻게 동작하는지 다시 본다..

  1. wget을 이용해서 parquet 데이터를 받아오기
  2. sqlalchemy를 사용해서 postgres와 연결
  3. postgres에 데이터 전송하기

그렇다면 우리가 실행시킬 이 이미지는 postgres와 동일한 네트워크에 있어야한다!

docker run -it --network=pg-network \
    taxi_ingest:v001 \
        --user=root \
        --password=root \
        --host=pg-database \
        --port=5432 \
        --db=ny_taxi \
        --table_name=yellow_taxi_trips \
        --url='https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2023-01.parquet'

 

host의 경우에도 postgres db를 연결해주면 완성이다.

이제 실행시켜주면 다음과 같은 결과를 볼 수 있다.

 


전체 코드는 Github에 업로드 하였습니다.

https://github.com/poriz/data-engineering-zoomcamp-poriz/tree/main/01-docker-terraform/introduce_to_docker

'Infra & Container > Docker' 카테고리의 다른 글

Docker - Docker compose  (0) 2024.03.21
Docker - 명령어 정리 & Volume  (0) 2024.03.21
Docker - Postgres > pgadmin  (0) 2024.03.20
Docker - Postgres  (0) 2024.03.20
Docker - Introduction to Docker  (0) 2024.03.18

+ Recent posts