Ask HN: What technology is involved in your data Warehouse/ETL process?
I'm confronted with the task of building a data warehouse for my company. Because the DWH landscape is quite overwhelming I'd like to hear what technology you are using and if you're happy with it.
PS: We're on AWS but I'd also like to hear stories about other environments.
23 comments
[ 3.6 ms ] story [ 66.8 ms ] threadWe used to use Vertica + Tungsten. It was a brittle combo and also not well supported by HP.
[0] https://en.wikipedia.org/wiki/Vertica
We use a mix of hourly/daily .json.gz export/import jobs and streaming inserts. This is all automated with python scripts and airflow.
For streaming events, we post from the client to nginx, nginx+lua timestamps and posts that to nsq, we have an nsq python consumer that flattens and streams those events into bigquery; nsq-to-file rotates line-delimited json hourly which is gzipped and uploaded to gcs for archival. The latter is necessary for some types of schema changes; you'll want to drop the old table and import the old data into the new schema.
Tips: - stick to StandardSQL, more featureful SQL dialect - flatten data where possible, arrays of sub-records are hard to work with - Partition large tables by date so you don't pay for querying really old data - use the timestamp type vs string/int fields, saves you cast when writing a query
The trouble with Airflow is it uses a database for state, and you can get in situations where a task is failing, so the dagrun fails; so you clear the state after fixing the task using the web ui and it'll usually run and everything is fine. But sometimes you get into a state where it says the dag is deadlocked and doing this doesn't work.
But, steady-state, it works pretty well; I think among the things I've tried (cron + python, luigi, airflow), it's the best I've come across.
When you have a bunch of multi-step things with various dependencies and you want to visually see status -- airflow is worth the headache.
I did this a while back at my previous employer/startup (it got acquired), we used AWS, PostgreSQL, Hadoop/Hive, using SQL + custom Ruby script for ETL + processing. You can read some of that writing here https://engineering.viki.com/blog/2014/data-warehouse-and-an...
If I can distill them into bullet points, there probably are:
- SQL is great, stick with it.
- We started with PostgreSQL and scales a long way with it (using techniques like table partitioning, unlogged table, etc), then slowly split into Redshift, and later Hadoop/Hive.
- Handling events/behavioural data (JSON/semi-structure at large volume) are very different from handling transactional data (structured, lower volume).
- Take a more lean/incremental approach to it: get a basic DW setup, load data that you can immediately act on, act on it (build reports, run analysis, show to management), then repeat.
You can also check out my startup: https://www.holistics.io , where I turned those experiences above into a data platform that automating DW + BI.
We allow you to do "lean ETL" on top of customers' DW infrastructure (be it Redshift, PostgreSQL, BigQuery or others). We work with small startup to unicorn tech companies.
I would recommend staying away from Hadoop -- if you're a Java shop, it may make some sense if you're writing your own map/reduce jobs, but it seems particularly brittle and hard to debug although my info is a bit dated at this point.
And generally if you must have Hadoop or Hive, the most elegant thing I've seen is EMR backed on S3 by .json.gz. You can spin up a cluster for a short time to run some jobs, and then spin it down when you're done -- hundreds of small instances seem to work well at this; but most of your interactive stuff should probably be in another system.
- https://blog.fishtownanalytics.com/what-are-the-steps-tools-...
- http://blog.clearbit.com/enterprise-grade-analytics-for-star...
- https://www.simple.com/engineering/building-analytics-at-sim...
Three choices for your data warehouse:
- Amazon Redshift
- Google BigQuery
- Snowflake
Redshift is by far the dominating product in this market. I'd say they have around 60-70% market share. It also has the richest ecosystem of ETL and BI tools. We saw Google BigQuery coming in aggressively earlier this year, but now I'd say the major competitor that keeps coming up is Snowflake. I hear people are happy with Snwoflake and BigQuery. The major FUD you'll hear Google and Snowflake spread about Redshift is that it's (1) expensive because compute & storage are bundled and (2) that it doesn't scale. Both statements are false.
Then you also have a choice of fully managed offerings like:
- holistics.io
- panoply.io
I only learned about holistics.io in this thread. I have to say that I really like their value proposition and features.
For your ETL - I have a whole spreadsheet full of tools that I'm happy to share with you. You will have two major use cases, one to get your production data into your dw, another one to unify it with all your SaaS data.
with intermix.io we've built a performance analytics service for Amazon Redshift. And so we see all the different ETL tools that companies use. The ones we see used most frequently are:
- Fivetran
- Stich Data
- Segment
- Alooma
All are very good products and I can only recommend using them.
Hope that helps!
Is this approach viable or if it is just marketing:
https://databricks.com/blog/2017/01/19/real-time-streaming-e...
You should have a look at Flink if you're looking into streaming transforms.
Warehousing; S3, Parquet and ORC.
AWS Athena for analytical queries over S3.
Kinesis for stream buffering; also processed by EMR.
Everything except for Jenkins is pay-per-use. No idle components.
Very effective and cheap.