# Avro パーサー関数

Treasure Data インテグレーション用の Avro パーサープラグインは、Avro バイナリデータを含むファイルをパースします。以下の Treasure Data インテグレーションが Avro パーサーをサポートしています：

* [SFTP (version 1)](/int/sftp-server-import-integration)
* [Amazon S3 v2](/int/amazon-s3-import-integration-v2)
* [Box](/int/box-import-integration)
* [OneDrive](/int/onedrive-import-integration)
* [Microsoft Azure](/int/microsoft-azure-blob-storage-import-integration)
* [FTP](/int/ftp-import-integration-cli)


Treasure Data Avro パーサーは以下の圧縮コーデックをサポートしています：

* Deflate
* Snappy


パーサーは Treasure コンソール または Treasure CLI のいずれかから使用できます。

## Treasure コンソール からの Avro パーサー関数の使用

Treasure コンソール で Avro パーサー関数を使用するには、サポートされているインテグレーションのいずれかに対して認証を作成する必要があります。その後、その認証を使用してソースを作成できます。ソースの作成プロセス中に、Avro ファイル内のデータを調整またはプレビューする機会があります。

Create Source インターフェースのステップ 3「Data Settings」で、Treasure コンソール は自動的に Avro パーサーを選択するはずです。選択されない場合は、**Parser > Type** ドロップダウンメニューから手動で選択できます。

![](/assets/avrodatasettingsparserselect.743711139ccddef7220961a76e18208cf96ec42b79d0edf6b3deebc878c5170a.ef656343.png)

削除アイコンを使用して、特定の行がインポートされないようにするオプションもあります。

![](/assets/avrodatasettingsrowdeleteoption.6bc13a70332f17823e6358171b20ce3be3b06468eca93a021e95c02beb295bee.ef656343.png)

Create Source インターフェースのステップ 5「Data Preview」で、Treasure コンソール はデータのプレビューを表示します。

![](/assets/avrodatapreview.88dc4d96af05add664219cff4c3fcea81767d32205df4f397d724e970fdb8d40.ef656343.png)

## Treasure CLI からの Avro パーサー関数の使用

Treasure CLI を使用すると、td connector コマンドを使用してコマンドラインから Avro データをインポートできます。このコマンドは `YAML` 形式の設定ファイルを入力として受け取ります。たとえば、サンプルファイル [users.avro](./sample-data/users.avro) を使用して、FTP サイトからサンプルファイルをインポートするための `importAvroFTP.yml` という名前のファイルを作成できます。設定ファイルは次のようになります：


```bash
in:
  type: ftp
  host: 10.100.100.10
  port: 21
  user: user1
  password: "password123"
  path_prefix: /misc/users.avro
  parser:
    type: avro
    columns:
    - {name: name, type: string}
    - {name: favorite_number, type: long}
    - {name: favorite_color, type: string}
out:
  mode: append
```

**Avro インポート用の列を手動で定義する**

ファイルの **`columns`** セクションでは、`name`、`type`、および（timestamp の場合）format のキーと値のペアを指定して、Avro ファイルのスキーマを定義できます。

**列配列のキーと値のペア**

| 列 | 説明 |
|  --- | --- |
| `name` | 列の名前。 |
| `type` | 列の型：- `boolean` — true または false
- `long` — 64 ビット符号付き整数
- `double` — 64 ビット浮動小数点数
- `string`
- `timestamp` — ナノ秒精度の日付と時刻
- `json`

 |
| `format` | 列の型が `timestamp` の場合にのみ有効。 |


列を定義する方法の例を以下に示します：


```yaml
- {name: first_name, type: string}
- {name: favorite_number, type: long}
- {name: last_access, type: timestamp, format: '%Y-%m-%d %H:%M:%S.%N'}
```

設定ファイルをセットアップしたら、`td connector` コマンドを使用してインポートを実行します。以下はその例です。

以下の例では、[users.avro](./sample-data/users.avro) ファイルが FTP サイトで利用可能であることを前提としています。また、手動インポートプロセスが機能するために、importAvroFTP.yml ファイルに time 列が追加されています。


```yaml importAvroFTP.yml
in:
  type: ftp
  host: 10.100.100.10
  port: 21
  user: user1
  password: "password123"
  path_prefix: /misc/users.avro
  parser:
    type: avro
    columns:
    - {name: name, type: string}
    - {name: favorite_number, type: long}
    - {name: favorite_color, type: string}
    - {name: time, type: timestamp}
out:
  mode: append
```


```bash
td connector:preview importAvroFTP.yml
```


```bash
td connector:issue importAvroFTP.yml \
--database wt_avro_db \
--table wt_avro_table --auto-create-table
```

テーブルの内容を確認するには、TD Query コマンドを使用できます。query コマンドの出力は冗長なため、以下の例では応答の多くが省略されています：


```bash
td query -d wt_avro_db -T presto -w 'select * from wt_avro_table'
```

**パーサーに Avro インポート用の列を推測させる**

パーサーに特定のファイルで使用されている列とデータ型を推測させるオプションもあります。パーサーは、ここに示す変換テーブルに基づいて「推測」を行います。

**Avro から TD へのデフォルト型変換**

| **Avro 型** | **TD データ型** |
|  --- | --- |
| String | String |
| Bytes | String |
| Fixed | String |
| Enum | String |
| Null | String |
| Int | Long |
| Long | Long |
| Float | Double |
| Double | Double |
| Boolean | Boolean |
| Map | JSON |
| Array | JSON |
| Record | JSON |


## S3 から Avro データをインポートするための設定例


```yaml importAvroS3.yml
in:
  type: s3
  access_key_id: <access key>
  secret_access_key: <secret access key>
  bucket: <bucket name>
  path_prefix: users.avro
  parser:
    type: avro
    columns:
    - {name: name, type: string}
    - {name: favorite_number, type: long}
    - {name: favorite_color, type: string}
out: {mode: append}
exec: {}
```

**S3 でホストされている Avro ファイルに対して td connector:guess を実行する例**


```bash
$ td connector:guess config.yml -o load.yml
```


```yaml
---
in:
  type: s3
  access_key_id: <access key>
  secret_access_key: <secret access key>
  bucket: <bucket name>
  path_prefix: users.avro
  parser:
    charset: UTF-8
    newline: CR
    type: avro
    columns:
    - {name: name, type: string}
    - {name: favorite_number, type: long}
    - {name: favorite_color, type: string}
out: {}
exec: {}
filters:
- from_value: {mode: upload_time}
  to_column: {name: time}
  type: add_time
```