[MySQL] INTO OUTFILE 문으로 파일 내보낼 때 컬럼명 넣기

SELECT GROUP_CONCAT(CONCAT("'",COLUMN_NAME,"'"))
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME = 'tmp3'
 ORDER BY ordinal_position;
SELECT 'appln_id',
       'docdb_family_id',
       'filing_year',
       'appln_title',
       'GRANTED',
       'doc_std_name',
       'doc_std_name_id',
       'person_ctry_code',
       'applt_seq_nr',
       'invt_seq_nr',
       'earliest_filing_year',
       'priority',
       'person_address_id',
       'company_name',
       'firm_id',
       'person_state',
       'person_country',
       'person_lat',
       'person_lng',
       'clean_person_address',
       'country',
       'capital',
       'firm_id2',
       'hq_state',
       'hq_country',
       'hq_lat',
       'hq_lng',
       'hq_address'
 UNION ALL 
SELECT DISTINCT *
  FROM tmp3
 WHERE firm_id2 = 383
 ORDER BY earliest_filing_year,
          docdb_family_id,
          applt_seq_nr,
          invt_seq_nr
  INTO OUTFILE '/tmp/schott_solar.txt';

update 삽질

현도와 쓰는 논문의 데이터 분석을 거진 마치고 마지막 하나만 추가분석을 하면 되는 찰나에 갑자기 R을 업데이트하고 싶은 욕망이 들끓었다.

R-4.1.3으로 업데이트를 했고,
패키지들을 update.packages() 명령으로 업데이트했더니 역시나 패키지들이 제대로 작동하지 않는다.

그래서 /Library/Frameworks/R.framework 디렉토리를 통째로 지우고
R-4.1.3을 새로 설치하고
마음에 드는 패키지들만 우선 설치를 해 두었다.

다음 차례는 emacs 패키지들 업데이트.
init 파일 조금 손보고 패키지를 업데이트하고 난 후에 아무 생각없이 Homebrew를 통해서 emacs를 28.1로 업데이트했다.

그랬더니, 터미널에서 화면이 무지 깨지는 불상사가 발생.

다시 27.2로 돌아가려고 했지만 이미 homebrew repo에는 27.2 버전을 내린 상황...

소스코드를 갖고 컴파일을 하자니 의존성 문제 때문에 하루 이상은 걸릴 것 같고, 이리저리 서핑을 해보니brew extract 명령으로 설치가 가능한 것 같았다.

https://www.44bits.io/ko/post/install-specific-version-package-homebrew#%ED%8A%B9%EC%A0%95-%ED%8C%A8%ED%82%A4%EC%A7%80%EC%9D%98-%EA%B5%AC-%EB%B2%84%EC%A0%84%EC%9D%84-%EB%A0%88%EC%8B%9C%ED%94%BC-%ED%8C%8C%EC%9D%BC%EB%A1%9C%EB%B6%80%ED%84%B0-%EC%A7%81%EC%A0%91-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

그러나 역시 제대로 설치가 되지 않아 구글링을 더 하다가, 다음 링크에서 emacs-27.2를 제대로 배포한다는 것을 알아냈다.
그러나 역시 daemon을 수도 없이 띄우는 버그가 있었다.
https://github.com/daviderestivo/homebrew-emacs-head

일이 바쁘니 우선은 28.1로 쓰다가, 조만간 28.2가 나오면 업데이트하거나 아니면 27.2로 다운그레이드를 제대로 하는 법을 알아봐야겠다.

다시 emacs-28.1을 사용해보니 화면이 깨지는 경우는 딱 한가지였는데, 한글 입력이 불완전한 경우였다(사실 이 경우는 무엇인지 제대로 파악을 못 했지만). 이 한글 입력을 제대로 다시 했을 때 화면이 깨지는 문제는 사라졌다.

그래서 다시 emacs-28.1을 잘 쓰고 있다.

Finder.app의 해당 디렉토리에서 iTerm2 열기

예전에는 Go2Shell이라는 앱으로 잘 되었었는데,
OSX가 메이저 업데이트 되면서 Go2Shell 관리는 안 하는 것인지 제대로 작동을 안 한다.

