Skip to content

dusdong/Abp.Parquet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Abp.Parquet

Abp.Parquet 是一个适用于 ABP 框架的高性能 Parquet 文件处理库,提供了简单直观的 API 用于 Parquet 文件的读写操作。该库直接基于 Parquet.Net,不依赖于其他 ETL 框架。

📦 安装

使用 NuGet 包管理器安装:

# .NET CLI
dotnet add package Abp.Parquet

# Package Manager
Install-Package Abp.Parquet

✨ 主要特性

  • 零依赖:除 Parquet.Net 外无其他依赖,轻量级且高效
  • 类型安全:支持强类型实体的读写
  • 自动架构生成:根据实体类自动生成 Parquet 架构
  • 追加模式:支持向现有 Parquet 文件追加数据
  • 完整 ABP 集成:与 ABP 框架无缝集成,支持依赖注入
  • 异步支持:所有操作均提供异步 API
  • 高性能:针对大数据量进行了优化

🚀 快速开始

基本用法

// 注册服务(在模块配置中)
Configure<AbpParquetOptions>(options =>
{
    options.DefaultCompressionMethod = CompressionMethod.Snappy;
});

// 使用示例
public class MyAppService : ApplicationService
{
    private readonly IParquetArchiveHandler _parquetHandler;
    
    public MyAppService(IParquetArchiveHandler parquetHandler)
    {
        _parquetHandler = parquetHandler;
    }
    
    public async Task ExportDataAsync()
    {
        var records = new List<UserDto>
        {
            new UserDto { Id = 1, Name = "张三", CreateTime = DateTime.Now },
            new UserDto { Id = 2, Name = "李四", CreateTime = DateTime.Now }
        };
        
        // 写入 Parquet 文件
        await _parquetHandler.WriteToFileAsync("users.parquet", records);
        
        // 读取 Parquet 文件
        var loadedUsers = await _parquetHandler.ReadFromFileAsync<UserDto>("users.parquet");
    }
}

高级配置

// 创建自定义配置
var options = new ParquetWriterOptions
{
    CompressionMethod = CompressionMethod.Gzip,
    CompressionLevel = 6,
    TreatDateTimeAsDateTimeOffset = true,
    IgnoredFields = new HashSet<string> { "IgnoredProperty" },
    CustomMetadata = new Dictionary<string, string>
    {
        ["Creator"] = "Abp.Parquet",
        ["CreatedAt"] = DateTime.Now.ToString("o")
    }
};

// 使用自定义配置写入
await _parquetHandler.WriteToFileAsync("data.parquet", records, options);

📚 主要组件

ParquetFileWriter

用于将强类型数据写入 Parquet 文件:

// 创建写入器
using var writer = new ParquetFileWriter<UserDto>("users.parquet");

// 写入数据
await writer.WriteAsync(users);

ParquetSchemaGenerator

根据实体类型自动生成 Parquet 架构:

// 创建架构生成器
var generator = new ParquetSchemaGenerator<UserDto>();

// 生成架构
var schema = generator.GenerateSchema();

ParquetArchiveFormatHandler

提供高级文件处理功能:

var handler = new ParquetArchiveFormatHandler();

// 写入文件
await handler.WriteToFileAsync("data.parquet", records);

// 读取文件
var data = await handler.ReadFromFileAsync<MyEntity>("data.parquet");

// 获取架构
var schema = await handler.GetSchemaAsync("data.parquet");

⚙️ 配置选项

属性 描述 默认值
CompressionMethod Parquet 压缩方法 Snappy
CompressionLevel 压缩级别 0
TreatDateTimeAsDateTimeOffset 是否将 DateTime 视为 DateTimeOffset false
TreatDateTimeAsString 是否将 DateTime 视为字符串 false
TreatDateTimeOffsetAsString 是否将 DateTimeOffset 视为字符串 false
IgnoredFields 要忽略的字段集合 空集合
CustomMetadata 自定义元数据 空字典

🔍 与 ChoETL 的对比

功能 Abp.Parquet ChoETL
依赖 仅 Parquet.Net 多个依赖
集成 专为 ABP 框架设计 通用 ETL 框架
体积 轻量级 较重
性能 经过优化,直接使用 Parquet.Net 通过中间层调用
维护 专注于 Parquet 格式 支持多种格式

🤝 贡献

欢迎贡献代码、报告问题或提供改进建议。请遵循以下步骤:

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开 Pull Request

📄 许可证

该项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。

🙏 致谢


🔗 查看文档 | ⭐ GitHub 仓库 | 📦 NuGet 包

About

aspnetboilerplate + parquet-dotnet

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages