我如何将我的分钟数据分成包含 Timescaledb 中每个月的表(PostgreSQL 扩展)
How do i divide my minute data into tables containing each month in Timescaledb (PostgreSQL extension)
我是 timescaledb 的新手,我想为 table 中的每只股票存储一分钟的 ohlcv 报价。一只股票每天生成 1440 个报价,每月生成 43200 个报价。我有 100 个资产,我想每个月存储它们的报价,并且基本上每 30 天左右进行一次 tables 划分,这样我就不必为这个划分构建复杂的逻辑。关于如何使用时间刻度数据库完成此操作的任何建议。
目前我的做法是
- 获取传入报价(前时间戳 1535090420)
- 将其时间戳四舍五入到最接近的 30 天 (1535090420/(86400 * 30)) = 592.241674383
- 将此数字四舍五入为 592 并乘以间隔得到 1534464000 这是最近的 30 天桶,其中所有的报价都应该在其中被存储所以我创建一个名为 OHLC_1534464000 的 table 如果不存在并在其中添加刻度
- 有没有更好的方法
除非我遗漏了什么,否则听起来您只是想要一个按 30 天间隔划分的 table,它将根据时间戳自动知道将传入数据放入哪个 table。这正是 TimescaleDB 的功能 hypertables。
您可以使用以下语法创建 table:
SELECT create_hypertable('ohlc', 'timestamp', chunk_time_interval => interval '30 days');
这将创建 30 天的块(只是 Postgres tables 在引擎盖下)并透明地将每个刻度根据其时间戳放置在适当的块中。一旦经过当前 30 天周期的报价出现,它将自动创建一个新块。您可以在主 table (ohlc
) 上插入和查询,就好像它是一个 Postgres table.
我是 timescaledb 的新手,我想为 table 中的每只股票存储一分钟的 ohlcv 报价。一只股票每天生成 1440 个报价,每月生成 43200 个报价。我有 100 个资产,我想每个月存储它们的报价,并且基本上每 30 天左右进行一次 tables 划分,这样我就不必为这个划分构建复杂的逻辑。关于如何使用时间刻度数据库完成此操作的任何建议。
目前我的做法是
- 获取传入报价(前时间戳 1535090420)
- 将其时间戳四舍五入到最接近的 30 天 (1535090420/(86400 * 30)) = 592.241674383
- 将此数字四舍五入为 592 并乘以间隔得到 1534464000 这是最近的 30 天桶,其中所有的报价都应该在其中被存储所以我创建一个名为 OHLC_1534464000 的 table 如果不存在并在其中添加刻度
- 有没有更好的方法
除非我遗漏了什么,否则听起来您只是想要一个按 30 天间隔划分的 table,它将根据时间戳自动知道将传入数据放入哪个 table。这正是 TimescaleDB 的功能 hypertables。
您可以使用以下语法创建 table:
SELECT create_hypertable('ohlc', 'timestamp', chunk_time_interval => interval '30 days');
这将创建 30 天的块(只是 Postgres tables 在引擎盖下)并透明地将每个刻度根据其时间戳放置在适当的块中。一旦经过当前 30 天周期的报价出现,它将自动创建一个新块。您可以在主 table (ohlc
) 上插入和查询,就好像它是一个 Postgres table.