ClickHouse/dbms/src/Storages/tests/hit_log.cpp

151 lines
4.9 KiB
C++
Raw Normal View History

2010-05-24 17:55:57 +00:00
#include <map>
#include <list>
#include <iostream>
#include <boost/assign/list_inserter.hpp>
#include <Poco/SharedPtr.h>
2010-06-04 18:25:25 +00:00
#include <DB/IO/ReadBufferFromIStream.h>
#include <DB/IO/WriteBufferFromOStream.h>
2010-05-24 17:55:57 +00:00
#include <DB/DataTypes/DataTypesNumberFixed.h>
#include <DB/DataTypes/DataTypeString.h>
#include <DB/DataStreams/TabSeparatedRowInputStream.h>
#include <DB/DataStreams/TabSeparatedRowOutputStream.h>
#include <DB/DataStreams/copyData.h>
#include <DB/Storages/StorageLog.h>
using Poco::SharedPtr;
int main(int argc, char ** argv)
{
try
{
typedef std::pair<std::string, SharedPtr<DB::IDataType> > NameAndTypePair;
typedef std::list<NameAndTypePair> NamesAndTypesList;
NamesAndTypesList names_and_types_list;
boost::assign::push_back(names_and_types_list)
("WatchID", new DB::DataTypeUInt64)
("ChunkID", new DB::DataTypeUInt64)
("Random", new DB::DataTypeUInt32)
("JavaEnable", new DB::DataTypeUInt8)
("FrameEnable", new DB::DataTypeUInt8)
("Title", new DB::DataTypeString)
("GoodEvent", new DB::DataTypeUInt32)
// ("EventTime", new DB::DataTypeDateTime)
("CounterID", new DB::DataTypeUInt32)
("ClientIP", new DB::DataTypeUInt32)
("RegionID", new DB::DataTypeUInt32)
("UniqID", new DB::DataTypeUInt64)
("SessID", new DB::DataTypeUInt32)
("CounterClass", new DB::DataTypeUInt8)
("OS", new DB::DataTypeUInt8)
("UserAgent", new DB::DataTypeUInt8)
("URL", new DB::DataTypeString)
("Referer", new DB::DataTypeString)
("Refresh", new DB::DataTypeUInt8)
("ResolutionWidth", new DB::DataTypeUInt16)
("ResolutionHeight", new DB::DataTypeUInt16)
("ResolutionDepth", new DB::DataTypeUInt8)
("FlashMajor", new DB::DataTypeUInt8)
("FlashMinor", new DB::DataTypeUInt8)
("FlashMinor2", new DB::DataTypeString)
("NetMajor", new DB::DataTypeUInt8)
("NetMinor", new DB::DataTypeUInt8)
("UserAgentMajor", new DB::DataTypeUInt16)
// ("UserAgentMinor", new DB::DataTypeFixedString(2))
("CookieEnable", new DB::DataTypeUInt8)
("JavascriptEnable", new DB::DataTypeUInt8)
("IsMobile", new DB::DataTypeUInt8)
("MobilePhone", new DB::DataTypeUInt8)
("MobilePhoneModel", new DB::DataTypeString)
("Params", new DB::DataTypeString)
("IPNetworkID", new DB::DataTypeUInt32)
("TraficSourceID", new DB::DataTypeInt8)
("SearchEngineID", new DB::DataTypeUInt16)
("SearchPhrase", new DB::DataTypeString)
("AdvEngineID", new DB::DataTypeUInt8)
("IsArtifical", new DB::DataTypeUInt8)
("WindowClientWidth", new DB::DataTypeUInt16)
("WindowClientHeight", new DB::DataTypeUInt16)
("ClientTimeZone", new DB::DataTypeInt16)
// ("ClientEventTime", new DB::DataTypeDateTime)
("SilverlightVersion1", new DB::DataTypeUInt8)
("SilverlightVersion2", new DB::DataTypeUInt8)
("SilverlightVersion3", new DB::DataTypeUInt32)
("SilverlightVersion4", new DB::DataTypeUInt16)
("PageCharset", new DB::DataTypeString)
;
SharedPtr<DB::NamesAndTypes> names_and_types_map = new DB::NamesAndTypes;
2010-05-24 18:58:14 +00:00
SharedPtr<DB::DataTypes> data_types = new DB::DataTypes;
2010-05-24 17:55:57 +00:00
DB::ColumnNames column_names;
for (NamesAndTypesList::const_iterator it = names_and_types_list.begin(); it != names_and_types_list.end(); ++it)
{
names_and_types_map->insert(*it);
data_types->push_back(it->second);
column_names.push_back(it->first);
}
/// создаём таблицу хит лога
DB::StorageLog table("./", "HitLog", names_and_types_map, ".bin");
/// создаём описание, как читать данные из tab separated дампа
DB::Block sample;
for (NamesAndTypesList::const_iterator it = names_and_types_list.begin(); it != names_and_types_list.end(); ++it)
{
DB::ColumnWithNameAndType elem;
elem.name = it->first;
elem.type = it->second;
elem.column = elem.type->createColumn();
sample.insert(elem);
}
/// читаем данные из tsv файла и одновременно пишем в таблицу
2010-05-24 18:58:14 +00:00
if (argc == 2 && 0 == strcmp(argv[1], "write"))
2010-05-24 17:55:57 +00:00
{
2010-06-04 18:25:25 +00:00
DB::ReadBufferFromIStream in_buf(std::cin);
DB::TabSeparatedRowInputStream in(in_buf, data_types);
2010-05-24 17:55:57 +00:00
SharedPtr<DB::IBlockOutputStream> out = table.write(0);
DB::copyData(in, *out, sample);
}
/// читаем из неё
2010-05-24 18:58:14 +00:00
if (argc == 2 && 0 == strcmp(argv[1], "read"))
2010-05-24 17:55:57 +00:00
{
2010-06-07 17:50:50 +00:00
/*
DB::ColumnNames column_names;
2010-05-28 19:13:55 +00:00
boost::assign::push_back(column_names)
2010-06-07 17:50:50 +00:00
("UniqID");
2010-05-28 19:13:55 +00:00
SharedPtr<DB::DataTypes> data_types = new DB::DataTypes;
boost::assign::push_back(*data_types)
2010-06-07 17:50:50 +00:00
(new DB::DataTypeUInt64);
2010-05-28 19:13:55 +00:00
*/
2010-06-04 18:25:25 +00:00
DB::WriteBufferFromOStream out_buf(std::cout);
2010-05-24 17:55:57 +00:00
SharedPtr<DB::IBlockInputStream> in = table.read(column_names, 0);
2010-06-04 18:25:25 +00:00
DB::TabSeparatedRowOutputStream out(out_buf, data_types);
2010-05-24 17:55:57 +00:00
DB::copyData(*in, out);
}
}
catch (const DB::Exception & e)
{
std::cerr << e.what() << ", " << e.message() << std::endl;
return 1;
}
return 0;
}