mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-02 20:42:04 +00:00
fix csv format not support tuple
This commit is contained in:
parent
216dcbef2c
commit
9d5cabb26d
@ -7,6 +7,7 @@
|
|||||||
#include <Common/assert_cast.h>
|
#include <Common/assert_cast.h>
|
||||||
#include <IO/WriteHelpers.h>
|
#include <IO/WriteHelpers.h>
|
||||||
#include <IO/ReadHelpers.h>
|
#include <IO/ReadHelpers.h>
|
||||||
|
#include <IO/ReadBufferFromString.h>
|
||||||
#include <IO/WriteBufferFromString.h>
|
#include <IO/WriteBufferFromString.h>
|
||||||
|
|
||||||
|
|
||||||
@ -526,36 +527,17 @@ void SerializationTuple::serializeTextXML(const IColumn & column, size_t row_num
|
|||||||
|
|
||||||
void SerializationTuple::serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
|
void SerializationTuple::serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < elems.size(); ++i)
|
WriteBufferFromOwnString wb;
|
||||||
{
|
serializeText(column, row_num, wb, settings);
|
||||||
if (i != 0)
|
writeCSV(wb.str(), ostr);
|
||||||
writeChar(settings.csv.tuple_delimiter, ostr);
|
|
||||||
elems[i]->serializeTextCSV(extractElementColumn(column, i), row_num, ostr, settings);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializationTuple::deserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const
|
void SerializationTuple::deserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const
|
||||||
{
|
{
|
||||||
addElementSafe<void>(elems.size(), column, [&]
|
String s;
|
||||||
{
|
readCSV(s, istr, settings.csv);
|
||||||
const size_t size = elems.size();
|
ReadBufferFromString rb(s);
|
||||||
for (size_t i = 0; i < size; ++i)
|
deserializeText(column, rb, settings, true);
|
||||||
{
|
|
||||||
if (i != 0)
|
|
||||||
{
|
|
||||||
skipWhitespaceIfAny(istr);
|
|
||||||
assertChar(settings.csv.tuple_delimiter, istr);
|
|
||||||
skipWhitespaceIfAny(istr);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto & element_column = extractElementColumn(column, i);
|
|
||||||
if (settings.null_as_default && !isColumnNullableOrLowCardinalityNullable(element_column))
|
|
||||||
SerializationNullable::deserializeNullAsDefaultOrNestedTextCSV(element_column, istr, settings, elems[i]);
|
|
||||||
else
|
|
||||||
elems[i]->deserializeTextCSV(element_column, istr, settings);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SerializationTuple::tryDeserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const
|
bool SerializationTuple::tryDeserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const
|
||||||
|
@ -303,8 +303,8 @@ DataTypePtr tryInferDataTypeByEscapingRule(const String & field, const FormatSet
|
|||||||
/// Try to determine the type of value inside quotes
|
/// Try to determine the type of value inside quotes
|
||||||
auto type = tryInferDataTypeForSingleField(data, format_settings);
|
auto type = tryInferDataTypeForSingleField(data, format_settings);
|
||||||
|
|
||||||
/// If we couldn't infer any type or it's tuple in quotes or it's a number and csv.try_infer_numbers_from_strings = 0, we determine it as a string.
|
/// If we couldn't infer any type or it's a number and csv.try_infer_numbers_from_strings = 0, we determine it as a string.
|
||||||
if (!type || isTuple(type) || (isNumber(type) && !format_settings.csv.try_infer_numbers_from_strings))
|
if (!type || (isNumber(type) && !format_settings.csv.try_infer_numbers_from_strings))
|
||||||
return std::make_shared<DataTypeString>();
|
return std::make_shared<DataTypeString>();
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
Nullable(String)
|
||||||
|
Nullable(Int64)
|
||||||
|
Array(Nullable(String))
|
||||||
|
Map(String, Nullable(Int64))
|
||||||
|
Tuple(Nullable(String), Nullable(Int64), Map(String, Nullable(Int64)))
|
||||||
|
20240305 1 ['s','d'] {'a':2} ('222',33,{'abc':5})
|
@ -0,0 +1,4 @@
|
|||||||
|
-- Tags: no-fasttest
|
||||||
|
insert into function file('02977_1.csv') select '20240305', 1, ['s', 'd'], map('a', 2), tuple('222', 33, map('abc', 5));
|
||||||
|
desc file('02977_1.csv');
|
||||||
|
select * from file('02977_1.csv') settings max_threads=1;
|
Loading…
Reference in New Issue
Block a user