본문 바로가기

전체 글

(45)
Unity Catalog Databricks를 접하다보면 가장 많이 듣고 쓰는 단어가 Unity Catalog이다.보다 Unity Catalog 쉽게 이해할 수 있도록 기록하고자 한다. 우선 Databricks에서 말하는 Unity Catalog 는 다음과 같다.Unity Catalog는 Databricks에서 데이터와 AI 자산을 중앙에서 관리/통제하기 위한 통합 거버넌스 계층이다.여러 Databricks 워크스페이스에 흩어진 테이블, 파일, 모델, 함수 등을 한 곳에서 검색하고,접근 권한/감사/데이터 계보(lineage)를 관리할 수 있게 해준다. 좀 더 쉽게 이해해보자...! Databricks에서 Catalog를 만들고, 그 하위에 Schema를 만들고, 다시 그 하위에 Table/View를 만들고..객체별로 권한을 부여..
Databricks에서 Parquet 파일로 변환해서 사용하는 것이 더 좋은 이유 Databricks에서는 CSV파일을 Parquet로 변환한 뒤 Delta Table에 적재하는 것이 효율적인 이유를 정리해본다. 1. CSV 파일 포맷 문제- CSV는 텍스트 기반이라 크기가 크고, 타입 정보가 없고, 읽을 때마다 파싱 비용이 많이 든다.- 대용량 데이터일수록 읽기 및 변환(파싱) 속도가 느리고, Spark 클러스터 리소스 소모가 크다. 2. Parquet는 빅데이터에 최적화된 컬럼 지향 포맷- Parquet는 컬럼 지향 압축, 스키마 내장, 빠른 읽기/쓰기, 분산 처리 최적화 등 장점- Spark는 Parquet파일을 읽을 때 파티셔닝 등 다양한 최적화 가능 3. Delta Table 내부포맷도 기본적으로 Parquet 형태- Delta Table도 내부적으로 Parquet 파일( +..
한 행 안에 있는 문자열 여러개를 특정 구분자로 나눠서 열에서 행으로 변환하기 (CONNECT BY, LEVEL, PLATTEN()와 함께 LATERAL 사용하기) 테이블 내 하나의 컬럼에 쉼표를 구분자한 데이터가 들어있어서 이를 하나씩 row로 꺼내서 적재해야했다. 오라클의 경우를 생각하면 level, connect by를 활용해서 단순하게 끝날 수 있을 거 같았는데....Snowflake의 경우 살짝 달라서 시간을 많이 잡아먹었다...아무리 찾아봐도 이해가능하게 제대로 설명된 문서가 없었음.. 결론만 말하자면 1. CONNECT BY를 쓸 경우, PRIOR을 무조건 써주어야한다. (안쓰면 PRIOR없다고 에러 발생함)2. 항상 CONNECT BY 절은 다른 테이블이 아닌 자기 자신에 조인한다.(자세한 예시는 아래에..)3. LEVEL 선언 후 사용해야한다. 실제 데이터와 코드를 보면 쉽다.우선 WITH절 사용해서 아래 표와 같은 샘플데이터 TMP를 만들 것이다...
Azure Databricks, 데이터 수집 및 읽기(JDBC 드라이버 사용하여 SQL Server 쿼리 , Secret Scope 이용하여 Key 값 암호화하기) 기존의 데이터브릭스의 데이터 수집 및 읽기에 대한 내용은 이 링크에 연결된 이전 글에서 확인할 수 있다. 그 외 JDBC 드라이버를 활용하여 SQL Server에 쿼리하면서 Secret Scope을 이용하여 Key 값 암호화하는 방법까지 해보고자 한다. JDBC 드라이버를 활용하여 SQL Server 쿼리 Azure Databricks는 JDBC를 사용하여 외부 데이터베이스에 연결할 수 있도록 지원한다. New > Data 하면 SQL Server 뿐 아니라 Postgre, MySQL, MongoDB, Kafka 등 다영한 데이터 소스를 Databricks로 쉽게 로드하는 방법 확인이 가능하다. 연결정보 SQL Server 연결을 위해 SQL Server명, 데이터베이스명, 테이블명, SQL Server..
Databricks, Delta Live Table(DLT) 생성 및 실행하기 간단하게 Delta Live Table을 생성 및 실행해보는 작업을 통해서 Databricks에서 말하는 DLT가 실질적으로 어떤 프로세스로 이루어지는 것인지 이해해보고자 한다. * Databricks 리소스 생성 시, Premium 으로 생성한다. 1. Notebook 다운로드 DTL에 관한 다양한 샘플 코드가 존재한다. 원하는 구성의 Notebook을 다운로드하여 준비한다. 2. Import Notebook Repository or Workspace , 원하는 위치에 Import 한다. 3. Create Pipeline - Workflows > Delta Live Tables > Create pipeline - Source Code 에서 위에서 Import한 Notebook 경로를 찾아서 선택해준다...
random.sample() 사용하여 무작위 데이터 생성하기(random, sample, join, while) 업무 중에 python을 통해서 테이블을 생성하고 무작위 데이터를 적재하고자 하는 Needs가 있었다. random 모듈을 사용하였으며, while문을 통해서 쿼리를 한 건씩 생성해 실행해주는 방식이라 소요시간이 길다는 단점이 있으니 참고. random.sample(sequence, k) random 모듈의 sample() method는 sequence에서 지정된 수(k)의 항목을 무작위로 선택한 목록을 반환한다. cf. sequence : list, set, range etc... mylist = ["blue","pink","red","yellow","green"] smplColor = random.sample(mylist, 2) print(smplColor) #result# #['yellow', 'p..
Databricks, 작업 예약 시 매개변수 사용하는 방법(Parameters) 보통 배치가 스케쥴링되어 주기적으로 돌 때, 실행된 날짜나 시스템코드 등 배치에 대한 정보를 매개변수로 받아서 Select or Insert 해주곤 한다. 배치 실행 관련 데이터를 적재하여 관리 및 분석하기 위함이다. 이와 유사하게 Databricks에서 Notebook을 Schedule 걸어서 작업 시, 매개변수로 수행날짜를 조회하고 싶었다. 방법은 간단하다. Schedule 생성 or 수정 시 Parameters 부분에서 key, value값을 추가해주면 된다. * Task의 지정된 변수는 하단 표를 참고하여 활용할 수 있다. Parameter Description Example {{job_id}} 작업에 할당된 고유 식별자 805398178912475 {{run_id}} 작업 실행에 할당된 고유 식..
Databricks SQL, 컬럼 별칭(Alias) 한글로 설정하고 싶을 때 주의할 점 Databricks에서 sql 사용해서 이리저리 쿼리를 날리던 중, 한글로 컬럼 별칭을 설정하고 싶었다. 작은 따옴표(' '), 큰 따옴표(" ") 사용하니 에러가 나서 검색해보니..... ⚠ Backtick(억음부호)을 사용해야 한다. Backtick이라고 하면 생소한 느낌이지만, 키보드에서 평소 shift 눌러서 [ ~ ] 로 자주 사용하는 바로 그 자판을 shift없이 사용하면 바로 backtick이다. Single Quote[ ' ]와 비슷해보이지만 전혀 다르므로 꼭 유의해서 사용해야 한다!