1

在我的 MS SQL 表中,我有一列将日期存储为格式为“dd-mm-yyyy 00:00:00.000”的字符串,例如:1999-10-06 00:00:00.000 或 2000-04-27 00: 00:00.000

在导入期间,我想将此列的值转换为日期类型。

我看到了一个称为过滤器的功能,它可以进行这种类型的转换。我找到了示例,但仅用于解析 Beats 使用某种正则表达式带来的日志全文行。

如何将此功能用于 sql 列?例如,如何调整这个 conf 文件以使其真正工作?

 input {
    jdbc {
        jdbc_connection_string => "jdbc:localhost;"
          jdbc_user => "user"
          jdbc_password => "pass"
       jdbc_driver_library => "C:\Program Files (x86)\jdbc\sqljdbc_6.0\enu\sqljdbc42.jar"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        statement => "SELECT  * FROM SOLD"
    }
}

filter
{
     date {
         match => [ "DATE_COLUMN", "YYYY-MM-dd 00:00:00.000" ]
    }
}

output {
    elasticsearch { 
       hosts => "localhost:9200"
       index => "indexname"
       document_type => "typename"

    }
}

目前这个 conf 不起作用并创建这个 ES 文本字段:

 "date_column": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
          }
     }
  }
4

2 回答 2

1

所以回答是让这个过滤器以 小写形式写出列的名称:

filter
{
     date {
         match => [ "date_column", "yyyy-MM-dd HH:mm:ss.SSS" ]
    }
}

并为此日期格式创建一个弹性搜索映射列:

PUT /index
{
     "mappings": {
      "type": {
        "properties": {
         "date_column": {
            "type": "date",
            "format": "yyyy-MM-dd HH:mm:ss.SSS"
          }
        }
      }
    }
}
于 2017-01-10T10:33:59.730 回答
0

如果您的数据库中有一个名为 myDateField 的字段,您应该在使用 JDBC 输入{} 后获得一个同名的字段。然后,您可以要求 logstash 处理(“过滤”)并输出此数据。

logstash 包含超过 50 个过滤器(请参阅文档)。

要将您的字段设为日期,请使用 date{} 过滤器。{} 请注意,此过滤器通常用于设置 logstash 的“@timestamp”字段,但您可以根据需要将日期放入不同的字段(甚至覆盖相同的字段)。

于 2017-01-09T03:45:51.337 回答