Unix 쉘 스크립트를 사용하여 데이터베이스를 조작할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/71775

  •  09-06-2019
  •  | 
  •  

문제

일부 파일에서 데이터를 읽고 데이터베이스의 다른 테이블에 데이터를 삽입해야 합니다.Unix 쉘 스크립트가 해당 작업을 수행할 만큼 강력합니까?

쉘 스크립트에서 작업을 수행하는 것이 쉬운가요? 아니면 Java에서 이 작업을 수행해야 합니까?

도움이 되었습니까?

해결책

가져오려는 데이터가 적절한 형식(예: 쉼표로 구분)이고 데이터베이스 서버에 적절한 명령줄 유틸리티가 있는 경우에는 문제가 되지 않습니다.MySQL에는 파일 형식을 설명하는 다양한 인수를 허용하는 "mysqlimport" 명령줄 도구가 있습니다.

mysqlimport \
    --fields-terminated-by=, \
    --ignore-lines=1 \
    --fields-optionally-enclosed-by='"' < datafile.txt

Perl/sed/awk 단일 라이너를 통해 데이터를 전달하면 적절한 형식으로 데이터를 가져오는 데 도움이 될 수 있으며, 쉘 스크립트는 파일 이름 프롬프트, 인수 처리 등을 쉽게 처리할 수 있습니다.

Unix에서 제공하는 다양한 명령줄 도구를 사용하는 것이 bash 스크립팅의 핵심입니다.펄, mysql 등모두 해당 툴킷의 일부입니다.

다른 팁

것이 가능하다 :Unix 쉘 스크립트를 사용하여 SQL 스크립트를 생성하고 데이터베이스에 대한 cli를 사용하여 SQL 스크립트를 실행하십시오.

정보의 양이 메모리에 SQL을 구축할 수 있을 만큼 작다면, 미래에 어떤 일이 일어날지 전혀 알 수 없기 때문에(그리고 매우 많은 양의 데이터가 될 수 있으므로) 그렇게 하지 않는 것이 좋습니다.요청당 하나의 호출을 사용하면 때때로 사용 가능한 대량 작업의 이점을 얻을 수 없습니다.

물론 명령줄 SQL 클라이언트가 있다면 가능합니다!저는 Sybase와 isql 명령줄 클라이언트를 사용하여 이 작업을 수행했습니다.영리하게 awk를 통해 물건을 보내고 스크립트를 보내 즉시 명령을 생성할 수도 있습니다.모든 작업을 수행하는 가장 효율적인 방법은 아닐 수도 있지만 Unix 해커의 역량을 발휘할 수 있는 기회는 많습니다.

가능하지만 약간 보기 흉할 수도 있습니다. 예를 들어 mysql을 사용하고 있고 $sql에 SQL 문자열이 저장되어 있다고 가정해 보겠습니다.

echo $sql | mysql -u[user] -p[password] -h[host]

추신.보다 구체적인 도움을 드릴 수 있도록 사용 중인 데이터베이스를 알려주는 것이 좋습니다. p

편집하다:실제로 작동하도록 예제 줄을 변경했습니다.

파이프는 당신의 친구입니다.

예를 들어 MySQL에서는 다음과 같습니다.

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

일을 해야 합니다.

파일이 어떻게든 구조화되어 있는 경우.쉼표/탭으로 구분 등

자세한 내용은 데이터베이스 매뉴얼을 확인하세요.

데이터베이스 관리 시스템에 따라 다릅니다.대부분은 데이터를 가져오기 위한 강력한 쉘 도구를 갖추고 있으며 일부 ETL 기능도 수행합니다.이러한 도구는 대량 로딩을 지원하는 경우 성능이 매우 뛰어날 수 있습니다. 일반적으로 Java JDBC는 그렇게 쉽게 수행할 수 없습니다.

지금은 테스트할 수 없지만 다음과 같습니다.

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database

쉘 스크립트에서 작동해야 합니다.그래도 데이터를 가져오는 방법을 모릅니다.

쉘 스크립팅(Bash 또는 유사)의 주요 목적은 데이터베이스를 처리하는 것이 아닙니다.Java를 선택하거나 더 나은 방법으로 Python이나 Ruby와 같은 스크립팅 언어의 기본을 배울 수 있는 기회를 이용하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top