この記事では、既存のMySQLインスタンスにジョブ結果を書き込む方法について説明します。
サンプルワークフローについては、Treasure Boxesを参照してください。
- TD Toolbeltを含むTreasure Dataの基本的な知識
- MySQLインスタンス
- Treasure DataはSELECT、INSERT、DELETE、CREATE、DROP、およびALTER権限を持っている必要があります
replaceモードを使用すると、MySQLテーブルのスキーマが変更される場合があります。ターゲットテーブルへのスキーマ変更を避けるには、「スキーマを保持する」オプションを選択してください。
Treasure Dataからのエクスポートはクエリを使用します。クエリを作成するか、既存のクエリを再利用します。クエリ内で、データ接続を設定します。
- TD Consoleを開きます。
- Data Workbench > Queriesに移動します。
- 右上隅のNew Queryを選択して、新しいクエリを作成します。

データのエクスポートに使用する予定のクエリを選択します。

クエリの設定が完了したら、Export Resultsを選択します。

Choose Integrationダイアログが開きます。結果をエクスポートするために使用する接続を選択する際、2つのオプションがあります:既存の接続を使用するか、新しいMySQL接続を作成するかです。
検索ボックスに接続名を入力し、接続を選択します。

フィールド値を入力して、新しい接続を作成します。

新しいMySQL接続に必要な認証情報を入力します。以下のパラメータを設定します:
- Host: IPアドレスなど、ソースデータベースのホスト情報
- User: ソースデータベースに接続するためのユーザー名
- Password: ソースデータベースに接続するためのパスワード
- Use SSL: SSLを使用して接続する場合は、このボックスをチェックします
- Require a valid SSL certificate?: 接続時に有効なSSL証明書の提示を要求します
接続を設定した後、転送パラメータを設定します。


Database name: データを転送するデータベースの名前(例:
your_database_name)Table: データをエクスポートするテーブル
Table Charset: ターゲットテーブルがサーバーのデフォルト文字セットと異なる文字セットを持つ場合に入力する必要があります。例:utf8mb4
Table Collation: ターゲットテーブルがサーバーのデフォルト照合順序と異なる照合順序を持つ場合に入力する必要があります。例:utf8mb4_0900_ai_ci、utf8mb4_general_ci
Output mode: データをアップロードするための異なる方法
- Append(URLでmodeオプションが指定されていない場合に使用されるデフォルト)クエリ結果はテーブルに追加されます。テーブルが存在しない場合は、テーブルが作成されます。このモードはアトミックです。SQL文を使用します
INSERT INTO target_table SELECT * FROM * temp_table;
- Replace: 既存のテーブルの全体の内容を、結果のクエリ出力で置き換えます。テーブルがまだ存在しない場合は、新しいテーブルが作成されます。replaceモードは、単一のトランザクションで以下の3つのステップを実行することにより、アトミック性(テーブルの消費者が常に一貫したデータを持つようにする)を実現します:
- 一時テーブルを作成します。
- 一時テーブルに書き込みます。
- ALTER TABLE RENAMEを使用して既存のテーブルを一時テーブルに置き換えます。 replaceモードを使用すると、MySQLテーブルのスキーマが変更される場合があります。ターゲットテーブルへのスキーマ変更を避けるには、「スキーマを保持する」オプションを選択してください。
- SQL文を使用します
- target_tableが存在しない場合:RENAME temp_table --> target_table
- target_tableが存在する場合:RENAME temp_table --> swap_table, target_table --> temp_table, swap_table --> target_table
- Truncate: システムはまず既存のテーブルをトランケートし、Appendモードのようにクエリ結果を挿入します。テーブルがまだ存在しない場合は、新しいテーブルが作成されます。このモードはアトミックです。
- Update: 「unique」パラメータで指定された列に重複した値を引き起こさない限り、行が挿入されます:その場合は、代わりに更新が実行されます。「unique」パラメータは、updateモードを使用する場合にのみ適用されます。このモードはアトミックです。SQL文
- uniqueパラメータなしまたはnull:REPLACE INTO target_table SELECT * FROM * temp_table;
- uniqueパラメータあり:upsertを実行
- UPDATE target_table, temp_table SET target_table.* = temp_table.* WHERE target_table.unique_keys = temp_table.unique_keys
- INSERT INTO target_table SELECT * FROM temp_table WHERE NOT EXISTS (SELECT 1 FROM target_table TD WHERE target_table.unique_keys = temp_table.unique_keys)
- Append(URLでmodeオプションが指定されていない場合に使用されるデフォルト)クエリ結果はテーブルに追加されます。テーブルが存在しない場合は、テーブルが作成されます。このモードはアトミックです。SQL文を使用します
Use compression: サーバーへの接続では、接続を介して送信されるバイト数を減らすために、クライアントとサーバー間のトラフィックに圧縮を使用できます。
Use UTF-8 Encoding: UTF-8形式のMySQL server configとの後方互換性。
「Output Results」チェックボックスをチェックした状態でクエリを実行します。クエリが正常に完了すると、転送の詳細を入力したときに指定したMySQLデータベースとテーブルに結果が表示されます。
Audience Studioでアクティベーションを作成することにより、ターゲットプラットフォームにセグメントデータを送信することもできます。
- Audience Studioに移動します。
- 親セグメントを選択します。
- ターゲットセグメントを開き、右クリックして、Create Activationを選択します。
- Detailsパネルで、アクティベーション名を入力し、Configuration Parametersに関する前のセクションに従ってアクティベーションを設定します。
- Output Mappingパネルでアクティベーション出力をカスタマイズします。

