TD Consoleが利用できない場合やご利用いただけない場合でも、CLIからMySQLデータコネクタを使用できます。以下の手順では、CLIを使用してデータをインポートする方法を説明します。
- Treasure Dataの基本的な知識
- MySQLの基本的な知識
- Treasure Dataから到達可能なMySQLインスタンス
MySQL Community Server 5.6および5.7を使用していてSSLを使用したい場合は、コネクタの基盤となるライブラリとの互換性の問題を解決するために、パラメータenabledTLSProtocolsとTLSv1.2を設定してください。他のMySQLバージョンでは、統合は自動的に最高のTLSバージョンを使用しようとします。
最新のTD Toolbeltをインストールしてください。
MySQLアクセス情報を含む設定ファイル(例:load.yml)を以下のように準備してください。
in:
type: mysql
host: mysql_host_name
port: 3306
user: test_user
password: test_password
database: test_database
table: test_table
select: "*"
out:
mode: replaceこの例では、テーブル内のすべてのレコードをダンプします。追加パラメータを使用して、より詳細な制御が可能です。
SSLオプションを使用する場合は、以下のオプションを使用してください:
- requireSSL
- useSSL
- verifyServerCertificate
in:
type: mysql
host: mysql_host_name
port: 3306
user: test_user
password: test_password
options:
requireSSL: true
useSSL: true
verifyServerCertificate: false
database: test_database
table: test_table
select: "*"
out:
mode: replace利用可能なoutモードの詳細については、付録を参照してください。
td connector:previewコマンドを使用して、インポートされるデータをプレビューできます。
$ td connector:preview load.yml
+---------+--------------+----------------------------------+------------+---------------------------+
| id:long | name:string | description:string | price:long | created_at:timestamp |
+---------+--------------+----------------------------------+------------+---------------------------+
| 1 | "item name1" | "26e3c3625366591bc2ffc6e262976e" | 2419 | "2014-02-16 13:01:06 UTC" |
| 2 | "item name2" | "3e9dd9474dacb78afd607f9e0a3366" | 1298 | "2014-05-24 13:59:26 UTC" |
| 3 | "item name3" | "9b6c9e4a140284d3951681e9e047f6" | 9084 | "2014-06-21 00:18:21 UTC" |
| 4 | "item name4" | "a11faf5e63c1b02a3d4c2b5cbb7331" | 669 | "2014-05-02 03:44:08 UTC" |
| 6 | "item name6" | "6aa15471c373ddc8a6469e1c918f98" | 3556 | "2014-03-29 08:30:23 UTC" |
+---------+--------------+----------------------------------+------------+---------------------------+ロードジョブを送信します。データサイズによっては数時間かかる場合があります。ユーザーは、データが保存されているデータベースとテーブルを指定する必要があります。
Treasure Dataのストレージは時間でパーティション分割されているため(アーキテクチャも参照)、--time-columnオプションを指定することを推奨します。このオプションを指定しない場合、Data Connectorは最初のlong型またはtimestamp型のカラムをパーティショニング時間として選択します。--time-columnで指定するカラムの型は、long型またはtimestamp型のいずれかである必要があります。
データに時間カラムがない場合は、add_timeフィルタオプションを使用して追加できます。詳細はadd_timeフィルタプラグインを参照してください。
$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at上記のコマンドは、*database(td_sample_db)とtable(td_sample_table)*を既に作成していることを前提としています。TDにdatabaseまたはtableが存在しない場合、このコマンドは成功しません。TD Consoleを使用してdatabaseとtableを作成するか、td connector:issueコマンドで--auto-create-tableオプションを使用して、databaseとtableを自動作成してください。
$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at --auto-create-table"--time-column"オプションで、Time Format列を"Partitioning Key"に割り当てることができます。
高可用性スケジューラを使用して、定期的なMySQLインポートのためのData Connector実行をスケジュールできます。この機能を使用することで、ローカルデータセンターにcronデーモンを設置する必要がなくなります。
incremental_columnsパラメータにテーブルのカラムを指定することで、レコードを段階的にロードできます。オプションで、last_recordパラメータに初期値を指定することもできます。
in:
type: mysql
options: {useLegacyDatetimeCode: false}
host: mysql_host_name
port: 3306
user: test_user
password: test_password
database: test_database
table: test_table
incremental: true
incremental_columns: [id, created_at]
last_record: [10000, '2014-02-16T13:01:06.000000Z']
out:
mode: append
exec: {}フルテーブルスキャンを避けるために、incremental\_columns:オプションを使用して関連するカラムにインデックスを作成してください。 この例では、以下のインデックスを作成します。
CREATE INDEX embulk_incremental_loading_index ON test_table (id, created_at);Connectorは自動的にクエリを作成し、値をソートします。
-- when last_record wasn't given
SELECT * FROM(
...original query is here
)
ORDER BY id, created_at-- when last_record was given
SELECT * FROM(
...original query is here
)
WHERE id > 10000 OR (id = 10000 AND created_at > '2014-02-16T13:01:06.000000Z')
ORDER BY id, created_atConnectorは自動的にlast_recordを取得し、次のスケジュール実行時に使用します。
in:
type: mysql
options:
useLegacyDatetimeCode: false
...
out:
...
Config Diff
---
in:
last_record:
- 20000
- '2015-06-16T16:32:14.000000Z'incremental: trueを設定すると、queryオプションは使用できません。 incremental_columnsとしてサポートされているのは、文字列、整数、datetimeおよびtimestamp型のみです。 datetime/timestamp型のカラムをincremental_columnsとして使用する場合は、GUIでJDBC接続オプションとして、または設定ファイルのoptionsとしてuseLegacyDatetimeCode: falseを設定してください。
新しいスケジュールは、td connector:createコマンドを使用して作成できます。スケジュール名、cron形式のスケジュール、データの保存先となるデータベースとテーブル、およびData Connector設定ファイルが必要です。
$ td connector:create \
daily_mysql_import \
"10 0 * * *" \
td_sample_db \
td_sample_table \
load.ymlcronパラメータは、@hourly、@daily、@monthlyの3つのオプションも受け付けます。 デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、任意のタイムゾーンでスケジュールを設定できます。--timezoneオプションは、'Asia/Tokyo'や'America/Los_Angeles'などの拡張タイムゾーン形式のみをサポートしています。PST、CSTなどのタイムゾーン略語は*サポートされておらず*、予期しないスケジュールになる可能性があります。
現在スケジュールされているエントリの一覧は、td connector:listで確認できます。
$ td connector:list
+--------------------+--------------+----------+-------+--------------+-----------------+-------------------------+
| Name | Cron | Timezone | Delay | Database | Table | Config |
+--------------------+--------------+----------+-------+--------------+-----------------+-------------------------+
| daily_mysql_import | 10 0 * * * | UTC | 0 | td_sample_db | td_sample_table | {"type"=>"mysql", ... } |
+--------------------+--------------+----------+-------+--------------+-----------------+-------------------------+td connector:showは、スケジュールエントリの実行設定を表示します。
% td connector:show daily_mysql_import
Name : daily_mysql_import
Cron : 10 0 * * *
Timezone : UTC
Delay : 0
Database : td_sample_db
Table : td_sample_tabletd connector:historyは、スケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、td job jobidを使用してください。
% td connector:history daily_mysql_import
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
| JobID | Status | Records | Database | Table | Priority | Started | Duration |
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
| 578066 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-18 00:10:05 +0000 | 160 |
| 577968 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-17 00:10:07 +0000 | 161 |
| 577914 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-16 00:10:03 +0000 | 152 |
| 577872 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-15 00:10:04 +0000 | 163 |
| 577810 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-14 00:10:04 +0000 | 164 |
| 577766 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-13 00:10:04 +0000 | 155 |
| 577710 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-12 00:10:05 +0000 | 156 |
| 577610 | success | 10000 | td_sample_db | td_sample_table | 0 | 2015-04-11 00:10:04 +0000 | 157 |
+--------+---------+---------+--------------+-----------------+----------+---------------------------+----------+
8 rows in settd connector:deleteは、スケジュールを削除します。
$ td connector:delete daily_mysql_importload.ymlのoutセクションでファイルインポートモードを指定できます。
たとえば、Treasure Data内の既存のテーブルにデータを追加するか、データを置き換えるかを選択できます。
| モード | 説明 | 例 |
|---|---|---|
| Append | レコードがターゲットテーブルに追加されます。 | in: ... out: mode: append |
| Always Replace | ターゲットテーブルのデータを置き換えます。ターゲットテーブルに対して手動で行われたスキーマ変更は保持されます。 | in: ... out: mode: replace |
| Replace on new data | インポートする新しいデータがある場合にのみ、ターゲットテーブルのデータを置き換えます。 | in: ... out: mode: replace_on_new_data |