2017-03-02 15 views
1

dplyrのデータベースバックエンドをAWS Redshiftデータベースで使用しています。そして、いくつかのクエリは、むしろ永遠に戻ってくるので、私はそれらをキャッシュしたいと思います。私は基礎となるデータが変更されないので、クエリが変更されない場合、結果セットも変更されません。キャッシュ結果dplyrデータベースバックエンド

私はこれを達成するために他の場所で撮影したアプローチがあれば、スクリプトの次の実行に

  • {hash}.rdsファイルにクエリの結果を保存

    • ハッシュクエリ文字列
    • ですハッシュは変更されていないので、ディスクから結果を読み込みます。そうでなければクエリを再実行します。

    私はdplyrで同じアプローチを試みています。 dplyr残念ながら、SQLクエリ文字列操作は同じまま場合でも、変更を生成:

    df %>% 
        select(week, person_id) %>% 
        group_by(person_id) %>% 
        mutate(weeks_active = n()) %>% 
        arrange(weeks_active) %>% 
        dplyr::sql_render() 
    

    は、第二の最初の実行と

    <SQL> SELECT * 
    FROM (SELECT "week", "person_id", COUNT(*) OVER (PARTITION BY "person_id") AS "weeks_active" 
    FROM (SELECT "week" AS "week", "person_id" AS "person_id" 
    FROM "fct_person_week") "stxupavckd") "oaknuxjexc" 
    ORDER BY "weeks_active" 
    

    <SQL> SELECT * 
    FROM (SELECT "week", "person_id", COUNT(*) OVER (PARTITION BY "person_id") AS "weeks_active" 
    FROM (SELECT "week" AS "week", "person_id" AS "person_id" 
    FROM "fct_person_week") "zznunjjdwe") "ltyyfmiahu" 
    ORDER BY "weeks_active" 
    

    を生成します。テーブルエイリアスを固定しておく方法はありますか?複数回実行しても同じクエリの要約がありますか?または、私はこれをキャッシュする他の方法を調べるべきですか?

  • +0

    ハッシュキー用に何らかの種類の種を設定できますか? – sconfluentus

    答えて

    0

    compute()を使用してテンポラリテーブルを作成することができます。もう一つの選択肢は、結果のSQLを取得してViewに変換することです。そのため、Rの開発者は単純にテーブル名として呼び出します。

    関連する問題