def test_retrieve(self):
        table_a = self.data.partition_a.table()
        table_b = self.data.partition_b.table()
        table_c = self.data.partition_c.table()

        table_names = [
            table_a.name,
            table_b.name,
            table_c.name]
        start = self.data.timestamp_1
        end = self.data.timestamp_1

        table_a_cols = [
            Column("CellID"),
            Column("CCR"),
            Column("CCRatts"),
            Column("Drops")]

        table_b_cols = [
            Column("counter_a"),
            Column("counter_b")]

        table_c_cols = [
            Column("counter_x"),
            Column("counter_y")]

        system_columns = [Column("entity_id"), Column("timestamp")]

        columns = table_a_cols + table_b_cols + table_c_cols

        with closing(self.conn.cursor()) as cursor:
            table_a.select(system_columns + table_a_cols).execute(cursor)
            logging.debug(unlines(render_result(cursor)))

            table_b.select(system_columns + table_b_cols).execute(cursor)
            logging.debug(unlines(render_result(cursor)))

            table_c.select(system_columns + table_c_cols).execute(cursor)
            logging.debug(unlines(render_result(cursor)))

        r = retrieve(self.conn, SCHEMA, table_names, columns, None, start, end,
                entitytype=self.data.entitytype)

        data = [["entity_id", "timestamp"] + [c.name for c in columns]] + r

        logging.debug(unlines(render_source(data)))

        eq_(len(r), 5)
Beispiel #2
0
def test_run_hr(conn):
    with closing(conn.cursor()) as cursor:
        reset_db(cursor)

    conn.commit()

    source_granularity = create_granularity("900")
    dest_granularity = create_granularity("3600")

    with closing(conn.cursor()) as cursor:
        source_datasource = get_dummy_datasource(cursor, "dummy-src-5")
        dest_datasource = get_dummy_datasource(cursor, "dummy-transform-src")

        dest_entitytype = get_dummy_entitytype(cursor, "dummy_type_aggregate")

        function_mapping = add_function_mapping(cursor, "sum", ["counter_a"], "sum_a")

        partition_size = 86400

        trendstore_1 = TrendStore3(source_datasource, dest_entitytype,
                source_granularity, partition_size, "table")
        trendstore_1.create(cursor)

        dest_trendstore = TrendStore3(dest_datasource, dest_entitytype,
                dest_granularity, partition_size, "table")
        dest_trendstore.create(cursor)

        function_set_qtr = add_function_set(cursor, "test_set_agg", "",
                [function_mapping.id], [source_datasource.id], dest_entitytype.id,
                source_granularity.name, dest_datasource.id, dest_entitytype.id,
                dest_granularity.name, None, ["entity_id"], None, True)

        conn.commit()

        transaction = store_modified_at(trendstore_1, source_1_1, modified_a)
        transaction.run(conn)
        transaction = store_modified_at(trendstore_1, source_1_2, modified_b)
        transaction.run(conn)
        transaction = store_modified_at(trendstore_1, source_1_3, modified_a)
        transaction.run(conn)
        transaction = store_modified_at(trendstore_1, source_1_4, modified_a)
        transaction.run(conn)

    logging.debug("source_1")
    logging.debug(unlines(render_datapackage(source_1_1)))

    processed_max_modified = None

    minerva_context = MinervaContext(conn, conn)

    transformation = Transformation(function_set_qtr, dest_timestamp)

    transformation.execute(minerva_context)

    columns = map(Column, ["entity_id", "sum_a"])

    dest_partition = dest_trendstore.partition(dest_timestamp)
    result_table = dest_partition.table()

    query = result_table.select(columns)

    with closing(conn.cursor()) as cursor:
        query.execute(cursor)

        logging.debug(unlines(render_result(cursor)))

        query.execute(cursor)

        row = cursor.fetchone()

        eq_(row[1], 21)
