SQL 데이터 정리 및 처리

SQL 데이터 처리 방법

다음은 SQL 파일을 처리하고 각 테이블에 대한 데이터를 추출하여 분리하는 스크립트입니다. 이 예제에서는 bash와 sed, awk 등을 사용하여 대용량 SQL 파일을 효율적으로 처리하는 방법을 보여줍니다.

스크립트 예시

#!/usr/bin/bash
# 작업 디렉토리로 이동
cd /path/to/sql/files

# 처리할 SQL 파일 목록
files=("table_data1.sql" "table_data2.sql" "table_data3.sql")

# 각 파일에 대해 처리
for file in "${files[@]}"; do
    # CREATE TABLE 구문에서 테이블 이름 추출
    tables=$(grep 'CREATE TABLE' "$file" | awk -F\` '{print $2}')
    
    # 추출된 테이블 이름으로 데이터 필터링
    for table in $tables; do
        # 해당 테이블의 INSERT 문 추출 (처음 5000개만)
        grep "INSERT INTO \`$table\`" "$file" | head -n 5000 >> "${table}.sql"
    done
done

효율성 개선

위 스크립트는 간단하지만 대규모 파일에서 여러 번 파일을 읽어들이므로 성능 문제가 있을 수 있습니다. 이를 개선하기 위해 sed 명령어를 활용하면 단일 패스로 처리할 수 있습니다.

#!/usr/bin/bash
# 작업 디렉토리로 이동
cd /path/to/sql/files

# 처리할 SQL 파일 목록
files=("data_file1.sql" "data_file2.sql" "data_file3.sql")

for file in "${files[@]}"; do
    # 테이블 이름과 해당 데이터를 한 번에 추출
    grep 'CREATE TABLE' "$file" | awk -F\` '{print $2}' | while read -r table; do
        sed -n "/INSERT INTO \`$table\`/,/;/p" "$file" >> "${table}_output.sql"
    done
done

대체 해결책: Python 사용

Shell 스크립트 외에도 Python을 사용하면 더 직관적이고 확장 가능한 코드를 작성할 수 있습니다. 아래는 Python 버전의 예제입니다.

import re

# 입력 파일 경로 설정
input_files = ['/path/to/data/file1.sql', '/path/to/data/file2.sql']

# 각 파일 처리
for input_file in input_files:
    with open(input_file, 'r') as f:
        content = f.read()

    # CREATE TABLE 구문에서 테이블 이름 찾기
    table_pattern = re.compile(r'CREATE TABLE \`([^\`]*)\`')
    tables = table_pattern.findall(content)

    # 각 테이블의 INSERT 문 추출
    for table in tables:
        insert_pattern = re.compile(rf'INSERT INTO \`{table}\`.+?;', re.DOTALL)
        matches = insert_pattern.findall(content)

        # 결과 저장
        output_file = f'{table}.sql'
        with open(output_file, 'w') as out_f:
            for match in matches[:5000]:  # 처음 5000개만 저장
                out_f.write(match + '\n')

결론

대용량 SQL 파일을 처리할 때는 적절한 도구 선택이 중요합니다. Shell 스크립트는 간단한 작업에 유용하지만 복잡한 로직이나 대규모 데이터 처리에는 Python과 같은 고급 언어가 더 적합할 수 있습니다.

태그: bash sed awk python sql-processing

6월 2일 23:42에 게시됨