在 Drupal 8/9 中從 CSV 文件遷移數據 - OSTraining
已發表: 2022-06-29將數據從 CSV 文件遷移到 Drupal 數據庫的過程可以通過 Drupal 的集成 Migrate API 和三個額外的自定義模塊(Migrate Source CSV、Migrate Plus 和 Migrate Tools)來完成。
這被稱為 ETL(提取 - 轉換 - 加載)過程,其中數據在第一步從一個源獲取,在第二步進行轉換,最後在第三步加載到 Drupal 數據庫上的目的地。
本教程將解釋為圖書館數據庫創建 12 個圖書節點。 繼續閱讀以了解如何操作!
步驟 # 1 – 安裝 Drush 和所需的模塊
要在 Drupal 中執行遷移,我們需要 Drush。 Drush 不是 Drupal 模塊,而是執行 Drupal 命令的命令行界面。 要安裝最新版本的 Drush,
- 打開系統的終端應用程序
- 將光標放在
/web
目錄之外。 - 類型:
composer require drush/drush
這會將 Drush 安裝在 Drupal 安裝的vendor/bin/drush
目錄中。 但是,每次要執行 drush 命令時,鍵入vendor/bin/drush
而不是drush
很麻煩。
Drush 啟動器可以在每個項目的基礎上執行每個 Drupal 安裝的特定 Drush 版本。
為什麼這有意義?
每個項目都有不同的需求,特定的 Drush 版本有助於避免依賴問題。 某些 contrib 模塊可能無法與最新版本的 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 Tools和Migrate Source CSV
- 點擊安裝
第 2 步 – 關於 ETL 流程的更多信息
提取、轉換和加載數據的過程可以通過在 .yml 文件中定義遷移,然後使用 Drush 命令執行,從而可以正確填充 Drupal 數據庫。
有一些重要的事實需要注意:
- 每一步都是通過 Drupal 插件執行的。
- 您只能在流程的第一步(源定義,即提取)和最後一步(目標定義,即加載)中使用一個插件。
- 換句話說,您只能從一個源(CSV 文件、JSON 提要等)獲取數據並將其存儲在 Drupal 中的特定實體包下,例如文章、頁面、自定義內容類型、用戶或配置實體也是如此。
- 您可以根據需要使用盡可能多的插件來對數據進行建模,以使其與 Drupal 期望的格式相匹配。
- 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 文件的列名稱完全匹配,但至少將它們與相似的詞相關聯是有意義的——這簡化了流程步驟中的字段映射。
每個 Drupal 節點都必須有title
字段,因此不需要創建標題字段。 您可以保持正文字段不變,也可以將其刪除,這取決於您計劃對特定內容類型執行的操作。
步驟 # 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
列。 不要忘記括號,因為模塊在這裡需要一個數組。
delimiter
和enclosure
是指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/
這將:
- 在 Drupal 安裝的公共文件夾中創建一個名為
csv
的目錄。 - 將 CSV 文件的副本放在該目錄中。
- 使系統中的每個人都可以訪問該文件(包括源插件)。
工藝步驟
這是我們將 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列中的值)連接的結果。
delimiter選項可以在兩個字符串之間設置分隔符,在本例中為空格。
default_value插件幫助我們定義實體類型,因為此信息在源數據中不可用。
目標步驟
此過程的最後一部分是目標步驟。
destination: plugin: entity:node
我們正在遷移內容,每條記錄都是一個節點。
步驟 # 5 – 執行遷移
- 單擊配置 > 配置同步 > 導入 > 單項
- 從下拉列表中選擇遷移
- 將.yml文件中的代碼粘貼到 textarea 中
- 點擊導入
- 單擊確認以同步配置。 您將收到消息“配置已成功導入”
- 更改為終端應用程序。
- 鍵入以下內容:
drush migrate:import my_first_migration
您現在可以檢查您網站上的內容。
您已經了解了將數據從 CSV 文件遷移到 Drupal 8/9 的基本原則。
正如您已經看到的,遷移過程需要注意細節,因此請確保您首先在臨時服務器上工作,因為一個小錯誤可能會破壞整個站點。 我希望你喜歡這個教程。
謝謝閱讀!