通过vertica中的temp table设置变量

Setting variables through temp table in vertica

我知道在 Vertica 中设置变量需要很长时间,所以我想创建一个临时文件 table 并选择必要的值。这是为了防止我想在多个地方更改时间戳而不手动或搜索它。但是,使用此 temp table 方法时性能会明显下降。我的问题是为什么会这样,是否有更好的解决方法?

我有这个代码:

DROP TABLE DAY_RANGE;

CREATE LOCAL TEMP TABLE DAY_RANGE
(   
    start_ TIMESTAMP,
    finish_   TIMESTAMP
)

INSERT INTO DAY_RANGE(start_, finish_)
SELECT '2016-09-09 00:00:00', '2016-09-10 00:55:55'

select count(*) from clickcache.click cc
where AMP_CLICK_DAY between (select start_ from DAY_RANGE) and (select finish_ from DAY_RANGE)

select start_ from DAY_RANGE

您可以改用 cross join。我不确定,但这可能会有所帮助。

另一个想法是取消分段您的本地温度:

CREATE LOCAL TEMP TABLE DAY_RANGE
(   
    start_ TIMESTAMP,
    finish_   TIMESTAMP
) UNSEGMENTED ALL NODES;

此外,如果您使用 vsql,您可以在那里创建变量,也可以使用 \set。如果您不使用 vsql,许多客户端会检测到 :parameter 变量并适当提示。

\set start_time '''2016-09-09 00:00:00'''::timestamp
\set end_time '''2016-09-10 00:55:55'''::timestamp

select count(*) 
from clickcache.click
where AMP_CLICK_DAY between :start_time and :end_time

另外,如果您想知道 set 语句中的 ''' 是怎么回事……这更像是一个模板。 ' 需要在最终结果中。为了做到这一点,你必须逃避它。所以第一个 ' 被视为字符串,接下来的 ''' 的转义版本。 (希望这是有道理的)。最后处理完就只有一个'