duckdb 에서는 Parquet 은 지원하는데, orc 는 지원하지 않는다. 그리고 이슈를 찾아보면 별로 지원할 생각도 없는거 같다.그래서 cli 툴로는 접근하는 제한이 있는데, apache arrow 를 경유하면 다양한 포맷을 읽는것이 가능하다.여기서는 pyarrow 를 이용해서 접근하는 예제를 알려주도록 하겠다.당연하지만, pip install pyarrow 가 선행되어야 한다. 해결방법다음과 같이 pyarrow.orc 를 이용해서 orc 파일을 읽어내는게 가능하다.아래 예제는 hdfs://my/user/user/export/sample/* 파일이 orc 포맷으로 저장되어있을때 읽는 예제이다. hadoop 에 저장된 orc 파일을 읽어내는 샘플코드를 정리했다.import pyarrow as paim..
텍스트 포맷으로 데이터를 다룰때 가장편하게 사용하는게 우리팀은 탭을 구분자로 만든 파일을 사용한다.그리고 일반적으로 이걸 읽어들이는 모듈은 csv 관련 모듈을 써서 사용하게 된다. 이를 케이스별로 어떻게 쓰는지 알려주고자 한다. 1. 헤더라인 있음 + 구분자 정의맨 윗줄에 필드명이 정의된 경우를 의미한다. 이때는 특별히 해줄것은 없다.단, 구분자의 변경이 필요하다면, 다음과 같이 parse_options 을 잘 정의해줘야한다.나는 chatGPT 가 과거 버전의 해결법을 알려준건지 이것때문에 삽질을 꽤 했다.import pyarrow.fs as fsimport pyarrow.csv as csvimport duckdbhdfs = fs.HadoopFileSystem(host='hdfs://my', user='..
우선 duckdb 에서 s3 는 기본지원이 되는데, hdfs 는 기본지원이 안된다.jupyter 에서 duckdb 를 이용해서 간단한 필터링과 정렬을 sql 기반으로 다룰수 있어서 유용한데 hdfs 의 파일을 분석할때 고민이 되는데, 이때는 pyarrow 를 이용하여 연동하면 대부분 해결된다. (orc 포맷도 pyarrow 로 해결가능함) 해결방법당연하지만 pyarrow 와 duckdb 라이브러리는 깔려있어야한다.그리고 여기서는 kerberos 인증을 keytab파일을 통해 hadoop 연결을 한다고 가정하겠다.우선 다음과 같이 keytab 인증을 한다고 가정한다. 주피터에서는 이런 명령을 실행할때 맨앞에 ! 를 넣고 라인에서 실행하는것도 가능하다.kinit -kt /home1/user/myuser.ke..
python 3.10 환경에 분석을 위한 다양한 라이브러리를 구성하다보니 호환성 문제로 아래와 같은 문제가 밸생했다. 1. 오류내용크게보면 여러 라이브러리에서 아래와 같은 문제가 발생했다. 사실 처음에는 다양한 라이브러리를 한번에 설치해서 원인을 찾기 힘들었는데 하나식 역추적하며 결국 해결방법을 찾았다. 1.1 numpy 버전 문제 오류A module that was compiled using NumPy 1.x cannot be run inNumPy 2.0.2 as it may crash. To support both 1.x and 2.xversions of NumPy, modules must be compiled with NumPy 2.0.Some module may need to rebuild ins..
주피터랩에서 minio 기반의 s3 데이터의 엑셀파일을 연동할때, IPython 매직명령어 기반으로 %sql 형태로 표현해서 연동하려고 했는데 공식 문서를 확인해보면 SECRET 을 생성후 연결한다고 되어있는데, 문제는 minio 에서 연결하는 예제가 잘 안되어 있어서 실패가 났는데, minio 기반의 s3 를 접근하기위한 예제를 알려주고자 한다. https://duckdb.org/docs/extensions/httpfs/s3api.html S3 API SupportThe httpfs extension supports reading/writing/globbing files on object storage servers using the S3 API. S3 offers a standard API to r..
airflow 2.x 부터 롤기반으로 권한관리가 일어나고, 이에 따른 퍼미션 권한이 존재한다.그런데 이게 어떤걸 의미하는건지 잘 정리가 안되서 간단히 정리하고자한다. 1. can read on DAGsDAG 를 볼 수 있는지 여부를 의미한다.리스트에 나와서 어떤 DAGS 가 있는지 조회된다의 의미일뿐 실행이나 해제같은 동작은 안된다. (진짜 목록에만 보일뿐 할 수 있는게 없음) DAG 별로 따로 수동으로 관리하고, 기본적으로 조회가 안되게 하려면 이 옵션을 제거해주도록 하자.그러면 아래와 같이 기본적으로는 DAGS 의 목록이 조회되지 않는다.특정 DAG 만 조회 가능하게 하려면 "can read on DAG: " 형태로 부여하는것도 가능하다. 2. can edit on DAGsDAG 의 목록이 보이고,..
json 문자열을 complex data types 으로 바꿔줄 수 있는 유용한 함수이다.이게 유용한게 GET_JSON_OBJECT 으로 데이터를 찾아서, 묶어낼때 정규식을 써서 해결해야하는걸 데이터 타입을 바꿔서 쉽게 해결할수 있는 경우가 존재한다. brickhoust 의 from_json 함수와 같은 기능을 한다고 보면 된다. 2024.01.18 - [데이터처리/Hive] - [HIVE] JSON 을 다루는 함수 설명 & 예시 - brickhouse UDF json_read 가 유용할 때?hive 3.x 에서는 json_read 함수가 없다보니, 아래와 같이 json 결과가 몇건인지 혹은 데이터를 구분자로 묶어야 할때 처리가 매우 난감하다. 왜냐면 아래와 같이 문자열 [] 가 있고, 문자열에는 ""..
hive 4.x 버전에서 유용한 함수들이 많이 추가되었다. 그중 유용한 함수가 있어 몇가지 소개하고자 한다.UniqueCount , Count Distinct 를 구할때 속도가 많이 느린 문제가 있다. PageCount 같은 경우는 단순히 count 하면 되지만, UserCount 를 할때는 중복 접속한 사람을 제거해야하는 문제인데, 문제는 이런 값을 구하는 속도가 너무 오래걸린다. 그래서 HyperHyperLog 알고리즘을 이용하여 빠르게 구하는 함수가 존재하는데, presto 에는 존재했는데 hive 에는 없어서 이 값을 구하려면 매우 오래걸렸다. (참고로 approx_distinct 는 근사치를 구하긴 하지만 정확도대비 성능을 보면 무조건 써야할 경우가 많다) https://github.com/a..