분류 전체보기 1191

[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

[SQL] 문자열 자르기 (SPLIT_PART/SUBSTRING/LEFT/RIGHT)

개요 2023.06.01 - [SQL] 문자열 합치기 (||/CONCAT/CONCAT_WS)에서 여러 문자열을 합쳐보았다. 이번 글에서는 자르는 방법도 정리한다. 표준인 ANSI SQL을 기준으로 하고 싶어, PostgreSQL을 사용해 정리한다. SPLIT_PART SPLIT_PART 함수는 문자열을 지정한 구분자로 자르고 n번째 하위 문자열을 반환한다. SPLIT_PART(string, delimiter, position) -- 예시 SELECT SPLIT_PART('A,B,C', ',', 2); 실행 결과 | split_part | | ---------- | | B | SUBSTRING / SUBSTR SUBSTRING는 특정 위치로부터 지정한 길이의 문자열을 반환한다. 길이는 생략할 수 있으며, ..

Database 2023.06.02

[SQL] 문자열 합치기 (||/CONCAT/CONCAT_WS)

개요 최근 SQL을 통해 문자열을 많이 다루게 될 것 같아 관련 내용을 정리해두고자 한다. 이 글에서는 문자열을 합치는 방법에 대해서 정리한다. 표준인 ANSI SQL을 기준으로 하고 싶어, PostgreSQL을 사용해 정리한다. || || 연산자를 사용하면 두 개 이상의 문자열을 열결하여 하나의 문자열로 반환한다. 만약 연결할 문자열에 NULL이 포함되어 있으면 NULL을 반환한다. str_1 || str_2 -- 예시 SELECT 'Concatenation' || ' ' || 'Operator' AS result, 'Concat with ' || NULL AS contain_null_result ; 실행 결과 | result | contain_null_result | | ----------------..

Database 2023.06.01

[Linux] 명령어 실행 결과를 다른 명령 인자로 전달하기

개요 예로 들어 AWS 계정 내 모든 S3 버킷에 대한 버전 관리 기능 활성화 여부를 확인하고 싶다. 계정 내 S3 버킷 목록은 list-buckets 명령어로 확인할 수 있고, aws s3api list-buckets 버킷의 버전 관리 기능 활성화 여부는 get-bucket-versioning 명령어에 확인할 버킷을 지정하여 확인할 수 있다. aws s3api get-bucket-versioning --bucket BUCKET_NAME 이 두 개 명령을 묶어서 하나의 명령어로 처리하고 싶다. 방법을 적어둔다. xargs 빈칸이나 새 줄로 구분된 표준 입력을 읽어 명령어의 인자(argument)로 전달할 수 있는 명령어다. 앞 명령어의 출력을 다음 명령어의 입력으로 전달하는 PIPE(|)와 같이 사용한다..

Linux 2023.05.31

[Superset] A Default SECRET_KEY was detected, please use superset_config.py to override it.

현상 2023.02.21 - [Superset] 설치 및 실행 글 이후 새로 superset을 설치하려고 한다. pip install로 설치한 이후 설치 확인을 했더니 다음과 같은 메시지가 발생했다. 참고로 설치에 사용한 명령어는 다음과 같다. # 패키지 설치 apt update apt install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev # 가상 환경 생성 및 활성화 python3 -m venv superset source superset/bin/activate # 빌드 라이브러리 설치 pip install wheel # superset 설치 pip install apache-super..

Apache Superset 2023.05.30

[Selenium] AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'

현상 오랜만에 이전에 Selenium으로 만들어두었던 Python 코드를 살펴봤다. 실행을 시켜보고자 Selenium 패키지와 크롬 드라이버를 새로 설치하고 실행시켰더니 아래와 같은 에러가 발생했다. 원인 기존에 selenium 3.141.0을 사용하다가 최신 버전인 selenium 4.9.1을 설치해서 테스트했는데, 확인해보니 Selenium의 버전이 올라가면서 find_element 관련 함수에 변경이 있었던 모양이다. find_element_by_xpath, find_element_by_id, find_element_by_xpath와 같이 검색 기준 별로 함수를 제공하는 대신 find_element 함수로 통합된 것으로 보인다. 해결 find_element_by_XXX 함수 대신 find_eleme..

Python 2023.05.29

[AWS] RDS 스냅샷을 S3로 내보내기 관련 CLI

RDS 스냅샷을 S3로 내보내기 RDS는 스냅샷을 S3로 저장할 수 있는 내보내기(export) 기능을 제공하고 있다. 스냅샷에서 데이터를 추출해 Apache Parquet 형식으로 데이터를 저장하는 기능으로 백그라운드로 동작해 RDS 성능에 영향을 주지 않는다. AWS에서 생성한 모든 유형의 스냅샷(수동 스냅샷, 자동화된 시스템 스냅샷, AWS Backup 서비스에서 생성된 수동 스냅샷)을 내보낼 수 있고, 모든 데이터뿐만 아니라 특정 데이터베이스나 특정 테이블만 내보내도록 할 수도 있다. 이 글에서는 내보내기 기능을 사용할 때 사용한 CLI 정도만 간단히 정리한다. 해당 기능을 사용하기 위해 어떤 부분이 필요한지는 공식 문서 Amazon S3로 DB 스냅샷 데이터 내보내기를 살펴보면 좋을 것 같다. ..

AWS 2023.05.28

[Python] billiard - 멀티프로세싱

개요 이전에 2023.02.19 - [Python] multiprocessing을 통해 Python으로 멀티프로세싱을 수행해 보았는데, 최근 billiard라는 다른 패키지를 사용하여 멀티프로세싱을 수행하게 되었다. 이 글에서는 billiard 패키지 사용법을 정리해 둔다. billiard Python 2.7 multiprocessing 패키지를 Fork한 패키지다. Celery에서 사용하는 패키지로 Celery 팀에 의해 유지보수되고 있다. Github : https://github.com/celery/billiard + Airflow에서 CeleryExecutor를 사용하고 있다면 추가 패키지 설치 없이 멀티프로세싱을 적용할 수 있을 것 같다. 설치 pip를 이용해 설치할 수 있다. pip insta..

Python 2023.05.27