在 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 后端
  • 单击扩展
  • 启用MigrateMigrate PlusMigrate ToolsMigrate Source CSV
  • 点击安装

第 2 步 – 关于 ETL 流程的更多信息

提取、转换和加载数据的过程可以通过在 .yml 文件中定义迁移,然后使用 Drush 命令执行,从而可以正确填充 Drupal 数据库。

有一些重要的事实需要注意:

  1. 每一步都是通过 Drupal 插件执行的。
  2. 您只能在流程的第一步(源定义,即提取)和最后一步(目标定义,即加载)中使用一个插件。
    • 换句话说,您只能从一个源(CSV 文件、JSON 提要等)获取数据并将其存储在 Drupal 中的特定实体包下,例如文章、页面、自定义内容类型、用户或配置实体也是如此。
  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 文件的列名称完全匹配,但至少将它们与相似的词相关联是有意义的——这简化了流程步骤中的字段映射。

每个 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列。 不要忘记括号,因为模块在这里需要一个数组。

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列中的值)连接的结果。

delimiter选项可以在两个字符串之间设置分隔符,在本例中为空格。

default_value插件帮助我们定义实体类型,因为此信息在源数据中不可用。

目标步骤

此过程的最后一部分是目标步骤。

 destination: plugin: entity:node

我们正在迁移内容,每条记录都是一个节点。


步骤 # 5 – 执行迁移

  • 单击配置 > 配置同步 > 导入 > 单项
  • 从下拉列表中选择迁移
  • .yml文件中的代码粘贴到 textarea 中
  • 点击导入
  • 单击确认以同步配置。 您将收到消息“配置已成功导入”
  • 更改为终端应用程序。
  • 键入以下内容:
 drush migrate:import my_first_migration

您现在可以检查您网站上的内容。

您已经了解了将数据从 CSV 文件迁移到 Drupal 8/9 的基本原则。

正如您已经看到的,迁移过程需要注意细节,因此请确保您首先在临时服务器上工作,因为一个小错误可能会破坏整个站点。 我希望你喜欢这个教程。

谢谢阅读!