본문 바로가기

Tech

(42)
[Athena] 아테나를 사용하면서 필요했던 AWS IAM 정책 전체로 부여받은 정책 S3 관련 별개로 요청한 정책 glue:GetPartitions glue:BatchCreatePartition glue:CreateTable glue:GetDatabase glue:GetTable athena:StartQueryExecution
Mongo DB query show dbs; show collections; use ; db.컬렉션명.find({Query}, {Projection}) Query ex. {"_id":ObjectId("615d5d5e601d726824d75a25")} Projection은 해당 키값들 중 보고싶은것을 지정 한다. True는 보이도록, False는 안보이도록 ex. {"_id":true} db.컬렉션명.find({}, {"_id":True or False}); db.컬렉션명.find({"_id":ObjectId("615d5d5e601d726824d75a25")}) https://docs.mongodb.com/manual/reference/method/ObjectId/ find 시 limit, skip 예시 https://stackov..
Docker로 Postgresql 실행 시, 데이터베이스 자동 생성하기 TODO. Postgresql의 기본이미지를 Docker로 실행하는데, 이때 특정 DB를 생성하려고 한다. Postgresql을 실행할 때, 동작할 init.sql을 생성해준다. init.sql CREATE DATABASE kcs_file; 참고: 삽질... DO $$ BEGIN IF NOT EXISTS(SELECT * FROM pg_database WHERE datname='') THEN CREATE DATABASE ; END IF; END; $$ LANGUAGE PLPGSQL; DB가 존재하는 경우, 존재하지 않는 경우를 따져 생성하려고 위 처럼 만들었는데, CREATE DATABASE cannot be executed from a function or multi-command string에러가 발생..
pySpark & GraphFrames Install pyspark - graphframe Docker Image https://hub.docker.com/r/tomerlevi/jupyter-spark-graphframes Docker Run docker run -p 8888:8888 -p 4040:4040 -v ~:/home/jovyan/workspace --name jupyter tomerlevi/jupyter-spark-graphframes Use 위 Docker Container가 실행된 후, Jupyter Lab으로 이동 http://127.0.0.1:8888/lab pyspark를 사용하기 위해, Session을 생성해야함. #from pyspark import SparkConf, SparkContext from pyspark.sq..
Docker를 활용한 Celery Worker, beat 분리 Base 아래 구성은 API Server Redis Celery의 구조를 기반으로 한다. 문제 기존 사용하던 Celery Worker는 1개의 Queue를 통해 간단한 작업을 처리하고 있었다. 주기적인 간격으로 동작해야하는 기능이 필요했고, 그 기능을 구현하기 위해 Celery Beat를 사용했다. Celery Worker에 Beat Task를 위한 1개의 큐를 더 추가했고, 2개의 큐를 통해 각각의(기존 , 주기적) 작업을 처리하려 했다. 아래 명령어를 entripoint.sh에 추가하고 Docker를 통해 실행 시켰다. # entripoint.sh # # 해당 파일은 Docker Image를 생성할 때 추가하는 파일이다. # celery -A worker worker --loglevel=INFO --..
docker volume 파일 우선순위 Base Docker Compose를 활용 Container Host Container /work/test에 필요한 파일들이 존재함. 호스트에는 파일이 없음. 문제 Docker 컨테이너가 실행되면서, 컨테이너 안에있는 특정 폴더의 파일들을 호스트와 공유해야한다. volume: - /work/test:/work/test 위 같이 볼륨 바인딩을 해주니, 컨테이너 안의 test폴더가 빈폴더로 바뀌었다. 해결 Docker Volume 바인딩을 할 때, 2가지의 방법 호스트의 폴더에 바로 매핑하는 방법 docker volume을 생성해 놓은 후, 매핑하는 방법 1번의 경우는 문제에서 사용했던 방식이다. : 이렇게 했을 때, 볼륨 매핑되면서 덮어씌우는 디렉토리는 기준은 가 우선권을 가진다. 즉, 호스트의 디렉토리는..
Postgresql 리스트 데이터 넣기 Sqlalchemy, alembic, Postgresql Json에서 리스트 데이터를 파싱 후, Postgresql에 넣어야 할 일이 생겼다. 리스트 데이터를 Postgresql에 적재하기 위해서는 Postgresql에서 선언한 테이블의 컬럼 타입을 sqlalchemy.ARRAY()로 사용해야한다. 나는 ['A','B','C'] 와 같은 리스트 데이터를 Postgresql에 넣고 싶었고, sqlalchemy.ARRAY(sqlalchemy.TEXT())로 컬럼을 생성했다. PgAdmin에서 만들어진 컬럼을 확인하면, Type이 TEXT[]로 생성된 것을 볼 수 있다. 하지만, 만든 컬럼에 리스트 데이터를 넣게되면, 생각과는 다르게 값이 들어가게 된다. 나는 ['A', 'B', 'C']를 넣었지만, PgAd..
FastAPI zip 파일 업로드 FastAPI를 사용하다보면 파일 업로드하는 API도 만들게 됨. 일반적인 파일을 업로드하는것은 FastAPI Documents에서 제공된다. fastapi.tiangolo.com/tutorial/request-files/ Request Files - FastAPI Request Files You can define files to be uploaded by the client using File. Info To receive uploaded files, first install python-multipart. E.g. pip install python-multipart. This is because uploaded files are sent as "form data". Import File Import..