当前位置: 首页 > 面试题库 >

如何使用Logstash从MySQL动态更新数据(无重复项)?

隆璞
2023-03-14
问题内容

我已配置logstash.conf以动态插入数据库的数据,但问题是:

当我更改表的一行时,该行不会在索引中更新,因为我仅在sql_last_value之后插入新值,尽管我是关于触发器的,但我不确定该怎么做。

input {
  jdbc { 
    jdbc_connection_string =>"jdbc:mysql://localhost:3306/blog"
    jdbc_user =>"root"
    jdbc_password =>""
    jdbc_driver_library =>"C:\Users\saidb\Downloads\mysql-connector-java-5.1.47\mysql-connector-java-5.1.47.jar"
    jdbc_driver_class =>"com.mysql.jdbc.Driver"
    schedule =>"* * * * *"
    statement =>"SELECT * FROM blog_pro WHERE id >:sql_last_value"
    use_column_value =>true
    tracking_column =>id
    }
  }
output {
  elasticsearch {
    hosts =>"localhost:9200"
    index =>"blog_pro"
    document_type =>"data"
  }
}

问题答案:

如果id用于选择行,则不能这样做。您有2种选择,

  1. 每次都选择所有行,然后使用query将它们发送到ES SELECT * FROM blog_pro,根据您的情况,我认为这不是一个好选择。

  2. 创建一个新列last_modified_time,其中包含记录(行)的最后修改的时间戳。然后使用它来过滤行。注意属性tracking_column_type => "timestamp"

`statement =>”SELECT * FROM blog_pro WHERE last_modiefied_time

:sql_last_value” use_column_value =>true tracking_column =>last_modified_time
tracking_column_type => “timestamp”`

这是完整的logstash配置

input {

 jdbc { 
    jdbc_connection_string =>"jdbc:mysql://192.168.3.57:3306/blog_pro"
    jdbc_user =>"dush"
    jdbc_password =>"dush"
    jdbc_driver_library =>"F:\logstash-6.2.2\bin\mysql-connector-java-5.1.6.jar"
    jdbc_driver_class =>"com.mysql.jdbc.Driver"
    schedule =>"* * * * *"
    statement =>"SELECT * FROM blog_pro WHERE last_modified_time  >:sql_last_value"
    use_column_value =>true
    tracking_column =>last_modified_time
    tracking_column_type => "timestamp"
    } 
 }

output 
{ 
    #output to elasticsearch    
    elasticsearch {
        hosts => [ "192.168.1.245:9201" ]
        action=>update
        # "%{id}" - > primary key of the table 
        document_id => "%{id}"
        doc_as_upsert =>true
    }

}

请注意,您可能需要清除索引并使用此配置开始索引。我对此进行了测试,并且工作正常。

Elasticsearch版本= 5.xx

logstash版本= 6.2.2



 类似资料:
  • 我想使复选框动态地抖动,从数据库MySQL中检索数据。因此,这段代码可以显示来自MySQL的数据。但还是无法一一核对。这是我的代码: 我使用future builder为我的CheckBoxList创建列表。但是在运行代码的时候,上面代码的结果是同时检查了所有的值,那么如何使它们正确呢?

  • 我用一个名为“Person”的对象创建了一个表,我可以从Postman发布、删除和放置。我对如何从postman中输入的JSON创建新查询没有问题。但是,每当我尝试删除或更新(使用put)我的查询时,我都会使用@PathVariable选择我想要的查询,并使用@RequestVariable更新所选数据。但我希望能够从JSON文件中删除或更新。下面是我的代码的样子。 人与物 个人控制器 这是我的P

  • 问题内容: 这个问题已经在这里有了答案 : 如何将mysql更改为mysqli? (11个答案) 3年前关闭。 因此,由于不推荐使用MYSQL,并且eveyone不断告诉我进行更新,所以我认为这是我做的时间。 但是由于我不习惯mysqli_ *,对我来说似乎有些陌生。当我用Mysql编码整个网站时,这不是一个简单的编辑。 所以我想知道:如何将以下代码转换为Mysqli?只是为了给我和其他任何人一个

  • 我有一个静态结构的对象: 我想按键更新它的属性。例如,如果我收到 然后我想更新对象,并有: 我该怎么办?我试图创建一个新对象,类似这样: 我不知道如何从变量中设置键和值的名称

  • 试图用烧瓶和sqlalchemy做一个简单的待办事项应用程序,因为我以前从未在烧瓶中使用过复选框,所以我有以下问题。 应用程序是 HTML是: 当I, 选中复选框以完成待办事项任务并单击更新按钮后,控制台将打印出来: 如何更新数据库以将完整值从“0”更改为“1”? 给出400个错误请求 返回无 返回[] 我想我需要做这样的事情: 这样我就可以 我怎么能从那个不可变的MultiDict(在这种情况下

  • 在我的角度页面中,我面临着动态ng模型值的一些问题。这是我的示例JSON。 我想从这个josn中做的是,在我的页面中创建一个视图,这样,它将包含< code>tab1和< code>tab2作为页面标题,以及相应的< code>value作为< code>checkbox。用户将有选择他的选项的选择性。在提交时,我想得到他选择的选项。我想知道在我的控制器中选择了< code>value1,valu