분류 전체보기 1188

[Redis] 개념 및 설치/실행

Redis '키-값' 구조의 비정형 데이터를 저장하고 관리하기 위한 비관계형 데이터베이스 관리 시스템(DBMS)으로, redis라는 이름은 REmote DIctionary Server의 약자이다. 살바토르 산필리포(Salvatore Sanfilippo)가 개발해 현재는 Redis Labs가 지원하는 오픈 소스 기반 데이터베이스다. 주로 데이터베이스, 캐시, 메시지 브로커, 스트리밍 엔진으로써 사용된다. 특징 - 인메모리 데이터베이스 Redis의 가장 큰 특징 중 하나는 데이터를 메모리로 불러와 처리하는 메모리 기반 DBMS, 즉 인 메모리 데이터베이스라는 점이다. 데이터를 디스크나 SSD에 저장하는 데이터베이스보다 빠른 성능을 기대할 수 있다. - 다양한 데이터 타입 strings, hashes, lis..

Database 2023.06.16

[SQL] 문자열 뒤집기 (REVERSE)

REVERSE SQL에서 문자열을 다룰 때 사용하는 함수 중 하나로, 전달받은 문자열의 시작과 끝을 반전시킨 문자열을 반환한다. 2023.06.07 - [SQL] 문자열을 split한 마지막 값 가져오기와 같은 작업을 할 때 사용할 수 있다. 사용법 REVERSE(string) -- 예시 SELECT REVERSE('SQL Tutorial'); 실행 결과 | REVERSE('SQL Tutorial') | | ----------------------- | | lairotuT LQS | 참고 문서 https://www.w3schools.com/sql/func_sqlserver_reverse.asp

Database 2023.06.15

[Airflow] Dynamic Task Mapping

Dynamic Task Mapping 기존에 Airflow는 DAG가 프로세싱되는 시점에만 Task를 동적으로 생성할 수 있었다. (참고 : 2023.04.12 - [Airflow] Task 반복 생성) 하지만 Airflow 2.3부터는 Dynamic Task Mapping 기능이 도입되면 Runtime에 Task를 동적으로 생성할 수 있게 되었다. 이 글에서는 Dynamic Task Mapping 기능에 대해 알아보려고 한다. Dynamic Task Dynamic Task Mapping 기능은 MapReduce 프로그래밍 모델을 기반으로 한다. Map은 데이터를 연산하기 좋은 형태로 변환하는 작업으로 일반적으로 Trasformation이라고 표현한다. Reduce는 Map을 통해 만들어진 데이터로 연산..

Apache Airflow 2023.06.14

[Superset] 대시보드 Filters 기능

개요 Superset은 Chart의 Filter box 또는 Dashboard Filter를 통해 사용자가 조건에 따라 데이터를 검색하고, 좀 더 동적으로 대시보드를 구성할 수 있게 한다. 이 글에서는 Dashboard 자체에서 제공하는 Filter를 이용해 대시보드에 필터 기능을 추가해보려고 한다. 필터 유형 Superset 대시보드는 Value(값), Numerical range(숫자 범위), Time range(시간 범위), Time column(시간 열), Time grain(시간 단위) 등의 필터 유형을 제공하고 있다. Value 지정한 컬럼애 대해 사용할 수 있는 값으로 채워진 드롭다운 메뉴 생성 Numerical range 선택한 컬럼 데이터의 시작 및 끝 값을 지정할 수 있는 범위 슬라이더..

Apache Superset 2023.06.13

[Superset] 데이터베이스에 CSV 파일 저장하기

개요 데이터를 다루다 보면 Excel 또는 CSV 데이터 파일을 자주 사용하게 된다. 만약 superset에서 이러한 파일 데이터를 읽어 들여 Chart를 구성해야 한다면 Superset의 Upload CSV to database 기능을 사용해 작업할 수 있다. Superset 2.1.0 버전을 기준으로 방법을 정리한다. Upload file to database 기능 활성화 파일을 데이터베이스에 업로드하기 위해서는 해당 기능을 활성화해야 한다. 1. Databases 페이지 이동 오른쪽 상단 Settings 메뉴에서 Database Connections을 클릭한다. 2. 파일 데이터를 저장할 데이터베이스의 Edit 버튼 클릭 3. ADVANCED 탭의 Security 항목 펼치기 4. 파일 업로드 기능..

Apache Superset 2023.06.12

[Airflow] Dag Processing 소요 시간 확인

