Weather enrichment - OXYGEN-MARKET/oxygen-market.github.io GitHub Wiki

HOME > SNOWPLOW SETUP GUIDE > Step 3: Setting up Enrich > Configurable enrichments > Weather enrichment

Compatibility

JSON Schema iglu:com.snowplowanalytics.snowplow.enrichments/weather_enrichment_config/jsonschema/1-0-0 Compatibility R74+ Data provider OpenWeatherMap

Overview

This enrichment uses OpenWeatherMap service to look up weather conditions in which event has been occurred.

There are five possible fields you can add to the "parameters" section of the enrichment configuration JSON: "apiKey", "cacheSize", "geoPrecision", "apiHost", and "timeout".

  • apiKey is your key you need to obtain from OpenWeatherMap. Notice that free key coulnd't be used for weather enrichment, you need to subscribe paid plan.
  • cacheSize is amount of requests underlying client need to store. Usually it's amount requests for your plan, plus 1% for errors
  • timeout is a time in seconds after which request should be considered failed. Notice that failed weather enrichment will filter out whole your event, whether this failure be timeout or invalid API key
  • apiHost is one several (history.openweathermap.org, api.openweathermap.org, pro.openweathermap.org) API hosts. For most cases history.openweathermap.org should be fine
  • geoPrecision is fraction of one to which geo coordinates will be rounded for storing in cache. Less precise value is 1 assume ~60km infelicity in worst cast, most precise value is 10 assume ~6km infelicity.

Example

Here's pretty common configuration suited for starter plan:

{
    "schema": "iglu:com.snowplowanalytics.snowplow.enrichments/weather_enrichment_config/jsonschema/1-0-0",

    "data": {
        "enabled": true,
        "vendor": "com.snowplowanalytics.snowplow.enrichments",
        "name": "weather_enrichment_config",
        "parameters": {
            "apiKey": "{{KEY}}",
            "cacheSize": 5100,
            "geoPrecision": 1,
            "apiHost": "history.openweathermap.org",
            "timeout": 5
        }
    }
}

Data sources

To produce the enriched weather-related data, the values of latitude, longitude, and time are passed with API request to OpenWeatherMap.

Ultimately ip parameter (mapped to user_ipaddress) is used to obtain latitude and longitude geographical coordinates. It is achieved by yet another enrichment, namely IP lookups enrichment, which produces geo_latitude and geo_longitude.

The time parameter is the derived_tstamp value calculated during the common enrichment process. To find out more about derived_tstamp, please, follow this link.

Algorithm

This enrichment uses 3rd party, OpenWeatherMap, service to look up the weather conditions in which the event occurred.

As a reminder, bear in mind how geoPrecision works. Its value ranges from 1 to 10. Less precise value is 1 and it assumes ~60km infelicity in worst cast. Most precise value is 10 which assumes ~6km infelicity.

Data generated

The data generated by this enrichment conforms to the org.openweathermap/weather JSON schema.

An example of the returned data follows. This is the kind of stringified JSON value which populates derived_contexts parameter/field in enriched/good data (post enrichment).

{
    "main": {
        "temp": 301.308,
        "temp_min": 301.308,
        "temp_max": 301.308,
        "pressure": 1021.91,
        "sea_level": 1024.77,
        "grnd_level": 1021.91,
        "humidity": 90
    },
    "wind": {
        "speed": 4.39,
        "deg": 190.002
    },
    "clouds": {
        "all": 0
    },
    "weather": [
        {
            "id": 800,
            "main": "Clear",
            "description": "Sky is Clear",
            "icon": "01d"
        }
    ],
    "dt": "1997-07-16T19:20+01:00"
}

Below is the summary of the output fields for the dedicated org_openweathermap_weather_1 table (post shredding and storage processes).

Field Purpose
clouds.all Cloudiness, %
dt Time of data calculation, UTC
main.humidity Humidity, %
main.pressure Atmospheric pressure (on the sea level, if there is no sea_level or grnd_level data), hPa
main.temp Temperature, Kelvin
main.temp_max Maximum temperature at the moment. This is deviation from current temp that is possible for large cities and megalopolises geographically expanded.
main.temp_min Minimum temperature at the moment. This is deviation from current temp that is possible for large cities and megalopolises geographically expanded.
main.grnd_level Atmospheric pressure on the ground level, hPa
main.sea_level Atmospheric pressure on the sea level, hPa
rain.1h Rain volume for the last 1 hour
rain.3h Rain volume for the last 3 hours
snow.1h Snow volume for the last 1 hour
snow.3h Snow volume for the last 3 hours
weather Weather condition
wind.deg Wind direction, degrees (meteorological)
wind.gust Wind gust, meter/sec
wind.speed Wind speed, meter/sec
wind.var_beg Beginning of wind direction (from), degree (meteorological)
wind.var_end End of wind direction (to), degree (meteorological)
⚠️ **GitHub.com Fallback** ⚠️