삼일오일사
close
프로필 사진

삼일오일사

github: @zjacom

  • 분류 전체보기 (115)
    • Book (66)
      • Learning SQL (9)
      • SQL 레벨업 (8)
      • 견고한 데이터 엔지니어링 (5)
      • 운영체제 (2)
      • 스파크 완벽 가이드 (9)
      • 파이썬 코딩의 기술 (29)
      • 분산 컴퓨팅 (4)
    • 개발 (31)
    • 기타 (10)
      • 출퇴근 공부 간단 정리 (7)
    • ELK (6)
  • 홈
  • 태그
  • 방명록

오픈 소스의 버그를 발견한 경험

회사에서 Superset이라는 오픈소스 BI 툴을 사용하던 중에 어이없는 오류를 발견했다.WITH user_cte AS ( SELECT name, age FROM test WHERE age > 20)SELECT name as "사람 이름", age as "나이", COUNT(*) as "something else"FROM user_cteGROUP BY name, age; 위 쿼리를 사용하면 아래와 같은 오류가 발생한다.Unexpected errorCustom SQL fields cannot contain sub-queries. 하지만 아래 쿼리를 사용하면 오류가 발생하지 않는다.WITH user_cte AS ( SELECT name, age FROM test ..

  • format_list_bulleted 카테고리 없음
  • · 2025. 7. 2.

PostgreSQL에서 FLOAT 타입 제대로 알고 사용하기

문제우리 회사는 PostgreSQL에 실수 값이 `real(float4)` 타입으로 저장되어 있으며, 이 데이터를 JavaScript에서 `Math.round()`를 사용하여 반올림하여 통계를 제공하고 있었다.새로운 통계 방식을 위해 Superset을 도입했고, 이 과정에서 SQL의 `ROUND()` 함수를 사용하여 반올림했다.하지만 통계 수치나 비교 결과가 불일치하는 문제가 발생했다. 원인부동소수점의 한계앞서 얘기했듯, PostgreSQL에는 실수가 `real` 타입으로 저장되고 있었다.`real`과 `double precision` 같은 부동소수점 타입은 이진수로 표현할 수 있는 숫자만 정확히 저장할 수 있어서, 대부분의 10진 실수는 근사값으로 저장된다.SELECT 0.1::real; ..

  • format_list_bulleted 카테고리 없음
  • · 2025. 6. 20.
DB Lock을 처음 경험한 날

DB Lock을 처음 경험한 날

나의 업무 중에 특정 CSV 파일을 읽어, 데이터를 파싱하고 테이블에 풀리프레쉬 방식으로 삽입하는 작업이 있다.백엔드 개발자의 요청으로 해당 스크립트를 실행했는데, 데드락에 걸리는 상황이 발생했다. 일단 원인은 나의 스크립트 안에 테이블을 삭제하고 다시 생성하는 코드가 포함되어 있는데, 이 타이밍에 백엔드 개발자가 데이터를 조회했기 때문에 락(Lock)이 발생했다. 위 이미지는 `t_pole_image`라는 테이블에 `AccessExclusiveLock`이 걸린 모습이다.`AccessExclusiveLock`은 가장 강력한 테이블 락(Lock)으로, 해당 테이블의 모든 작업을 차단한다.빨간색 박스 안에 있는 두 줄을 살펴보면, 하나의 세션에서는 `AccessExclusiveLock`을 획득(`grante..

  • format_list_bulleted 개발
  • · 2025. 3. 18.

LATERAL JOIN에 대해 알아보자.

LATERAL JOIN은 SQL에서 제공하는 강력한 쿼리 기능으로, 일반적인 JOIN과는 다르게 작동한다.LATERAL JOIN의 특징은 오른쪽 테이블이 왼쪽 테이블의 각 행을 참조할 수 있다는 점이다.파이썬 코드로 표현하면 다음과 같다.for row1 in 왼쪽_테이블: for row2 in 오른쪽_테이블: # 작업 SQL 쿼리문은 다음과 같이 작성되는데, 일반 JOIN문과 달리 ON 조건이 없는 것을 확인할 수 있다.-- 왼쪽 테이블 당 매칭되는 오른쪽 테이블의 행을 3개씩만 가져오고 싶은 경우SELECT *FROM 왼쪽 테이블 leftCROSS JOIN LATERAL ( SELECT * FROM 오른쪽 테이블 WHERE 특정 조건 LIMIT 3) right; ..

  • format_list_bulleted 개발
  • · 2025. 3. 17.
10장 - 인덱스 사용

10장 - 인덱스 사용

RDB에서 사용하는 인덱스는 구조에 따라 다음과 같이 세 가지로 분류할 수 있다.B-tree 인덱스비트맵 인덱스해시 인덱스B-tree 인덱스데이터를 트리 구조로 저장하는 형태의 인덱스이다.균형잡힌 뛰어난 범용성을 인정받아 가장 많이 사용된다. 사실 대부분의 데이터베이스는 트리의 리프 노드에만 키 값을 저장하는 B+tree를 채택한다.B+tree는 B-tree에 비해 검색을 보다 효율적으로 만든 알고리즘이다. 하지만 본질적인 특징은 B-tree와 B+tree가 다르지 않다. 기타 인덱스비트맵 인덱스는 데이터를 비트 플래그로 변환해서 저장하는 형태의 인덱스로, 카디널리티가 낮은 필드에 대해 효과를 발휘한다.하지만 갱신할 때 오버헤드가 너무 크기 때문에 BI/DWH 용도로 사용된다. 해시 인덱스는 키를 해시 ..

  • format_list_bulleted Book/SQL 레벨업
  • · 2024. 10. 4.
7장 - 서브쿼리

7장 - 서브쿼리

테이블 : 영속적인 데이터를 저장뷰 : 영속적이지만 데이터는 저장하지 않음. 따라서 접근할 때마다 SELECT 구문이 실행됨서브쿼리 : 비영속적인 생존 기간이 SQL 구문 실행 중으로 한정서브쿼리의 문제점서브쿼리의 성능적 문제는 결과적으로 서브쿼리가 실체적인 데이터를 저장하고 있지 않다는 점에서 기인한다.이에 따라 다음과 같이 세 가지 문제가 발생한다. 실체적인 데이터를 저장하고 있지 않은 서브쿼리에 접근할 때마다 SELECT 구문을 실행해서 데이터를 만들어야 한다는 뜻이다.따라서 구문 실행에 발생하는 비용이 추가된다. SELECT 구문의 연산 결과를 사용하기 위해서 메모리에 저장해야 한다.만약 메모리의 공간이 충분하다면 상관 없지만, 아닐 경우 저장소에 저장할 때도 있다.이를 TEMP 탈락 현상의 일종..

  • format_list_bulleted Book/SQL 레벨업
  • · 2024. 9. 25.
  • navigate_before
  • 1
  • 2
  • 3
  • navigate_next
공지사항
  • 31514의 이전 블로그는 여기로!
전체 카테고리
  • 분류 전체보기 (115)
    • Book (66)
      • Learning SQL (9)
      • SQL 레벨업 (8)
      • 견고한 데이터 엔지니어링 (5)
      • 운영체제 (2)
      • 스파크 완벽 가이드 (9)
      • 파이썬 코딩의 기술 (29)
      • 분산 컴퓨팅 (4)
    • 개발 (31)
    • 기타 (10)
      • 출퇴근 공부 간단 정리 (7)
    • ELK (6)
인기 글
전체 방문자
오늘
어제
Copyright © 31514 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바