超表是 PostgreSQL 表,可按时间自动对数据进行分区。您与超表的交互方式与常规 PostgreSQL 表相同,但具有额外的功能,可以更轻松地管理时序数据。

在 Timescale 中,超表与常规 PostgreSQL 表并存。使用超表来存储时序数据。 这为您提供了改进的插入和查询性能,并可以访问有用的时序功能。 将常规 PostgreSQL 表用于其他关系数据。

借助超表,Timescale 可以通过在其时间参数上对时序数据进行分区,从而轻松提高插入和查询性能。 在幕后,数据库执行设置和维护超表分区的工作。 同时,您可以像数据都存储在单个常规 PostgreSQL 表中一样插入和查询数据。

数据库由包含数据的表组成。在 PostgreSQL 中,这些表是关系型的,因此一个表中的数据与另一个表中的数据相关。在 Timescale 中,除了特殊的时序超表之外,您还可以使用常规的 PostgreSQL 关系表。

超表专为时序数据设计,因此它们具有一些特殊的特性,使其与常规 PostgreSQL 表不同。 超表始终按时间分区,但也可以按其他列进行分区。 关于超表的另一个特殊之处在于,它们被分解为称为块的较小表。

在本节中,您将为时序数据创建一个超表,并为关系数据创建常规 PostgreSQL 表。 您还将在超表上创建一个索引,这不是必需的,但可以帮助您的查询更有效地运行。 超表的其他特殊特性之一是,如果需要,您也可以稍后创建索引。

有关更多信息,请参阅超表部分

对于本指南中使用的财务数据集,创建一个名为 stocks_real_time 的超表,其中包含交易量最大的 100 个股票代码的每秒股票交易数据。

  1. 在命令提示符下,使用您下载的速查表中的 psql 连接字符串连接到您的数据库。

  2. 使用 CREATE TABLE 创建一个常规 PostgreSQL 表来存储实时股票交易数据

    CREATE TABLE stocks_real_time (
    time TIMESTAMPTZ NOT NULL,
    symbol TEXT NOT NULL,
    price DOUBLE PRECISION NULL,
    day_volume INT NULL
    );
  3. 使用 Timescale 提供的 create_hypertable() 函数将常规表转换为按 time 列分区的超表。 您必须提供表名 (stocks_real_time) 和表中用于对时间戳数据进行分区的列 (time)

    SELECT create_hypertable('stocks_real_time', by_range('time'));
  4. 创建一个索引,以支持对 symboltime 列进行高效查询

    CREATE INDEX ix_symbol_time ON stocks_real_time (symbol, time DESC);

Timescale 不仅适用于超表。 当您有其他关系数据来增强时序数据时,您可以像往常一样创建常规 PostgreSQL 表。 对于此数据集,还有另一个名为 company 的数据表。

  1. 添加一个表来存储股票交易数据的公司名称和代码

    CREATE TABLE company (
    symbol TEXT NOT NULL,
    name TEXT NOT NULL
    );
  2. 现在您的 Timescale 数据库中有两个表。 一个名为 stocks_real_time 的超表和一个名为 company 的普通 PostgreSQL 表。 您可以通过在 psql 提示符下运行此命令来检查这一点

    \dt

    此命令返回有关您的表的信息,如下所示

    List of relations
    Schema | Name | Type | Owner
    --------+------------------+-------+-----------
    public | company | table | tsdbadmin
    public | stocks_real_time | table | tsdbadmin
    (2 rows)

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页