首页 > 解决方案 > 如何导入 Great Expectations 自定义数据源 ValueError: no package specified for (required for relative module names)

问题描述

我的 Great Expectations 项目有这个文件夹结构:

great_expectations/
    dataset/
        __init__.py
        oracle_dataset.py
    datasource/
        __init__.py
        oracle_datasource.py
    great_expectations.yml

datasource/__init__.py

from .oracle_datasource import OracleDatasource

dataset/__init__.py

from .oracle_dataset import OracleDataset

great_expectations.yml

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: .dataset
    class_name: OracleDatasource
    module_name: .datasource

除了 python 相对导入让我非常困惑之外,我还不确定在运行 great_expectations 命令时使用哪个参考目录。当我尝试时:great_expectations suite new我收到错误消息:ValueError: no package specified for '.datasource' (required for relative module names)

我认为上面的 .yml 仍然是在尝试了下面的所有内容之后要走的路。我猜对于需要在init或其他地方处理的相对导入有一些我不理解的东西。

编辑:我也试过:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: great_expectations.dataset
    class_name: OracleDatasource
    module_name: great_expectations.datasource

The module: 'great_expectations.datasource' does not contain the class: 'OracleDatasource'.

我认为此消息意味着它正在查找 great_expectations 库,我通过尝试包含在库中的类名来确认这一点。

和这个:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: dataset
    class_name: OracleDatasource
    module_name: datasource

No module named "datasource" could be found in the repository. Please make sure that the file, corresponding to this package and module, exists and that dynamic loading of code modules, templates, and assets is supported in your execution environment. This error is unrecoverable.

我认为这意味着它正在图书馆之外寻找但找不到文件。

和这个:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: dataset.oracle_dataset
    class_name: OracleDatasource
    module_name: datasource.oracle_datasource

No module named "datasource.oracle_datasource" could be found in the repository. Please make sure that the file, corresponding to this package and module, exists and that dynamic loading of code modules, templates, and assets is supported in your execution environment. This error is unrecoverable.

我认为这意味着它正在图书馆之外寻找但找不到文件。

标签: pythongreat-expectations

解决方案


要扩展 Great Expectations,请使用/plugins项目中的目录(此文件夹在您运行时自动创建great_expectations init)。此处添加的模块可以在您的配置中引用。

将 oracle_datasource.py 和 oracle_dataset.py 添加到插件文件夹:

.
├── custom_data_docs
│   ├── renderers
│   ├── styles
│   │   └── data_docs_custom_styles.css
│   └── views
├── oracle_dataset.py
└── oracle_datasource.py

在 great_expectations.yml 中编辑您的 yaml,如下所示(请注意,我们处理与此文件夹相关的模块名称,因此如果您的新模块位于 plugins 文件夹的根目录,则不需要点路径):

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: oracle_dataset
    class_name: OracleDatasource
    module_name: oracle_datasource

最后一件事 - 如果您愿意将 Oracle 数据源和数据集贡献回主程序包,我相信 Great Expectations 社区会很乐意拥有它!https://docs.greatexpectations.io/en/latest/contributing.html


推荐阅读