분류 전체보기 1188

[Python] 여러 구분자로 문자열 자르기

개요 "100-200*300-500+20" 위와 같은 문자열이 있다고 했을 때, 숫자 값만 저장하고 싶다. 구분자가 -, *, + 와 같이 여러 개일 때 자르는 방법을 정리한다. 구분자 통일 replace 함수를 이용해 여러 구분자를 한 가지로 치환한다. data_val = "100-200*300-500+20" # 구분자 통일 data_val = data_val.replace('*', '-').replace('+', '-') # 문자열 분할 list_val = data_val.split('-') print(data_val) print(list_val) re.split 정규식을 다룰 때 사용하는 re 모듈에도 split 함수를 지원한다. re.split 함수에 구분자 패턴과 분할할 문자열을 지정하여 사용한..

Python 2023.01.24

[AWS] 자격 증명 기반 정책 / 리소스 기반 정책

정책 자격 증명 또는 리소스에 연결될 때 해당 권한을 정의하는 AWS 객체 리소스에 대한 액세스를 제한하는 권한 정책을 생성할 때 자격 증명 기반 정책(Identity-based policies) 또는 리소스 기반 정책(Resource-based policies)을 선택할 수 있다. 정책은 아래와 같이 분류할 수 있다. 자격 증명 기반 정책 (Identity-based policies) AWS 관리형 정책 고객 관리형 정책 인라인 정책 리소스 기반 정책 (Resource-based policies) 자격 증명 기반 정책 IAM 사용자, 그룹, 역할에 연결되어, 자격 증명이 수행할 수 있는 작업을 지정할 수 있다. AWS 관리형 정책 AWS에서 기본적으로 생성하고 관리한다. *FullAccess, *Pow..

AWS 2023.01.23

[Python] 리스트 랜덤 추출 (샘플링)

개요 리스트 내 요소를 무작위로 추출하는 방법에 대해 알아본다. random Python 표준 라이브러리로 의사 난수 생성기를 구현한다. 별도 설치 없이 import 하여 사용할 수 있다. import random 하나만 추출 random.choice 함수를 리스트 내 임의의 요소 하나를 반환한다. 다만 매개변수로 전달한 리스트가 비어있으면 IndexError를 발생시킨다. random.choice(range(10)) # 실행 결과 7 중복 허용하면서 여러 개 추출 random.choices 함수는 리스트 내 k개의 요소를 선택해 리스트로 반환한다. 선택 시 값 중복을 허용한다. random.choices(range(10), k=5) # 참고 문서 [8, 8, 2, 2, 0] Python 3.6부터 지원..

Python 2023.01.22

[boto3] S3 Select - OverMaxRecordSize 에러 대안

개요 아래와 같이 S3 Select 기능을 이용해 S3 버킷에 저장된 GZIP으로 압축된 JSON 데이터의 내용을 읽어 들이려고 한다. import boto3 client = boto3.client('s3') response = client.select_object_content( Bucket=bucket, Key=obj_key, Expression='SQL', ExpressionType='SQL', InputSerialization={ 'CompressionType': 'GZIP', 'JSON': { 'Type': 'LINES' } }, OutputSerialization={ 'CSV': {}, }, ) for event in response.get('Payload'): if 'Records' in e..

Python 2023.01.21

[Airflow] is_pause와 is_active

개요 Airflow META DB에서 dag 테이블을 살펴보면 is_paused와 is_active 컬럼을 확인할 수 있다. 두 컬럼 모두 DAG의 동작 여부와 관련된 컬럼인 것 같은데 두 컬럼의 차이는 무엇일까? is_paused DAG가 On 상태인지 Off 상태인지를 나타내는 속성이다. is_paused가 1이면 Off 상태이고, 0이면 On 상태이다. is_active 기본값은 1이다. 하지만 DAG 정의 파일이 삭제되거나 import에 실패하면 0으로 설정된다. is_active가 0으로 설정되면 UI 또는 스케쥴링 작업에서 필터링되며, DAG 소스 파일이 삭제되어도 Meta DB에서 관련 데이터가 삭제되지 않도록 한다. 참고 문서 https://forum.astronomer.io/t/is-pa..

Apache Airflow 2023.01.20

[SQLite] 설치 및 사용

