# Databricks Export Integration

ジョブ結果を直接Databricksに書き込むことができます。例えば、複数のソースからTreasure Dataにデータを統合し、クエリを実行してデータを整理した後、コネクタを適用するジョブを使用してDatabricksにデータをエクスポートすることができます。

インポート連携については、[Databricksインポート連携](/ja/int/databricks-import-integration)を参照してください。

## 前提条件

- [TD Toolbelt](https://toolbelt.treasuredata.com/)を含むTreasure Dataの基本知識
- Databricksの基本知識とDatabricksアカウントへのアクセス
- Databricksサーバーへのアクセス


## 要件と制限事項

- Databricksサーバーが休止モードの場合、起動に数分かかる可能性があり、コネクタがタイムアウトする原因となることがあります。
- Databricksは複数のステートメントにまたがるトランザクションをサポートしていません。そのため、replaceモードとtruncateモードは部分的に失敗する可能性があり、ロールバックできません。例えば、truncateまたはreplaceモードで、削除またはcreate replace操作は成功したが、一時テーブルからターゲットテーブルへのデータ挿入が失敗した場合、コネクタは以前のデータにロールバックできません。


## Treasure コンソールを使用した接続の作成

Treasure コンソールを使用して接続を設定できます。

### Databricksコネクタのホスト名とHTTPパスの取得

1. Databricksのウェブサイトにログインします。
2. SQLタブに移動し、SQL Warehousesを選択します。


![](/assets/databricks-export-integration-2024-02-21-3.90cecd1408ee55f95aa56d2175e3afd6ce827e8634cab70f3c8cdd4a97d42f88.a33e2d6c.png)

1. SQL Warehouseのインスタンスを選択します。


![](/assets/databricks-export-integration-2024-02-21-9.1224b9f2be7bed1529fd3e0a6f88f7af06a3f1fd03402079fb5d667c03fb4f49.a33e2d6c.png)

1. Connection detailsタブを選択します。
2. SQL WarehouseのServer hostnameとHTTP pathを記録します。


![](/assets/databricks-export-integration-2024-02-21-10.a2aee3545eae631d1fb5258bb94502ca35163d216c0c65374ddce0c591a8fec8.a33e2d6c.png)

### 新しい接続の作成

[Treasure Data Connections](https://console.treasuredata.com/app/connections/data-sources)に移動します。

1. **Integrations Hub** > **Catalog**を選択します。
2. カタログでDatabricksを検索します。
3. アイコンにマウスを合わせて、**Create Authentication**を選択します。
4. Credentialsタブが選択されていることを確認し、連携の認証情報を入力します。


![](/assets/databricks-export-integration-2024-02-21-1.04e2663633e3ecf2111d90be1e4cdc0fce8e995a98ad680af4cabb8aa03e7c28.a33e2d6c.png)

| **Parameter** | **Description** |
|  --- | --- |
| Hostname | Databricksインスタンスのホスト名です。 |
| HTTP Path | Databricksインスタンスの HTTPパスです。 |
| Authentication Method | 以下のいずれかを選択してください：- Basic (End of Life)。[Databricks管理パスワードの廃止について](https://docs.databricks.com/aws/en/security/auth/password-deprecation)
- Personal Access Token（非推奨）。[Databricksパーソナルアクセストークン（レガシー）による認証](https://docs.databricks.com/aws/en/dev-tools/auth/pat)
- OAuth M2M

 |
| Username | ログインに使用するユーザー名です。Authentication MethodがBasicの場合にのみ有効です。 |
| Password | ログインに使用するパスワードです。Authentication MethodがBasicの場合にのみ有効です。 |
| Token | Databricksのpersonal access tokenです。Authentication MethodがPersonal Access Tokenの場合にのみ有効です。 |
| Client ID | サービスプリンシパルのUUIDまたはApplication IDです。認証方法がOAuth M2Mの場合にのみ利用可能です。 |
| Client Secret | サービスプリンシパルのOAuthシークレットです。認証方法がOAuth M2Mの場合にのみ利用可能です。 |


1. **Continue**を選択します。
2. 認証の名前を入力し、**Done**を選択します。


### パラメータを指定して接続を設定する

データ接続を設定するクエリを作成または再利用します。

[Treasure コンソール](https://console.treasuredata.com/users/sign_in)に移動します。[Query Editor](https://console.treasuredata.com/app/queries/editor)に移動します。データのエクスポートに使用する予定のクエリにアクセスします。

場合によっては、クエリで列マッピングを定義する必要があります。

例:


```
SELECT c_id, c_double, c_long, c_string, c_boolean, c_timestamp, c_json FROM (VALUES (1, 100, 10, 'T4', true, '2018-01-01','{ "name":"John"}'),(2, 100, 99, 'P@#4', false, '2018-01-01', '{ "name":"John"}'),(3, 100.1234, 22, 'C!%^&*', false, '2018-01-01','{ "name":"John"}')) tbl1 (c_id, c_double, c_long, c_string, c_boolean, c_timestamp, c_json)
```

クエリエディタの上部にあるOutput Resultsを選択します。

### パラメータを指定して接続を設定する

1. 検索ボックスに接続名を入力してフィルタリングし、接続を選択します。
2. Databricks接続を選択すると、ConfigurationまたはExport Resultsダイアログペインが表示されます。


![](/assets/databricks-export-integration-2024-02-21-2.258c59c45384d358126b1d3a14c47dac59e22c56e54dcc11d96aa78067829cc4.a33e2d6c.png)

パラメータを指定します。パラメータは以下の通りです:

- Catalog (必須): データセットカタログです。
- Schema (必須): データセットスキーマです。
- Table (必須): 結果がエクスポートされるテーブルです。存在しない場合は、新しいテーブルが作成されます。
- Mode (必須): Databricksテーブルに結果を反映する3つのモードがあります: Append、Overwrite、Replace。
  - Append: TD結果がターゲットテーブルに追加されます
  - Overwrite: ターゲットテーブルが消去され、TD結果がターゲットテーブルの先頭から追加されます
  - Replace: ターゲットテーブルが再作成され、TD結果がターゲットテーブルの先頭から追加されます
- Data type mapping: 次のセクションで説明します。


### データ型マッピング

ターゲットテーブルが存在しない場合の、TD結果の型からターゲットテーブルへの1対1のデフォルトマッピングのテーブルは次の通りです:

| TD results | Databricks |
|  --- | --- |
| string | STRING |
| double | DOUBLE |
| long | BIGINT |
| timestamp | TIMESTAMP |
| boolean | BOOLEAN |
| json | STRING |


デフォルトとは異なる型を設定したい場合があります。Data Type Mappingを使用すると、特定の列に特定の型(例: STRING)を明示的に設定できます。Data Type Mappingは、ターゲットテーブルの列にのみ型を適用します。

Data Mappingを使用する場合、以下が当てはまります:

- ターゲットテーブルが存在しない場合、エクスポートジョブは新しいターゲットテーブルを作成します。


データ型マッピングパラメータの構文は、col_name_1: STRING; col_name2: BIGINTです。列名とDatabricksデータ型を指定する必要があります。

TD Databricks ExportはBINARY、INTERVAL、STRUCTURE、ARRAY、MAPデータ型をサポートしていません。

例えば、クエリの場合:


```
SELECT c_id, c_double, c_long, c_string, c_boolean, c_timestamp, c_json FROM (VALUES (1, 100, 10, 'T4', true, '2018-01-01','{ "name":"John"}'),(2, 100, 99, 'P@#4', false, '2018-01-01', '{ "name":"John"}'),(3, 100.1234, 22, 'C!%^&*', false, '2018-01-01','{ "name":"John"}')) tbl1 (c_id, c_double, c_long, c_string, c_boolean, c_timestamp, c_json)
オプション: 出力のためのスケジュールジョブの使用
```

[Scheduled Jobs](/products/customer-data-platform/job-management/scheduling-jobs-using-td-console)とResult Outputを使用して、特定のターゲット先に出力結果を定期的に書き込むことができます。

## Audience Studio で Segment をアクティベートする

Audience Studio で activation を作成することで、segment データをターゲットプラットフォームに送信することもできます。

1. **Audience Studio** に移動します。
2. parent segment を選択します。
3. ターゲット segment を開き、右クリックして、**Create Activation** を選択します。
4. **Details** パネルで、Activation 名を入力し、前述の Configuration Parameters のセクションに従って activation を設定します。
5. **Output Mapping** パネルで activation 出力をカスタマイズします。


![](/assets/ouput.b2c7f1d909c4f98ed10f5300df858a4b19f71a3b0834df952f5fb24018a5ea78.8ebdf569.png)

- Attribute Columns
  - **Export All Columns** を選択すると、変更を加えずにすべての列をエクスポートできます。
  - **+ Add Columns** を選択して、エクスポート用の特定の列を追加します。Output Column Name には、Source 列名と同じ名前があらかじめ入力されます。Output Column Name を更新できます。**+ Add Columns** を選択し続けて、activation 出力用の新しい列を追加します。
- String Builder
  - **+ Add string** を選択して、エクスポート用の文字列を作成します。次の値から選択します:
    - String: 任意の値を選択します。テキストを使用してカスタム値を作成します。
    - Timestamp: エクスポートの日時。
    - Segment Id: segment ID 番号。
    - Segment Name: segment 名。
    - Audience Id: parent segment 番号。


1. **Schedule** を設定します。


![](/assets/snippet-output-connector-on-audience-studio-2024-08-28.a99525173709da1eb537f839019fa7876ffae95045154c8f2941b030022f792c.8ebdf569.png)

- スケジュールを定義する値を選択し、オプションでメール通知を含めます。


1. **Create** を選択します。


batch journey の activation を作成する必要がある場合は、[Creating a Batch Journey Activation](/products/customer-data-platform/journey-orchestration/batch/creating-a-batch-journey-activation) を参照してください。

## オプション: Workflowでのエクスポート結果の設定

Treasure ワークフロー内で、このデータコネクタを使用してデータを出力するように指定できます。


```yaml
timezone: UTC
  _export:
    td:
      database: sample_datasets

+td-result-into-databricks:
  td>: queries/sample.sql
  result_connection: your_connection_name
  result_settings:
    catalog: CATALOG
    schema: default
    table: TARGET_TABLE
    mode: insert
    column_options:
      col1: {type: 'DATE'}
```

## CLIを使用した接続の作成

### 'td'コマンドのインストール

[TD Toolbelt](https://toolbelt.treasuredata.com/)をインストールします。

### オンデマンドジョブの場合

`td query`コマンドの`-r` / `--result`オプションを使用してDatabricks結果出力先を追加します:


```bash
td query -d mydb \
-w 'SELECT id, name FROM source_table' \
--type presto \
-r '{"type": "databricks", "host_name": "hostname", "http_path": "httpPath", "auth_method": "BASIC", "username": "username", "password": "password", catalog: "catalog", "schema": "default", "table": "target_table", "mode": "replace", "column_options": {"col1": {"type": "DATE"}}}'
```

catalogやschemaなどの一部のパラメータは自明であり、Treasure コンソールで使用されるパラメータと同じです(「パラメータを指定して接続を設定する」セクションを参照)。ただし、一部のパラメータはキーまたは値が異なります:

- mode (必須): modeの値はModeパラメータの生の値です:
  - insert: TD結果がターゲットテーブルに追加されます
  - truncate_insert: ターゲットテーブルが消去され、TD結果がターゲットテーブルの先頭から追加されます
  - replace: ターゲットテーブルが再作成され、TD結果がターゲットテーブルの先頭から追加されます
- column_options: データ型マッピングです。


### スケジュールジョブの場合

`td sched:create`コマンドの`-r` / `--result`オプションを使用してDatabricks結果出力先を追加します:


```bash
td sched:create every_6_mins "*/6 * * * *" \
-d mydb \
-w 'SELECT id, name FROM source_table' \
--type presto \
-r '{"type": "databricks", "host_name": "hostname", "http_path": "httpPath", "auth_method": "BASIC", "username": "username", "password": "password", catalog: "catalog", "schema": "default", "table": "target_table", "mode": "replace", "column_options": {"col1": {"type": "DATE"}}}'
```