15 #include "eckit/filesystem/PathName.h"
16 #include "eckit/io/PartFileHandle.h"
17 #include "eckit/types/Types.h"
25 using namespace eckit;
31 SplitTool::SplitTool (
int argc,
char *argv[])
52 Log::debug() <<
"SplitTool: maxOpenFiles_ = " <<
maxOpenFiles_ << endl;
68 ostream &L(Log::debug());
69 L <<
"SplitTool::getChunks: " << endl;
71 vector<pair<Offset,Length> > r;
74 auto it(reader.
begin()), end(reader.
end());
76 Offset currentOffset(0);
77 Length currentLength(0);
78 size_t currentSize (0);
80 for(; it != end; ++it)
82 Offset offset(it->startPosition());
83 Length length(it->nextPosition() - it->startPosition());
84 size_t numberOfRows (it->rowCount());
85 size_t numberOfColumns (it->columnCount());
87 L <<
"SplitTool::getChunks: " << offset <<
" " << length << endl;
89 size_t size (numberOfRows * numberOfColumns *
sizeof(
double));
90 if (currentSize + size > maxExpandedSize)
92 L <<
"SplitTool::getChunks: collect " << currentOffset <<
" " << currentLength << endl;
93 r.push_back(make_pair(currentOffset, currentLength));
94 currentOffset = offset;
95 currentLength = length;
97 currentLength += length;
98 currentSize += numberOfRows * numberOfColumns *
sizeof(double);
101 if (r.size() == 0 || r.back().first != currentOffset)
102 r.push_back(make_pair(currentOffset, currentLength));
109 auto it = reader.
begin();
112 std::stringstream ss;
113 ss <<
"select * order by ";
114 for (
size_t i = 0;
i < templateParameters.size(); ++
i)
117 ss << templateParameters[
i]->name;
119 std::string sql (ss.str());
120 Log::info() <<
"SplitTool::genOrderBySelect: sql: '" << sql <<
"'" << endl;
141 void SplitTool::split(
const PathName& inFile,
const std::string& outFileTemplate,
size_t maxOpenFiles,
bool verify)
153 if (verify) (**outIt).verify(begin, end);
const iterator end() const
unsigned long pass1(T b, const T e)
static TemplateParameters & parse(const std::string &fileNameTemplate, TemplateParameters &, const core::MetaData &=nullMD)