zoukankan      html  css  js  c++  java
  • ChoETL

      ETL是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。ETL是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。

      1. 安装ChoETL

      Cinchoo ETL可以从Nuget下载,在Nuget包管理器控制台使用GUI或者以下命令:

      
    Install-Package ChoETL
    View Code

      将命名空间添加到程序:

      
    using ChoETL;
    View Code

      2. 加载/写入文件

      要加载/写入任何文件(CSV,FixedLength,Xml,JSON,KVP),只需使用适当的读取器/写入器组件来解析它.

      CSV - ChoCSVReader / ChoCsvWriter

      FixedLength - ChoFixedLengthReader /  ChoFixedLengthWriter

      XML - ChoXmlReader / ChoXmlWriter

      JSON - ChoJSONReader / ChoJSONWriter

      KVP - ChoKVPReader / ChoKVPWriter

      3. CSV文件读写

      3.1 新建一个csv文件,文件命名为"Emp.csv", 输入以下内容后保存文件.

      
    1,Tom
    2,Carl
    3,Mark
    CSV content

      3.2 Iterator(迭代器)方式加载

      
    foreach (var e in new ChoCSVReader("Emp.csv"))
    {
        Console.WriteLine(e.ToStringEx());
    }
    Load using iterator

      3.3 Loop(循环)方式加载

      
    var reader = new ChoCSVReader("Emp.csv");
    object rec = null;
     
    while ((rec = reader.Read()) != null)
    {
        Console.WriteLine(rec.ToStringEx());
    }
    Load using loop

      3.4 List<T>(泛型List)方式写入

      
    List<ExpandoObject> objs = new List<ExpandoObject>();
    dynamic rec1 = new ExpandoObject();
    rec1.Id = 1;
    rec1.Name = "Mark";
    objs.Add(rec1);
     
    dynamic rec2 = new ExpandoObject();
    rec2.Id = 2;
    rec2.Name = "Jason";
    objs.Add(rec2);
     
    using (var parser = new ChoCSVWriter("Emp.csv"))
    {
        parser.Write(objs);
    }
    Write list of objects

      3.5 Object写入

      
    using (var parser = new ChoCSVWriter("Emp.csv"))
    {
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 1;
        rec1.Name = "Mark";
        parser.Write(item);
    
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 2;
        rec1.Name = "Jason";
        parser.Write(item);
    }
    Write each object

      4. FixedLength文件读写(例如:TSV)

       4.1 新建一个txt文件,文件命名为"Emp.txt", 输入以下内容后(以一个或多个TAB键间隔)保存文件.

      
    Id      Name      
    1       Carl      
    2       Mark   
    TXT content

      4.2 Iterator(迭代器)方式加载

      
    foreach (dynamic e in new ChoFixedLengthReader("Emp.txt").WithFirstLineHeader())
    {
          Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);  
    }
    Load using iterator

      4.3 Loop(循环)方式加载

      
    var reader = new ChoFixedLengthReader("Emp.txt").WithFirstLineHeader();
    dynamic rec;
     
    while ((rec = reader.Read()) != null)
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using loop

      4.4 Field specs方式加载

      
    foreach (var e in new ChoFixedLengthReader("Emp.txt").WithFirstLineHeader().WithField("Id", 0, 8).WithField(8, 10))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load with field specs

       4.5 POCO方式加载

      
    public partial class Employee
    {
        [ChoFixedLengthRecordField(0, 8)]
        public int Id { get; set; }
        [ChoFixedLengthRecordField(8, 10)]
        public string Name { get; set; }
    }
    
    foreach (var e in new FixedLengthReader<Employee>("Emp.txt"))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using POCO object

      4.6  List<T>(泛型List)方式写入

      
    List<ExpandoObject> objs = new List<ExpandoObject>();
    dynamic rec1 = new ExpandoObject();
    rec1.Id = 1;
    rec1.Name = "Mark";
    objs.Add(rec1);
     
    dynamic rec2 = new ExpandoObject();
    rec2.Id = 2;
    rec2.Name = "Jason";
    objs.Add(rec2);
     
    using (var parser = new ChoFixedLengthWriter("Emp.txt").WithFirstLineHeader().
          WithField("Id", 0, 8).
          WithField("Name", 8, 10))
    {
        parser.Write(objs);
    }
    Write list of objects

      4.7  Object写入

      
    using (var parser = new ChoFixedLengthWriter("Emp.txt").WithFirstLineHeader().
          WithField("Id", 0, 8).
          WithField("Name", 8, 10))
    {
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 1;
        rec1.Name = "Mark";
        parser.Write(item);
    
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 2;
        rec1.Name = "Jason";
        parser.Write(item);
    }
    Write each object

      5. XML文件读写

      5.1 新建一个xml文件,文件命名为"Emp.xml", 输入以下内容后保存文件.

      
    <Employees>
        <Employee Id='1'>
            <Name>Tom</Name>
        </Employee>
        <Employee Id='2'>
            <Name>Mark</Name>
        </Employee>
    </Employees>
    XML content

      5.2 Iterator(迭代器)方式加载

      
    foreach (dynamic e in new ChoXmlReader("Emp.xml"))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using iterator

      5.3 Loop(循环)方式加载

      
    var reader = new ChoXmlReader("Emp.xml");
    dynamic rec;
     
    while ((rec = reader.Read()) != null)
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using loop

      5.4 POCO方式加载

      
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    foreach (var e in new ChoXmlReader<Employee>("Emp.xml"))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using POCO object

      5.5  List<T>(泛型List)方式写入

      
    List<ExpandoObject> objs = new List<ExpandoObject>();
    dynamic rec1 = new ExpandoObject();
    rec1.Id = 1;
    rec1.Name = "Mark";
    objs.Add(rec1);
     
    dynamic rec2 = new ExpandoObject();
    rec2.Id = 2;
    rec2.Name = "Jason";
    objs.Add(rec2);
     
    using (var parser = new ChoXmlWriter("Emp.xml").WithXPath("Employees/Employee"))
    {
        parser.Write(objs);
    }
    Write list of objects

      5.6  Object写入

      
    using (var parser = new ChoXmlWriter("Emp.xml").WithXPath("Employees/Employee"))
    {
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 1;
        rec1.Name = "Mark";
        parser.Write(item);
    
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 2;
        rec1.Name = "Jason";
        parser.Write(item);
    }
    Write each object

      5.7 POCO object写入

      
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    List<Employee> objs = new List<Employee>();
    objs.Add(new Employee() { Id = 1, Name = "Tom" });
    objs.Add(new Employee() { Id = 2, Name = "Mark" });
    
    using (var parser = new ChoXmlWriter<Employee>("Emp.xml").WithXPath("Employees/Employee"))
    {
        parser.Write(objs);
    }
    Write using POCO object

      6. JSON文件读写

      6.1 新建一个json文件,文件命名为"Emp.json", 输入以下内容后保存文件.

      
    [
        {
        "Id": 1,
        "Name": "Mark"
        },
        {
        "Id": 2,
        "Name": "Tom"
        }
    ]
    JSON content

      6.2 Iterator(迭代器)方式加载

      
    foreach (dynamic e in new ChoJSONReader("Emp.json"))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using iterator

      6.3 Loop(循环)方式加载

      
    var reader = new ChoJSONReader("Emp.json");
    dynamic rec;
     
    while ((rec = reader.Read()) != null)
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using loop

      6.4 POCO方式加载

      
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    foreach (var e in new ChoJSONReader<Employee>("Emp.json"))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using POCO object

      6.5 List<T>(泛型List)方式写入

      
    List<ExpandoObject> objs = new List<ExpandoObject>();
    dynamic rec1 = new ExpandoObject();
    rec1.Id = 1;
    rec1.Name = "Mark";
    objs.Add(rec1);
     
    dynamic rec2 = new ExpandoObject();
    rec2.Id = 2;
    rec2.Name = "Jason";
    objs.Add(rec2);
     
    using (var parser = new ChoJSONWriter("Emp.json"))
    {
        parser.Write(objs);
    }
    Write list of objects

      6.6 Object写入

      
    using (var parser = new ChoJSONWriter("Emp.json"))
    {
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 1;
        rec1.Name = "Mark";
        parser.Write(item);
    
        dynamic rec1 = new ExpandoObject();
        rec1.Id = 2;
        rec1.Name = "Jason";
        parser.Write(item);
    }
    Write each object

      6.7 POCO object写入

      
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    List<Employee> objs = new List<Employee>();
    objs.Add(new Employee() { Id = 1, Name = "Tom" });
    objs.Add(new Employee() { Id = 2, Name = "Mark" });
    
    using (var parser = new ChoJSONWriter<Employee>("Emp.json"))
    {
        parser.Write(objs);
    }
    Write using POCO object

      7. Key-Value(KVP)文件读写

      7.1 新建一个ics文件,文件命名为"sample.ics", 输入以下内容后保存文件.

      
    BEGIN:VCALENDAR
    PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
    VERSION:2.0
    METHOD:PUBLISH
    BEGIN:VEVENT
    ORGANIZER:MAILTO:eralper@nosuchemail.com
    DTSTART:20090306T140000Z
    DTEND:20090306T150000Z
    LOCATION:Meeting Room 1-D
    TRANSP:OPAQUE
    SEQUENCE:0
    UID:040000008200E00074C5B7101A82E00800000000B09916C3F9ADC9010000000000000000100
    0000099DFBC4731297248A2CAF0885C8C4856
    DTSTAMP:20090326T080109Z
    DESCRIPTION:A short discussion on topics related with upgrade of HiPath
    ProCenter SDK Applications
    
    SUMMARY:Upgrade HiPath ProCenter SDK Applications
    PRIORITY:5
    X-MICROSOFT-CDO-IMPORTANCE:1
    CLASS:PUBLIC
    BEGIN:VALARM
    TRIGGER:-PT15M
    ACTION:DISPLAY
    DESCRIPTION:Reminder
    END:VALARM
    END:VEVENT
    END:VCALENDAR
    ICS content

      7.2 Iterator(迭代器)方式加载

      
    using (var r = new ChoKVPReader(@"sample.ics"))
    {
        r.Configuration.RecordStart = "BEGIN:VEVENT";
        r.Configuration.RecordEnd = "END:VEVENT";
        r.Configuration.IgnoreEmptyLine = true;
        r.Configuration.Comment = ";";
        foreach (dynamic item in r)
        {
            Console.WriteLine(item.SUMMARY);
        }
    }
    Load using iterator

      7.3 Loop(循环)方式加载

      
    using (var r = new ChoKVPReader(@"sample.ics"))
    {
        r.Configuration.RecordStart = "BEGIN:VEVENT";
        r.Configuration.RecordEnd = "END:VEVENT";
        r.Configuration.IgnoreEmptyLine = true;
        r.Configuration.Comment = ";";
    
        dynamic rec;
        while ((rec = r.Read()) != null)
        {
            Console.WriteLine(rec.SUMMARY);
        }
    }
    Load using loop

      7.4 POCO方式加载

      
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    
    foreach (var e in new ChoJSONReader<Employee>("Emp.json"))
    {
        Console.WriteLine("Id: " + e.Id + " Name: " + e.Name);
    }
    Load using POCO object

      7.5 写入待补充

      8. GitHub

      https://github.com/Cinchoo/ChoETL

  • 相关阅读:
    React+AntdUi实现《好客租房系统》首页01
    javaScript学习day04——关于函数
    javaScript学习day03
    javascript学习day01
    第五章回溯法
    第四章作业
    第四章上机实践报告
    算法第三章动态规划
    PTA 7-3 编辑距离问题 (30 分)
    7-3 两个有序序列的中位数 (20 分) log n的解法
  • 原文地址:https://www.cnblogs.com/iot1024/p/7494206.html
Copyright © 2011-2022 走看看