Ejemplo n.º 1
0
BlockInputStreams StorageSystemGraphite::read(
    const Names & column_names,
    const SelectQueryInfo &,
    const Context & context,
    QueryProcessingStage::Enum & processed_stage,
    size_t /*max_block_size*/,
    unsigned /*num_streams*/)
{
    check(column_names);
    processed_stage = QueryProcessingStage::FetchColumns;

    MutableColumns res_columns = getSampleBlock().cloneEmptyColumns();

    const auto & config = context.getConfigRef();

    Strings sections = getAllGraphiteSections(config);
    for (const auto & section : sections)
    {
        const auto patterns = readPatterns(config, section);
        for (const auto & pattern : patterns)
        {
            for (const auto & ret : pattern.retentions)
            {
                res_columns[0]->insert(Field(section));
                res_columns[1]->insert(Field(pattern.regexp));
                res_columns[2]->insert(Field(pattern.function));
                res_columns[3]->insert(nearestFieldType(ret.age));
                res_columns[4]->insert(nearestFieldType(ret.precision));
                res_columns[5]->insert(nearestFieldType(pattern.priority));
                res_columns[6]->insert(nearestFieldType(pattern.is_default));
            }
        }
    }

    return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(getSampleBlock().cloneWithColumns(std::move(res_columns))));
}
Ejemplo n.º 2
0
BlockInputStreams StorageSystemGraphite::read(
    const Names & column_names,
    const ASTPtr & query,
    const Context & context,
    QueryProcessingStage::Enum & processed_stage,
    size_t max_block_size,
    unsigned threads)
{
    check(column_names);
    processed_stage = QueryProcessingStage::FetchColumns;

    Block block;

    ColumnWithTypeAndName col_conf_name;
    col_conf_name.name = "config_name";
    col_conf_name.type = std::make_shared<DataTypeString>();
    col_conf_name.column = std::make_shared<ColumnString>();
    block.insert(col_conf_name);

    ColumnWithTypeAndName col_regexp;
    col_regexp.name = "regexp";
    col_regexp.type = std::make_shared<DataTypeString>();
    col_regexp.column = std::make_shared<ColumnString>();
    block.insert(col_regexp);

    ColumnWithTypeAndName col_function;
    col_function.name = "function";
    col_function.type = std::make_shared<DataTypeString>();
    col_function.column = std::make_shared<ColumnString>();
    block.insert(col_function);

    ColumnWithTypeAndName col_age;
    col_age.name = "age";
    col_age.type = std::make_shared<DataTypeUInt64>();
    col_age.column = std::make_shared<ColumnUInt64>();
    block.insert(col_age);

    ColumnWithTypeAndName col_precision;
    col_precision.name = "precision";
    col_precision.type = std::make_shared<DataTypeUInt64>();
    col_precision.column = std::make_shared<ColumnUInt64>();
    block.insert(col_precision);

    ColumnWithTypeAndName col_priority;
    col_priority.name = "priority";
    col_priority.type = std::make_shared<DataTypeUInt16>();
    col_priority.column = std::make_shared<ColumnUInt16>();
    block.insert(col_priority);

    ColumnWithTypeAndName col_is_default;
    col_is_default.name = "is_default";
    col_is_default.type = std::make_shared<DataTypeUInt8>();
    col_is_default.column = std::make_shared<ColumnUInt8>();
    block.insert(col_is_default);

    Strings sections = getAllGraphiteSections();
    for (const auto & section : sections)
    {
        const auto patterns = readPatterns(section);
        for (const auto & pattern : patterns)
        {
            for (const auto & ret : pattern.retentions)
            {
                col_conf_name.column->insert(Field(section));
                col_regexp.column->insert(Field(pattern.regexp));
                col_function.column->insert(Field(pattern.function));
                col_age.column->insert(nearestFieldType(ret.age));
                col_precision.column->insert(nearestFieldType(ret.precision));
                col_priority.column->insert(nearestFieldType(pattern.priority));
                col_is_default.column->insert(nearestFieldType(pattern.is_default));
            }
        }
    }

    return BlockInputStreams(1, std::make_shared<OneBlockInputStream>(block));
}