Treasure Data - Support Engineering Team blog

トレジャーデータのサポートエンジニアリングチームのブログです。

Data Tanks 入門

こんにちは、Treasure Dataサポートの伊藤です。

本日はData Tanks について説明していこうと思います。 本記事はよくあるお問い合わせに対する説明をする前段階として概要など説明していきます。

Data Tanks とは?

Data Tanks とは、オープンソースRDBMSであるPostgreSQLをベースとしているサービスです。

Data Tanksは、Plazma DBと呼ばれるPrestoやHiveで参照できるデータベースと独立しています。そのため、Plazma DBに格納されているデータをData Tanksで利用するにはData Tanksへエクスポートする必要が、Data Tanksに格納されているデータをPrestoやHiveで利用するには逆にインポートする必要があります。

Plazma DB と Data Tanks

PrestoやHiveは分散処理システムであるため大規模データを取り扱うことが得意なのですが、一方で大量のデータから数行のみ参照するといったことは苦手です。

それとは対照的にData Tanksはインデックスを作成することで数行のレコードを参照するといったことが得意です。また、Presto/Hiveはシステム特性上同時実行数が少なく抑えられていることが多い(ご契約内容に依存)のですが、Data Tanksは同時接続数として100が設定されており、サードパーティ製のツールから同時にアクセスするといった際に採用を検討いただくと良いでしょう。

ただし、同じリソース(テーブルやレコードなど)を同時に複数人が使うことが想定されていることから、データの整合性を保つための仕組みとしてロックと呼ばれる排他制御方式が採用されており、Plazma DBと仕組みや特性が異なることは頭の片隅に置いておくと良いでしょう。

蛇足ではありますが、デフォルトでは有効化されていないPrestoからData Tanksへ接続する機能はあるのですが、Prestoの同時実行数上限の影響を受けてしまうのでなるべく分けて運用できるようにしていただくと良いでしょう。

Data Tanks の使い方

接続先のホスト名は?

ご契約ごとに接続先として固定されているIPアドレスが存在し、Data Tanks構築時に管理者へお渡ししています。

ユーザー名とパスワードは?

Data Tanksのユーザーは2ユーザーが用意されていますが、利用者が用いるユーザー名は基本的に tank_user となります。 tank_integration_user というユーザーも用意されていますが、こちらは後述するData TanksからインポートしたりData Tanksへエクスポートする際に利用されます。 どちらもパスワードは構築時にお渡ししているので、管理者へ確認していただくと良いでしょう。

接続制限はできるの?

Data Tanks は接続元のIPアドレスホワイトリストとして登録することで、アクセス元が想定外となる場合は接続できないようにしています。 追加が必要な場合は担当のCustomer Successかサポートへご依頼ください。その際依頼者はTreasure Dataのユーザーの種類が Administrator もしくは Ownerである必要がありますので、留意すると依頼から作業までスムーズです。

Data Connector(Bulk Load)でData Tanksからインポートする

Data Tanksに格納されているレコードをPlazma DB(Presto/Hiveでアクセス可能なレコード)へインポートするにはPostgreSQL Import Integrationをお使いください。

datatank という名前のAuthenticationが用意されているので、そちらを用いてSourceを作成すると良いでしょう。

また、Workflowの td_load>: オペレータを用いる場合、下記のようなyamlファイルを用意し指定することでインポートできます。ご参考までに。

in:
  type: postgresql
  host: <Data TanksのIPアドレス>
  port: 5432
  user: tank_integration_user
  password: ${secret:datatank_password}
  schema: public
  database: datatank
  query: "SELECT col1, col2 FROM test_table"
filters:
- type: add_time
  to_column:
    name: time
    type: timestamp
  from_value:
    mode: upload_time

Result ExportでData Tanksへエクスポートする

逆にPlazma DB(Presto/Hiveからアクセス可能)に格納されているレコードをData Tanksへエクスポートするには PostgreSQL Export Integrationをお使いください。

PrestoもしくはHiveにてクエリを用いて抽出した結果をData Tanksへエクスポートすることができます。 Workflowで実装する場合は下記のようになるでしょう。

_export:
  td:
    database: test_database

+export_data_tank:
  td>: queries/example.sql
  result_connection: datatank
  result_settings:
    database: datatank
    table: test_table
    mode: replace

直接接続する

Data Tanksは先述した通りPostgreSQLベースのサービスとなっているため、psqlコマンドやpgAdminツールなどでアクセスすることが可能です。psqlコマンドで接続する場合は下記のようになるでしょう。

$ psql -h <Data TanksのIPアドレス> -p 5432 -d datatank -U tank_user

もちろんBIツールなどでPostgreSQLへの接続機能が提供されている場合はそちらで接続できることが期待されます。

傾向を把握するにはどうすればいいの?

Data Tanksをご契約いただくと環境構築完了後対象のData Tanksの傾向を把握することができるダッシュボードのリンクを管理者へお渡ししています。

様々なグラフがダッシュボードに表示されているかと思いますが、例えば system.disk.in_use というグラフはディスク使用率(%)を表示しています。Plazma DBとは異なり利用できるディスク領域のサイズ上限がありますので、新たにデータ連携を始めるなどを想定している場合は事前にこちらで傾向を確認するようにしておくと良いでしょう。

Data Tanks 用ダッシュボード

最後に

いかがでしたでしょうか? 今回は Data Tanks を利用する上で最低限必要だったり気にするであろうポイントについて説明してみました。 読んでいただいた方は感じたかと思いますが、各種Treasure Dataへ依頼する必要があったり、設定の柔軟性もあまりないという特徴があります。それらを改善した Data Tanks v2と呼ばれるサービスも提供予定ですので、興味がある方はご連絡ください!

次回は Data Tanks を利用している時に遭遇するトラブルについて説明する予定です。どうぞお楽しみに!