blob: 56484b0cc6cb23e6f70e3d1b29e485196234ba8d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ORCOutputFormatFile.h"
#if USE_ORC
#include <Formats/FormatFactory.h>
#include <Processors/Formats/Impl/ORCBlockOutputFormat.h>
#include <Processors/Port.h>
#include <Poco/Util/AbstractConfiguration.h>
#include <Common/BlockTypeUtils.h>
#include <Common/CHUtil.h>
namespace local_engine
{
ORCOutputFormatFile::ORCOutputFormatFile(
DB::ContextPtr context_,
const std::string & file_uri_,
WriteBufferBuilderPtr write_buffer_builder_,
const DB::Block & preferred_schema_)
: OutputFormatFile(context_, file_uri_, write_buffer_builder_, preferred_schema_)
{
}
OutputFormatFile::OutputFormatPtr ORCOutputFormatFile::createOutputFormat(const DB::Block & header)
{
auto res = std::make_shared<OutputFormatFile::OutputFormat>();
res->write_buffer = write_buffer_builder->build(file_uri);
auto new_header = createHeaderWithPreferredSchema(header);
// TODO: align all spark orc config with ch orc config
auto format_settings = DB::getFormatSettings(context);
if (context->getConfigRef().has("timezone"))
{
const String config_timezone = context->getConfigRef().getString("timezone");
const String mapped_timezone = DateTimeUtil::convertTimeZone(config_timezone);
format_settings.orc.writer_time_zone_name = mapped_timezone;
}
auto output_format = std::make_shared<DB::ORCBlockOutputFormat>(*(res->write_buffer), toShared(new_header), format_settings);
res->output = output_format;
return res;
}
}
#endif