keboola/staging-provider


README

Build Status

安装

composer require keboola/staging-provider

使用方法

阶段提供程序包帮助您为各种环境正确配置输入/输出阶段工厂。

典型用例可以设置一个 Reader 实例来访问一些数据

use Keboola\InputMapping\Reader;
use Keboola\InputMapping\Staging\StrategyFactory as InputStrategyFactory;
use Keboola\StagingProvider\InputProviderInitializer;
use Keboola\StagingProvider\WorkspaceProviderFactory\ExistingDatabaseWorkspaceProviderFactory;
use Keboola\StorageApi\Client;
use Keboola\StorageApi\Workspaces;
use Keboola\StorageApiBranch\ClientWrapper;
use Psr\Log\NullLogger;

$storageApiClient = new Client(...);
$storageApiClientWrapper = new ClientWrapper($storageApiClient, ...);
$logger = new NullLogger();

$strategyFactory = new InputStrategyFactory($storageApiClientWrapper, $logger, 'json');
$tokenInfo = $storageApiClient->verifyToken();
$dataDir = '/data';

$workspaceProviderFactory = new ExistingDatabaseWorkspaceProviderFactory(
    new Workspaces($storageApiClient),
    'my-workspace', // workspace ID
    'abcd1234'      // workspace password
);

$providerInitializer = new InputProviderInitializer($strategyFactory, $workspaceProviderFactory, $dataDir);
$providerInitializer->initializeProviders(
    InputStrategyFactory::WORKSPACE_SNOWFLAKE,
    $tokenInfo
);

// now the $strategyFactory is ready to be used
$reader = new Reader($strategyFactory);

我们首先创建一个需要的 StrategyFactory。策略本身并不知道应该使用哪种存储与每种阶段类型。这就是提供程序初始化器所做的事情 - 为特定类型的阶段配置 StrategyFactory

要创建一个提供程序初始化器,我们需要传递以下内容

  • 要初始化的 StrategyFactory
  • 工作区提供程序工厂 - 用于访问工作区阶段的工作区信息
    • ExistingWorkspaceProviderFactory 如果我们想重用现有工作区
    • ComponentWorkspaceProviderFactory 如果我们想创建一个新的工作区(基于组件配置)
  • 用于本地阶段的本地数据目录路径

然后我们调用 initializeProviders 方法来为特定阶段类型配置 StrategyFactory。调用者必须知道要配置哪种阶段类型

  • 当与组件一起工作时,每个组件在其配置中定义了阶段类型
  • 沙箱类型由其工作区推导得出
  • 等等。

上面的示例展示了使用 InputProviderInitializer 配置 Reader 的输入映射 StrategyFactory 的用法。同样,我们可以使用 OutputProviderInitializer 来配置 Writer 的输出映射 StrategyFactory

内部实现

库的主要目标是配置 StrategyFactory,使其知道应使用哪种阶段提供程序与每种存储类型。

阶段

通常有两种阶段类型

  • 本地阶段 - 用于在文件系统中本地存储数据,由 LocalStaging 类表示
  • 工作区阶段 - 用于在工作区中存储数据,由 WorkspaceStagingInterface 表示

提供程序(阶段提供程序)

StrategyFactory 不直接使用阶段,而是通过提供程序(ProviderInterface)使用,因此为每种类型都有提供程序实现。

  • LocalStagingProvider
  • WorkspaceStagingProvider

StrategyFactory 不直接使用阶段的主要原因是为了实现阶段提供程序的延迟初始化 - 提供程序实例在引导过程中创建,但阶段实例仅在真正使用时创建。

工作区提供程序工厂

本地阶段很简单,它仅包含由调用者提供的数据目录路径。另一方面,工作区阶段要复杂一些,因为提供程序可能表示一个已经存在的工作区或创建新工作区的配置。为了实现这一点,调用者必须提供一个 WorkspaceProviderFactoryInterface。目前有 2 个实现

  • ExistingWorkspaceProviderFactory 它创建一个与现有工作区一起工作的提供程序
  • ComponentWorkspaceProviderFactory 它创建一个基于组件配置创建新工作区的提供程序

开发

首先,从 .env.dist 创建 .env 文件。

cp .env.dist .env
# edit .env to set variable values

要运行测试,每个 PHP 主要版本(5.6 到 7.4)都有一个单独的服务。例如,要针对 PHP 5.6 运行测试,请运行以下

docker compose run --rm tests56

要本地开发,请使用 dev 服务。以下将安装 Composer 依赖项

docker compose run --rm dev composer install

许可证

MIT 许可,请参阅 LICENSE 文件。