In the past couple of months the number of employees in our company have grown significantly. And guess what: almost all of the new employees need access to the Data warehouse!
While we were very small, I used to be able (to have time) to explain each new person, how our Data warehouse is organized, how it is being populated, how data is refreshed, and what you should and should not do. But recently I barely could memorize the names of new employees! And when I overheard one of myexperienced co-workers asking one of the new co-workers: do you know how to join tables?… I’ve realized I owe them some education.
So, last Thursday I gave a presentation about our data warehouse, and it was a big success – for many folks it was the first time realizing “how this thing works”. But un-doubtfully the most popular one was the last slide: what not to do with your database.
Since I think those statements are largely universial, I am going to paste here the contents of the last slide.
- Although you can’t write anything to the Data Warehouse there are plenty of ways to crush the system, so use caution.
- Please use the copies of the core tables for exploration purposes only, do not run big queries on them
- Please kill any query which runs over 1 min and ask somebody from the IT database group for assistance
- Do not use temporal tables.
- Do not create objects in the public schema.
- Before creating a new report or requesting one, please check what’s already available. The view and mat. views in our Data Warehouse are well- documented
Couple of comments
1. “Over 1 minute” is a surprisingly good estimate. Granted, out Data Warehouse is relatively small now, but most of the time when something is running over 1 min, it indicates that either the join criteria are not specified correctly, or one or more conditions have very low selectivity, or there is an index missing. In all of those cases an IT person should take a closer look
2. Why avoid using temporal tables? Because they occupy the same space on disk which is used to allocate the intermediate result sets, and at the end of the day slow the things down due to extra IO
3. Why not to create objects in the public schema? Well, because it’s public! Because anybody can create tables in the public schema! And everybody create tables owned by them, which other people can’t access. The public schema should only hold the publicly used functions and such.
I think, the rest is self-explanatory!