通过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 语句中的 '''
是怎么回事……这更像是一个模板。 '
需要在最终结果中。为了做到这一点,你必须逃避它。所以第一个 '
被视为字符串,接下来的 ''
是 '
的转义版本。 (希望这是有道理的)。最后处理完就只有一个'
我知道在 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 语句中的 '''
是怎么回事……这更像是一个模板。 '
需要在最终结果中。为了做到这一点,你必须逃避它。所以第一个 '
被视为字符串,接下来的 ''
是 '
的转义版本。 (希望这是有道理的)。最后处理完就只有一个'