Drupal 8/9의 CSV 파일에서 데이터 마이그레이션 - OSTraining

게시 됨: 2022-06-29

CSV 파일에서 Drupal 데이터베이스로 데이터를 마이그레이션하는 프로세스는 Drupal의 통합 Migrate API와 세 가지 추가 사용자 정의 모듈(Migrate Source CSV, Migrate Plus 및 Migrate Tools)을 통해 수행할 수 있습니다.

이를 ETL(Extract – Transform – Load) 프로세스라고 하며, 첫 번째 단계에서 한 소스에서 데이터를 가져오고 두 번째 단계에서 변환한 다음 마지막으로 세 번째 단계에서 Drupal 데이터베이스의 대상으로 로드합니다.

이 튜토리얼에서는 도서관 데이터베이스를 위한 12개의 책 노드 생성에 대해 설명합니다. 방법을 배우려면 계속 읽으십시오!

1단계 – Drush 및 필수 모듈 설치

Drupal에서 마이그레이션을 실행하려면 Drush가 필요합니다. Drush는 Drupal 모듈이 아니라 Drupal 명령을 실행하기 위한 명령줄 인터페이스입니다. 최신 버전의 Drush를 설치하려면,

  • 시스템의 터미널 응용 프로그램을 엽니 다.
  • /web 디렉토리 외부에 커서를 놓습니다 .
  • 유형: composer require drush/drush .

이것은 Drupal 설치의 vendor/bin/drush 디렉토리 안에 Drush를 설치합니다. 하지만 drush 명령어를 실행하고 싶을 때마다 drush 대신에 vendor/bin/drush 를 입력하는 것은 번거롭습니다.

Drush 런처를 사용하면 프로젝트별로 각 Drupal 설치의 특정 Drush 버전을 실행할 수 있습니다.

이게 왜 말이 되나요?

프로젝트마다 요구 사항이 다르며 특정 Drush 버전은 종속성 문제를 방지하는 데 도움이 됩니다. 일부 기여 모듈은 최신 버전의 Drush에서 제대로 작동하지 않을 수 있습니다.

OSX 및 Windows 시스템에 대한 특정 지침은 https://github.com/drush-ops/drush-launcher#installation—phar에서 찾을 수 있습니다.

Linux 시스템의 경우:

  • 다음을 입력 하여 GitHub에서 drush.phar라는 파일을 다운로드합니다.
 wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar

GitHub에서 drush.phar 라는 파일을 다운로드합니다.

  • 다음을 입력 하여 파일을 실행 가능하게 만드십시오: chmod +x drush.phar
  • 유형 : sudo mv drush.phar /usr/local/bin/ drush

그러면 .phar 파일이 $PATH 로 이동되고 Drush가 전역 명령으로 실행됩니다.

이제 마이그레이션을 수행하는 데 필요한 기여 모듈을 설치할 차례입니다.

  • 다음을 입력 합니다.
 composer require drupal/migrate_tools composer require drupal/migrate_source_csv

Composer가 모듈 다운로드를 완료하면

  • 브라우저에서 Drupal 백엔드를 엽니 다.
  • 확장 클릭
  • Migrate , Migrate Plus , Migrate 도구Migrate Source CSV 사용
  • 설치를 클릭하십시오

2단계 – ETL 프로세스에 대한 추가 정보

데이터 추출, 변환 및 로드 프로세스는 .yml 파일에서 마이그레이션을 정의한 다음 Drush 명령으로 실행하여 수행할 수 있으므로 Drupal 데이터베이스가 올바르게 채워질 수 있습니다.