그래서 구글링을 하다가 찾은 해결책은 다음과 같다.
해결책 원본은 https://gist.github.com/pdanford/158d74e2026f393e953ed43ff8168ec1

  1. Automator를 켜고 파일 -> 새로 만들기 에서 Application을 선택한다.
  2. Automator에서 라이브러리 -> 유틸리티 -> 애플스크립트 실행을 더블 클릭한다.
  3. 이 글의 제일 아래 있는 AppleScript를 복사해서 붙여넣는다.
  4. Desktop 디렉토리 등에 iTermOpenHereScript.app라는 이름으로 저장한다. 그리고 iTermOpenHereScript.app을 ~/Library/Services에 복사한다. (파인더에서 Shift+Command+G를 눌러서 ~/Library/Services 를 입력하면 해당 디렉토리가 열린다.)
  5. 파인더 -> 응용프로그램의 iTerm2.app을 클릭해서 Command+i 를 쳐서 info 창이 나오면 iTerm2 아이콘을 클릭해서 복사(Command+C)한다.
  6. ~/Library/Services에 있는 iTermOpernHereScript.app을 클릭해서 Command+i 를 쳐서 info 창이 나오면 Automator 아이콘을 클릭하고 붙여넣기(Command+V)를 해서 아이콘 모양을 예쁘게 바꿔놓는다.
  7. Command+Option 키를 누른 상태에서 iTermOpenHereScript.app을 드래그해서 Finder.app의 툴바로 끌어다 놓는다.
  8. iTerm2의 환경설정 -> General -> Startup에 가서 Windows restoration policy를 Only Restore Hotkey Window로 선택한다.
  9. iTerm2의 환경설정 -> General -> Closing에 가서 Quit when all windows are closed의 체크표시를 없앤다. 그래서 기동이 빨라진다.

AppleScript

on run {input, parameters}
    set frontApp to (path to frontmost application as Unicode text)
    if (frontApp does not contain "Finder.app") then
        -- Finder does not have focus.
        return
    end if

    tell application "Finder"
        set listSize to count of (every window)
        if listSize is equal to 0 then
            -- The Finder desktop has focus and no windows anywhere else. default to home dir.
            set dir_path to "~"
        else
            try
                set dir_path to quoted form of (POSIX path of (folder of the front window as alias))
            on error errMsg
                -- This is a special dir (e.g. Network or "machine name"). default to home dir.
                set dir_path to "~"
            end try
        end if
    end tell

    CD_to(dir_path)
end run

on CD_to(theDir)
    tell application "iTerm"
        set term_window to (create window with default profile)
        set sesh to (current session of term_window)
        tell sesh to write text "cd " & theDir & ";clear"
    end tell
end CD_to

일의 속도

40대 중반을 넘어가면서 일의 속도가 매우 느려지고 있다.

일을 받으면 이해하는데 걸리는 속도도 느려졌을뿐더러, 일을 처리하는 속도와 결과물을 검수하는 속도 모두 느려졌다.
게다가 논리실수와 오탈자까지 늘어서, 항상 중간 점검을 하면서 틀린 곳은 없는지 살펴보는 과정이 없다면 일은 끝날 줄을 모른다.

그 첫째 원인은 기억력 저하인 것이 분명하다. 방금 읽은 글들, 방금 정의한 함수들, 방금 정의한 변수들 등등이 몇 초 이후면 기억이 나지 않는다. 그래서 요새는 모든 것을 적어놓는 버릇을 기르고 있다.
사람들이랑 대화할 때는 그나마 다행인 것이, 얘기한 내용은 어느 정도 기억이 난다.
책을 읽으면 큰 윤곽을 이해하는 것은 예전보다 나아진 것 같지만, 세세한 정보들을 파악하고 서로 엮어서 외우는 것은 매우 어려워져 버렸다.

둘째 원인은 너무 일이 많아서인 것 같다. 한 가지 일에 집중을 해야 하는데, 일을 하다가도 대기하고 있는 일들이 생각나는 바람에 현재 하고 있는 일에 집중을 할 수가 없다. 이런 고민은 좋은 결과를 가져오는 경우가 적으니, 현재 일에 집중할 때는 다른 일에는 아예 신경을 꺼야 할 것이라 생각을 들지만 그리 행하기는 쉽지 않다.

셋째 원인은 저하된 체력이다. 운동을 할 때도 최대 피치를 올려서 하지를 못하겠고, 운동 지속시간도 현저히 떨어졌다. 그래서 로잉과 같이 전신근육을 쓰면서 지구력이 필요한 운동은 요새 하지를 못 하고 있다. 수영도 예전같지 않아 천천히 끊어서 끊어서 물을 타는데 집중을 하고 있다.


재작년 초부터 최현도 교수와 함께 작업하던 논문이 reject를 먹고, 원시자료부터 새로 구축하기로 합의를 보았다.