Beispiel #3
0
def test_run(conn):
    with closing(conn.cursor()) as cursor:
        reset_db(cursor)

    conn.commit()

    minerva_context = MinervaContext(conn, conn)

    source_granularity = create_granularity("900")
    dest_granularity = create_granularity("900")

    with closing(conn.cursor()) as cursor:
        source_datasource_1 = get_dummy_datasource(cursor, "dummy-src-1")
        source_datasource_2 = get_dummy_datasource(cursor, "dummy-src-2")
        dest_datasource = get_dummy_datasource(cursor, "dummy-transform-src")

        entitytype = get_dummy_entitytype(cursor, dummy_type_name)

        partition_size = 86400

        trendstore_1 = TrendStore(
            source_datasource_1, entitytype, source_granularity,
            partition_size, "table")
        trendstore_1.create(cursor)
        trendstore_2 = TrendStore(
            source_datasource_2, entitytype, source_granularity,
            partition_size, "table")
        trendstore_2.create(cursor)
        result_trendstore = TrendStore(
            dest_datasource, entitytype, dest_granularity, partition_size,
            "table")
        result_trendstore.create(cursor)

        function_mappings = [
            add_function_mapping(cursor, None, ["counter_a"], "identity_a"),
            add_function_mapping(cursor, None, ["counter_b"], "identity_b"),
            add_function_mapping(cursor, None, ["counter_c"], "identity_c"),
            add_function_mapping(cursor, "add", ["counter_a", "counter_b"], "add_a_b"),
            add_function_mapping(cursor, "multiply", ["counter_a", "300"], "a_times_300")]

        function_mapping_ids = [fm.id for fm in function_mappings]

        function_set_qtr = add_function_set(cursor, "test_set", "", function_mapping_ids,
                [source_datasource_1.id, source_datasource_2.id], entitytype.id, source_granularity.name, dest_datasource.id, entitytype.id,
                dest_granularity.name, None, [], None, True)

        entities = map(partial(get_or_create_entity, cursor), dns)

        conn.commit()

        source_1 = create_source_1(source_granularity, entities)

        def store_modified_at(trendstore, datapackage, modified):
            def set_modified(state):
                state["modified"] = modified

            partition = trendstore.partition(datapackage.timestamp)
            set_modified_action = UpdateState(set_modified)
            copy_from = CopyFrom(k(partition), k(datapackage))

            return DbTransaction(set_modified_action, copy_from)

        transaction = store_modified_at(trendstore_1, source_1, modified_a)
        transaction.run(conn)

        source_2 = create_source_2(source_granularity, entities)

        transaction = store_modified_at(trendstore_2, source_2, modified_a)
        transaction.run(conn)

        result_partition = result_trendstore.partition(timestamp)

        result_table = result_partition.table()

    conn.commit()

    logging.debug("source_1")
    logging.debug(unlines(render_datapackage(source_1)))

    logging.debug("source_2")
    logging.debug(unlines(render_datapackage(source_2)))

    dest_timestamp = timestamp

    transformation = Transformation(function_set_qtr, dest_timestamp)

    transformation.execute(minerva_context)

    columns = map(Column, ["entity_id", "identity_a", "identity_b", "add_a_b", "a_times_300"])

    query = result_table.select(columns)

    with closing(conn.cursor()) as cursor:
        query.execute(cursor)

        logging.debug(unlines(render_result(cursor)))

        src_table_1 = trendstore_1.partition(timestamp).table()
        query = src_table_1.select(Call("max", Column("modified")))
        query.execute(cursor)
        src1_max_modified = first(cursor.fetchone())

        src_table_2 = trendstore_2.partition(timestamp).table()
        query = src_table_2.select(Call("max", Column("modified")))
        query.execute(cursor)
        src2_max_modified = first(cursor.fetchone())

        query = modified_table.select(Column("end")).where_(Eq(Column("table_name"), result_table.name))
        query.execute(cursor)

        query = state_table.select(Column("processed_max_modified")).where_(Eq(Column("function_set_id")))
        query.execute(cursor, (function_set_qtr.id,))
        processed_max_modified = first(cursor.fetchone())

        eq_(max(src1_max_modified, src2_max_modified), processed_max_modified)