| import{_ as t,C as o,O as l,P as r,ah as d,Q as e,U as n,ai as i,ae as c,aW as a}from"./framework-e4340ccd.js";const p={},u=a(`<h2 id="连续查询-continuous-query-cq" tabindex="-1"><a class="header-anchor" href="#连续查询-continuous-query-cq" aria-hidden="true">#</a> 连续查询(Continuous Query, CQ)</h2><p>我们可以通过 SQL 语句注册、或卸载一个 CQ 实例,以及查询到所有已经注册的 CQ 配置信息。</p><p>注意,目前连续查询尚未对分布式场景进行适配。敬请期待分布式版本。</p><h3 id="sql-语句" tabindex="-1"><a class="header-anchor" href="#sql-语句" aria-hidden="true">#</a> SQL 语句</h3><h4 id="创建-cq" tabindex="-1"><a class="header-anchor" href="#创建-cq" aria-hidden="true">#</a> 创建 CQ</h4><h5 id="语法" tabindex="-1"><a class="header-anchor" href="#语法" aria-hidden="true">#</a> 语法</h5><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">CREATE</span> <span class="token punctuation">(</span>CONTINUOUS QUERY <span class="token operator">|</span> CQ<span class="token punctuation">)</span> <span class="token operator"><</span>cq_id<span class="token operator">></span> |
| <span class="token punctuation">[</span>RESAMPLE EVERY <span class="token operator"><</span>every_interval<span class="token operator">></span> <span class="token keyword">FOR</span> <span class="token operator"><</span>for_interval<span class="token operator">></span> BOUNDARY <span class="token operator"><</span>execution_boundary_time<span class="token operator">></span><span class="token punctuation">]</span> |
| <span class="token keyword">BEGIN</span> |
| <span class="token keyword">SELECT</span> <span class="token operator"><</span><span class="token keyword">function</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token operator"><</span>path_suffix<span class="token operator">></span><span class="token punctuation">)</span> <span class="token keyword">INTO</span> <span class="token operator"><</span>full_path<span class="token operator">></span> <span class="token operator">|</span> <span class="token operator"><</span>node_name<span class="token operator">></span> |
| <span class="token keyword">FROM</span> <span class="token operator"><</span>path_prefix<span class="token operator">></span> |
| <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token keyword">time</span><span class="token punctuation">(</span><span class="token operator"><</span>group_by_interval<span class="token operator">></span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">,</span> <span class="token keyword">level</span> <span class="token operator">=</span> <span class="token operator"><</span><span class="token keyword">level</span><span class="token operator">></span><span class="token punctuation">]</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>其中:</p>`,8),v=a("<li><p><code><cq_id></code> 指定 CQ 全局唯一的 id。</p></li><li><p><code><every_interval></code> 指定查询执行时间间隔,支持 ns、us、ms、s、m、h、d、w 等单位,其值不应小于用户所配置的 <code>continuous_query_min_every_interval</code> 值。可选择指定。</p></li><li><p><code><for_interval></code> 指定每次查询的窗口大小,即查询时间范围为<code>[now() - <for_interval>, now())</code>,其中 <code>now()</code> 指查询时的时间戳。支持 ns、us、ms、s、m、h、d、w 等单位。可选择指定。</p></li><li><p><code><execution_boundary_time></code> 是一个日期参数,表示<strong>第一个窗口的起始时间</strong>。</p><ul><li><code><execution_boundary_time></code> 可早于、等于、晚于<strong>当前时间</strong>。</li><li>该参数可选择指定,不指定的情况下等价于输入 <code>BOUNDARY now()</code>。</li><li><strong>第一个窗口的结束时间</strong>为 <code><execution_boundary_time> + <for_interval></code>。</li><li>第 <code> i (1 <= i)</code> 个窗口的<strong>开始时间</strong> <code><execution_boundary_time> + <for_interval> + (i - 1) * <every_interval></code>。</li><li>第 <code> i (1 <= i)</code> 个窗口的<strong>结束时间</strong> <code><execution_boundary_time> + <for_interval> + i * <every_interval></code>。</li><li>如果<strong>当前时间</strong>小于等于<strong>第一个窗口的结束时间</strong> ,那么连续查询的第一个执行时刻为<strong>第一个窗口的结束时间</strong>。</li><li>如果<strong>当前时间</strong>大于<strong>第一个窗口的结束时间</strong>,那么连续查询的第一个执行时刻为<strong>第一个</strong>大于等于<strong>当前时间</strong>的<strong>窗口结束时间</strong>。</li><li>每一个执行时刻执行的<strong>查询时间范围</strong>为<code>[now() - <for_interval>, now())</code>。</li></ul></li><li><p><code><function></code> 指定聚合函数,目前支持 <code>count</code>, <code>sum</code>, <code>avg</code>, <code>last_value</code>, <code>first_value</code>, <code>min_time</code>, <code>max_time</code>, <code>min_value</code>, <code>max_value</code> 等。</p></li><li><p><code><path_prefix></code> 与 <code><path_suffix></code> 拼接成完整的查询原时间序列。</p></li><li><p><code><full_path></code> 或 <code><node_name></code> 指定将查询出的数据写入的结果序列路径。</p></li><li><p><code><group_by_interval></code> 指定时间分组长度,支持 ns、us、ms、s、m、h、d、w、mo、y 等单位。</p></li>",8),m=e("code",null,"<level>",-1),g=e("code",null,"<level>",-1),k=e("code",null,"<level>",-1),b=e("code",null,"<level>",-1),h=a(`<p>注:</p><ul><li><code><for_interval></code>, <code><every_interval></code> 可选择指定。如果用户没有指定其中的某一项,则未指定项的值按照<code><group_by_interval></code> 处理。 <ul><li><code><every_interval></code>,<code><for_interval></code>,<code><group_by_interval></code> 的值均应大于 0。</li><li><code><group_by_interval></code> 的值应小于<code><for_interval></code>的值,否则系统会按照等于<code><for_interval></code>的值处理。</li><li>用户应当结合实际需求指定合适的 <code><for_interval></code> 与 <code><every_interval></code>。 <ul><li>若 <code><for_interval></code> 大于 <code><every_interval></code>,每次的查询窗口会有部分数据重叠,从查询性能角度这种配置不被建议。</li><li>若 <code><for_interval></code> 小于 <code><every_interval></code>,每次的查询窗口之间可能会有未覆盖到的数据。</li></ul></li></ul></li><li>对于结果序列路径 <ul><li>用户可以选择指定<code><full_path></code>,即以 <code>root</code> 开头的完整的时间序列路径,用户可以在路径中使用 <code>\${x}</code> 变量来表示原始时间序列中 <code>level = x</code> 的节点名称,<code>x</code>应当大于等于 1 且小于等于 <code><level></code> 值 (若未指定 <code>level</code>,则应小于等于 <code><path_prefix></code> 长度)。</li><li>用户也可以仅指定<code><node_name></code>,即生成时间序列路径的最后一个结点名。 <ul><li>若用户指定 <code><level> = l</code>,则系统生成的结果时间序列路径为 <code>root.\${1}. ... .\${l}.<node_name></code></li><li>若用户未指定 <code><level></code>,令原始时间序列最大层数为 <code>L</code>, 则系统生成的结果时间序列路径为 <code>root.\${1}. ... .\${L - 1}.<node_name></code>。</li></ul></li></ul></li></ul><h5 id="示例" tabindex="-1"><a class="header-anchor" href="#示例" aria-hidden="true">#</a> 示例</h5><h6 id="原始时间序列" tabindex="-1"><a class="header-anchor" href="#原始时间序列" aria-hidden="true">#</a> 原始时间序列</h6><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| | timeseries|alias|storage group|dataType|encoding|compression|tags|attributes| |
| +-----------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| |root.ln.wf02.wt02.temperature| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| |root.ln.wf02.wt01.temperature| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| |root.ln.wf01.wt02.temperature| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| |root.ln.wf01.wt01.temperature| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| +-----------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ |
| | Time|root.ln.wf02.wt02.temperature|root.ln.wf02.wt01.temperature|root.ln.wf01.wt02.temperature|root.ln.wf01.wt01.temperature| |
| +-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ |
| |2021-05-11T22:18:14.598+08:00| 121.0| 72.0| 183.0| 115.0| |
| |2021-05-11T22:18:19.941+08:00| 0.0| 68.0| 68.0| 103.0| |
| |2021-05-11T22:18:24.949+08:00| 122.0| 45.0| 11.0| 14.0| |
| |2021-05-11T22:18:29.967+08:00| 47.0| 14.0| 59.0| 181.0| |
| |2021-05-11T22:18:34.979+08:00| 182.0| 113.0| 29.0| 180.0| |
| |2021-05-11T22:18:39.990+08:00| 42.0| 11.0| 52.0| 19.0| |
| |2021-05-11T22:18:44.995+08:00| 78.0| 38.0| 123.0| 52.0| |
| |2021-05-11T22:18:49.999+08:00| 137.0| 172.0| 135.0| 193.0| |
| |2021-05-11T22:18:55.003+08:00| 16.0| 124.0| 183.0| 18.0| |
| +-----------------------------+-----------------------------+-----------------------------+-----------------------------+-----------------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h6 id="结果序列配置举例说明" tabindex="-1"><a class="header-anchor" href="#结果序列配置举例说明" aria-hidden="true">#</a> 结果序列配置举例说明</h6><p>对于以上原始时间序列,若用户指定查询聚合层级为 <code>2</code>,聚合函数为 <code>avg</code>, 用户可以在 <code>INTO</code> 语句中仅指定生成序列的最后一个结点名,若用户将其指定为 <code>temperature_avg</code>,则系统生成的完整路径为 <code>root.\${1}.\${2}.temperature_avg</code>。 用户也可以在 <code>INTO</code> 语句中指定完整写入路径,用户可将其指定为 <code>root.\${1}.\${2}.temperature_avg</code>、<code>root.ln_cq.\${2}.temperature_avg</code>、<code>root.\${1}_cq.\${2}.temperature_avg</code>、<code>root.\${1}.\${2}_cq.temperature_avg</code>等, 也可以按需要指定为 <code>root.\${2}.\${1}.temperature_avg</code> 等其它形式。 需要注意的是,<code>\${x}</code> 中的 <code>x</code> 应当大于等于 <code>1</code> 且小于等于 <code><level></code> 值 (若未指定 <code><level></code>,则应小于等于 <code><path_prefix></code> 层级)。在上例中,<code>x</code> 应当小于等于 <code>2</code>。</p><h6 id="创建-cq1" tabindex="-1"><a class="header-anchor" href="#创建-cq1" aria-hidden="true">#</a> 创建 <code>cq1</code></h6><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">CREATE</span> CONTINUOUS QUERY cq1 |
| <span class="token keyword">BEGIN</span> |
| <span class="token keyword">SELECT</span> max_value<span class="token punctuation">(</span>temperature<span class="token punctuation">)</span> |
| <span class="token keyword">INTO</span> temperature_max |
| <span class="token keyword">FROM</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">.</span><span class="token operator">*</span> |
| <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token keyword">time</span><span class="token punctuation">(</span><span class="token number">10</span>s<span class="token punctuation">)</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>每隔 10s 查询 <code>root.ln.*.*.temperature</code> 在前 10s 内的最大值(结果以 10s 为一组), 将结果写入到 <code>root.\${1}.\${2}.\${3}.temperature_max</code> 中, 结果将产生 4 条新序列:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+---------------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| | timeseries|alias|storage group|dataType|encoding|compression|tags|attributes| |
| +---------------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| |root.ln.wf02.wt02.temperature_max| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| |root.ln.wf02.wt01.temperature_max| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| |root.ln.wf01.wt02.temperature_max| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| |root.ln.wf01.wt01.temperature_max| null| root.ln| FLOAT| GORILLA| SNAPPY|null| null| |
| +---------------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+---------------------------------+---------------------------------+---------------------------------+---------------------------------+ |
| | Time|root.ln.wf02.wt02.temperature_max|root.ln.wf02.wt01.temperature_max|root.ln.wf01.wt02.temperature_max|root.ln.wf01.wt01.temperature_max| |
| +-----------------------------+---------------------------------+---------------------------------+---------------------------------+---------------------------------+ |
| |2021-05-11T22:18:16.964+08:00| 122.0| 68.0| 68.0| 103.0| |
| |2021-05-11T22:18:26.964+08:00| 182.0| 113.0| 59.0| 181.0| |
| |2021-05-11T22:18:36.964+08:00| 78.0| 38.0| 123.0| 52.0| |
| |2021-05-11T22:18:46.964+08:00| 137.0| 172.0| 183.0| 193.0| |
| +-----------------------------+---------------------------------+---------------------------------+---------------------------------+---------------------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h6 id="创建-cq2" tabindex="-1"><a class="header-anchor" href="#创建-cq2" aria-hidden="true">#</a> 创建 <code>cq2</code></h6><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">CREATE</span> CONTINUOUS QUERY cq2 |
| RESAMPLE EVERY <span class="token number">20</span>s <span class="token keyword">FOR</span> <span class="token number">20</span>s |
| <span class="token keyword">BEGIN</span> |
| <span class="token keyword">SELECT</span> <span class="token function">avg</span><span class="token punctuation">(</span>temperature<span class="token punctuation">)</span> |
| <span class="token keyword">INTO</span> temperature_avg |
| <span class="token keyword">FROM</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">.</span><span class="token operator">*</span> |
| <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token keyword">time</span><span class="token punctuation">(</span><span class="token number">10</span>s<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">level</span><span class="token operator">=</span><span class="token number">2</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>每隔 20s 查询 <code>root.ln.*.*.temperature</code> 在前 20s 内的平均值(结果以 10s 为一组,按照第 2 层节点分组), 将结果写入到 <code>root.\${1}.\${2}.temperature_avg</code> 中。 结果将产生如下两条新序列, 其中 <code>root.ln.wf02.temperature_avg</code> 由 <code>root.ln.wf02.wt02.temperature</code> 和 <code>root.ln.wf02.wt01.temperature</code> 聚合计算生成, <code>root.ln.wf01.temperature_avg</code> 由 <code>root.ln.wf01.wt02.temperature</code> 和 <code>root.ln.wf01.wt01.temperature</code> 聚合计算生成。</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+----------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| | timeseries|alias|storage group|dataType|encoding|compression|tags|attributes| |
| +----------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| |root.ln.wf02.temperature_avg| null| root.ln| DOUBLE| GORILLA| SNAPPY|null| null| |
| |root.ln.wf01.temperature_avg| null| root.ln| DOUBLE| GORILLA| SNAPPY|null| null| |
| +----------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+----------------------------+----------------------------+ |
| | Time|root.ln.wf02.temperature_avg|root.ln.wf01.temperature_avg| |
| +-----------------------------+----------------------------+----------------------------+ |
| |2021-05-11T22:18:16.969+08:00| 58.75| 49.0| |
| |2021-05-11T22:18:26.969+08:00| 89.0| 112.25| |
| |2021-05-11T22:18:36.969+08:00| 42.25| 61.5| |
| |2021-05-11T22:18:46.969+08:00| 112.25| 132.25| |
| +-----------------------------+----------------------------+----------------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h6 id="创建-cq3" tabindex="-1"><a class="header-anchor" href="#创建-cq3" aria-hidden="true">#</a> 创建 <code>cq3</code></h6><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">CREATE</span> CONTINUOUS QUERY cq3 |
| RESAMPLE EVERY <span class="token number">20</span>s <span class="token keyword">FOR</span> <span class="token number">20</span>s |
| <span class="token keyword">BEGIN</span> |
| <span class="token keyword">SELECT</span> <span class="token function">avg</span><span class="token punctuation">(</span>temperature<span class="token punctuation">)</span> |
| <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln_cq<span class="token punctuation">.</span>\${<span class="token number">2</span>}<span class="token punctuation">.</span>temperature_avg |
| <span class="token keyword">FROM</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">.</span><span class="token operator">*</span> |
| <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token keyword">time</span><span class="token punctuation">(</span><span class="token number">10</span>s<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">level</span><span class="token operator">=</span><span class="token number">2</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>查询模式与 cq2 相同,在这个例子中,用户自行指定结果写入到 <code>root.ln_cq.\${2}.temperature_avg</code> 中。 结果将产生如下两条新序列, 其中 <code>root.ln_cq.wf02.temperature_avg</code> 由 <code>root.ln.wf02.wt02.temperature</code> 和 <code>root.ln.wf02.wt01.temperature</code> 聚合计算生成, <code>root.ln_cq.wf01.temperature_avg</code> 由 <code>root.ln.wf01.wt02.temperature</code> 和 <code>root.ln.wf01.wt01.temperature</code> 聚合计算生成。</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-------------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| | timeseries|alias|storage group|dataType|encoding|compression|tags|attributes| |
| +-------------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| |root.ln_cq.wf02.temperature_avg| null| root.ln_cq| DOUBLE| GORILLA| SNAPPY|null| null| |
| |root.ln_cq.wf01.temperature_avg| null| root.ln_cq| DOUBLE| GORILLA| SNAPPY|null| null| |
| +-------------------------------+-----+-------------+--------+--------+-----------+----+----------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+-------------------------------+-------------------------------+ |
| | Time|root.ln_cq.wf02.temperature_avg|root.ln_cq.wf01.temperature_avg| |
| +-----------------------------+-------------------------------+-------------------------------+ |
| |2021-05-11T22:18:16.971+08:00| 58.75| 49.0| |
| |2021-05-11T22:18:26.971+08:00| 89.0| 112.25| |
| |2021-05-11T22:18:36.971+08:00| 42.25| 61.5| |
| |2021-05-11T22:18:46.971+08:00| 112.25| 132.25| |
| +-----------------------------+-------------------------------+-------------------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h6 id="创建-cq4" tabindex="-1"><a class="header-anchor" href="#创建-cq4" aria-hidden="true">#</a> 创建 <code>cq4</code></h6><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">CREATE</span> CONTINUOUS QUERY cq4 |
| RESAMPLE EVERY <span class="token number">20</span>s <span class="token keyword">FOR</span> <span class="token number">20</span>s BOUNDARY <span class="token number">2022</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">14</span>T23:<span class="token number">00</span>:<span class="token number">00.000</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span> |
| <span class="token keyword">BEGIN</span> |
| <span class="token keyword">SELECT</span> <span class="token function">avg</span><span class="token punctuation">(</span>temperature<span class="token punctuation">)</span> |
| <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln_cq<span class="token punctuation">.</span>\${<span class="token number">2</span>}<span class="token punctuation">.</span>temperature_avg |
| <span class="token keyword">FROM</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">.</span><span class="token operator">*</span> <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token keyword">time</span><span class="token punctuation">(</span><span class="token number">10</span>s<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">level</span><span class="token operator">=</span><span class="token number">2</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>这个例子与创建 cq3 几乎完全相同。不同的是,在这个例子中用户自行指定了 <code>BOUNDARY 2022-01-14T23:00:00.000+08:00 </code> 。</p><p>注意这个 CQ 的第一个执行时刻大于例子中的时间,因此 <code>2022-01-14T23:00:20.000+08:00</code> 为第一个执行时刻。递推地,<code>2022-01-14T23:00:40.000+08:00</code> 为第二个执行时刻,<code>2022-01-14T23:01:00.000+08:00</code> 为第三个执行时刻……</p><p>第一个执行时刻执行的 SQL 语句为 <code>select avg(temperature) from root.ln.*.* group by ([2022-01-14T23:00:00.000+08:00, 2022-01-14T23:00:20.000+08:00), 10s), level = 2</code>。</p><p>第二个执行时刻执行的 SQL 语句为 <code>select avg(temperature) from root.ln.*.* group by ([2022-01-14T23:00:20.000+08:00, 2022-01-14T23:00:40.000+08:00), 10s), level = 2</code>。</p><p>第三个执行时刻执行的 SQL 语句为 <code>select avg(temperature) from root.ln.*.* group by ([2022-01-14T23:00:40.000+08:00, 2022-01-14T23:01:00.000+08:00), 10s), level = 2</code>。</p><p>……</p><h4 id="展示-cq-信息" tabindex="-1"><a class="header-anchor" href="#展示-cq-信息" aria-hidden="true">#</a> 展示 CQ 信息</h4><h5 id="语法-1" tabindex="-1"><a class="header-anchor" href="#语法-1" aria-hidden="true">#</a> 语法</h5><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">SHOW</span> <span class="token punctuation">(</span>CONTINUOUS QUERIES <span class="token operator">|</span> CQS<span class="token punctuation">)</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h5 id="结果示例" tabindex="-1"><a class="header-anchor" href="#结果示例" aria-hidden="true">#</a> 结果示例</h5><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-------+--------------+------------+-------------+----------------------------------------------------------------------------------------+-----------------------------------+ |
| |cq name|every interval|for interval| boundary| query sql| target path| |
| +-------+--------------+------------+-------------+----------------------------------------------------------------------------------------+-----------------------------------+ |
| | cq1| 10000| 10000|1642166102238| select max_value(temperature) from root.ln.*.* group by ([now() - 10s, now()), 10s)|root.\${1}.\${2}.\${3}.temperature_max| |
| | cq3| 20000| 20000|1642166118339|select avg(temperature) from root.ln.*.* group by ([now() - 20s, now()), 10s), level = 2| root.ln_cq.\${2}.temperature_avg| |
| | cq2| 20000| 20000|1642166111493|select avg(temperature) from root.ln.*.* group by ([now() - 20s, now()), 10s), level = 2| root.\${1}.\${2}.temperature_avg| |
| | cq4| 20000| 20000|1642172400000|select avg(temperature) from root.ln.*.* group by ([now() - 20s, now()), 10s), level = 2| root.ln_cq.\${2}.temperature_avg| |
| +-------+--------------+------------+-------------+----------------------------------------------------------------------------------------+-----------------------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="删除-cq" tabindex="-1"><a class="header-anchor" href="#删除-cq" aria-hidden="true">#</a> 删除 CQ</h4><h5 id="语法-2" tabindex="-1"><a class="header-anchor" href="#语法-2" aria-hidden="true">#</a> 语法</h5><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">DROP</span> <span class="token punctuation">(</span>CONTINUOUS QUERY <span class="token operator">|</span> CQ<span class="token punctuation">)</span> <span class="token operator"><</span>cq_id<span class="token operator">></span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h5 id="示例-1" tabindex="-1"><a class="header-anchor" href="#示例-1" aria-hidden="true">#</a> 示例</h5><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">DROP</span> CONTINUOUS QUERY cq3 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">DROP</span> CQ cq3 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="系统参数配置" tabindex="-1"><a class="header-anchor" href="#系统参数配置" aria-hidden="true">#</a> 系统参数配置</h3><table><thead><tr><th style="text-align:left;">参数名</th><th>描述</th><th>数据类型</th><th>默认值</th></tr></thead><tbody><tr><td style="text-align:left;"><code>continuous_query_execution_thread</code></td><td>执行连续查询任务的线程池的线程数</td><td>int</td><td>max(1, CPU 核数 / 2)</td></tr><tr><td style="text-align:left;"><code>max_pending_continuous_query_tasks</code></td><td>队列中连续查询最大任务堆积数</td><td>int</td><td>64</td></tr><tr><td style="text-align:left;"><code>continuous_query_min_every_interval</code></td><td>连续查询执行时间间隔的最小值</td><td>duration</td><td>1s</td></tr></tbody></table>`,44);function _(w,y){const s=o("RouterLink");return l(),r("div",null,[d(` |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| `),u,e("ul",null,[v,e("li",null,[e("p",null,[m,n("指按照序列第 "),g,n(" 层分组,将第 "),k,n(" 层同名的所有序列聚合。Group By Level 语句的具体语义及 "),b,n(" 的定义见 "),i(s,{to:"/zh/UserGuide/V0.13.x/Query-Data/Aggregate-Query.html#%E8%81%9A%E5%90%88%E6%9F%A5%E8%AF%A2"},{default:c(()=>[n("路径层级分组聚合")]),_:1}),n("。")])])]),h])}const x=t(p,[["render",_],["__file","Continuous-Query.html.vue"]]);export{x as default}; |