ETL이란 무엇입니까?
ETL은 여러 소스 시스템에서 데이터를 추출하고 이를 변경(계산, 연결 등을 통해)한 다음 데이터 웨어하우스 시스템에 저장하는 프로세스입니다. ETL은 추출(Extract), 변환(Transform), 로드(Load)를 의미합니다.
데이터 웨어하우스를 구축하는 것은 수많은 소스에서 데이터를 가져와 데이터 웨어하우스 데이터베이스에 공급하는 것만큼 간단하다고 믿기 쉽습니다. 이는 사실과 거리가 멀며, 복잡한 ETL 절차가 필요합니다. 기술적으로 복잡한 ETL 프로세스에는 개발자, 분석가, 테스터, 고위 경영진을 비롯한 다양한 이해관계자의 적극적인 참여가 필요합니다.
의사 결정 도구로서의 가치를 유지하려면 데이터 웨어하우스 시스템이 비즈니스 개발과 동기화되어 개발되어야 합니다. ETL은 민첩하고 자동화되고 적절하게 문서화되어야 하는 데이터 웨어하우스 시스템의 정기적(일일, 주간, 월간) 프로세스입니다.
ETL은 어떻게 작동합니까?
여기서는 ETL 프로세스가 단계별로 어떻게 작동하는지 알아봅니다.
1단계) 추출
데이터는 소스 시스템에서 추출되어 추출 중에 준비 영역에 배치됩니다. 변환이 필요한 경우 소스 시스템의 성능이 저하되지 않도록 준비 영역에서 수행됩니다. 손상된 데이터가 소스에서 데이터 웨어하우스 데이터베이스로 직접 전송되면 롤백이 어렵습니다. 추출된 데이터를 데이터 웨어하우스로 이동하기 전에 준비 영역에서 유효성을 검사할 수 있습니다.
데이터 웨어하우스는 시스템을 다양한 하드웨어, 데이터베이스 관리 시스템, 운영 체제 및 통신 프로토콜과 결합할 수 있습니다. 데이터 웨어하우스는 시스템을 서로 다른 DBMS, 하드웨어, 운영 체제 및 통신 프로토콜과 결합해야 합니다. 소스에는 메인프레임, 맞춤형 애플리케이션, ATM 및 통화 스위치와 같은 접점 장치, 텍스트 파일, 스프레드시트, ERP, 공급업체 및 파트너의 데이터 등과 같은 레거시 프로그램이 포함될 수 있습니다.
따라서 데이터를 추출하고 물리적으로 로드하기 전에 논리적 데이터 맵이 필요합니다. 이 데이터 맵에는 소스와 대상 데이터 간의 연결이 표시됩니다.
세 가지 데이터 추출 방법:
- 부분 추출 – 레코드가 수정될 때 소스 시스템에서 경고를 보내는 것이 데이터를 얻는 가장 간단한 방법입니다.
- 부분 추출(업데이트 알림 없음) – 업데이트가 발생할 때 모든 시스템이 알림을 전달할 수 있는 것은 아닙니다. 그러나 변경된 레코드를 표시하고 해당 레코드의 추출을 제공할 수 있습니다.
- 전체 추출물 – 특정 시스템에서는 어떤 데이터가 변경되었는지 전혀 확인할 수 없습니다. 이 시나리오에서 시스템 외부로 데이터를 가져오는 유일한 방법은 전체 추출을 수행하는 것입니다. 이 접근 방식을 사용하려면 이전 추출의 백업이 필요합니다.
수행된 변경 사항을 식별하기 위해 동일한 형식을 준비합니다.
채택된 방법에 관계없이 추출은 소스 시스템의 성능이나 응답 시간에 영향을 주어서는 안 됩니다. 이는 실시간 생산 데이터베이스입니다. 속도 저하나 폐쇄는 회사의 수익에 영향을 미칠 수 있습니다.
2단계) 변환
원본 서버에서 검색된 데이터는 원시 상태이므로 원래 상태로는 사용할 수 없습니다. 결과적으로 정리, 매핑 및 변환이 필요합니다. 실제로 이것은 의미 있는 BI 보고서를 생성하기 위해 ETL 프로세스가 가치를 추가하고 데이터를 변환하는 핵심 단계입니다.
추출된 데이터에 함수 모음을 적용하는 핵심 ETL 개념입니다. 직접 이동 or 그 일을 통과하다a는 변환이 필요하지 않은 데이터 유형입니다.
변환 단계 중에 데이터에 대해 사용자 정의된 작업을 실행할 수 있습니다. 예를 들어, 클라이언트가 데이터베이스에 존재하지 않는 판매 수익 합계를 원한다고 가정합니다. 또는 테이블의 이름과 성이 별도의 열에 있는 경우입니다. 로드하기 전에 연결될 수 있습니다.
다음은 데이터 무결성 문제의 몇 가지 예입니다.
- Prashant, Parshant 등과 같은 동일한 개인의 다른 철자법.
- Google, Google Inc. 등 회사 이름을 나타내는 방법에는 여러 가지가 있습니다.
- 클리블랜드(Cleaveland), 클리블랜드(Cleveland) 등 다양한 이름이 사용된다.
- 동일한 클라이언트에 대해 서로 다른 애플리케이션에서 여러 계좌 번호가 생성될 수 있습니다.
- 일부 데이터가 필요한 파일은 비어 있습니다.
3단계) 로딩
ETL 프로세스의 마지막 단계는 대상 데이터 웨어하우스 데이터베이스에 데이터를 로드하는 것입니다. 일반적인 데이터 웨어하우스에서는 비교적 짧은 시간에 많은 양의 데이터가 로드됩니다. 결과적으로 로드 프로세스는 성능에 맞게 최적화되어야 합니다.
부하 장애가 발생하는 경우 데이터 무결성을 손상시키지 않고 장애 지점부터 작업을 다시 시작할 수 있도록 복구 절차를 마련해야 합니다. 데이터 웨어하우스 관리자는 서버 성능에 따라 로드를 모니터링하고 계속하며 중지해야 합니다.
로딩 유형:
- 초기 로드 — 모두 채우기
데이터 웨어하우스 테이블 - 증분 로드 — 지속적인 구현
필요에 따라 정기적으로 수정 - 전체 새로 고침 — 내용 지우기
하나 이상의 테이블을 새로운 데이터로 다시 로드
부하 확인
- 키 필드 데이터가 누락되었거나 null이 아닌지 확인하세요.
- 대상 테이블을 기반으로 하는 모델링 뷰를 테스트해야 합니다.
- 결합된 값3과 계산된 측정값을 검사합니다.
- 차원 및 기록 테이블에서 데이터를 확인합니다.
- 로드된 팩트 및 차원 테이블에 대한 BI 보고서를 검사합니다.
PythonScript를 사용하여 ETL 설정
결과적으로 비즈니스 인텔리전스를 위한 데이터 집계를 수행하려면 여러 데이터베이스에서 데이터 웨어하우스로 기본 ETL(추출 변환 로드)을 실행해야 합니다. 기본 사용 사례에 비해 과도하다고 생각되는 여러 ETL 패키지가 있습니다.
이 글에서는 MySQL, SQL-server, Firebird에서 데이터를 추출하는 방법을 보여드리겠습니다. Python 3.6을 사용하여 데이터를 변환하고 SQL 서버(데이터 웨어하우스)에 로드합니다.
우선, 프로젝트를 위한 디렉토리를 생성해야 합니다:
python_etl |__main.py |__db_credentials.py |__variables.py |__sql_queries.py |__etl.py
Python을 사용하여 ETL을 설정하려면 프로젝트 디렉터리에 다음 파일을 생성해야 합니다..
- db_credentials.py: 모든 데이터베이스에 연결하는 데 필요한 모든 정보가 있어야 합니다. 데이터베이스 비밀번호, 포트 번호 등과 같은
- sql_queries.py: 문자열 형식의 데이터를 추출하고 로드하기 위해 일반적으로 사용되는 모든 데이터베이스 쿼리를 사용할 수 있어야 합니다.
- etl.py: 데이터베이스에 연결하고 필요한 모든 절차를 수행하여 필요한 쿼리를 수행합니다.
- main.py: 작업 흐름을 관리하고 지정된 순서에 따라 필수 작업을 실행하는 역할을 담당합니다.
sql_queries.py의 이 섹션에서는 소스 데이터베이스에서 추출하고 대상 데이터베이스(데이터 웨어하우스)로 가져오기 위한 모든 SQL 쿼리를 저장할 위치입니다.
데이터베이스 자격 증명 및 변수 설정
Variable.py에서 베이스 이름을 기록할 변수를 만듭니다.
datawarehouse_name = 'your_datawarehouse_name'
아래와 같이 db_credentials.py에서 모든 소스 및 대상 데이터베이스 연결 문자열과 자격 증명을 구성합니다. 나중에 여러 데이터베이스를 통해 필요할 때마다 반복할 수 있도록 구성을 목록으로 저장합니다.
변수에서 import datawarehouse_name datawarehouse_name = 'your_datawarehouse_name' # sql-server (대상 DB, 데이터웨어하우스) datawarehouse_db_config = { 'Trusted_Connection': 'yes', 'driver': '{SQL Server}', 'server': 'datawarehouse_sql_server', 'database': '{}'.format(datawarehouse_name), 'user': 'your_db_username ', 'password': 'your_db_password', 'autocommit': 참, } # SQL-서버(소스 DB) sqlserver_db_config = [ { 'Trusted_Connection': 'yes', 'driver': '{SQL Server}', 'server': 'your_sql_server', 'database': 'db1', 'user': 'your_db_username', 'password' : 'your_db_password', 'autocommit': 참, } ] # mysql(소스 DB) mysql_db_config = [ { 'user': 'your_user_1', 'password': 'your_password_1', 'host': 'db_connection_string_1', 'database': 'db_1', }, { 'user': 'your_user_2', 'password' : 'your_password_2', '호스트': 'db_connection_string_2', '데이터베이스': 'db_2', }, ] # 파이어버드(소스 DB) fdb_db_config = [ { 'dsn': "/your/path/to/source.db", 'user': "your_username", 'password': "your_password", } ]
SQL 쿼리
sql_queries.py의 이 섹션에서는 소스 데이터베이스에서 추출하고 대상 데이터베이스(데이터 웨어하우스)로 가져오기 위한 모든 SQL 쿼리를 저장할 위치입니다.
우리는 여러 데이터 플랫폼을 사용하고 있기 때문에 모든 데이터베이스에 대해 다양한 구문을 구현해야 합니다. 데이터베이스 유형에 따라 쿼리를 분리하면 됩니다.
# 예제 쿼리는 DB 플랫폼에 따라 다릅니다. Firebird_extract = (''' SELECT fbd_column_1, fbd_column_2, fbd_column_3 FROM fbd_table; ''') firebird_insert = (''' INSERT INTO 테이블(열_1, 열_2, 열_3) VALUES (?, ?, ?) ''') Firebird_extract_2 = (''' fbd_column_1, fbd_column_2, fbd_column_3 FROM fbd_table_2; ''') firebird_insert_2 = (''' 테이블_2에 삽입(열_1, 열_2, 열_3) VALUES(?, ?, ?) ''') sqlserver_extract = (''' sqlserver_column_1, sqlserver_column_2, sqlserver_column_3 FROM sqlserver_table ''' 선택) sqlserver_insert = (''' INSERT INTO 테이블(열_1, 열_2, 열_3) VALUES (?, ?, ?) ''') mysql_extract = (''' SELECT mysql_column_1, mysql_column_2, mysql_column_3 FROM mysql_table ''') mysql_insert = (''' INSERT INTO 테이블 (열_1, 열_2, 열_3) VALUES (?, ?, ?) ''') # 쿼리 내보내기 클래스 SqlQuery: def __init__(self, extract_query, load_query): self.extract_query = extract_query self.load_query = load_query # SqlQuery 클래스에 대한 인스턴스를 생성합니다. fbd_query = SqlQuery(firebird_extract, firebird_insert) fbd_query_2 = SqlQuery(firebird_extract_2, firebird_insert_2) sqlserver_query = SqlQuery(sqlserver_extract, sqlserver_insert) mysql_query = SQLQuery(mysql_extract, mysql_insert) # 반복을 위해 목록으로 저장 fbd_queries = [fbdquery, fbd_query_2] sqlserver_queries = [sqlserver_query] mysql_queries = [mysql_query]
변환 로드 추출
위에 언급된 데이터 소스에 대해 Python을 사용하여 ETL을 설정하려면 다음 모듈이 필요합니다.
# 파이썬 모듈 mysql.connector 가져오기 pyodbc 가져오기 fdb 가져오기 # 변수의 변수 import datawarehouse_name
여기서는 etl()과 etl_process()라는 두 가지 기술을 사용할 수 있습니다.
etl_process()는 데이터베이스 플랫폼을 기반으로 데이터베이스 소스 연결을 설정하고 etl() 메서드를 호출하는 절차입니다.
그리고 두 번째 방법인 etl() 메소드에서는 추출 쿼리를 먼저 실행한 다음, SQL 데이터를 변수 데이터에 저장하고 이를 우리의 데이터 웨어하우스인 대상 데이터베이스에 삽입합니다. 데이터 변환은 튜플 유형의 데이터 변수를 변경하여 수행할 수 있습니다.
def etl(query, source_cnx, target_cnx): # 소스 DB에서 데이터 추출 source_cursor = source_cnx.cursor() source_cursor.execute(query.extract_query) data = source_cursor.fetchall() source_cursor.close() # 웨어하우스 DB에 데이터 로드 if data: target_cursor = target_cnx.cursor() target_cursor.execute("USE {}".format(datawarehouse_name)) target_cursor.executemany(query.load_query, data) print('웨어하우스 DB에 로드된 데이터') target_cursor.close() else : print('데이터가 비어있습니다') def etl_process(queries, target_cnx, source_db_config, db_platform): # 소스 db 연결 설정 if db_platform == 'mysql': source_cnx = mysql.connector.connect(**source_db_config) elif db_platform == 'sqlserver': source_cnx = pyodbc.connect (**source_db_config) elif db_platform == 'firebird': source_cnx = fdb.connect(**source_db_config) else: return '오류! 인식할 수 없는 db 플랫폼' # 쿼리의 쿼리에 대한 SQL 쿼리를 통해 루프: etl(query, source_cnx, target_cnx) # 소스 db 연결을 닫습니다 source_cnx.close()
모든 것을 합치다
이제 다음 단계에서는 main.py의 모든 자격 증명을 반복하고 모든 데이터베이스에 대해 etl을 실행할 수 있습니다.
이를 위해 필요한 모든 변수와 메소드를 가져와야 합니다.
# db_credentials의 변수 import datawarehouse_db_config, sqlserver_db_config, mysql_db_config, fbd_db_config from sql_queries import fbd_queries, sqlserver_queries, mysql_queries from 변수 import * # 메소드 from etl import etl_process
이 파일의 코드는 데이터베이스에 연결하고 Python을 사용하여 필요한 ETL 작업을 실행하기 위해 자격 증명을 반복하는 역할을 합니다.
def main(): print('starting etl') # 대상 데이터베이스에 대한 연결 설정(sql-server) target_cnx = pyodbc.connect(**datawarehouse_db_config) # 자격 증명을 통한 루프 # mysql for config in mysql_db_config: try: print("loading db: " + config['database']) etl_process(mysql_queries, target_cnx, config, 'mysql') 제외 오류로 인한 예외: print("etl for {}에 오류가 있습니다.".format(config['database'])) print ('오류 메시지: {}'.format(error)) continue # sql-server for config in sqlserver_db_config: try: print("loading db: " + config['database']) etl_process(sqlserver_queries, target_cnx, config, ' sqlserver') 제외 오류로 인한 예외: print("etl for {}에 오류가 있습니다.".format(config['database'])) print('오류 메시지: {}'.format(error)) continue # Firebird for config in fbd_db_config: try: print("loading db: " + config['database']) etl_process(fbd_queries, target_cnx, config, 'firebird') 제외 오류로 인한 예외: print("etl for {}에 오류가 있습니다.".format(config ['데이터베이스'])) print('오류 메시지: {}'.format(error)) 계속 target_cnx.close() if __name__ == "__main__": 메인()
터미널에 python main.py를 입력하면 순수 Python 스크립트를 사용하여 ETL이 생성되었습니다.
ETL 도구
시중에는 여러 가지 데이터 웨어하우징 도구가 있습니다. 가장 유명한 예는 다음과 같습니다.
1. 마크로직:
MarkLogic은 다양한 비즈니스 기능을 사용하여 데이터 통합을 더 쉽고 빠르게 만드는 데이터 웨어하우징 시스템입니다. 문서, 관계, 메타데이터 등 다양한 종류의 데이터를 쿼리할 수 있습니다.
https://www.marklogic.com/product/getting-started/
2. 오라클:
Oracle은 업계에서 가장 널리 사용되는 데이터베이스입니다. 온프레미스 및 클라우드 서비스 모두를 위한 다양한 데이터 웨어하우스 솔루션을 제공합니다. 운영 효율성을 높여 더 나은 고객 경험을 제공하는 데 도움이 됩니다.
https://www.oracle.com/index.html
3. 아마존 레드시프트:
Redshift는 Amazon의 데이터 웨어하우징 솔루션입니다. 표준 SQL과 기존 비즈니스 인텔리전스 도구를 사용하여 다양한 종류의 데이터를 분석하기 위한 간단하고 비용 효율적인 솔루션입니다. 또한 페타바이트 규모의 구조화된 데이터에 대한 복잡한 쿼리를 실행할 수도 있습니다.
https://aws.amazon.com/redshift/?nc2=h_m1
결론
이 기사에서는 ETL이 무엇인지에 대한 깊은 이해와 Python에서 ETL을 설정하는 방법에 대한 단계별 튜토리얼을 제공했습니다. 또한 오늘날 대부분의 조직이 ETL 데이터 파이프라인을 구축하는 데 사용하는 최고의 도구 목록도 제공합니다.
반면에 오늘날 대부분의 조직은 매우 동적인 구조를 지닌 엄청난 양의 데이터를 보유하고 있습니다. 이러한 데이터에 대해 처음부터 ETL 파이프라인을 생성하는 것은 조직이 이 파이프라인을 생성하기 위해 많은 수의 리소스를 사용해야 하고 높은 데이터 볼륨과 스키마 변경 사항을 따라갈 수 있는지 확인해야 하기 때문에 어려운 절차입니다.
저자에 관하여
살충제 샤마
현재 저는 Vellore Institute of Technology에서 기술 학사(B.Tech) 과정을 밟고 있습니다. 저는 프로그래밍과 소프트웨어 개발, 기계 학습, 딥 러닝, 데이터 과학을 포함한 실제 응용 프로그램에 매우 열정적입니다.
기사가 마음에 드셨으면 좋겠습니다. 나와 연결하고 싶다면 다음에서 연결할 수 있습니다.
또는 기타 의심 사항이 있는 경우 다음을 수행할 수 있습니다. 메일을 보내다 나에게도
관련
- '
- "
- 계정
- 활동적인
- All
- 아마존
- 분석
- 어플리케이션
- 지역
- 기사
- 자동화
- 백업
- 증폭
- 빌드
- 건물
- 사업
- 비즈니스 인텔리전스
- 전화
- 확인하는 것이 좋다.
- 클리블랜드
- 클라우드
- 클라우드 서비스
- 암호
- 의사 소통
- 회사
- 연결
- 계속
- 만들기
- 신임장
- 데이터
- 데이터 통합
- 데이터 과학
- 데이터웨어 하우스
- 데이터웨어 하우스
- 데이터베이스
- 데이터베이스
- 깊은 학습
- 개발
- 개발자
- 개발
- 디바이스
- 외형 치수
- 서류
- 운전사
- 효율성
- 등
- 실행
- 임원으로 미국으로 이전하여 일할 수 있는 권리를 부여함
- 체험
- 추출
- 추출물
- 고장
- 먼저,
- 흐름
- 체재
- 신선한
- 가득 찬
- 구글
- 안내
- 하드웨어
- 여기에서 지금 확인해 보세요.
- 높은
- history
- 방법
- How To
- HTTPS
- 확인
- 영향
- 가져 오기
- 포함
- 정보
- 완성
- 인텔리전스
- 문제
- IT
- 키
- 넓은
- 배우다
- 배우기
- 라인
- 링크드인
- 명부
- 하중
- 기계 학습
- 구축
- 지도
- 시장
- 미디어
- 가장 인기 많은
- 움직임
- 이름
- 공고
- 숫자
- 제공
- 운영
- 운영체제
- 행정부
- 신탁
- 주문
- 조직
- 기타
- 파트너
- 비밀번호
- 성능
- 플랫폼
- 플랫폼
- 인기 문서
- 생산
- 생산
- 프로그램 작성
- 프로그램
- 프로젝트
- 당기
- Python
- 살갗이 벗어 진
- 실시간
- 현실
- 기록
- 회복
- 관계
- 보고서
- 자료
- 응답
- 수익
- 과학
- 서비스
- 세트
- 짧은
- 단순, 간단, 편리
- So
- 소프트웨어
- 소프트웨어 개발
- 솔루션
- SQL
- 단계
- 주 정부
- 저장
- 상점
- 체계
- 시스템은
- 목표
- 기술
- 기법
- Technology
- 소스
- 시간
- 변환
- 지도 시간
- 업데이트
- 가치
- 공급 업체
- 음량
- 창고
- 창고
- 주간
- 작업
- 일