Show HN: Metabase, an open-source business intelligence tool
metabase.com
metabase.com
When working with microservices, your data is spread across some N databases, rendering most BI tools, from what I can see, completely useless for reporting on more than one service at a time.
Are there any solutions for this? Or is the only one right now just dumping all your service DBs into a single DB for analytics?
edit: thanks friends. ETL it is. don't know why I thought it would make sense to have a tool that reports across multiple databases since the performance would be horrific...although maybe there's space for a hosted BI tool that does ETL automagically. just a thought
https://powerbi.microsoft.com/ http://www.powerpivotpro.com/what-is-power-pivot/
http://dataducketl.com/blog/every-tech-company-needs-a-data-...
You then point the BI tool at the warehouse.
There are lots of tools for this already, and even more custom solutions and other things. CSV files tend to rule here... scheduled exports that are picked up by the ETL tools.
The transformations that take place are usually normalisation of data from systems of differing schema or different types of data (perhaps changing strings into corresponding numbers, i.e. Risk Level = Orange could be normalised as 50% in the data warehouse).
Businesses have taken this approach for a long long time as the databases that drive applications, services, and now micro-services have always been tuned for the performance of the production use-case and not for ad-hoc reporting.
However, you still want to copy & combine your data into a single database. The relevant Fowler patterns are:
http://martinfowler.com/bliki/DataLake.html
http://martinfowler.com/bliki/ReportingDatabase.html
More precicely, it is a common pattern to split the analtics into three parts: 1) Collecting the data (using lots of adapters) into a "data lake", 2) filter and preprocess that data lake into a uniform data structure whose structure is determined by the analysis goal rather than the operational system, 3) analyze that uniform data with statistical and other tools.
It usually makes no sense to combine those phases into a single overall tool. First, these are very different tasks, where different specialized tools will evolve anyway. Second, you want to keep the intermediate results anyway - for caching as well as to have an audit trail and reproducibility of the results.
For example, you don't want the performance of operational system be affected by for how many analysis tools it is used at a point in point. Also, you don't to work on a always-modifying dataset while fine-tunung your analysis methods.
The data warehouse contains datasets in a unified (and usually simplified and reduced) form, defined by the needs of analysis tools.
If your analysis tool accesses the data lake directly, it will almost certainly contain "parsers" for various operational data formats. Also, it will perform those transformations over and over again every time. And multiple analysis scripts may contain multiple versions of those parsers. The idea is to separate these "parsers" out of the analysis step and to "cache" the cleaned-up intermediate result. That "cache of clean data" is usually called "data warehouse", and can create good indexes on that data, multiple runs of your analysis tools have very fast access.
Periscope Data supports cross-DB joins. We cache the data in our own clusters so queries run really fast, and also so you can do things like join across databases and upload CSVs.
More info: http://www.periscopedata.com. I'm harry at periscopedata.com
For better performance you may also need to implement an OLAP tool.
We don't do cross DB joins in the query builder. You can still use something like PG foreign data wrappers to create an uber-db with all the tables from each microservice.
Regardless of whether you use MB or another tool, there will be some legwork. Part of the tradeoffs involved in the great monolith vs microservices decision.
ETL also isn't something you can just do automagically. It requires an understanding of the data and your goals, because you essentially have to build both your data model and your reporting requirements into your ETL process. You could probably do it automagically for some simple cases, but for most real-world scenarios it's just going to be easier to write a Python/Perl script to run your ETL for you.
BI / reporting requires a lot of plumbing to work correctly. You have to set up read-only clones of your DBs for reporting (because you don't want to be running large queries against production servers) and generally an ETL process that dumps everything into a data warehouse. From there, you can push subsets of that data out to various BI tools that provide the interface.
Most of leading tools are HORRIBLE as programming enviroments and also are incredibly expensive.
I recommend reading PACT PRESS' books about Business Intelligence on the Microsoft SQL Server stack. It brings it all together in a fantastic way, example driven.
No storage limits, pricing tiers, or caps.
Your data stays private and on your own servers.Alternatively, you might be interested in Apache Nifi for ETLs (apparently used by the NSA for big data stuff...) then combine with Metabase.
https://support.chartio.com/quick-start/#layers
Feel free to reach out to me (aj at chartio.com) for more info!
If you are looking for an open source technology to meet this need, Apache Drill is a distributed SQL engine that can talk to multiple datasources and make them available in a single namespace. Joins across sources are supported and can actually perform well when you use enough nodes for your data volume.
Because Drill exposes ODBC and JDBC interfaces, it can very easily be used with BI tools to expose all kinds of data to analysts.
The architecture is fully pluggable so anyone can write a connector to a new datastore and just include it on the classpath when starting the cluster. In the current 1.2 release Drill can connect to any database that exposes JDBC, like MySQL, Postgres, Oracle, as well as a number of non-relational datastores like HDFS, MongoDB and HBase.
To work with all of the non-relational stores Drill supports complex types like maps and lists. The syntax for working with this complex data is the same javascript, i.e. a.b.c[3], so this is a compliant extension of SQL, but is non-standard.
I used to work for a company that built the "automagic ETL" kind of solution. You could write a single straight SQL statement across virtual "tables" (if you had non-tabular data, say NoSQL, you could query it through a table-like projection). It could literally join data across heterogeneous systems by shuffling data between them or to a dedicated "analytical processing platform" for join processing. Or you could do things like, create a table on one system, as the result of a select from a join of tables on three other systems. At the time, this was way ahead of what anyone else was doing.
However, it is a hard problem to solve, the company is/was small and funding was a problem because it took a long time to find ways to invent the tech. Also, it was an enterprise solution and closed source - when it really probably needed to be open source to be able to support the diversity of data sources.
These days, between Apache Drill, Spark, Ignite, etc., and any number of other commercial solutions, we're starting to see the solutions to solve the problem you're talking about.
I bet this Metabase UI on top of Apache Spark, and your databases, would be a killer. That's a common pattern (BI tool on top of Spark), see Apache Zeppelin for how it uses Spark, for example.
That said, as long as your data isn't truly ridiculously huge - if it can be centralized, centralization still works just fine.
Also +1 for being a Clojure app. I am going on vacation tomorrow and am loading the code on my tiny travel laptop for reading.
Would love to hear what you think of the codebase.
This thing is badass.
One very selfish request: Google Bigquery connector.
I think a lot of the companies you'd like to serve are going to be folks who might start getting into large quantities of data, but are too small to have people to build out and maintain OLAP schemas. This, to me, is where BigQuery comes in.
We're going to be building out connectors by community demand. =)
You'd think from their attitudes that the FSF is a patent troll.
For the upstream author losing this type of hostile users my using AGPL might be a good idea.
Of course this requires it to be modified which could happen accidentally and completely put a closed source application in jeopardy.
More info: http://programmers.stackexchange.com/q/107883/89740
If you have hangups against AGPL, you can pay money and get commercial license.
You have a pretty good market opening right now - Crystal Reports just went to a SAP Business Objects-type model. Pentaho doesn't even have a community edition anymore.
It looks like you don't support MDX/snowflake schemas/other OLAP reporting standards, so I'm guessing you're going for the lower end of the market. So two things you should do off the bat - import data from Google Sheets (maybe offer to "unlock" the service for tweets and/or links), and offer an Excel plug-in (free up to X rows).
Also offer to charge if only to allow Bob to go to his manager and say you offer support. In corporate environments, no support is often a no go.
We don't explicitly support snowflake schemas but folks are definitely using MB with them them. We have a limited set of joins accessible through the query builder and snowflake schemas work really well.
Not saying there's no room for an open source BI platform, but I don't know there's a lot of money in it given the competitive pressure Tableau and Qlik are putting on the SAPs/Oracles of the world. Anything over $100 is going to put you squarely in the realm of real BI tools with MUCH more capability, a much simpler interface, and standardized training programs.
Tableau Online doesn't require you to save your data on our platform if it's stored in AWS, Google, or Azure (example: Amazon Redshift or Aurora). Your can maintain live data connections with datasources hosted on those ecosystems and the source row level data doesn't ever need to land in the Tableau Online platform. More info here: http://www.tableau.com/learn/whitepapers/tableau-online-keep...
1. The GUI is quite nice, and very simple. It is a glorified query tool that knows your tables and helps you make queries with visualizations and gives the results. It still allows for raw queries if you're into that and just want their GUI for queries.
2. The tool (or the Mac app, at least) still has plenty of bugs to iron out:
- I tried creating a "Dashboard" and it wouldn't actually create or close the modal window. Then I refreshed the application and it had created 10 of the same Dashboard.
- I tried deleting the database and the button just doesn't work.
- Many of the queries I ran on my own tiny sample db seemed to just not run. Closing & reopening the app didn't help.
I feel like the bugs could largely be to do with the OSX binary in specific, and not the actual platform. Quite interested to see how this develops, and am going to put a bigger database in to play later when I have more time.
1) H2
2) MongoDB
3) MySQL
4) Postgres
[0] http://www.metabase.com/docs/v0.12.0/administration-guide/01...
How does it compare to re:dash? https://github.com/EverythingMe/redash
Metabase seems to have a GUI to construct SQL queries which re:dash doesn't. What else is different?
The primary difference is audience. Most of the impetus to build it came from the difficulties we had getting non-analysts to do their own data pulls and ad hoc queries. While some number of people were able to edit SQL others had written for them, it rapidly became unsustainable.
As a consequence of the audience, we have lots of ancillary features (like the ability to see detail records and walk across foreign key links, the data reference, etc) that fell out as we learned how people used the tool.
Personally, I think it's really exciting is that this is all written in Clojure! We need more Clojure web apps out there to learn from! An initial glance at the source makes it seem very readable as well. A great learning resources for us amateur Clojurists. Also makes it clear that the ecosystem is pretty immature; there is a lot of frameworky boilerplate to support a straightforward REST API.
There will be a blog post about it coming up!
I know Clojure is all about composable libraries, not frameworks, etc, etc but just as compojure has become the de facto standard for routing, I imagine more libs will emerge higher up the web stack. It'll mean opinionated libraries, but that is the only way to get more people writing apps that deliver value instead of spending time creating macros that ensure (for instance...) the presence of int IDs in API requests.
docker run -d -p 3000:3000 --name metabase metabase/metabasePalantir is a wide set of tools and really about much more powerful analysis than we're targeting.
Our whole bag is letting non-technical people in your company get answers to their common questions by themselves.
Also, while it seems to work tolerably well with the included sample database, connecting it to a local Postgres instance seems to work to the level of connecting and getting all the schema information, but every attempt to run a "question" -- even the simplest pick-a-table-and-go, or the questions it automatically suggests -- results in the "We couldn't understand your question. Your question might contain an invalid parameter or some other error." message, so it seems like there are some pretty significant rough edges.
Really appreciate you taking the time to try it out!
If you're still around, are you using the default schema ('public') for your tables? We've found a few bugs around non-default schema we're working on.
I was trying to figure out how to get it to walk a FK/do a join so I could filter based on the name of the foreign entity instead of the ID.
Regarding FK's we let you filter or group by any attribute on either the table you're working with or any attribute on an FK in that table. Are you using the sample DB or your own?
Screenshot: https://s3.amazonaws.com/uploads.hipchat.com/57670/394271/Wt...
What type database are you pointing this to? Do you have FKs/constraints set?
I have some clients that need BI reporting. We've been using Cyfe so far, but it's only good for summaries of data. It's not very good for custom reporting.
Power BI is pretty awesome, but pretty complicated when we tried it out. With enough attention it can do very cool things. Our primary audience is folks who don't need the level of customization, and have a lot of non-technical coworkers that want to ask their own questions.
This is essentially a SQL query builder on top of a RDBMS with some nice visualizations.
I am not trying to disparage the project - in fact I'm often of the opinion that a good query builder is all most organizations need for BI, but the two products in question are vastly different. Power BI has tooling to perform ETL, data modelling, and reporting. Metabase only covers the last piece.
In terms of performance, Metabase, being on top of a SQL RDBMS will have the potential to be incredibly speedy, but with large data volumes, you will need a DBA to make sure reporting scales appropriately. With Power BI, that conversation comes much later in the game. 10Ms of rows are trivial with a star schema and sufficient RAM in terms of performance tuning. With a SQL solution, there is a lot more back-end work to tune for an ad-hoc BI workload even at the 1Ms of rows level.
You can double check that we are exposing port 3000 from the container which is where the app is designed to run by default. The Dockerfile used to build the image is in our repo here: https://github.com/metabase/metabase/blob/master/bin/release...
Heroku sometimes times out if the application takes too long to start. Could you try again and see if it works? We're working on making Heroku deploys more robust.
Thanks for building it and making it open source :)
-----> Fetching custom git buildpack... done -----> Null app detected -----> Nothing to do. -----> Discovering process types Procfile declares types -> web -----> Compressing... done, 33.1MB -----> Launching... done, v5
Wow!
I'll try to reproduce it. What database are you using?
Any idea on the timeline for SQL Server support ?