Easy Analytics on NoSQL Data

Stream JSON data into Precog

Precog.append({
  "path": "/events.json",
  "value": {"Any": ["valid", {"JSON": "goes"}, "here."]}
});

Upload data files into Precog

Precog.uploadFile({
  "path": "/dumps/today/data.json",
  "contents": fileContents, "type": "application/json"
});

Analyze arbitrary JSON

Precog.execute({
  "query": "count((//events.json).location[2])"
});

Precog is a next-generation analytics platform that lets you easily store and analyze JSON data, without having to manipulate or transform the data, impose a rigid schema, or flatten it into tables. You can do everything from simple analytics to advanced statistics and machine learning.

  • Store
  • Enrich
  • Analyze
  • Visualize
// Append a JSON value
Precog.append({path: '/foo/', value: {"hello": "world"}});

// Upload a file
Precog.uploadFile({path: '/foo/data.json', type: 'application/json', contents: file});
                    
// Append a JSON value
Map<String,Object> json = new HashMap<String,Object>();
json.put("hello", "world");
precog.append("/foo/", json);

// Upload a file
File csvFile = new File("/path/to/my.csv");
precog.uploadFile("/foo/", csvFile, Formats.CSV);
                    
// Append a JSON value
client.append("/foo/", {"hello": "world"})

// Upload a file
client.upload_file('/foo/', Format.json, "/path/to/data.json")
client.upload_file('/foo/', Format.csv, file)
                    
// Append a JSON value
$api->store('/foo/', array('hello' => 'world'));
 
// Upload a file
$api->ingest('/foo/data.json', $fileContent, 'application/json');
                    
// Append a JSON value
Precog.append({path: '/foo/', value: {"hello": "world"}});
precog.append('/foo', { :hello => 'world' })

// Upload a file
Precog.uploadFile({path: '/foo/data.json', type: 'application/json', contents: file});
precog.upload_file('/foo/data.json', :json, file)
                    
// Append a JSON value
Precog.append({path: '/foo/', value: {"hello": "world"}});

// Upload a file
Precog.uploadFile({path: '/foo/data.json', type: 'application/json', contents: file});
                    
// Append a JSON value
SomeStuff myStuff = SomeSource.GetStuff("foo");
client.Append("/test", myStuff);

// Upload a file
client.UploadFile("/test", Formats.CSV, @"C:\somefile.csv");
                    
  • JavaScript
  • Java
  • Python
  • PHP
  • Ruby
  • NodeJS
  • C#
// Enrich a Data Set
Precog.execute('//foo with precog::enrichment(//foo, SentimentAnalysis)');
                    
// Enrich a Data Set
precog.query("precog::enrichment(//foo, SentimentAnalysis)");
                    
// Enrich a Data Set
client.query('//foo with precog::enrichment(//foo, SentimentAnalysis)')
                    
// Enrich a Data Set
client.query('//foo with precog::enrichment(//foo, SentimentAnalysis)')
                    
// Enrich a Data Set
precog.query('', '//foo with precog::enrichment(//foo, SentimentAnalysis)')
                    
// Enrich a Data Set
Precog.execute('//foo with precog::enrichment(//foo, SentimentAnalysis)');
                    
// Enrich a Data Set
client.Query("/", "//foo with precog::enrichment(//foo, SentimentAnalysis)");
                    
  • JavaScript
  • Java
  • Python
  • PHP
  • Ruby
  • NodeJS
  • C#
// Compute Some Analytics
Precog.execute('count(//foo)');
                    
// Compute Some Analytics
precog.query("count(//foo)");
                    
// Compute Some Analytics
client.query('count(//foo)')
                    
// Compute Some Analytics
$api->query('count(//foo)');
                    
// Compute Some Analytics
Precog.execute('count(//foo)');
precog.query('', 'count(//foo)')
                    
// Compute Some Analytics
Precog.execute('count(//foo)');
                    
