전체 글 1149

[MySQL] JSON_TABLE - JSON 데이터를 테이블로 변환

개요2024.09.23-[MySQL] JSON 다루기에서 MySQL에서 JSON 형식의 데이터를 추가하고 조회하는 방법을 알아보았다.이번 글에서는 JSON 데이터를 테이블 형태로 변환하는 함수인 JSON_TABLE 함수의 사용 방법을 적어둔다.  JSON_TABLEJSON_TABLE(expr, path COLUMNS (column_list) [AS] alias)JSON_TABLE은 JSON 데이터를 표형식 데이터로 변환하는 함수로 MySQL 8.0에서 도입되었다. 매개변수는 다음과 같다.- expr : 테이블로 변환할 JSON 데이터- path : 테이블 행을 생성하는데 사용하는 JSON 경로- column_list : 테이블 열을 생성하는데 사용하는 JSON 경로 예시와 함께 사용 방법을 적어둔다.  ..

Database 2024.10.10

[MySQL] JSON 다루기

개요최근 MySQL에서 JSON 데이터를 지원하고 있다는 것을 알게 되었다. 간단히 읽고 쓰는 방법을 확인해 보자.   JSON 타입MySQL 데이터베이스의 테이블에서 JSON 데이터를 다루기 위해서는 테이블 컬럼의 데이터형이 JSON이어야 한다.CREATE TABLE employees ( id integer AUTO_INCREMENT primary key, name VARCHAR(200), profile JSON);  INSERTJSON 데이터는 문자열 또는 JSON_OBJECT를 사용하여 입력할 수 있다. 1. 문자열로 입력하기INSERT INTO employees(name, profile) VALUES ('홍길동', '{ "age" : 30, "gender" : "man", "부서": "개발" }'..

Database 2024.10.08

[Pandas] 데이터프레임 생성 시 ValueError: All arrays must be of the same length

현상다음과 같은 JSON 형식의 데이터가 있다고 하자.{ 'Singer' : 'James', 'Titles': ['a', 'b', 'c'], 'Albums' : [1, 2]}이 데이터를 1행 3열의 데이터프레임으로 생성하려고 한다. 하지만 기본적으로 리스트의 원소 수만큼의 행을 가진 데이터프레임을 만들게 끔 되어 있기 때문에 생성을 시도하면 다음과 같은 에러가 발생한다.ValueError: All arrays must be of the same length꼼수를 부려 데이터프레임을 만들어 보자.   방법데이터프레임을 생성할 때 DataFrame 생성자 말고 from_records, from_dicts과 같은 함수를 사용할 수도 있다. 이중 from_dicts 함수는 orient라는 매개변..

[Algorithm] 서로 다른 두 범위가 겹치는지 확인하기

개요다음과 같이 두 개의 범위가 있다고 할 때,├───A───┤ ├───B───┤두 범위에 서로 겹치는 부분이 있는지, 없는지 판단하고 싶다. 간단한 방법이 있는지 알아본다.   경우의 수서로 다른 두 개의 범위가 위치할 수 있는 경우의 수부터 알아보자. 1. 범위 A의 최댓값이 범위 B의 최솟값보다 작은 경우max(A) ├───A───┤ ├───B───┤ 2. 범위 A의 최대값이 범위 B의 최솟값보다 크거나 같으면서 범위 B의 최댓값보다 작거나 같은 경우min(B) ├───A───┤ ├───B───┤ 3. 범위 A의 최소값이 범위 B의 최솟값보다 크거나 같으면서 범위 B의 최댓값보다 작거나 같은 경우min(B) ├───A───┤├───B───┤ 4. 범위 A의 ..

Algorithm 2024.10.04

[Python] Template - 문자열 템플릿

개요Python에서는 f-string이라는 간편하고 강력한 방법으로 문자열 포맷팅을 제공해주고 있는데, 간혹 일부 값만 치환해야 하는 상황에서는 사용할 수 없는 경우가 있었다. python에서 기본적으로 제공하는 %-포맷팅이나 str.format 함수도 확인을 해봤는데, 아무래도 제공하지 않는 기능인 것 같다.이번 글에서는 문자열을 포맷팅하는 또 다른 방법인 Template이라는 기능을 소개하려고 한다.  TemplateTemplate은 string의 기능으로 간단한 문자열 포맷팅을 제공하는데, 여기서 말하는 간단하다는 말은 Python의 다른 내장 문자열 포맷팅 기능보다 번역하기 쉽게 만들어졌다는 의미이다. (코드 관점에서의 이야기인 듯?)string.Template은 $를 기반으로 문자열 치환을 제공..

Python 2024.10.02

[Tornado] httpclient - HTTP 요청

개요이전에 python의 requests를 사용해 http 요청하는 방법을 적어두었었는데, requests 라이브러리 외에 http 요청을 할 수 있는 방법은 여러 가지다. 이번 글에서는 Tornado의 httpclient 객체를 사용해 http 요청을 하는 방법을 적어둔다.  tornado.httpclienttornado.httpclient는 차단/비차단 HTTP 클라이언트 인터페이스다.simple_httpclient, curl_httpclient을 공유하는 공통 인터페이스를 정의하며, 사용자 애플리케이션은 적절한 구현 클래스를 직접 인스턴스화하거나 AsyncHTTPClient를 사용하여 재정의할 수 있는 구현 클래스를 선택할 수 있다. 기본적으로는 simple_httpclient를 사용한다.curl_..

Python 2024.09.30

[Pycharm] 파일 변경 사항 복원

개요Python 개발을 할 때 Pycharm을 사용하고 있는데 간혹 변경한 부분은 다시 원복해야 하는 경우가 종종 있다. 근데 그 양이 많아서 실행 취소로 할 수 없는 수준이라 곤란했었는데, Pycharm에서 파일 변경 사항을 추적하는 기능을 제공해주고 있어 정리한다.  로컬 히스토리로컬 히스토리 기능은 Git과 같은 형상 관리와 별도로 프로젝트에서 발생한 변경 사항을 지속적으로 추적하는 기능이다.커밋 간의 차이점만 추적하는 Git과는 다르게, 코드 편집, 테스트 실행, 애플리케이션 배포 등의 작업을 할 때 프로젝트의 상태를 자동으로 기록한다. 따라서 삭제한 파일을 복원하는 등의 작업을 수행할 수 있게 된다. 다만 Git과 같은 형상 관리를 대체하지 못하고, 보관 주기와 보관 용량에 한계가 있다.  이력..

기타 2024.09.27

[Celery/Flower] 설치 및 실행

개요업무 상 Airflow에서 CeleryExecutor를 사용하고 있어 이전에  2023.08.09-[Python] Celery 란 글로 간단한 개념을 알아보았었다. 하지만 막상 Celery를 들여다보는 상황이 되면 관련 개념 부족을 느끼곤 했다. 때문에 아주 간단하게 Celery를 직접 설치해 보고 실행해 보는 경험에 대한 필요성을 느껴 적어두려고 한다. 공식 문서의 튜토리얼을 참고하여 작성했고, Message Broker로는 Redis를 사용한다. 단순 테스트이기 때문에 환경은 killercoda를 사용한다.  Message Broker 설치Celery를 사용하기 위해서는 Worker 간 Task를 주고받는데 사용할 Message Broker가 필요하다.이 글에서는 redis를 사용한다고 명시했으므..

Apache Airflow 2024.09.26

[MySQL] GROUP_CONCAT - 그룹 별 행 압축

개요여러 값이 저장되어 있는 테이블에서 특정 컬럼에 그룹 별로 값이 어떤 것들이 있는지 확인하고 싶다. 이럴 때는 그룹 별로 여러 행의 데이터를 하나의 필드로 연결하는 GROUP_CONCAT 함수를 사용할 수 있다. 사용법을 적어둔다.  GROUP_CONCATGROUP_CONCAT은 여러 행의 데이터를 하나의 필드로 연결하는데 사용하는 함수이다. 그룹에 NULL이 아닌 값이 포함되어 있으면 문자열 값을 반환하는 집계 함수로, 그룹에 값이 전부 NULL이면 NULL을 반환한다.SELECT GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY 절] [SEPARATOR str_val] ) FROM 테이블_이름 GROUP BY 그룹화_기준_열;   예시다음과 같이 물건의 유형과 이름..

Database 2024.09.25

[DBeaver] Connection is read-only. Queries leading to data modification are not allowed.

현상DBeaver를 사용해 MySQL에서 작업을 수행하려고 하는데, 언제부터인가 데이터 SELECT문은 정상적으로 동작하지만 ALTER, WITH, CREATE 등의 SQL을 사용할 때는 다음과 같은 에러가 발생하면서 수행되지 않았다.계속 작업이 불가능한 상태라 해결 방법을 적어둔다.   해결 방법최근 Connection 설정을 편집하면서 실수했는지, rea-only connection 설정을 활성화한 게 원인이었다. 다시 수정해 보자. 1. Connection 설정 편집창 열기Connection 우클릭 > Edit Connection으로 접근할 수 있다. 2. General 탭 > Security 항목 확인Securitydml Read-only connection 설정을 체크 해제한 후 저장한다.   ..

Database 2024.09.24