개요 Airflow Scheduler는 주기적으로 DAG_FOLDER를 읽어 DAG 정의 파일을 읽어 들이고, DAG의 메타데이터를 Airflow meta DB에 저장한다. 스케쥴러와 관련된 프로세스를 찾으면 주기적으로 아래와 같은 DagFileProcessor가 동작하는 모습을 확인할 수 있다. ps -ef | grep scheduler 주기적으로 DAG 정의 파일을 읽어들이므로 DAG 정의 파일을 Processing 하는데 소요되는 시간도 Airflow 성능과 관련이 있다. 이 글에서는 Dag Processing 소요 시간 확인 방법을 적어둔다. DAG 프로세싱 로그 확인 DagFIle을 프로세싱하는 스케쥴러는 관련 정보를 로그로 남기는데, 그 위치는 다음과 같다. $AIRFLOW_HOME/logs/..

Apache Airflow 2023.06.09

[MySQL] DB 내 모든 테이블 ROW 수 확인하기

개요 단일 테이블에 대한 ROW 수는 특정 테이블에 count 함수를 실행하여 간단하게 구할 수 있다. SELECT COUNT(*) FROM table_name; 실행 결과 | count(1) | | -------- | | 2 | 그렇다면 데이터베이스 내 모든 테이블을 대상으로 행 수를 얻을 때는 어떻게 해야 할까? 방법을 적어둔다. 예시 DB 아래의 DDL로 생성한 예시 데이터베이스를 이용해 테스트해본다. CREATE TABLE test ( id INT ); INSERT INTO test (id) VALUES (1); INSERT INTO test (id) VALUES (2); CREATE TABLE IF NOT EXISTS `docs` ( `id` int(6) unsigned NOT NULL, `re..

Database 2023.06.08

[SQL] 문자열을 split한 마지막 값 가져오기

개요 SQL에서 split 함수를 이용해 구분자로 문자열을 잘랐다. 근데 프로그래밍 언어와 달리 자른 문자열 리스트에서 마지막 값을 가져오려고 -1을 사용하면 의도대로 동작하지 않았다. 어떤 방식으로 쿼리를 작성해야 하는지 적어둔다. 예시 테이블 예시로 어떤 파일들의 경로가 저장된 테이블이 있다고 하자. 이 데이터에서 경로를 제외한 파일의 이름만 가져오고 싶다. | uri | | ---------------------------------------------------- | | Articles/Search/ArtMID/2681/ArticleID/2218/Diet.aspx | | OurStory/MeettheFoodieandtheMD.aspx | | OurMenu.aspx | DDL 더보기 CREATE ..

Database 2023.06.07

[SQL] 정규식 관련 함수

개요 SQL을 이용해 문자열의 포함여부 등을 확인할 때는 LIKE 문을 사용한다. 조건에 해당하는 문자열이 여럿인 경우, OR절로 연결해서 사용하기 때문에 쿼리문이 길어질 수 있다. (LIKE 문은 IN과 함께 사용할 수 없다.) 이런 경우 정규식을 사용하면 보다 간결한 쿼리문을 작성할 수 있다. 이 글에서는 정규식 관련 함수를 정리한다. REGEXP_MATCH REGEXP_MATCH는 문자열과 패턴이 일치하는지 확인하고 일치한 문자열 배열을 반환한다. flags는 함수의 동작을 제어하는데 예로 들어 i가 들어가는 경우 대소문자 구분을 하지 않는다. REGEXP_MATCHES(source_string, pattern [, flags]) -- 예시 SELECT REGEXP_MATCHES('Learning ..

Database 2023.06.06

[Python] pymysql.err.internalerror (1054 unknown column in 'field list' )

현상 Python으로 MySQL을 연동하여 사용 중이다. 특정 테이블에 데이터를 INSERT 하려고 했더니 아래와 같은 에러 메세지가 발생하면서 실패했다. pymysql.err.internalerror (1054 unknown column in 'field list') 어떤 부분이 문제였는지 적어둔다. 원인 원인은 크게 두 가지로 정리할 수 있다. 컬럼이 테이블에 실제로 없는 경우 테이블에 컬럼이 존재하지만 컬럼의 데이터 타입과 INSERT 할 데이터의 타입이 맞지 않는 경우 이 글의 경우에는 후자로 INT로 정의되어 있던 컬럼에 문자열 데이터를 추가하려고 했던 게 원인이었다. 해결 이 글에서는 데이터베이스 테이블의 컬럼 타입을 INT에서 VARCHAR로 변경하여 해결했다. + 조금 검색해보니 주로 Py..

Python 2023.06.05