- Attribute Columns
- すべての列を変更せずにエクスポートするには、Export All Columnsを選択します。
- エクスポート用に特定の列を追加するには、+ Add Columnsを選択します。Output Column Nameには、同じSourceカラム名が事前入力されます。Output Column Nameを更新できます。アクティベーション出力に新しい列を追加するには、+ Add Columnsを引き続き選択します。
- String Builder
- エクスポート用の文字列を作成するには、+ Add stringを選択します。以下の値から選択します:
- String: 任意の値を選択します。テキストを使用してカスタム値を作成します。
- Timestamp: エクスポートの日時
- Segment Id: セグメントID番号
- Segment Name: セグメント名
- Audience Id: 親セグメント番号
- エクスポート用の文字列を作成するには、+ Add stringを選択します。以下の値から選択します:
- Scheduleを設定します。

- スケジュールを定義する値を選択し、オプションでメール通知を含めます。
- Createを選択します。
Result Outputを使用したスケジュールされたジョブは、指定されたMySQLインスタンスに出力結果を定期的に書き込みます。
Treasure Workflow内で、このデータコネクタを使用してデータを出力することを指定できます。
timezone: UTC
_export:
td:
database: sample_datasets
+td-result-output-mysql:
td>: queries/sample.sql
result_connection: your_connections_name
result_settings:
database: database_name
table: table_name
mode: appendMySQL 5.7では、デフォルトの照合順序はutf8mb4_general_ciでした。しかし、MySQL 8では、デフォルトの文字セットはutf8mb4であり、デフォルトの照合順序はutf8mb4_0900_ai_ciです MySQL output connectorは、サーバーのデフォルト照合順序(一時テーブルの作成に使用される)がターゲットテーブルの照合順序と異なる場合、updateモード(unique設定を使用)で動作しない可能性があります(illegal mix of collationsエラー) その場合、一時テーブルがターゲットテーブルと同じ文字セットと照合順序を持つことを確認するために、2つの設定(table_charsetとtable_collation)を使用する必要があります
(MySQLの「illegal mix of collations」エラーは、互換性のない照合順序を持つテキスト列を比較または結合しようとしたときに発生します(照合順序は文字セット内の文字を比較するためのルールのセットです)。