# Calcite フィルター関数

このフィルター関数は、入力プラグインから受け取った Pages 内の行を SQL クエリで変換し、クエリ結果を変更された Pages として次のフィルターまたは出力プラグインに送信できます。これは [Apache Calcite](https://calcite.apache.org/) を使用しており、次世代の高性能データベースの基盤となり、[カスタムアダプター](https://calcite.apache.org/docs/tutorial.html)によってカスタマイズされたストレージに SQL クエリを実行できるようにします。このプラグインは Page ストレージアダプターを Apache Calcite に適用し、提供される JDBC Driver を介して Pages に SQL クエリを実行できるようにします。

このフィルターは、処理前にデータを保存するためにメモリを使用します。メモリはホストマシン上の Embulk によって管理されます。

* Treasure Data の基本知識。
* TD Toolbelt の基本知識。


## 制限事項

* このフィルタープラグインは、データ取り込み中に不要なレコードを削除するための柔軟なデータフィルターをサポートすることを目的としています。そのため、WHERE 句のみが十分にサポートされています。
* データの結合や外部サービスへのデータ挿入などの他のユースケースはサポートされていません。


## 例

このプラグインの Embulk 設定例を以下に示します：

```yaml
filters:
  - type: calcite
    query: SELECT * FROM $PAGES
```

Calcite Filter は Treasure コンソール から適用できません。Treasure CLI を介して使用する必要があります。

Treasure CLI で Calcite Filter を使用するには、以下を実行します。

1. filters セクションを含む *config.yml* ファイルを作成します。S3 Input コネクタを使用した例を以下に示します：


```yaml
in:
  type: s3
  access_key_id: sample_access_key_id
  secret_access_key: sample_secret_access_key
  bucket: viet-us-east-1
  path_prefix: s3_basic.csv
  parser:
    type: csv
    stop_on_invalid_record: false
    allow_optional_columns: true
    allow_extra_columns: true
    columns:
      - {name: path, type: string}
      - {name: code, type: string}
      - {name: method, type: string}
out:
  mode: replace
exec: {}
filters:
  - type: calcite
    query: SELECT * FROM $PAGES WHERE "method" LIKE 'GET' and "path" like '%item%'
  - type: add_time
    to_column:
      name: time
      type: timestamp
    from_value:
      mode: upload_time
```

```bash
td connector:issue config.yml \
--database vietdb \
--table test_cal --auto-create-table
```