norbybaru / laravel-aws-timestream
通过API与AWS Timestream服务交互的库
v0.4.0
2024-04-02 23:37 UTC
Requires
- php: ^8.0
- aws/aws-sdk-php: ^3.209
- illuminate/support: ^9.52|^10.0|^11.0
- spatie/enum: ^3.13
Requires (Dev)
- guzzlehttp/guzzle: ^7.4
- nunomaduro/larastan: ^1.0|^2.0
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.0|^11.0
- vlucas/phpdotenv: ^5.4
README
AWS Timestream是一个快速、可扩展的无服务器时间序列数据库服务。本包是针对查询timestream并将数据导入timestream的具有明确观点的实现。
从版本 0.2.x
升级
请注意,版本 0.3.x
仍然与版本 0.2.x
兼容。没有引入破坏性更改,但我建议您从版本 0.4.x
开始逐步使用新的Payload构建方法进行Timestream摄取,因为我们将放弃对旧构建器的支持。
请参阅以下更新的示例,开始使用新的方法 TimestreamPayloadBuilder
。
安装
composer require norbybaru/laravel-aws-timestream
配置
- 发布配置
php artisan vendor:publish --provider="NorbyBaru\AwsTimestream\TimestreamServiceProvider" --tag="timestream-config"
- 打开
timestream.php
配置文件并设置您的数据库名称和表 - 使用以下环境变量设置您的AWS Timestream密钥和权限
AWS_TIMESTREAM_KEY=
AWS_TIMESTREAM_SECRET=
AWS_TIMESTREAM_PROFILE=
基本用法
查询Timestream
使用 TimestreamBuilder::query()
将提供所有可用函数的自动完成
- 使用
TimestreamBuilder
构建要传递给TimestreamReaderDto
的查询,TimestreamReaderDto
生成一个可以被TimestreamService
查询功能消费的对象
<?php use NorbyBaru\AwsTimestream\TimestreamService; use NorbyBaru\AwsTimestream\TimestreamBuilder; use NorbyBaru\AwsTimestream\Dto\TimestreamReaderDto; public function overview(TimestreamService $timestreamService) { $queryBuilder = TimestreamBuilder::query() ->select('*') ->from("database-name", 'table-name') ->whereAgo('time', '24h', '>=') ->whereNotIn('measure_value::varchar', ['reviewer', 'open', 'closed']) ->orderBy('time', 'desc'); TimestreamReaderDto::make($queryBuilder); // response from Aws timestream return $timestreamService->query($timestreamReader) }
- 使用
TimestreamReaderDto
注入from
查询,默认为database
名称,并按需指定table
名称。**注意。**无需在查询构建器上添加->from()
查询。
<?php use NorbyBaru\AwsTimestream\TimestreamService; use NorbyBaru\AwsTimestream\TimestreamBuilder; use NorbyBaru\AwsTimestream\Dto\TimestreamReaderDto; public function overview(TimestreamService $timestreamService) { $queryBuilder = TimestreamBuilder::query() ->select('*') ->whereAgo('time', '24h', '>=') ->whereNotIn('measure_value::varchar', ['reviewer', 'open', 'closed']) ->orderBy('time', 'desc'); TimestreamReaderDto::make($queryBuilder, 'table-name'); // response from Aws timestream return $timestreamService->query($timestreamReader) }
Timestream摄取
我们需要构建Timestream可以接受的摄取有效载荷。为了实现这一点,我们可以使用 TimestreamPayloadBuilder
类构建Timestream可以理解的有效载荷。
示例
- 构建单个记录摄取有效载荷
<?php use NorbyBaru\AwsTimestream\TimestreamService; use NorbyBaru\AwsTimestream\Dto\TimestreamWriterDto; use NorbyBaru\AwsTimestream\Builder\TimestreamPayloadBuilder; public function ingest(TimestreamService $timestreamService) { $payload = TimestreamPayloadBuilder::make(measureName: 'cpu_usage') ->setMeasureValue(value: 80.5) ->setMeasureValueType(type: ValueTypeEnum::DOUBLE()) ->setDimensions(name: "mac_address", value: '00:11:22:AA:BB:CC ') ->setDimensions(name: "ref", value: 'station a') ->setTime(Carbon::now()); $timestreamWriter = TimestreamWriterDto::make($payload->toRecords())->forTable('table-name'); return $timestreamService->write($timestreamWriter); }
- 使用通用属性批量摄取数据以降低Timestream摄取成本
<?php use NorbyBaru\AwsTimestream\TimestreamService; use NorbyBaru\AwsTimestream\Dto\TimestreamWriterDto; use NorbyBaru\AwsTimestream\Builder\TimestreamPayloadBuilder; public function ingest(TimestreamService $timestreamService) { $payloads = [ ...TimestreamPayloadBuilder::make(measureName: 'cpu_usage') ->setMeasureValue(value: 80.6) ->setDimensions(name: "ref", value: 'station a') ->toRecords(), ...TimestreamPayloadBuilder::make(measureName: 'memory_usage') ->setMeasureValue(value: 45.5) ->setDimensions(name: "ref", value: 'station b') ->toRecords(), ]; $common = CommonPayloadBuilder::make() ->setCommonDimensions(name: 'processor', value: 'unix') ->setCommonDimensions(name: 'mac_address', value: '00:11:22:AA:BB:CC') ->setCommonDimensions(name: 'device_name', value: 'device_1') ->setCommonMeasureValueType(ValueTypeEnum::DOUBLE()) ->setCommonTime(Carbon::now()) ->toArray(); $timestreamWriter = TimestreamWriterDto::make($payloads, $common, 'table-name'); return $timestreamService->write($timestreamWriter); }
运行单元测试
composer test