当前位置: 首页 > 知识库问答 >
问题:

Flink中的动态SQL查询

佴德曜
2023-03-14

我有一个这样的SQL问题

String ipdetailsSql = "select sid, _zpsbd6 as ip_address, ssresp, reason,  " +
        "SUM(CASE WHEN botcode='r1' THEN 1 ELSE 0 END ) as icf_count, " +
        "SUM(CASE WHEN botcode='r2' THEN 1 ELSE 0 END ) as dc_count, " +
        "SUM(CASE WHEN botcode='r5' THEN 1 ELSE 0 END ) as badua_count, " +
        "COUNT(*) as hits, TUMBLE_START(ts, INTERVAL '1' MINUTE) AS fseen " +
        "from sourceTopic   " +
        "GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE), sid, _zpsbd6, ssresp, reason";

根据用户输入,我想将botcode='r1'更改为给定输入。在不重新启动作业的情况下说出botcode='r10'。有没有办法做到这一点。我在flink 1.7上使用stream env。我尝试配置流来读取输入。但仍停留在如何动态更改查询上。有人能帮我吗?提前谢谢

共有1个答案

萧繁
2023-03-14

流SQL查询不是只执行一次就完成的事情,而是一个连续计算的声明性表达式。如果不使用新的查询启动新的作业,就不可能对该计算进行任意更改。

不过,在简单的情况下,你可以做一些事情。您可能会考虑是否可以将sourcetopic与另一个有效提供一些查询参数的流连接起来。或者,您可能会发现计算所有可能的预期结果,然后选择实际的预期结果是可以承受的。

 类似资料:
  • 问题内容: 我有一个数据库字段名称调用,我正在尝试使用如下所示的变量名称来选择它: 显然,SQL将解释为字符串,而不是数据库的字段,我如何以这种方式将其识别为字段名而不是字符串,可能没有任何select或if语句。 问题答案: 试试这个: 您必须组成一个动态查询,并使用 要在事物的“动态”方面添加更多内容,请使用存储过程。请参见此处的示例: http://www.marten-online.com

  • 问题内容: 我在为查询中的字段生成别名时遇到问题,例如,该字段为我提供了去年和前一年的收入。我的理解是我可以做些类似的事情: 但这是行不通的。有人知道如何做到这一点吗? 我想以一张桌子结束 在此先多谢! 问题答案: DECLARE @sql VARCHAR(1000); SET @sql = ‘SELECT 1234 AS REVENUE’ + CAST (year(DATEADD(year,-1

  • 问题内容: 假设我有一个存储在这样的变量中的查询(它实际上是动态填充的,并且更复杂,但这是出于演示目的): 有没有一种方法可以检查查询是否返回任何结果?像这样的东西,但这是行不通的: 我能想到的唯一方法是将结果放入临时表中,然后从中进行查询,但这并不理想,因为动态查询中的列可以变化,而且我真的不需要临时表除了检查是否会返回某些行外,完全出于其他原因。有没有更好的办法? 问题答案: 尝试执行和用于查

  • 问题内容: 如何在JDBI中使用SQL对象查询进行排序? 我想做类似的事情: 要么 问题答案: 我最近一直在探索与JDBI捆绑在一起的DropWizard,并很快遇到了同样的问题。不幸的是,JDBI的文档乏善可陈(JavaDoc和它的git存储库中的一些示例单元测试并没有单独解决),这令人失望。 这是我根据示例DAO在JDBI的Sql Object API中实现动态排序的结果: @ UseStri

  • 问题内容: 可以像这样使它们动态化,而不是像这样对SQL查询进行硬编码 我问的原因是何时需要更改表/列的名称,我可以只在一个地方进行更新,而不必要求开发人员逐行查找所有要更新的引用。这是非常耗时的。而且我不喜欢在代码中公开数据库内容的想法。 我主要关心的是加载时间。与动态页面一样,数据库必须获取页面内容,如果查询是动态的,则方法相同,首先系统必须先查找引用然后执行查询,这会影响加载时间吗? 我正在

  • 问题内容: 我有一个存储在列表中的关键字列表。 要从表中获取记录,请使用以下查询: 您可能已经注意到,我的查询容易受到sql注入的攻击,因此我想通过SqlCommand()使用参数。我已经尝试了以下方法,但仍然无法正常工作: 我在哪里犯错,或者应该怎么做? 问题答案: 您在这里做错了几件事: 您为所有参数赋予相同的名称。那行不通。参数需要唯一的名称。 您为每个项目创建一个新的SqlCommand。