keboola / staging-provider
Requires
- php: >=8.2
- ext-json: *
- keboola/input-mapping: *@dev
- keboola/output-mapping: *@dev
- keboola/slicer: *@dev
- keboola/storage-api-client: ^15.1
- keboola/storage-api-php-client-branch-wrapper: ^6.0
Requires (Dev)
- keboola/coding-standard: >=14.0
- phpstan/phpstan: ^1.8
- phpstan/phpstan-phpunit: ^1.1
- phpunit/phpunit: ^9.5
- sempro/phpunit-pretty-print: ^1.4
- symfony/dotenv: ^5.2|^6.0
- dev-main
- 8.0.0
- 7.1.0
- 7.0.2
- 7.0.1
- 7.0.0
- 6.1.0
- 6.0.4
- 6.0.3
- 6.0.2
- 6.0.1
- 6.0.0
- 5.7.0
- 5.6.0
- 5.5.0
- 5.4.0
- 5.3.0
- 5.2.0
- 5.1.0
- 5.0.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.0.0
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.0
- 1.1.0
- 1.0.0
- dev-pepa_PST-777_tableIngoGenerator
- dev-erik-PST-2051
- dev-odin-PST-1670
- dev-pepa_k8s_deployment
- dev-roman-pst-1710
- dev-pepa_auth_adminToken
- dev-rrik-om-ci-fixup
- dev-erik-GCP-472
- dev-erik-PST-850-part2
- dev-erik-GCP-374-part1
- dev-erik-GCP-374-part3
- dev-odin-GCP-374-c
- dev-azure-event-grid
- dev-erik-PST-780-pokuse
- dev-pepa_azClientNamedArgs
- dev-zajca-event-grid
This package is auto-updated.
Last update: 2024-09-20 10:12:30 UTC
README
安装
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 文件。