This article aims at explaining how Bridge looks in practice and how to interact with the database. You should be able to get started with some first queries against your data.

Authentication

After we set up your Bridge instance, we will provide you with the following information:

  • Hostname: The URL of the database server, e.g. <organisation>.dbs.i.onmercury.io Port: The port used by the database (usually 5432 )
  • Database name: the name of the database that contains your Bridge objects, e.g. metrics_<organisation>
  • Username: database user
  • Password: password for database user (is provided to you separately over a secure channel) 
  • Schema: The current database schema you can work with, e.g. mercury_v2

The connection to the database is always SSL encrypted, which is explicit when starting a connection. It is likely, that you will need to have the host name and port safelisted in your companies firewall.

Bridge is a read-only database. You cannot create database objects like tables or views, nor can you update or change the available data in any way.


Bridge data model

The Bridge database contains versioned schemas containing the same data in slightly altered structures. This approach is necessary, as MMT Mercury is constantly being developed further, which can imply changes to the underlying data model. Every time the data model changes on a structural level, a new schema version containing the changes is created.

Every schema contains a view for every MMT Mercury entity:

agency_proposal_runtimes
agency_proposals
audience_segments
campaigns
categories
channels
creative_performance_metrics
media
plan_items
plan_items_audience_segments
plan_items_by_month
publishers
runtimes
The above displayed views are an example for schema mercury_v2. The views in schemas of following versions may be different.
For a more in depth look at the Bridge data model, consult the data model documentation.

Connecting to MMT Bridge

We specifically chose to provide Bridge as a PostgreSQL database, as it's an industry standard that is compatible with nearly all BI tools and programming languages. The following examples are usually easily transferable to other systems you may decide to use.

psql

The simplest way to connect to your Bridge instance is to use a shell (e.g. bash or powershell). The command line programm psql allows you to connect to your database directly from shell.

psql "postgresql://<username>:<password>@<hostname>/<dbname>?
ssl=true&sslmode=require"

List schemas

metrics=# \dn
          List of schemas
      Name       | Owner
-----------------+-------------------------
 extensions      | mercury
 mercury         | mercury_application
 mercury_source  | mercury_application
 mercury_v1      | mercury_application
 mercury_v2      | mercury_application
 mercury_v3      | mercury_application
 metric_helpers  | postgres
 public          | postgres
 user_management | postgres

(9 rows)
List views in schema
metrics=# \dv mercury_v2.*
                          List of relations
  Schema    |             Name             | Type |        Owner
------------+------------------------------+------+---------------------
mercury_v2  | agency_proposal_runtimes     | view | mercury_application
mercury_v2  | agency_proposals             | view | mercury_application
mercury_v2  | audience_segments            | view | mercury_application
mercury_v2  | campaigns                    | view | mercury_application
mercury_v2  | categories                   | view | mercury_application
mercury_v2  | channels                     | view | mercury_application
mercury_v2  | creative_performance_metrics | view | mercury_application
mercury_v2  | media                        | view | mercury_application
mercury_v2  | plan_items                   | view | mercury_application
mercury_v2  | plan_items_audience_segments | view | mercury_application
mercury_v2  | plan_items_by_month          | view | mercury_application 
mercury_v2  | publishers                   | view | mercury_application
mercury_v2  | runtimes                     | view | mercury_application

(13 rows)

Query a table

SELECT * FROM mercury_v2.plan_items;

Using psql allows for quick easy access to your data and to get a first overview, but is not suitable for database development and more complex analysis.

DBeaver SQL client

An SQL client like DBeaver has an optimized user interface and allows for easier scripting of

database queries.

Create connection

In the toolbar, click on Database > New database connection , look for PostgreSQL, select next and fill in the connection details:


Then click on OK and you should see your connection appear in the left most panel. You can then unfold the connection tree to look at the Bridge database objects:

You can then create SQL scripts to develop more complex queries and save them to disk. If your use case is to run complex analytics and machine learning methods on this data, you will need to access the Bridge database using a data science programming language.

Data science programming languages

The most popular data science programming languages currently are R and python. The following examples show a very basic way of accessing Bridge data using these programming languages. Other methods exist and can be more efficient for specific use cases.

Accessing Bridge data with other programming languages usually works similarly. In our examples, we use libraries ( RPostgres, psycopg2 ) to connect to the PostgreSQL database. Most programming languages will provide such libraries.

The examples show the connection details, including the credentials as hard coded variables. We strongly advise against this, as this represents a security risk. We only do this here to keep the examples as simple as possible.

R

To access the Bridge PostgreSQL database, you can use the package  RPostgres , which is a  DBI  interface.

library(RPostgres)
pg_host <- '<hostname>'
pg_port <- 5432
pg_db <- '<database-name>'
pg_user <- '<user_name>'
pg_password <- '<password>'
con <- dbConnect(
  RPostgres::Postgres(),
  host = pg_host,
  dbname = pg_db,
  port = pg_port,
  user = pg_user,
  password = pg_password,
  sslmode = 'require'
)
# Query schema names in database
dbGetQuery(
  con,
  "SELECT DISTINCT table_schema FROM information_schema.tables ORDER BY
table_schema;"
)
# Query table names in schema `mercury_v2`
dbGetQuery(
  con,
  "SELECT DISTINCT table_schema, table_name FROM information_schema.tables WHERE
table_schema = 'mercury_v2' ORDER BY table_schema, table_name;"
)
# Write 100 first rows of the `plan_items` table to a dataframe
query <- 'SELECT * FROM mercury_v2.plan_items LIMIT 100;'
plan_items <- dbGetQuery(
con,
query
)

python

For python, you can use  psycopg2  and  sqlalchemy  to access the Bridge data and directly transfer query results to DataFrames.

import psycopg2
import pandas as pd
from sqlalchemy import create_engine

pg_host = '<hostname>'
pg_port = 5432
pg_db = '<database-name>'
pg_user = '<user_name>'
pg_password = '<password>'

con_str = 'postgresql+psycopg2://{0}:{1}@{2}:{3}/{4}'.format(
  pg_user,
  pg_password,
  pg_host,
pg_port,
pg_db
)

engine = create_engine(con_str);
con = engine.connect()

# Query schema names in database
pd.read_sql(
  'SELECT DISTINCT table_schema FROM information_schema.tables ORDER BY
table_schema;',
  con
)

# Query table names in schema `mercury_v2`
pd.read_sql(
  "SELECT DISTINCT table_schema, table_name FROM information_schema.tables WHERE
table_schema = 'mercury_v2' ORDER BY table_schema, table_name;",
  con
)

# Write 100 first rows of the `plan_items` table to a dataframe
query = 'SELECT * FROM mercury_v2.plan_items LIMIT 100;'
plan_items = pd.read_sql(
query,
con
)