通过vertica中的临时表设置变量

时间:2016-09-29 19:42:14

标签: sql database vertica

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

我有这段代码:

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

1 个答案:

答案 0 :(得分:1)

您可以使用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语句中与'''的交易是什么......这更像是一个模板。 '需要在最终结果中。为了做到这一点,你必须逃脱它。因此,第一个'被视为字符串,下一个'''的转义版本。 (希望有一定道理)。最后,处理后只有一个'