external table 로 테이블을 만들어 관리할때, table 이름을 rename 해도, 폴더가 테이블명에 맞춰서 수정되지 않는다. 그렇다고 테이블의 location 속성의 경로를 수정해도, 파티션 테이블인 경우 인지가 안되는 문제가 존재한다. location 까지 세트로 변경이 안되면, hdfs 에서 직접 데이터를 바라보는 사람은 테이블명과 다르면 혼란이 올 수 있기 때문에 완벽하게 테이블명과 location 의 폴더명도 세트로 변경하고 싶은 경우를 의미한다. 문제예시 예를 들면 아래와 같다. location 폴더를 백업폴더로 이동하고, table 의 location 을 이동시킨 폴더로 변경하더라도 바로 조회되지 않는다. 테이블이 아닌 파티션별 location 을 변경해야 한다. 문제는 이런 파티..
hive 에서는 Array 형태의 데이터를 풀어서 ROW 로 풀어내는게 가능하다. 이때 사용하는문법이 explode 이다. posexplode 는 무엇이냐? 인덱스번호까지 알아야할 경우가 종종 있는데 이때는 posexplode 를 쓰면 된다. 이해를 돕기위해 아래와 같은 데이터가 존재한다고 가정하자. (v_sample) beeline> select * from v_sample; +------------------+-------------------------+ | v_sample.tags | v_sample.title | +------------------+-------------------------+ | ["fun","happy"] | hello! my name is haha | | [] | test..
ETL 작업을 구성하다보면, 배치주기가 다양하게 구성하는 경우가 많다. 특히, raw 로그를 처리하는건 10분 단위와 같이 짧게 유지하고, 뒤쪽 데이터 가공하는건 1시간이나 1일 단위로 배치 사이클을 더 넓게 가져가야하는 경우가 종종 생긴다. 만약, NamedHivePartitionSensor 를 사용하는 경우는 N개의 파티션 이름을 나열해서 쉽게 해결이 가능하다. 그렇다면 ExternalTaskSensor 에서는 이런 문제를 어떻게 해결할 수 있을까? check_event_log = NamedHivePartitionSensor( task_id='check_event_log', partition_names=[ "log.event_log/ymd={{ ymd(dag_run.logical_date) }}/hh..
airflow 의 Quick Start 웹페이지에 보면 설치하고 airflow standalone 으로 가볍게 띄우려고 할때 아래와 같은 오류가 발생될때가 존재한다. 결론부터 말하면 서버의 sqlite 버전이 낮기 때문이다. 그래서 더 상위버전으로 업데이트 재설치가 필요하다. https://airflow.apache.org/docs/apache-airflow/2.7.3/start.html (py3) $ airflow standalone Traceback (most recent call last): File "/home/myuser/py3/bin/airflow", line 5, in from airflow.__main__ import main File "/home1/myuser/py3/lib/python3..
쿼리문에서 N 개의 문자열 포함 여부를 판단할 때 in 쿼리를 많이 사용한다. 그것과 유사하게 엑셀내에서, 필터함수를 사용해서 특정 시트의 값 조건에 따라 필터링한 결과를 출력해주는걸 하려면 어떻게 해야할까? 1. 쿼리문에서 in 절을 엑셀에서 표현하려면? 쉽게 말하면 SQL 에서 in 절을 엑셀에서 어떻게 표현할 수 있을까? 하는 의미이다. SELECT * FROM 직원 WHERE 고향 in (서울, 부산, ...) -- 조건을 변경하면서 검색한다면? ; 검색할 갯수가 고정적이라면 조건문에 + 를 써서 OR 조건으로 표현하는게 수식이 매우 쉽다 (이전글 참조) 2023.08.14 - [데이터처리/구글시트-엑셀] - [엑셀] SQL의 where 를 엑셀로 하려면? filter 함수 활용하기 (2개이상조건..
나 처럼 쿼리가 더 편하고, 엑셀이 더 낯선 사람을 위한 코너이다. 엑셀 자체에 필터기능이 존재 해서 쉽게 필터를 사용할 수 있는데, 함수를 이용해서 필터링하는것은 잘 안내되지 않는 경우가 많다. 만약, 아래 데이터에서 고향이 서울이나 부산이면서, 나이가 30세 이상인 사람만 필터링 하려면 어떻게 해야할까? 쿼리로 표현하면 이렇다 쿼리로 표현하면 이런 SQL 로 표현이 가능하다. 그럼 엑셀에서는 어떻게 표현해야할까? SELECT * FROM 직원 WHERE (고향 = '서울' OR 고향 = '부산) AND 나이 >= 30 ; 엑셀로 표현하는 방법 결론부터 말하면 엑셀에서 filter 함수를 사용하면 쉽게 해결된다. 인자값이 3개인데 가장 중요한건 2번째 인자값으로 조건문에 해당한다. =FILTER(직원!..
개인적으로 엑셀을 복잡하게 쓰는일이 적고, 오히려 구글시트를 주로 쓰게되는 경우가 많았다. 구글 시트에서는 다른 파일의 시트내용을 IMPORTRANGE 라는 함수로 쉽게 가져오는 방법이 존재했다. 그런데, sharepoint 를 통한 엑셀을 사용하다가 그러면 엑셀에서는 외부 시트의 데이터를 어떻게 가져올 수 있지? 하고 삽질을 했는데 뚜렷한 방법이 안나와서 헤맸는데 결국은 방법을 찾았다. 해결방법 : 외부 시트 참조하는법 결론부터 말하면 매우 쉽다. 파일명을 [] 로 감싸고, 그 뒤에 참조할 시트명을 넣어주고 '' 로 감쌓은후, 시트 시작과 종료열을 적으면 된다. 원래는 파일명을 풀경로로 적어줘야하는데, 작업중인 파일이 같은 경로에 존재한다면 경로를 생략하고 파일명만 넣어주면 알아서 풀경로를 채워주고, ..
개인적으로는 엑셀보다는 SQL 쿼리문이 더 익숙하다. 그래서 검색어를 뭐로해야 하나 한참 헤멨는데 결국 해결방법을 찾았다. 쉽게 생각해서 동일한 포맷의 데이터를 하나로 합쳐야 할때가 종종 필요한데 이것을 하는 방법이다. 결론부터 말하면 VSTACK 함수를 써서 합칠수 있고, 중복된건 UNIQUE 함수를 쓰면 해결가능하다. VSTACK = UNION ALL SQL 에서는 UNION ALL 로 2개의 테이블을 하나로 묶어서 조회하는게 가능하다. 그럼 엑셀에서는 어떻게 사용하면 될까? VSTACK 함수를 사용하면 된다. 기본 사용법은 아래와 같고 수식 차체가 어려운것도 없다. =VSTACK(시트범위, 시트범위2, ... , 시트범위N) 이해를 돕기위해 예시를 들어 설명한다면 아래와 같다 (아래 이미지 참조) ..