2014-07-15 23 views
6

Sto prendendo a calci le gomme sugli strumenti di BI, incluso, ovviamente, Tableau. Parte della mia valutazione include correlare l'SQL generato dallo strumento BI con le mie azioni nello strumento.In che modo Tableau esegue query su Redshift? (E/o perché Redshift non può visualizzare le query di Tableau?)

Tableau mi ha confuso. Il mio database ha 2 miliardi di cose; tuttavia, indipendentemente da ciò che faccio in Tableau, la query che Redshift riporta essere stata eseguita è "Fetch 10000 in SQL_CURxyz", cioè un'operazione del cursore. Nella schermata qui sotto, puoi vedere cambiare gli ID del cursore, indicando che vengono eseguite nuove query, ma non vedi le query originali.

Si tratta di una stranezza di Redshift o Tableau? Qualche idea su come vedere cosa sta effettivamente funzionando sotto il cofano? E perché Tableau opera sempre su 10000 record alla volta?

Redshift console

risposta

3

Inoltre, è possibile modificare il file .TWB (che è in realtà solo un file XML) e aggiungere i seguenti parametri alla proprietà odbc-connect-string-extras.

  • UseDeclareFetch = 0;
  • FETCH = 0;

Si potrebbe finire con qualcosa di simile:

<connection class='redshift' dbname='yourdb' odbc-connect-string-extras='UseDeclareFetch=0;FETCH=0' port='0000' schema='schm' server='any.redshift.amazonaws.com' [...] > 

Purtroppo non c'è modo di cambiare questo comportamento numerosi grazie all'applicazione, è necessario modificare direttamente il file.

Si dovrebbe essere consapevoli delle implicazioni di prestazioni di farlo. Sebbene ciò accresca notevolmente il debug, deve esserci una ragione per cui Tableau ha scelto di non consentire la modifica di questi parametri attraverso l'applicazione.

7

Ho appena incontrato lo stesso problema e ha scritto questa semplice query per ottenere tutte le query per i cursori attualmente attivi:

SELECT 
    usr.usename          AS username 
    , min(cur.starttime)        AS start_time 
    , DATEDIFF(second, min(cur.starttime), getdate()) AS run_time 
    , min(cur.row_count)       AS row_count 
    , min(cur.fetched_rows)       AS fetched_rows 
    , listagg(util_text.text) 
    WITHIN GROUP (ORDER BY sequence)    AS query 
FROM STV_ACTIVE_CURSORS cur 
    JOIN stl_utilitytext util_text 
    ON cur.pid = util_text.pid AND cur.xid = util_text.xid 
    JOIN pg_user usr 
    ON usr.usesysid = cur.userid 
GROUP BY usr.usename, util_text.xid; 
+0

Dà interrogazione dietro cursore perfettamente! – imVJ