// Compute Some Analytics
client.Query<int>("/", "count(//foo)").Data[0];
                    
  • JavaScript
  • Java
  • Python
  • PHP
  • Ruby
  • NodeJS
  • C#
ReportGrid.barChart("#chart", {
  axes : ["country","count"],
  datapoints : data(),
  options : {
    displayrules : true
  }
});
ReportGrid.funnelChart("#chart", {
  axes : ["event", "count"],
  datapoints : data()
});
ReportGrid.geo("#chart", {
  axes : ["code", "summerGold"],
  datapoints : data(),
  options : {
    map : {
      template : "world",
      property : "code"
    }
  }
});
ReportGrid.heatGrid("#chart", {
  axes : ["race","year","deathRate"],
  datapoints : data(),
  options : {
    color : "i:#00f,#0ff,#0f0,#ff0,#f00",
    }
  }
);
ReportGrid.leaderBoard("#chart", {
  axes : ["country", "count"],
  data : data()
});
ReportGrid.lineChart("#chart", {
  axes : ["year", "population"],
  datapoints : data(),
})
ReportGrid.pieChart("#chart", {
  axes : ["count"],
  datapoints : data(),
  options : {
      datapoint : function(dp) { return dp.country; }
    }
  }
);
                    
ReportGrid.pivotTable("#chart", {
  axes : ["model", "quarter", "market", "value"],
  datapoints : data()
});
ReportGrid.sankey("#chart", {
  axes : ["billions"],
  datapoints : data(),
  options : {
    layerwidth : 130
  }
});
ReportGrid.scatterGraph("#chart", {
  axes : ["year", "deathRate"],
  datapoints : data(),
})
ReportGrid.streamGraph("#chart", {
  axes : ["year", "deathRate"],
  datapoints : data(),
})
  • Bar Chart
  • Funnel Chart
  • Geo
  • HeatGrid
  • Leader Board
  • Line Chart
  • Pie Chart
  • Pivot Table
  • Sankey
  • Scatter Graph
  • Stream Graph

Features

  • JSON Certified

    Precog can store any kind of JSON data, from primitive values, to records, to complex, large documents with lots of nested objects and arrays.

  • No Schema

    Precog does not impose any schema on your data. Every value you store in Precog can be different from every other value.

  • Flexible Deployment

    Precog comes in a hardware appliance, a virtual appliance, and a managed cloud offering, so you can choose the deployment option that's right for you.

  • Client Libraries

    Precog comes with client libraries for Java, C#, Python, PHP, JavaScript, Python, and Ruby, all bundled up, documented, and ready to go.

  • Simple Query Language

    Precog supports Quirrel, a simple query language designed for analyzing JSON data, which you can learn in 30 minutes.

  • Advanced Analytics

    Quirrel lets you do everything that SQL can do, and much more, including statistical analysis and easy machine learning.

  • Visual Query Builder

    Build queries on your JSON data with Labcoat (a visual query builder), and export them as code you can run in the programming language of your choice.

  • Easy Charts

    Precog comes with a powerful charting library, but is also compatible with D3, Highcharts, Google Charts, and most other charting libraries.

  • Secure by Default

    Precog lets you create API keys with different levels of permission so you can easily build multi-tenant analytics solutions on top of Precog.

  • Whiteglove Treatment

    Every Precog customer receives unlimited email, phone, and IRC support. Large or small, our mission is to help you succeed.

Other Resources

Developer Center

The Developer Center is the launchpad for building applications using Precog. You'll find API docs, client libraries, and more.

Common Analytics

This is a short guide that shows how to perform very common analytical queries using the Quirrel query language.

Embed Reporting

If you're building a business application, then your customers probably want self-service reporting.

Optimize Performance

If you are deploying a production application that uses Precog, you may be interested in ways to optimize the runtime query performance.

Precog for MongoDB

