2017-06-19 8 views
0

在庫の周波数が異なる場合、OHLCデータをさまざまな在庫に保存する最も良い方法は何ですか?例えば、私が持っているかもしれません:異なる解像度のOHLC時系列を格納するデータベースを設計するにはどうすればいいですか?

* OHLC for 5-minute bars for APPL 
* OHLC for 1-minute bars for APPL 
* OHLC for 5-minute bars for IBM 

私は同じテーブルですべてを保存し、ちょうどそれが次のようになりますので、解像度を指定する列を追加することを考えていた:

symbol, date,  time, resolution, open, high, low, close 
AAPL, 2017-06-19, 9:30, 5 min,  99.12, 102.52, 94.22, 98.34 
AAPL, 2017-06-19, 9:30, 1 min,  99.12, 100.11, 99.01, 100.34 
IBM, 2017-06-19, 9:30, 5 min,  40.15, 45.78, 39.18, 44.22 

ないように見えることいい?

答えて

1

よく見えます。ちょうどあなたのための別の可能性として、あなたもそうのように、ARRAY(繰り返しフィールド)の内部で別のSTRUCT(レコード)として、それぞれの新しい解像度を保存することができます:

enter image description here

:その結果

WITH data AS(
    select 'APPL' as symbol, ARRAY<STRUCT<date string, time string, resolution INT64, open FLOAT64, high FLOAT64, low FLOAT64, close FLOAT64>> [STRUCT('2017-06-19' as date, '9:30' as time, 5 as resolution, 99.12 as open, 102.52 as high, 94.22 as low, 98.32 as close), STRUCT('2017-06-19' as date, '9:30' as time, 1 as resolution, 99.12 as open, 100.11 as high, 99.01 as low, 100.34 as close)] stock union all 
    select 'IBM' as symbol, ARRAY<STRUCT<date string, time string, resolution INT64, open FLOAT64, high FLOAT64, low FLOAT64, close FLOAT64>> [STRUCT('2017-06-19' as date, '9:30' as time, 5 as resolution, 40.15 as open, 45.78 as high, 39.18 as low, 44.22 as close)] 
) 

SELECT * FROM data 

解決のために新しい値を保存すると、各在庫に対して定義されたARRAYに別の行が追加されます。

また、これと同様に日付レベル上のアレイを集約することができますになり

WITH data AS(
    select 'APPL' as symbol, STRUCT<date string, time string, hit ARRAY<STRUCT<resolution INT64, open FLOAT64, high FLOAT64, low FLOAT64, close FLOAT64>>> ('2017-06-19', '9:30', [STRUCT(1 as resolution, 99.12 as open, 102.52 as high, 94.22 as low, 98.32 as close), STRUCT(5 as resolution, 99.12 as open, 100.11 as high, 99.01 as low, 100.34 as close)]) stock union all 
    select 'IBM' as symbol, STRUCT<date string, time string, hit ARRAY<STRUCT<resolution INT64, open FLOAT64, high FLOAT64, low FLOAT64, close FLOAT64>>> ('2017-06-19', '9:30', [STRUCT(1 as resolution, 40.15 as open, 45.78 as high, 39.18 as low, 44.22 as close)]) 
) 
SELECT * FROM data 

enter image description here

は、スキーマのこのタイプはどのくらいに応じて、あなたにいくつかの利点を与えるかもしれませんより安価でより効果的なストレージや高速なクエリなど、処理しているデータがある場合があります(Resources Exceededエラーを返すクエリとそれが正常に動作するクエリの違いが0123の賢明な使用法であることがあります)。

関連する問題