mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Merge pull request #3048 from yandex/The-Alchemist-support_uuid_in_external_dicts
The alchemist support UUID in external dicts
This commit is contained in:
commit
e585ba54f9
@ -4,6 +4,7 @@
|
||||
#include <DataTypes/DataTypeString.h>
|
||||
#include <DataTypes/DataTypeDate.h>
|
||||
#include <DataTypes/DataTypeDateTime.h>
|
||||
#include <DataTypes/DataTypeUUID.h>
|
||||
#include <Common/typeid_cast.h>
|
||||
|
||||
|
||||
@ -55,6 +56,8 @@ void ExternalResultDescription::init(const Block & sample_block_)
|
||||
types.push_back(ValueType::Date);
|
||||
else if (typeid_cast<const DataTypeDateTime *>(type))
|
||||
types.push_back(ValueType::DateTime);
|
||||
else if (typeid_cast<const DataTypeUUID *>(type))
|
||||
types.push_back(ValueType::UUID);
|
||||
else
|
||||
throw Exception{"Unsupported type " + type->getName(), ErrorCodes::UNKNOWN_TYPE};
|
||||
|
||||
|
@ -24,7 +24,8 @@ struct ExternalResultDescription
|
||||
Float64,
|
||||
String,
|
||||
Date,
|
||||
DateTime
|
||||
DateTime,
|
||||
UUID
|
||||
};
|
||||
|
||||
Block sample_block;
|
||||
|
@ -135,6 +135,18 @@ namespace
|
||||
static_cast<const Poco::MongoDB::ConcreteElement<Poco::Timestamp> &>(value).value().epochTime());
|
||||
break;
|
||||
}
|
||||
case ValueType::UUID:
|
||||
{
|
||||
if (value.type() == Poco::MongoDB::ElementTraits<String>::TypeId)
|
||||
{
|
||||
String string = static_cast<const Poco::MongoDB::ConcreteElement<String> &>(value).value();
|
||||
static_cast<ColumnUInt128 &>(column).getData().push_back(parse<UUID>(string));
|
||||
}
|
||||
else
|
||||
throw Exception{"Type mismatch, expected String (UUID), got type id = " + toString(value.type()) +
|
||||
" for column " + name, ErrorCodes::TYPE_MISMATCH};
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <Dictionaries/MySQLBlockInputStream.h>
|
||||
#include <Columns/ColumnsNumber.h>
|
||||
#include <Columns/ColumnString.h>
|
||||
#include <IO/ReadHelpers.h>
|
||||
#include <IO/WriteHelpers.h>
|
||||
#include <ext/range.h>
|
||||
#include <vector>
|
||||
@ -53,6 +54,7 @@ namespace
|
||||
case ValueType::String: static_cast<ColumnString &>(column).insertData(value.data(), value.size()); break;
|
||||
case ValueType::Date: static_cast<ColumnUInt16 &>(column).insert(UInt16{value.getDate().getDayNum()}); break;
|
||||
case ValueType::DateTime: static_cast<ColumnUInt32 &>(column).insert(time_t{value.getDateTime()}); break;
|
||||
case ValueType::UUID: static_cast<ColumnUInt128 &>(column).insert(parse<UUID>(value.data(), value.size())); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <Columns/ColumnsNumber.h>
|
||||
#include <Columns/ColumnString.h>
|
||||
|
||||
#include <IO/ReadHelpers.h>
|
||||
#include <IO/WriteHelpers.h>
|
||||
|
||||
#include <common/logger_useful.h>
|
||||
@ -59,6 +60,8 @@ namespace
|
||||
case ValueType::String: static_cast<ColumnString &>(column).insert(value.convert<String>()); break;
|
||||
case ValueType::Date: static_cast<ColumnUInt16 &>(column).insert(UInt16{LocalDate{value.convert<String>()}.getDayNum()}); break;
|
||||
case ValueType::DateTime: static_cast<ColumnUInt32 &>(column).insert(time_t{LocalDateTime{value.convert<String>()}}); break;
|
||||
case ValueType::UUID: static_cast<ColumnUInt128 &>(column).insert(parse<UUID>(value.convert<std::string>())); break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -145,7 +145,7 @@ types = [
|
||||
'Int8', 'Int16', 'Int32', 'Int64',
|
||||
'Float32', 'Float64',
|
||||
'String',
|
||||
'Date', 'DateTime'
|
||||
'Date', 'DateTime', 'UUID'
|
||||
]
|
||||
|
||||
|
||||
@ -154,7 +154,7 @@ explicit_defaults = [
|
||||
'-42', '-42', '-42', '-42',
|
||||
'1.5', '1.6',
|
||||
"'explicit-default'",
|
||||
"'2015-01-01'", "'2015-01-01 00:00:00'"
|
||||
"'2015-01-01'", "'2015-01-01 00:00:00'", "'550e8400-e29b-41d4-a716-446655440000'"
|
||||
]
|
||||
|
||||
|
||||
@ -163,7 +163,7 @@ implicit_defaults = [
|
||||
'-1', '-1', '-1', '-1',
|
||||
'2.71828', '2.71828',
|
||||
'implicit-default',
|
||||
'2015-11-25', '2015-11-25 00:00:00'
|
||||
'2015-11-25', '2015-11-25 00:00:00', "550e8400-e29b-41d4-a716-446655440000"
|
||||
]
|
||||
|
||||
|
||||
@ -210,7 +210,7 @@ def generate_data(args):
|
||||
'Int8_ Int8, Int16_ Int16, Int32_ Int32, Int64_ Int64,'
|
||||
'Float32_ Float32, Float64_ Float64,'
|
||||
'String_ String,'
|
||||
'Date_ Date, DateTime_ DateTime, Parent UInt64'
|
||||
'Date_ Date, DateTime_ DateTime, Parent UInt64, UUID_ UUID'
|
||||
') engine=Log; insert into test.dictionary_source format TabSeparated'
|
||||
'"'.format(source = args.source, ch = args.client, port = args.port))
|
||||
|
||||
@ -232,7 +232,7 @@ def generate_data(args):
|
||||
'UInt8_ tinyint unsigned, UInt16_ smallint unsigned, UInt32_ int unsigned, UInt64_ bigint unsigned, '
|
||||
'Int8_ tinyint, Int16_ smallint, Int32_ int, Int64_ bigint, '
|
||||
'Float32_ float, Float64_ double, '
|
||||
'String_ text, Date_ date, DateTime_ datetime, Parent bigint unsigned'
|
||||
'String_ text, Date_ date, DateTime_ datetime, Parent bigint unsigned, UUID_ varchar(36)'
|
||||
');'
|
||||
'load data local infile \'{0}/source.tsv\' into table test.dictionary_source;" | mysql $MYSQL_OPTIONS --local-infile=1'
|
||||
.format(prefix), shell=True)
|
||||
|
@ -0,0 +1,8 @@
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440001
|
||||
550e8400-e29b-41d4-a716-446655440002
|
||||
550e8400-e29b-41d4-a716-446655440003
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440000
|
@ -0,0 +1,8 @@
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440001
|
||||
550e8400-e29b-41d4-a716-446655440002
|
||||
550e8400-e29b-41d4-a716-446655440003
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440000
|
||||
550e8400-e29b-41d4-a716-446655440000
|
@ -1,4 +1,4 @@
|
||||
0 0 0 0 50 13874 980694578 980694579 50 13874 980694578 980694579 0 0 4761183170873013810 2007-12-27 1970-01-02 06:51:14 0
|
||||
1 1 1 1 48 57392 4083802160 4083802161 48 -8144 -211165136 -211165135 1.5 1.5 10577349846663553072 2037-06-02 1970-01-02 09:50:24 0
|
||||
2 2 2 2 69 35909 1447922757 1447922758 69 -29627 1447922757 1447922758 3 3 18198135717204167749 1978-08-08 1970-01-02 03:52:21 1
|
||||
3 3 3 3 250 1274 1029309690 1029309691 -6 1274 1029309690 1029309691 4.5 4.5 9624464864560415994 1973-06-28 1970-01-02 03:21:14 2
|
||||
0 0 0 0 50 13874 980694578 980694579 50 13874 980694578 980694579 0 0 4761183170873013810 2007-12-27 1970-01-02 06:51:14 0 550e8400-e29b-41d4-a716-446655440000
|
||||
1 1 1 1 48 57392 4083802160 4083802161 48 -8144 -211165136 -211165135 1.5 1.5 10577349846663553072 2037-06-02 1970-01-02 09:50:24 0 550e8400-e29b-41d4-a716-446655440001
|
||||
2 2 2 2 69 35909 1447922757 1447922758 69 -29627 1447922757 1447922758 3 3 18198135717204167749 1978-08-08 1970-01-02 03:52:21 1 550e8400-e29b-41d4-a716-446655440002
|
||||
3 3 3 3 250 1274 1029309690 1029309691 -6 1274 1029309690 1029309691 4.5 4.5 9624464864560415994 1973-06-28 1970-01-02 03:21:14 2 550e8400-e29b-41d4-a716-446655440003
|
||||
|
|
Loading…
Reference in New Issue
Block a user