2017-02-23 19 views
0

時系列の集約データを処理しています。火曜日から水曜日まで週。集計時系列データのPostgresでdaterangeをキーとして使用する

このデータには、Postgres daterangeタイプをkeyとして使用することは悪い習慣と考えられますか? (代わりに、例えば、この日付範囲を定義し、その日付範囲を識別するために、カレンダーの次元に参加"PeriodID" -keyを持つ。)

私の心の中でdaterangeは非常に明確に持っているとそれだけで独立し"PeriodID"と冗長になります(私たちの設定では、各観測に固有のものになります)。

があります

  • パフォーマンスの考慮?
  • その他の考慮事項
+0

私はそれが後でどのようにそれをqryしようとしているかによりますと思っています。通常は、タイムスタンプのインデックスを作成し、それをtsと比較するだけです。範囲が必要な場合は、7日間のperiodを持つgenerate_seriesにすることができます。 –

答えて

1

抽象的なレベルでは、tstzrangeは、このような集約のための完全な表現になります。

考慮すべき問題は、データのクエリ方法と、インデックスの効率的な使用方法です。

インデックスを作成する場合は“が”オペレータ@>か“が”オペレータ&&と重なるが含まれている、あなたは(the documentationを参照)、唯一の趣旨及びSP-GiSTインデックスをB-treeインデックスを使用することはできません。これをベンチマークする必要がありますが、そのようなインデックスを使用すると、timestamptz列のBツリーインデックスを使用するよりも遅くなる可能性があります。インデックスは、さらに多くのスペースを使用することがあります。

... WHERE weekstart <= atimestamp 
     AND weekstart > atimestamp - INTERVAL '1 week' 

または重複間隔を照会する:

... WHERE weekstart <= endtimestamp 
     AND weekstart > starttimestamp - INTERVAL '1 week' 
B-treeインデックスと timestamptzを使用する

簡単な方法は、範囲の下端を格納し、このようなクエリすることであろう

関連する問題