Try an experimental version of precog running on your MongoDB database.

Getting Started

1Sign up for a free Precog Account!

2Get a client library in your favorite programming language.

3Write a couple lines of code to upload or stream data into Precog.

// Append a JSON value
Precog.append({path: '/foo/', value: {"hello": "world"}});

// Upload a file
Precog.uploadFile({path: '/foo/data.json', type: 'application/json', contents: file});
                
// Append a JSON value
Map<String,Object> json = new HashMap<String,Object>();
json.put("hello", "world");
precog.append("/foo/", json);

// Upload a file
File csvFile = new File("/path/to/my.csv");
precog.uploadFile("/foo/", csvFile, Formats.CSV);
                
# append json value (python object)
client.append("/foo/", {"hello": "world"})

# upload file
client.upload_file('/foo/', Format.json, "/path/to/data.json")
client.upload_file('/foo/', Format.csv, file)
                
// Append a JSON value
$api->store('/foo/', array('hello' => 'world'));
 
// Upload a file
$api->ingest('/foo/data.json', $fileContent, 'application/json');
                
// Append a JSON value
Precog.append({path: '/foo/', value: {"hello": "world"}});
precog.append('/foo', { :hello => 'world' })

// Upload a file
Precog.uploadFile({path: '/foo/data.json', type: 'application/json', contents: file});
precog.upload_file('/foo/data.json', :json, file)
                
// Append a JSON value
Precog.append({path: '/foo/', value: {"hello": "world"}});

// Upload a file
Precog.uploadFile({path: '/foo/data.json', type: 'application/json', contents: file});
                
// This assumes a SomeSource that can generate SomeStuff instances
SomeStuff myStuff = SomeSource.GetStuff("foo");
client.Append("/test", myStuff);

// Uploading a file means we replace (e.g. delete) the existing data at that path
client.UploadFile("/test", Formats.CSV, @"C:\somefile.csv");
                
  • JavaScript
  • Java
  • Python
  • PHP
  • Ruby
  • NodeJS
  • C#

4Launch Labcoat, the visual query builder, to build queries and export them as code.

Launch Labcoat

5Check out our developer center when you need to do something more advanced.

Developer Center

Learn More

Signup for our Newsletter

* Email

First Name

Last Name

* = Required Field

Contact Us

Sales

sales@precog.com

Support

support@precog.com

Support Center

Support Center

Social Connections

Pricing

  • Managed Cloud
  • Hardware Appliance
  • Virtual Appliance
  • Developer
  • Small
  • Medium
  • Large
  • Enterprise
  • CPU CORES
  • 1
  • 4
  • 8
  • 16
  • >32
  • SSD STORAGE
  • 100 MB
  • 10 GB
  • 255 GB
  • 500 GB
  • >1 TB
  • SLA
  • -
  • 99.99%
  • 99.999%
  • 99.999%
  • 99.999%
  • Free!
  • $500Month
  • $2750Month
  • $5000Month
  • Contact Us
  • Entry
  • Small
  • Medium
  • Large
  • Custom
  • CPU CORES
  • 2
  • 4
  • 8
  • 16
  • Any
  • DISK
  • 1 TB
  • 2 TB
  • 3 TB
  • 4 TB
  • Any
  • RAM
  • 32 GB
  • 96 GB
  • 192 GB
  • 384 GB
  • Any
  • $7500
  • $15000
  • $30000
  • $60000
  • Contact Us
  • Entry
  • Small
  • Medium
  • Large
  • Custom
  • CPU CORES
  • 2
  • 4
  • 8
  • 16
  • Any
  • STORAGE LIMIT
  • 1 TB
  • 2 TB
  • 3 TB
  • 4 TB
  • Any
  • RAM LIMIT
  • 32 GB
  • 96 GB
  • 192 GB
  • 384 GB
  • Any
  • $5000
  • $10000
  • $20000
  • $40000
  • Contact Us