sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu napsat tento postgresový dotaz v Amazon redshift tak, aby byl stejně optimalizovaný jako v postgresu?

Optimalizace Redshift Query pochází z Cluster, Table Design, DataLoading, Data Vacuuming &Analysing over the table.

Dovolte mi odpovědět na některé základní kontaktní body ve výše uvedeném seznamu.1. Ujistěte se, že vaše tabulka mytable, detail, client má správný SORT_KEY, DIST_KEY2. Ujistěte se, že všechny vaše stoly, které se připojují, jsou správně analyzovány a vysávány.

Zde je další verze vašeho stejného SQL napsaného ve formátu Redshift.

Několik vylepšení, které jsem udělal, je

  1. Použil "With Clause" k výpočtu na úrovni optimalizovaného clusteru
  2. Spojení se používá správným způsobem a ujistěte se, že spojení vlevo/vpravo záleží na datech.
  3. Použito datum_rozsahu s tabulkou klauzulí pro druh orientace objektu.
  4. Použito Group By v hlavním SQL níže.

Moje verze Redshift SQL

/** Date Range Computation **/
with date_range as (
    select ( current_Date - interval '2 weeks' ) as two_weeks
),
/** Filter main ResultSet**/
myGroupSet as (
    SELECT b.val AS myGroup,
           c.username,
           a.someCode,
           a.timeTaken,
           (case when (b.name == 'name1') THEN b.val::INTEGER ELSE 0 END ) as name11,
           (case when (b.name == 'name2') THEN b.val::INTEGER ELSE 0 END ) as name12
      FROM database.myTable a,
      join date_range dr on a.date > dr.two_weeks
      join database.detail b on b.id = a.id
      join database.client c on c.c_id = a.c_id
     where a.date > current_Date - interval '2 weeks'
)
/** Apply Aggregation **/
select myGroup, username, someCode, timeTaken, date,
       sum(name1), sum(name2)
  from myGroupSet
  group by myGroup, username, someCode, timeTaken, date



  1. NHibernate 3.2 a stránkovací Oracle

  2. Co je LENGTH() v MySQL?

  3. Hibernate @OneToMany vyvolá výjimku MySQLSyntaxErrorException:Máte chybu v syntaxi SQL

  4. Jak přihlásit nového uživatele k odběru upozornění?