Skip to content
Last updated

Avro パーサー関数

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

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

  • Deflate
  • Snappy

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

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

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

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

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

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

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

Treasure CLI を使用すると、td connector コマンドを使用してコマンドラインから Avro データをインポートできます。このコマンドは YAML 形式の設定ファイルを入力として受け取ります。たとえば、サンプルファイル users.avro を使用して、FTP サイトからサンプルファイルをインポートするための 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}
out:
  mode: append

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

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

列配列のキーと値のペア

説明
name列の名前。
type列の型:
  • boolean — true または false
  • long — 64 ビット符号付き整数
  • double — 64 ビット浮動小数点数
  • string
  • timestamp — ナノ秒精度の日付と時刻
  • json
format列の型が timestamp の場合にのみ有効。

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

- {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 ファイルが FTP サイトで利用可能であることを前提としています。また、手動インポートプロセスが機能するために、importAvroFTP.yml ファイルに time 列が追加されています。

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
td connector:preview importAvroFTP.yml
td connector:issue importAvroFTP.yml \
--database wt_avro_db \
--table wt_avro_table --auto-create-table

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

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

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

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

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

Avro 型TD データ型
StringString
BytesString
FixedString
EnumString
NullString
IntLong
LongLong
FloatDouble
DoubleDouble
BooleanBoolean
MapJSON
ArrayJSON
RecordJSON

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

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 を実行する例

$ td connector:guess config.yml -o load.yml
---
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