Samples¶
The following section contains several examples that cover most of the ViyaDB features using single database instance.
Running¶
It's recommended to use Docker image of ViyaDB for running the samples. To launch Docker container with latest ViyaDB version, run:
docker run -p 5000:5000 --rm -ti \ -v /tmp/viyadb:/tmp/viyadb viyadb/viyadb:latest
Mobile Attribution Tracking¶
Mobile attribution tracking is a powerful marketing tool that allows measuring productivity of users, advertisement campaigns, etc. The biggest question that tools like this can answer is where has advertiser's money gone, and how to optimize future campaigns.
How does this work? Mobile application generates events upon user action, and delivers them to a server, where these events are being joined to the attribution data received from an ad network and different partners. Finally, the data is analyzed based on a date an application was installed. What we need to know for the sake of example is that we have events of the following types:
- Click (clicking on an advertisement)
- Impression (viewing an advertisement)
- Install (installing an application)
- In-App Event (custom in-app event generated by an application)
- Launch (application was launched)
- Uninstall (application was removed from a mobile phone)
In case of click and impression events, install date actually means click/impression date.
Starting ViyaDB¶
Create table.json
file containing:
{ "name": "activity", "dimensions": [ {"name": "app_id"}, {"name": "user_id"}, { "name": "event_time", "type": "time", "format": "millis", "granularity": "day" }, {"name": "country"}, {"name": "city"}, {"name": "device_type"}, {"name": "device_vendor"}, {"name": "ad_network"}, {"name": "campaign"}, {"name": "site_id"}, {"name": "event_type"}, {"name": "event_name"}, {"name": "organic", "cardinality": 2}, {"name": "days_from_install", "type": "ushort"} ], "metrics": [ {"name": "revenue" , "type": "double_sum"}, {"name": "users", "type": "bitset", "field": "user_id"}, {"name": "count" , "type": "count"} ] }
Create the table by running:
curl -d @table.json http://localhost:5000/tables
Generating Sample Data¶
To generate 100M user activity events, run the following:
mkdir /tmp/viyadb docker run --log-driver=none --rm -ti -e EVENTS_NUMBER=10000000 \ -e OUTPUT_FORMAT=tsv viyadb/events-generator:latest > /tmp/viyadb/data.tsv
This might take several minutes.
Loading Data¶
Create load descriptor as follows:
{ "table": "activity", "format": "tsv", "type": "file", "columns": [ "app_id", "user_id", "event_time", "country", "city", "device_type", "device_vendor", "ad_network", "campaign", "site_id", "event_type", "event_name", "organic", "days_from_install", "revenue" ], "file": "/tmp/viyadb/data.tsv" }
Load the data by running:
curl -d @load.json http://localhost:5000/load
Querying¶
The following query finds top 10 applications by organic installs count:
{ "type": "aggregate", "table": "activity", "select": [ {"column": "app_id"}, {"column": "count"} ], "filter": {"op": "and", "filters": [ {"op": "ge", "column": "event_time", "value": "2015-01-01"}, {"op": "le", "column": "event_time", "value": "2015-01-30"}, {"op": "eq", "column": "event_type", "value": "install"}, {"op": "eq", "column": "organic", "value": "True"} ]}, "sort": [{"column": "count"}], "limit": 10 }
Save the query in file query.json
, and run:
curl -d @query.json http://localhost:5000/query
The query can be invoked using experimental SQL support. To enter SQL interpreter shell, please run:
docker exec -ti \ $(docker ps | grep viyadb/viyadb:latest | awk '{print $1}') \ /opt/viyadb/bin/vsql
Our previous query translates into SQL as follows:
SELECT app_id, count FROM activity WHERE event_time >= '2015-01-01' AND event_time <= '2015-01-30' AND event_type='install' AND organic='True' ORDER BY count DESC LIMIT 10
Let's run the query:
ViyaDB> SELECT app_id, count FROM activity WHERE event_time >= '2015-01-01' AND event_time <= '2015-01-30' AND event_type='install' AND organic='True' ORDER BY count DESC LIMIT 10 app_id count ------ ----- com.skype.raider 282 com.facebook.orca 42 net.cleverbit.VegeFruits 41 com.virgil.basketball 27 com.abzorbagames.poker 21 air.nn.mobile.app.main 18 com.squareup 17 freemoviesapp.com 16 com.ea.spymouse_row 14 com.bandainamcoent.tamagothiclassicus 14 Time taken: 0.004841 secs
For more example on this dataset please refer to the Blog post: Analyzing Mobile Users Activity with ViyaDB.