Wednesday, May 16, 2012

D'66 sponsor van het RTLNieuws of gewoon toeval?

In het RTL Journaal van half acht gisteravond, viel mij op hoezeer de D'66 posters op de achtergrond in beeld kwamen, tijdens interviews met niet D'66 politici. En dit was niet de eerste keer, vorige week gebeurde precies hetzelfde. Met de verkiezingen in aantocht, deed me dit denken aan een vorm van passieve reclame...

Ik kon het daarom niet laten om Frits Wester een tweet te sturen hierover. Tot mijn (positief) stomme verbazing kreeg ik nog een reply ook:

Om mijn punt even te verduidelijken, heb ik het journaal nog even online bekeken, en daarbij een paar voorbeelden gekopieerd:

Arie Slob,  D'66?
Frits Wester, D'66?

Alexander Pechtold, D'66
Jolande Sap, D'66?
Jan Kees de Jager, D'66?
Enfin, als prominent van een van deze partijen zou ik me in de toekomst liever voor m'n eigen deur willen laten interviewen...

Tuesday, May 8, 2012

In Need of an SQL Factory

Having performed hundreds of DNA engagements at primarily large customers in the world, our DNA data warehouse allows us to harvest factual knowledge regarding deployment and utilization trends inside IBM Lotus Notes & Domino environments. Once the research question properly translates into an SQL select statement, we need to apply that statement across all the customer schemas from where we wish to harvest the data.

However, each DNA engagement is unique and tailored to the specific customer. So are the corresponding tables in each customer schema. Consequently, having to select all schemas to apply our query to, is a time consuming task.

I decided to automate this process. Below I'm explaining what I did.

One way to discover which schemas we can run our queries on, is to use pg_tables:
SELECT schemaname FROM pg_tables WHERE tablename = 'user_session';

Next, I needed to craft output that in itself represents an SQL statement. (Beware to escape quotes properly):

SELECT
 '
 DROP TABLE IF EXISTS '|| schemaname ||'.template_utilization\;
 CREATE TABLE '||schemaname||'.template_utilization AS
  SELECT 
    \'' || schemaname ||'\'::text AS schemaname,
    LOWER(template_used) AS inherit_from, 
    CASE 
      WHEN template_type IS NULL THEN ''Not Classified'' 
      ELSE template_type 
    END AS template_type, 
    dt.description AS database_type, 
    COUNT(*) AS num_databases, 
    COUNT(distinct db.replica_id) AS num_replicaids
  FROM
    '||SPLIT_PART(schemaname, '_', 1) || '_dwh.notes_db_detail db
    JOIN dna.database_type dt ON dt.dbtype_id = db.dbtype_id
  WHERE
    NOT db.is_removed AND db.in_scope
  GROUP BY 
    template_used, 
    template_type, 
    dt.description\;
  '::text AS SQLStatement
FROM 
  pg_tables 
WHERE tablename = 'notes_db_detail';

Executing this query outputs a row for each schema where the table exists, where each row represents the final query we can execute against the (176!) schemas we wanted. Copy the output and paste this into a new window and press F5.