У меня есть большие (10-100 ГБ) файлы журналов CSV / Text в моем S3 Bucket, загружаемые каждый день, и amazon S3 поддерживает заголовок диапазонов байтов RFC-7233 для частичного чтения файла вместо загрузки всего объекта.
var s3request = new GetObjectRequest()
{
BucketName = bucketName,
Key = s3Key,
ByteRange = new ByteRange(byteStart, byteEnd)
};
Можно ли как-нибудь создать индекс для каждого файла-каждой-строки и сохранить в таблице для использования в качестве ссылки на нумерацию страниц?Например, байты 1 - 100: 1-я строка, 101 - 200: 2-я строка и т. Д.
И затем, если мне нужно прочитать первые 2 строки, я могу проверить индекс, чтобы получить диапазон байтов, а затем отправитьчто в ByteRange
header
Пример 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
Я ищусоздать индекс диапазона байтов в C # перед загрузкой отчета в S3.Будем благодарны за любую помощь или предложение.
Моя попытка создать индекс
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;}
}