# Canvas の Time filter で parse\_exception が発生する

**URL:** <https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [December 10, 2019, 7:08am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232 "2019-12-10T07:08:46Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [December 10, 2019, 7:08am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/1 "2019-12-10T07:08:46Z")

</div>

CanvasでTime filterを使用したいのですが、あるフィールドを設定すると、parse\_exceptionが発生します。（@timestampフィールドを設定した場合にはエラーは発生しません）

## 動作環境

- Elasticsearch 7.3.0
- Kibana 7.3.0

## 発生しているエラーメッセージ

![%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8](https://us1.discourse-cdn.com/elastic/original/3X/2/e/2e09dd188e2a5ffd0fc8cd0c8d1a889193e72523.jpeg)

## エラーが出るフィールドのmapping情報

```auto
        "testdate" : {
          "type" : "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
        },

```

エラーメッセージを見るに、formatがあってないようなのですが、このtestdateフィールドはindex作成時にindexのTime filter fieldとして設定している項目であり、まさか指定できないとは思ってもいませんでした。

こちら、回避方法（testdateフィールドをCanvasのTimefilterに指定する方法）はないのでしょうか？

ほか、DashboardやVisualizationなど、全てこのフィールドを基準にいろいろと設定をしているため、このフィールドのformatを作り変えることは現実的ではない状態です。

解決策などありましたら、ご教示いただけますと幸いです。  
なにとぞよろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [December 11, 2019, 12:52am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/2 "2019-12-11T00:52:39Z")

</div>

既に「いいね」が押されていることから、参照済みかと思いますが、  
他の方のため共有用です。↓

> [@Canvas Time Filter - \[parse\_exception\] failed to parse date field](https://discuss.elastic.co/t/canvas-time-filter-parse-exception-failed-to-parse-date-field/210371):
>
> Hello, I'm using Kibana 6.7.2 Adding a time filter I get a lot of Error Messages like this and a table with only Headers but now content rows: [parse\_exception] failed to parse date field [2019-11-21T23:00:00.000Z] with format [YYYYMMdd HHmmss Z] Any Ideas how to change the date format? Timefilter Expression: timefilterControl compact=true column="@timestamp" | render Table Expression: filters | essql query="SELECT CDR\_TIME AS timestamp, IMSI AS IMSI, sender AS Sender FROM "…

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [December 11, 2019, 5:15am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/3 "2019-12-11T05:15:06Z")

</div>

共有ありがとうございます。

現状は、別途CanvasのFilter用にISO8601フォーマットのdateフィールドを追加し、testdateのデータをコピーすることで対応を試みています。  
ですが、これもコピーの際にparse\_exceptionが出るため、何とかScriptでparseしてコピーできないかを試していますが、なかなか上手くいかず苦慮しています。

追加で何か情報などありましたら、ぜひお願いいたします。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [December 12, 2019, 12:44pm UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/4 "2019-12-12T12:44:39Z")

</div>

> [@sshota](#):
>
> 現状は、別途CanvasのFilter用にISO8601フォーマットのdateフィールドを追加し、testdateのデータをコピーすることで対応を試みています。  
> ですが、これもコピーの際にparse\_exceptionが出るため、何とかScriptでparseしてコピーできないかを試していますが、なかなか上手くいかず苦慮しています。

この部分について、どのようなアプローチのことをおっしゃっていますか？  
Ingest Pipelineで、testdateの値を他のフィールドにISO8601フォーマットのDateに変換して格納する、というようなことをなさっているのでしょうか？

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [December 13, 2019, 12:13am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/5 "2019-12-13T00:13:17Z")

</div>

返信ありがとうございます。

> testdateのformatを作り変えることは現実的ではない

当初はこう考えていたのですが、今後のことを考えるとISO8601フォーマットで持っていたほうが何かと便利かなと考え直して、testdateのフォーマットを修正する方向で検討しました。  
このため、以下2点の対応を考えています。

### １）既存データ（およびmapping）のformat修正

> **[Elasticsearchで、yyyy/MM/dd HH:mm:ssの文字を日付型にパースしたい - Qiita](https://qiita.com/take333/items/28c2dcfff43adebe6a31)**
>
> 困ったこと 「yyyy/MM/dd HH: mm:ss」形式の文字をインデックステンプレートから、Dateにパースしたらエラーが発生した ※HH: mmの間に半角はいって申し訳ない・絵文字になるもので 【インデックステンプレート】 PUT \_template/templa...

- 上記を参考に、\_reindex時のIngest Pipelineで、gsubなどを用いて変換

### ２）新たに追加されるデータのISO8601変換

- 基本的にデータの取り込みはlogstashで行っているのですが、mutate filter pluginで変換して格納

一応やりたいことは成功しているのですが、正直なところ、あまりスマートではないなと思っています。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [December 13, 2019, 1:10am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/6 "2019-12-13T01:10:19Z")

</div>

新しくIndexを定義して、既存データはreindexによる移行で ISO8601形式のフィールドにし、  
移行後に登録される新規データについては、Logstashのフィルターで何とかしたい、ということでしょうか。

## Reindex時のフォーマット変換

date processorを使うと簡単かと思います。

```auto
PUT _ingest/pipeline/discusstest
{
  "description": "discuss test",
  "processors": [
    {
         "date" : {
          "field" : "testdate",
          "target_field" : "testdate",
          "formats" : ["yyyy/MM/dd HH:mm:ss"],
          "timezone" : "UTC"
        }
    }
  ]
}

```

で、このIngestPipelineをreindex時に指定しておくと、作成後の方はISO8601（dateのフォーマット指定なし）で作成されるかと思います。

```auto
POST _reindex
{
  "source": {
    "index": "before_index"
  },
  "dest": {
    "index": "after_index",
    "pipeline": "discusstest"
  }
}

```

## Logstashでの日付フォーマット

dateフィルターを使って文字列からdate型にしておくと、出力されるときにはISO8601型になっているはずです。

```auto
filter {
    date {
        match => ["hogehoge", "yyyy/MM/dd HH:mm:ss"]
        # ↓ 元データがUTCでなければ、UTCに変換する（9時間引くなど）
        # timezone => "Asia/Tokyo"
        target => "hogehoge"
    }
}

```

たとえば、以下のようになります。

> 入力値 "hogehoge" =\> "2019/12/13 09:00:00"  
> 出力値 "hogehoge" =\> 2019-12-13T00:00:00.000Z,

ご参考になれば幸いです。

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [December 13, 2019, 9:05am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/8 "2019-12-13T09:05:49Z")

</div>

いつもご丁寧な回答ありがとうございます。

既存データの移行と、Logstashのフィルターによる新規データの登録とも、教えて頂いた内容を参考に、無事に対応することができました。  
（当初考えていたものより、かなりスマートになったと思います）

大変勉強になりました。  
ありがとうございました。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 10, 2020, 9:06am UTC](https://discuss.elastic.co/t/canvas-time-filter-parse-exception/211232/9 "2020-01-10T09:06:06Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