주의해야 할 몇 가지 중요한 사실이 있습니다.

  1. 각 단계는 Drupal 플러그인을 통해 수행됩니다.
  2. 프로세스의 첫 번째 단계(소스 정의 즉 Extract)와 마지막 단계(대상 정의, 즉 로드)에서 하나의 플러그인만 사용할 수 있습니다.
    • 즉, 하나의 소스(CSV 파일, JSON 피드 등)에서만 데이터를 가져와서 특정 엔터티 번들(예: 기사, 페이지, 사용자 정의 콘텐츠 유형, 사용자 또는 구성 엔터티도 마찬가지입니다.
  3. Drupal에서 예상하는 형식과 일치하도록 데이터를 모델링하는 데 필요한 만큼 플러그인을 사용할 수 있습니다.
  4. Drupal에는 기본적으로 정의 파일 내에서 사용할 수 있는 소스/프로세스/대상 플러그인 목록이 있습니다.

모든 소스 플러그인 목록을 보려면,

  • 터미널 창을 엽니 다.
  • 유형 :
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

주의 : csv 플러그인은 이미 Migrate Source CSV 모듈을 활성화했기 때문에 존재합니다.

모든 프로세스 플러그인 목록을 보려면,

  • 다음을 입력 합니다.
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.source')->getDefinitions()));"

그 목록은 조금 더 깁니다. 프로세스 단계에서 필요한 만큼 플러그인을 사용할 수 있다는 것을 기억하십시오.

모든 대상 플러그인 목록을 보려면

  • 다음을 입력 합니다.
 drush ev "print_r(array_keys(\Drupal::service('plugin.manager.migrate.destination')->getDefinitions()));"


3단계 – 콘텐츠 유형 만들기

  • 구조 > 콘텐츠 유형 > 콘텐츠 유형 추가를 클릭 합니다.
  • '책' 콘텐츠 유형 만들기
  • 필드 저장 및 관리를 클릭 합니다.
  • CSV 파일의 제목 행을 사용 하여 필드 생성

나는 edition_number 열과 editor 열의 값을 연결할 것이므로 이 목적을 위해 데이터베이스에서 하나의 필드만 필요합니다.

참고: 필드 이름(머신 이름)은 CSV 파일의 열 이름과 정확히 일치할 필요는 없지만 최소한 유사한 단어와 연관시키는 것이 합리적입니다. 이는 프로세스 단계에서 필드 매핑을 용이하게 합니다.

title 필드는 모든 Drupal 노드에 필수이므로 제목 필드를 만들 필요가 없습니다. 본문 필드를 그대로 두거나 삭제할 수 있습니다. 이는 특정 콘텐츠 유형으로 수행하려는 작업에 따라 다릅니다.


4단계 – 마이그레이션 정의 파일

소스 단계

  • 선호하는 코드 편집기 열기
  • 다음을 입력 합니다.
 id: my_first_migration label: Migrate terms from a CSV source source: plugin: csv path: public://csv/library.csv header_row_count: 1 ids: [id] delimiter: ';' enclosure: "'"

파일의 ID는 파일 이름과 일치합니다.

소스 섹션에서 Contrib 모듈 Migrate Source CSV의 csv 플러그인을 사용하고 있습니다.

header_row_count 옵션의 숫자 1은 열 제목의 값을 나타냅니다(모두 첫 번째 행에 배치됨).

ids 정의는 CSV 파일의 각 레코드에 대한 고유 식별자를 제공합니다. 이 경우에는 integer 유형의 id 열입니다. 모듈이 여기에 배열을 기대하고 있으므로 대괄호를 잊지 마십시오.

delimiterenclosure 는 CSV 파일의 구조를 나타내며 제 경우에는 ";"으로 구분됩니다. 문자열은 "'" 작은따옴표로 묶습니다.

또한 경로의 정의에 유의하십시오. 여기에 CSV 파일을 저장해야 Drupal이 데이터를 읽을 수 있습니다.

  • 터미널 응용 프로그램을 엽니 다.
  • 유형 :
 mkdir web/sites/default/files/csv cp /home/ path/to /library.csv web/sites/default/files/csv/ chmod -R 777 web/sites/default/files/csv/

이렇게 하면:

  1. Drupal 설치의 공용 폴더 안에 csv 라는 디렉토리를 만듭니다.
  2. 해당 디렉토리 안에 CSV 파일의 사본을 저장하십시오.
  3. 시스템의 모든 사람이 파일에 액세스할 수 있도록 합니다(소스 플러그인 포함).

프로세스 단계

여기에서 CSV 파일의 각 열을 콘텐츠 유형 의 필드와 매핑합니다.

 process: title: title field_id: id field_author: author field_location: location field_availability: availability field_editor: plugin: concat source: - editor - edition_number delimiter: ' ' type: plugin: default_value default_value: book

drupal_machine_name: csv_column_name 형식의 처음 5개 키/값 쌍은 변경을 수행하지 않고 CSV 레코드를 데이터베이스 필드에 매핑합니다.

field_editor 필드는 2개의 문자열( 에디터edition_number 열 내부의 값)을 연결한 결과입니다.

구분 기호 옵션을 사용하면 두 문자열 사이에 구분 기호(이 경우 공백)를 설정할 수 있습니다.

default_value 플러그인은 이 정보가 소스 데이터에서 제공되지 않기 때문에 엔티티 유형을 정의하는 데 도움이 됩니다.

목적지 단계

이 프로세스의 마지막 부분은 대상 단계입니다.

 destination: plugin: entity:node

콘텐츠를 마이그레이션하고 있으며 각 레코드는 노드가 됩니다.


5단계 – 마이그레이션 실행

  • 구성 > 구성 동기화 > 가져오기 > 단일 항목 클릭
  • 드롭 다운에서 마이그레이션 을 선택합니다.
  • .yml 파일의 코드를 텍스트 영역에 붙여넣 습니다.
  • 가져오기 클릭
  • 확인을 클릭 하여 구성을 동기화합니다. "구성을 성공적으로 가져왔습니다"라는 메시지가 표시됩니다.
  • 터미널 애플리케이션으로 변경 합니다.
  • 다음을 입력 합니다.
 drush migrate:import my_first_migration

이제 사이트의 콘텐츠를 확인할 수 있습니다.

CSV 파일에서 Drupal 8/9로 데이터를 마이그레이션하는 기본 원칙을 배웠습니다.

이미 보았듯이 마이그레이션 프로세스에는 세부 사항에 대한 주의가 필요하므로 작은 실수로 전체 사이트가 손상될 수 있으므로 먼저 스테이징 서버에서 작업해야 합니다. 이 튜토리얼이 마음에 드셨기를 바랍니다.

읽어 주셔서 감사합니다!