elasticsearch - 需要澄清 Logstash 配置中使用的 sql_last_value
问题描述
大家好,我正在使用下面的代码将数据从 MSSql 服务器索引到 elasticsearch,但我不清楚这个 sql_last_value。
input {
jdbc {
jdbc_driver_library => ""
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_connection_string => "jdbc:sqlserver://xxxx:1433;databaseName=xxxx;"
jdbc_user => "xxxx"
jdbc_paging_enabled => true
tracking_column => modified_date
tracking_column_type => "timestamp"
use_column_value => true
jdbc_password => "xxxx"
clean_run => true
schedule => "*/1 * * * *"
statement => "Select * from [dbo].[xxxx] where modified_date >:sql_last_value"
}
}
filter {
if [is_deleted] {
mutate {
add_field => {
"[@metadata][elasticsearch_action]" => "delete"
}
}
mutate {
remove_field => [ "is_deleted","@version","@timestamp" ]
}
} else {
mutate {
add_field => {
"[@metadata][elasticsearch_action]" => "index"
}
}
mutate {
remove_field => [ "is_deleted","@version","@timestamp" ]
}
}
}
output {
elasticsearch {
hosts => "xxxx"
user => "xxxx"
password => "xxxx"
index => "xxxx"
action => "%{[@metadata][elasticsearch_action]}"
document_type => "_doc"
document_id => "%{id}"
}
stdout { codec => rubydebug }
}
这个 sql_last_value 存储在哪里以及如何在物理上查看它?是否可以为 sql_last_value 设置自定义值?
任何人都可以澄清上述问题吗?
解决方案
sql_last_value
存储在名为的文件中,.logstash_jdbc_last_run
根据文档,它存储在$HOME/.logstash_jdbc_last_run
. 文件本身包含上次运行的时间戳,可以设置为特定值。
您应该last_run_metadata_path
为每个单独定义参数jdbc_input_plugin
并指向更具体的位置,因为默认情况下所有正在运行的jdbc_input_plugin
实例将共享同一个.logstash_jdbc_last_run
文件,并可能导致不需要的结果。
推荐阅读
- r - 如何在组中创建带有刻度颜色的 geom_hex 图?
- oracle - Oracle:如何有效地将表从一个模式复制到不同数据库和服务器上的另一个模式
- java - 在递归调用方法的情况下返回
- neural-network - 获取星期几的激活函数
- flutter-layout - 如何在 Flutter 中的圆环图孔中添加饼图,我尝试使用 Stack 小部件,但它仅适用于文本
- python - 在带有 if 条件的整个数据帧上的 pandas 中使用 applymap
- sql-server - 存储过程需要以自定义格式返回唯一值,但似乎返回重复项
- android - 当我使用proguard并启用minify和shrinkresources时,Retrofit body request是空白的
- javascript - 在 javascript 中为数组和对象使用 variable.length 时需要注意什么?
- javascript - React Native:从函数渲染文本