SQLite 서버가 아니라 응용 프로그램에 넣어 사용하는 가벼운 DBMS 시스템이다. 오픈소스 프로그램으로 안드로이드, iOS, macOS에 포함되어 있다. 경량 구현인 탓에 SQL에서 제공하는 기능을 제한적으로 제공하고, 복잡하고 큰 데이터를 저장하는 데에는 적합하지 않다. 외부 라이브러리 의존도가 낮으며 하나의 파일에 데이터베이스 전체를 저장한다는 특징이 있다. 또한 표준 SQL 문법을 지원해 별도로 학습할 부분이 크지 않다. 설치 Ubuntu에서는 아래 명령으로 설치하여 사용한다. apt install sqlite3 # 버전 확인 sqlite3 --version DB 생성 또는 접근 데이터베이스를 생성하거나 데이터베이스를 다루기 위해 파일에 접근한다. sqlite3 # 예시 sqlite3 airfl..

Linux 2023.01.19

[Airflow] 자주 쓰는 CLI

개요 업무 중 Airflow를 많이 다루는데, 웹 서버에 접속하지 못하는 상태이다. 그렇다고 업무를 놓을 수는 없으니 Airflow 사용에 필요한 CLI 명령을 정리한다. DAG 목록 확인 어떤 파일로 DAG가 생성되었는지, 소유자와 ON/OFF(pause) 상태를 확인할 수 있다. airflow dags list pause가 True이면 OFF, False이면 ON 상태이다. DAG 구조 확인 DAG가 어떤 Task로 구성되어 있고, Task 간 의존성은 어떤지 확인한다. airflow dags show schedule_test Dag의 Task 목록 확인 DAG에 정의된 Task 목록을 확인한다. 트리 형태로 확인하고 싶을 때는 -t 옵션을 주어 실행한다. airflow tasks list # -t,..

Apache Airflow 2023.01.18

[aws cli] S3 Select

개요 2022.11.07 - [AWS] S3 Select - 객체 내 데이터 쿼리에서 정리한 S3 Select 기능을 aws cli를 통해 이용하는 방법을 정리한다. select-object-content cli로 S3 Select를 이용할 때는 데이터를 조회할 파일(bucket, key), 데이터를 조회할 쿼리(expression, expression-type), 그리고 입력으로 받을 데이터 형식과 결과로 낼 데이터 형식을 지정해야 한다. aws s3api select-object-content \ --bucket \ --key \ --expression --expression-type SQL \ --input-serialization \ --output-serialization \ 입력 설정(inpu..

AWS 2023.01.17

[Python] Pandas - DataFrame 문자열 변환

개요 DataFrame 내용을 Slack이나 MS Teams Webhook으로 알람을 보내는 등의 이유로 DataFrame을 문자열로 변환하고자 한다. to_string DataFrame을 콘솔 친화적인 형식으로 렌더링 한다. 예로 들어 titanic 데이터세트를 출력하면 아래와 같다. import numpy as np import pandas as pd import seaborn as sns titanic = sns.load_dataset("titanic") titanic to_string 함수를 사용해서 문자열로 렌더링 하면 다음과 같다. 주피터 노트북에서는 문자열로 렌더링 한 DataFrame은 print 함수로 출력하는 게 보기 편하다. print(titanic.to_string()) 인덱스 빼고..

[Airflow] n번째 특정 요일마다 스케쥴하기

개요 매 달 또는 분기별 첫 번째 주 월요일에 DAG 스케쥴링 설정을 하고자 한다. 즉, 2021.06.24 - crontab - 매달 N번째 특정 요일에 실행시키기와 동일한 스케쥴링을 Airflow에서 설정해보려고 한다. Airflow DAG를 스케쥴링할 때는 cron 표현식을 사용하므로 속성과 값의 범위, 특수 문자를 이용해 스케쥴링할 것이다. cron 표현식 Airflow DAG를 스케쥴링할 때는 cron 표현식을 사용할 수 있다. 속성 필수 유효 값 유효 특수 문자 비고 분 O 0–59 * , - 시간 O 0–23 * , - 날짜 O 1–31 * , - ? L W 일부 구현에서만 '?', 'L', 'W' 허용 월 O 1–12 또는 JAN–DEC * , - 요일 O 0–6 또는 SUN–SAT * ,..

Apache Airflow 2023.01.15