在 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 的基本原则。
正如您已经看到的,迁移过程需要注意细节,因此请确保您首先在临时服务器上工作,因为一个小错误可能会破坏整个站点。 我希望你喜欢这个教程。
谢谢阅读!