28#pragma warning(suppress: 5032)
31#pragma warning(disable: 4100)
33#pragma warning(disable: 4266)
35#pragma warning(disable: 4324)
37#pragma warning(disable: 4355)
39#pragma warning(disable: 4435)
41#pragma warning(disable: 4458)
43#pragma warning(disable: 4800)
46#include <parquet/arrow/writer.h>
50#pragma warning(suppress: 5031)
69 ParquetFormatter(
const std::string& columnNames,
const std::string& compression =
"",
const int batchSize = 1000000);
80 void openTag(std::ostream& into,
const std::string& xmlElement);
95 bool closeTag(std::ostream& into,
const std::string& comment =
"");
106 checkBuilder<SumoXMLAttr, arrow::StringBuilder>(attr, arrow::utf8);
107 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::StringScalar>(
toString(val)));
111 void writeAttr(std::ostream& ,
const std::string& attr,
const T& val) {
113 checkBuilder<std::string, arrow::StringBuilder>(attr, arrow::utf8);
119 checkBuilder<SumoXMLAttr, arrow::DoubleBuilder>(attr, arrow::float64);
142 for (
const auto& field :
mySchema->fields()) {
143 if (field->name() == attrString) {
156 throw ProcessError(
TLF(
"Unexpected attribute '%', this file format does not support Parquet output yet.",
toString(attr)));
161 template <
class ATTR_TYPE,
class BUILDER>
162 inline void checkBuilder(
const ATTR_TYPE& attr,
const std::shared_ptr<arrow::DataType>& (*dataType)()) {
166 for (
const auto& field :
mySchema->fields()) {
167 if (field->name() == fieldName) {
172 auto builder = std::make_shared<BUILDER>();
175 PARQUET_THROW_NOT_OK(builder->AppendNulls(
myBuilders.back()->length()));
189 parquet::Compression::type
myCompression = parquet::Compression::UNCOMPRESSED;
198 std::shared_ptr<arrow::Schema>
mySchema = arrow::schema({});
204 std::vector<std::shared_ptr<arrow::ArrayBuilder> >
myBuilders;
210 std::vector<std::shared_ptr<arrow::Scalar> >
myValues;
239 checkBuilder<SumoXMLAttr, arrow::DoubleBuilder>(attr, arrow::float64);
240 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::DoubleScalar>(val));
242 checkBuilder<SumoXMLAttr, arrow::FloatBuilder>(attr, arrow::float32);
243 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::FloatScalar>((
float)val));
250 checkBuilder<SumoXMLAttr, arrow::Int32Builder>(attr, arrow::int32);
251 myValues.push_back(isNull ?
nullptr : std::make_shared<arrow::Int32Scalar>(val));
257 if (into.precision() > 2) {
258 checkBuilder<std::string, arrow::DoubleBuilder>(attr, arrow::float64);
259 myValues.push_back(std::make_shared<arrow::DoubleScalar>(val));
261 checkBuilder<std::string, arrow::FloatBuilder>(attr, arrow::float32);
262 myValues.push_back(std::make_shared<arrow::FloatScalar>((
float)val));
269 checkBuilder<std::string, arrow::Int32Builder>(attr, arrow::int32);
270 myValues.push_back(std::make_shared<arrow::Int32Scalar>(val));
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
SumoXMLTag
Numbers representing SUMO-XML - element names.
std::bitset< 96 > SumoXMLAttrMask
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)