작년 초까지 만들었던 데이터에 문제가 있다는 최현도 교수의 응답에 최대한 빨리 다시 만들어서 보내주겠다고 얘기는 했지만, 사실 다른 일 때문에 바쁜 것도 있었고 SQL문을 짜고 싶지 않은데다가 R로 하려면 너무 복잡해질 것 같은 예감이 들어서 손을 놓고 있었다.

더 이상 일을 미뤄서는 안 되겠다는 생각이 들던 차에 최교수가 전화와서는 조금 빨리 데이터를 건네줄 수 없느냐는 얘기를 했다.
미안한 마음이 들어서 다시 시작하겠다는 다짐을 했다.


PATSTAT 매뉴얼부터 새로 읽으면서 관련 논문들을 살펴보니 역시나 SQL 문을 제대로 써야겠다는 결론을 내렸다.
그런데 MySQL-5.7로 구축된 내 DB 서버가 아무래도 최신 버전보다 느리지 않나 싶어서, MySQL-8.0으로 업데이트하다가 뻑이 나고..
다시 MySQL-5.7로 롤백을 하고 백업을 하려 했으나, 이미 몇 개의 테이블이 맛이 가 있어서 해당 DB들은 아예 지워버렸다. 근 10년 동안 쓰지 않았던 DB니 향후 쓸 일도 없겠다 싶어서. 게다가 뻑이난 DB를 살릴 재간이 나에게는 없었다.

그리고 MySQL을 지우고 MariaDB-10.3 을 새로 깔아보니 shell에서는 제대로 작동하는데 emacs의 SQL 모드에서는 화면에 제대로 뿌려지지 않는 문제가 발생했다.
그래서 혹시나 MariaDB 버전과 emacs 버전의 궁합이 안 맞나 싶어서 MariaDB-10.7을 새로 깔았더니, 그제서야 제대로 뿌려준다. 자잘한 문제는 있지만 며칠 삽질과 고민을 하다가 사용하는데는 큰 영향을 미치지 않으니 그냥 넘어가기로 했다.
게다가 중간중간에 DB를 복원하고 index를 새로 만들고 하는 과정에서 시간을 너무 보냈다.


그저께 오후에 철건이가 전화해서는 내 연구실에서 본인이 풀고자 하는 문제에 대해서 논의를 하고 싶다고 했다.

원래 어제 저녁에는 고재민 교수와 저녁 약속이 있었다.
철건이와 논의는 몇 시간이면 끝날 것으로 예상하기는 했지만 혹시나 싶어 고재민 교수에게는 일이 늦게 끝나게 될 경우 저녁을 같이 못 먹을 것 같다고 미리 언질을 해 놓았다.
어제 점심부터 늦은 저녁까지 철건이와 논의를 하다 보니 역시나 고재민 교수와 저녁을 먹지를 못 했다.
게다가 아침에 주차를 엉망으로 해 놓았는데, 집중해서 논의를 하는 와중에 차를 빼달라는 전화도 몇 통이나 놓치고 말았다.
그럼에도 불구하고 철건이의 문제는 쉽사리 풀리지 않았다.

시간은 시간대로 썼는데, 쉽사리 문제는 풀리지 않고 일처리가 예전보다 많이 느려진 것에 대해서 많은 생각이 들었다.

철건이와 저녁을 먹으면서 소주를 한 병 마셨다.
마음 너른 철건이는 나를 집까지 태워다 줬고, 너무 피곤한 나머지 인터넷을 하다가 금세 잠이 들어버렸다.


오늘은 오래간만에 8시까지 늦잠도 자버렸고, 등산도 하지 못해서 아침부터 짜증이 밀려왔다. 게다가 어제 차를 두고 퇴근을 하는 바람에 학교에 버스를 타고 갈 기분도 들지 않았다.

내 방에서 노트북을 켜고 잠시 최교수와 하는 논문 프로젝트의 코드를 살펴본다.
파일이 많아서 어떤 파일이 어떤 역할을 하는 것인지 잘 기억이 나지를 않는다.

그래서 README.md 파일을 새로 작성을 했다. 나중에라도 이런 삽집을 하지 말라고 말이다.
함수들에 대한 설명, 작성한 파일에 대한 설명, 생성되는 파일들에 대한 설명을 자세히 적어놓았다.

이제는 이런 설명문을 만드는데 생각보다 꽤 오랜 시간을 써야 한다는 것을 깨닫게 된다. 나중에는 더 기억력이 안 좋아져서 파일들을 살펴보면서 그 역할을 따져보는데 시간이 더 걸릴 것이기 때문이다.