创建CSV文件的字节范围索引以逐行读取S3

时间:2019-02-26 16:21:15

标签: c# .net amazon-web-services amazon-s3

我每天都在我的S3存储桶中上传大型(10-100gb)CSV /文本日志文件,亚马逊S3支持RFC-7233字节范围标头来部分读取文件,而不下载完整的对象。

var s3request = new GetObjectRequest()
                {
                    BucketName = bucketName,
                    Key = s3Key,
                    ByteRange = new ByteRange(byteStart, byteEnd)
                };

有什么方法可以为每个文件行创建索引并将其存储在表中以用作分页参考吗?例如,字节1-100:第一行,101-200:第二行,依此类推。

然后,如果我需要读取前两行,则可以检查索引以获取字节范围,然后将其发送到ByteRange标头

示例CSV文件

Field1, Field2
a, b
c, d
e, f
g, h
i, j
k, l
x, y

示例索引

Row, ByteStart, ByteEnd
1, 0, 100
2, 101, 200
3, 201, 300

在将报告上传到S3之前,我正在寻找在C#中创建字节范围索引的方法。任何帮助或建议,将不胜感激。

我尝试创建索引

void Main()
{
    string path = @"Y:\temp\test-file.txt"; 
    var index = new List<RowIndex>();
    // Read file by skipping the header
    var lines = File.ReadLines(path).Skip(1);
    long rowNumber = 1;
    foreach(var line in lines)
    {
        // How to get the byteStart + byteEnd for this line ?

        index.Add(new RowIndex {rowNumber = rowNumber, byteStart = ? , byteEnd = ? });
        rowNumber++;
    }
    // Print the index  
}

public class RowIndex
{
    public long rowNumber {get; set;}
    public long byteStart {get;set;}
    public long byteEnd {get;set;}  
}

0 个答案:

没有答案