Code

    [python] 대용량 csv 불러오는 패키지 dask 간단 리뷰

    목차 1. Dask란? Dask는 Python 라이브러리 중 하나로, 라이브러리 기능 면에서는 Apache Spark와 비슷하지만 numpy, pandas와 긴밀하게 연결되어있어서 Python 사용자들이 spark보다 빠르고 쉽게 활용한다. 2. dask가 빠른 이유 dask는 가상 데이터프레임을 쓰기 때문에 pandas 데이터프레임과 비슷한 기능을 제공하지만 실제로 모든 데이터가 메모리 상에 로드되어있는 것이 아니라 하나 이상의 파일 또는 데이터베이스에 존재한다. 그렇기 때문에 메모리 크기와 관계 없이 엄청나게 큰 csv 파일을 하나의 가상 데이터 프레임에 로드할 수 있다. 또한 dask는 대량의 데이터 분석 작업을 돕기 위해 작업 스케쥴러를 제공한다. 하나의 작업을 여러개의 쓰레드, 프로세스, 노드 ..

    [Python] inspect 모듈의 getsource() 함수

    우리가 쓰는 패키지는 대부분 소스코드와 함께 제공이 되고 있다. 또한 공식적인 패키지가 아니라면, 함수에 자세한 설명이 적혀있지 않은 경우도 많다. 이러한 경우, 함수의 소스코드를 직접 확인하고 참조해야 하는 경우가 있는데, 이럴 때 inspect의 get source를 사요하면 좋다. 1. inspect 설치 inspect 설치는 간단하다. pip install로 설치한다. pip install inspect 2. inspect의 기능 inspect는 모듈, 클래스, 함수에 대한 소스코드를 출력해준다. 다양한 기능이 있다고 하지만, getsource()함수 하나도 참 유용하다. getsource() 안에 클래스 이름을 써주면, 해당 클래스의 소스코드가 출력된다. from inspect import ge..

    [Oracle] Oracle Exadata의 압축방식 (Exadata Hybrid columnar Compression, EHCC)

    오늘은 Oracle Exadata의 압축방식과 데이터를 활용하는 방법에 대해서 알아보려고 한다. 1. Oracle 압축방식 Oracle은 데이터 압축을 통해서 저장 공간을 절약할 뿐만이 아니라 I/O의 비용을 최소화할 수 있다. 기존 오라클 압축에서는 BASIC 압축, OLTP 압축 방식이 있었는데 Exadata에서는 Exadata Hybrid Columnar Compression(EHCC, 또는 HCC)라고 하는 새로운 압축 기법을 제공하고 있다. Basic 압축과 OLTP 압축은 데이터를 블록 레벨로 압축하는 방식이다. 반면에 EHCC는 Compression Unit이라는 논리적인 압축 단위로 압축을 한다. 2. EHCC란 무엇인가? 기본적으로 테이블에는 여러개의 튜플(로우)와 여러개의 어트리뷰트(컬..

    [Oracle] Oracle Exadata란 무엇인가

    현재 프로젝트를 수행하고 있는 업체에서 DB 를 Exadata를 사용하고 있다고 한다. 처음에 Oracle Exadata를 사용한다기에 Oracle 과 어떤 차이가 있는지 잘 몰랐는데 알고 보니 곳곳에서 차이점이 꽤 있는 듯 하다. 잘 아는 것은 아니지만, 찾아보고 검색한 대로 내용을 정리해 보려고 한다. 1. Exa데이터는 무엇인가? 우선 데이터의 단위에 대해서 알면 Exadata에 대한 접근이 쉬울 듯 하다. Exa는 기가 - 테라 - 페타 다음의 데이터 기억 용량의 단위이다. 한마디로 매우 큰 데이터의 용량 단위라고 생각하면 된다. 시대가 발전하면서 데이터가 저장할 수 있는 크기가 점점 커졌지만, 그에 따라 데이터를 처리하는 시간 또한 늘어나고 데이터를 처리하는 것에 대해 오류가 발생할 확률 또한 ..

    [Oracle] 오라클 append와 append_values 힌트, 사용방법

    현 프로젝트에서 대량의 데이터를 적재하기 위해 오라클에서 INSERT 문을 사용하여 데이터를 적재하고 있었다. 조금 오래걸리지만 데이터 용량이 커서 그러겠거니 하면서 평화롭게 적재를 하고 있던 도중, IT 현업이 내려와서 대용량 데이터를 압축도 안시키고 그냥 적재하고 있냐며 한바탕 쿠사리를 주길래... 당황 겸 혼나면서 찾아본 append 힌트 구문... 정확이 append 구문을 언제 사용하며, 사용하는 방법에 대해 적어보려 한다. 1. append 힌트를 사용하는 이유가 무엇인가? 이것저것 찾아보니 다른 곳에서도 통상적으로 대량의 데이터를 INSERT 시킬 때에 많이 사용하는 문구가 APPEND 힌트라고 한다. APPEND 힌트를 사용하면, 중간에 버퍼 캐시를 경유하지 않고 바로 데이터 블록을 쓸 수..

    [Python/Oracle] cx_Oracle timeout 설정하기

    Python 에서 DB 연결을 해서 Oracle에 접속하게 하는 패키지 cx_Oracle. 작은 데이터를 불러오는데는 크게 문제가 안되지만, 대용량 데이터를 불러올 때에는 오래 걸리는 시간 탓에 간혹 타임아웃 에러가 나고는 한다. 이유는 python 안에서 주어진 시간 안에 oracle 이 구동되어야 하는데 그 시간을 넘을 때 나는 애러이다. 그럴 때에는 timeout 시간을 설정하여 늘릴 수 있다. 1. 타임아웃 에러문 타임아웃 에러가 나는 문장은 대게 아래와 같다 DB Error : DPI-1080 : connection was closed by ORA-3156 Traceback (most recent call last): ~~~ cx_Oracle.DatabaseError: DPI-1010:not c..

    [Oracle] 오라클 힌트(hint)의 개념, 사용법 알아보기

    오라클의 힌트를 사용하는 것과 힌트를 사용하지 않는 것은 생각보다 꽤 큰 차이가 있다. 실제로 병렬처리 힌트 구문을 사용하고 차이를 확실히 느끼다 보니, 힌트구문을 더 알아보고 싶다는 생각을 하게 됐다. 그래서 오늘은 힌트절에 대한 개념과 사용 방법에 대해 알아보고자 한다. 1. 오라클 힌트(Oracle hint)란? 힌트는 SQL 튜닝을 하는데에 중요한 핵심 지시구문이다. 오라클은 자체적으로 최적의 실행 방법으로 작동시키는 옵티마이저(Optimizer)가 있는데, 간혹 옵티마이저가 실행하는 것보다, SQL 사용자가 직접 힌트 구문을 줌으로써 최적의 실행 구문을 선언하는 것이 더 나을 때가 있다. 사용자가 특정 SQL 문장에서 어떤 인덱스의 선택도가 높은지 알고 있다면, Optimizer에 의존한 실행 ..

    [Oracle] 오라클 WITH절을 사용하여 임시테이블 만들기

    최근 오라클9i R2부터는 WITH절을 사용하여 가상테이블을 사용할 수 있도록 했다. 일전에는 임시테이블을 별도로 생성해서 만들거나, SELECT 문의 FROM 절에 반복되는 서브쿼리들을 생성하여 테이블을 불러오곤 했는데, 이제는 덕분에 가독성이 높아지게 된 것이다. 오늘은 가상테이블, 임시테이블을 생성하는 WITH절에 대해서 적어보려 한다. 1. WITH절이란? 오라클 내 WTIH절은 SQL 문장에서 오라클 공유메모리에 임시로 테이블을 생성하여 반복재사용이 가능하도록 하는 구문이다. 동일 테이블 접근을 최소화하고 메모리에 생성된 임시테이블에서 필요한 데이터를 메모리로 접근하기 때문에 성능이 향상될 수 있다. 2. WITH절의 사용방법 WITH절의 사용방법은 간단하다. WITH (TABLE 명) AS (..