当我尝试创建有序 SQL table 时出错

Error when I try to create ordered SQL table

我正在尝试使用 ORDER BY 在 SQL 中创建一个易变的 table,但出现错误。

CREATE VOLATILE TABLE orderd_dates AS
(SELECT * FROM date_table
ORDER BY id_date)
with data primary index (id_date) on commit preserve rows;

错误是:子查询中不允许使用 ORDER BY。

如果我不能使用 order by,我如何创建一个已排序的 volatile table?

SQL table 本质上是无序的。您需要在查询 table 时显式使用 order by 子句,而不是在创建它时。

您可以添加 TOP 100 PERCENT 以允许 ORDER BY,但 table 仍将是无序的,因为 table 在内部由主索引的哈希排序。如果您使用 NO PRIMARY INDEX TABLE 并且它实际上将以指定的顺序存储,优化器将不知道。

你能得到的最接近的是 PARTITION BY RANGE_N(id_date BETWEEN DATE '2000-01-01' AND DATE '2050-12-31' EACH INTERVAL '1' DAY:

CREATE VOLATILE TABLE orderd_dates AS
(SELECT * FROM date_table
)
WITH DATA 
PRIMARY INDEX (id_date)
PARTITION BY Range_N(id_date BETWEEN DATE '2000-01-01'
                                 AND DATE '2050-12-31' EACH INTERVAL '1' DAY)
ON COMMIT PRESERVE ROWS;