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