22#include <arrow/io/api.h>
34 if (compression ==
"snappy") {
36 }
else if (compression ==
"gzip") {
38 }
else if (compression ==
"brotli") {
40 }
else if (compression ==
"zstd") {
42 }
else if (compression ==
"lz4") {
44 }
else if (compression ==
"bz2") {
46 }
else if (compression !=
"" && compression !=
"uncompressed") {
50 WRITE_WARNINGF(
"Compression '%' not available, falling back to uncompressed.", compression);
62 WRITE_WARNINGF(
"Encountered mismatch in XML tags (expected % but got %). Column names may be incorrect.",
myCurrentTag, xmlElement);
86 WRITE_WARNING(
"Column based formats are still experimental. Autodetection only works for homogeneous output.");
88 auto arrow_stream = std::make_shared<ArrowOStreamWrapper>(into);
89 std::shared_ptr<parquet::WriterProperties> props = parquet::WriterProperties::Builder().compression(
myCompression)->build();
90 myParquetWriter = *parquet::arrow::FileWriter::Open(*
mySchema, arrow::default_memory_pool(), arrow_stream, props);
93 bool writeBatch =
false;
98 WRITE_ERRORF(
"Incomplete attribute set, '%' is missing. This file format does not support Parquet output yet.",
106 PARQUET_THROW_NOT_OK(val ==
nullptr ? builder->AppendNull() : builder->AppendScalar(*val));
112 std::vector<std::shared_ptr<arrow::Array> > data;
114 std::shared_ptr<arrow::Array> column;
115 PARQUET_THROW_NOT_OK(builder->Finish(&column));
116 data.push_back(column);
119 auto batch = arrow::RecordBatch::Make(
mySchema, data.back()->length(), data);
#define WRITE_WARNINGF(...)
#define WRITE_ERRORF(...)
#define WRITE_WARNING(msg)
SumoXMLTag
Numbers representing SUMO-XML - element names.
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)