REFRESH
Crate is eventually consistent. Data written with a former statement is not guaranteed to be fetched with the next following select statement for the affected rows.
Crate是最终一致的。前一个语句写入的数据不保证可以被下一个select语句获取这些受影响的行。
如果需要,可以显式刷新一个或者多个表以确保获取表的最新状态。
cr> refresh table locations;
REFRESH OK, 1 row affected (... sec)
一个以一个指定的间隔周期性地刷新。默认配置下,刷新间隔设置的是1000毫秒。一个表的刷新间隔可以通过表参数refresh_interval更改(参见refresh_interval)。
多表刷新(Multiple Table Refresh)
如果需要,可以在一个SQL语句中使用逗号分隔的方式定义多个表。这样确保它们都可以得到刷新,因此它们的数据集是一致的。如果每个给定表上的请求都完成,将会打印结果信息。
cr> REFRESH TABLE locations, parted_table;
REFRESH OK, 2 rows affected (... sec)
注意
如果一个或多个表或者分区不存在,则不会刷新任何给定的表/分区,而且将会返回一个错误。错误将返回第一个不存在的表/分区。
分区刷新(Partition Refresh)
此外,可以定义刷新一个分区表的分区(查看分区表)。
通过在refresh语句中使用PARTITION子句,可以分别执行给定分区的请求。这意味着只有指定的分区表的分区才可以被刷新。怎么在一个分区表上创建一个refresh请求的更多详情请参见SQL语法和概要(参见 刷新)。
cr> REFRESH TABLE parted_table PARTITION (day='2014-04-08');
REFRESH OK, 1 row affected (... sec)
如果省略PARTITION子句,则将刷新所有分区。如果一个表有多个分区,由于性能问题应该避免这么操作。