# Google Cloud Storage Export V2 Integration

ジョブの結果をGoogle Cloud Storageに直接書き込むことができます。

## 前提条件

- [TD Toolbelt](https://toolbelt.treasuredata.com/)を含む、Treasure Dataの基本的な知識。
- 特定の権限を持つGoogle Cloud Platformアカウント


## Treasure Data Integration の静的 IP アドレス

セキュリティポリシーで IP ホワイトリストが必要な場合は、接続を成功させるために Treasure Data の IP アドレスを許可リストに追加する必要があります。

リージョンごとに整理された静的 IP アドレスの完全なリストは、次のリンクにあります:
[IP Addresses for Integrations](/apis/endpoints/ip-addresses-integrations-result-workers)

### Google Cloud Storageで出力先バケットを取得する

Cloud Storageバケットの一覧を表示します。バケットは名前のアルファベット順に表示されます。

プロジェクト内のバケットを一覧表示するには：

1. Google Cloud ConsoleでCloud Storageブラウザを開きます。
2. 左メニューでCloud Storageを選択し、Bucketsを選択します。


![](/assets/gcs_v2_8.f2477a540ce86f84fcce77b22f568b25265e7e0da618489bb31770b24972d066.74434350.png)

現在選択されているプロジェクトに属するバケットがブラウザリストに表示されます。

### 必要に応じてGoogle Cloud Storageに出力先バケットを作成する

新しいストレージバケットを作成するには：

1. Google Cloud ConsoleでCloud Storageブラウザを開きます。
2. **Create bucket**を選択してバケット作成フォームを開きます。


![](/assets/gcs_v2_9.41b626a3319ad2aca0022f40b6996bff18f0a4a35a53385b9c8ac309b95e9c90.74434350.png)

1. バケット情報を入力し、各ステップで**Continue**を選択して完了します：
  - バケット名の要件に従って**Name**を指定します。
  - バケットデータが永続的に保存される**Location type**と**Location**を選択します。
  - バケットの**Default storage class**を選択します。デフォルトストレージクラスは、バケットにアップロードされるすべてのオブジェクトにデフォルトで割り当てられます。
  - バケットのオブジェクトへのアクセスを制御する方法を決定する**Access control**モデルを選択します。Workload Identity Federationをサポートするには、**Uniform**を選択してください。
![](/assets/gcs_v2_1.b8400fdb899deb619c7911366518f74298a44f437ca5091d7fba887012e6c2a6.74434350.png)
  - オプションで、Data protectionとData encryptionを設定できます。
2. **Create**を選択します。


### Google JSON認証情報を取得する

Google Cloud Storageとの連携は、サーバー間API認証に基づいています。

JSON認証情報の生成に使用するサービスアカウントには、Storage Object Userの権限が必要です。

1. Google Developer Consoleにアクセスします。
2. 左メニューのAPIs & ServicesからCredentialsを選択します。
![](/assets/gcs_v2_2.d96a9f7dec347056740ae90fc6866fbc6c78f9d9b5d1a999dc0a3663452e4f1f.74434350.png)
3. Create credentialsを選択し、Service accountを選択します：
![](/assets/gcs_v2_3.6a564dc9b561061e0b5fa0f783c196f3585cd3309c397bd56f2e713dce828210.74434350.png)
4. PermissionsからStorage Object User Roleを追加します。


### Application Default Credentials (ADC) キーファイルを取得する

1. IAM & Admin / Workload Identity Poolsで「create pool」を選択するか、既存のPoolを選択します。
![](/assets/gcs_v2_5.b29c6dbd8144a5c1208953a7129b820e778c43284075c479a9ebd04dc834d2a8.74434350.png)
![](/assets/gcs_v2_4.8c6962bc70473778e721ddf4e7e6ae5c7c2e9cb26bc8510be8f55a328670d354.74434350.png)
2. アカウントID **523683666290** でAWSプロバイダーを追加します。
![](/assets/gcs_v2_6.3e3283ca2462b5e616ca1ffa6d5b2cc5a76b0b6327e096428c01db5d5cb40652.74434350.png)
3. Configure provider attributesからAdd mappingをクリックします。属性名を**attribute.account**、値を**assertion.account**として追加し、Saveをクリックします。
4. Workload Identity Poolsから作成したPoolを選択し、Connected service accountsからDownload configを選択します。
![](/assets/gcs_v2_7.9399e7b93f7f9b6239278e8f87af939fc11f0fd1c06199569a5394340e6090c3.74434350.png)
5. アカウントID **523683666290** 用に作成したAWSプロバイダーを選択し、Downloadをクリックして設定ファイル（Application default credential キーファイル）を保存します。


### AWSプロバイダーに出力先バケットへのアクセス権限を付与する

1. バケットリストから出力先バケットを選択し、permissionsタブをクリックします。
2. Grant accessをクリックし、Principals値として**principalSet://iam.googleapis.com/projects/{PROJECT_NUMBER}/locations/global/workloadIdentityPools/{POOL_ID}/attribute.account/523683666290**を追加し、ロールとしてStorage Object Userを付与します。
![](/assets/gcs_v2_10.2c69560a43e6aa632bf83ee8b04441e42c3fbd8926f1c820cfc9c0f44116736a.74434350.png)
![](/assets/gcs_v2_11.61fd4999a78444d32248ae89c67881555f3005de4825f1cb24b01b129f8b35c1.74434350.png)


## Treasure コンソールを使用して接続を作成する

### 新しい認証を作成する

Treasure Dataでは、クエリを実行する前にデータ接続を作成および設定する必要があります。データ接続の一部として、連携先にアクセスするための認証情報を提供します。

1. **Treasure コンソール**を開きます。
2. **Integrations Hub** > **Catalog**に移動します。
3. Google Cloud Storage V2を検索して選択します。
![](/assets/gcs_v2_12.4c53928180751cb2fe12c8abe6bbd276c87d3670b1bb12c494840f482ad9caa7.74434350.png)
4. **Create Authentication**を選択します。
5. Authentication Methodを選択し、認証情報を入力します。
![](/assets/gcs_v2_13.cb9ab21dd436bcf45f8846088a5ffa3e8ef4b4c42592817d868907667d46bf4c.74434350.png)
6. 接続の名前を入力します。
7. **Continue**を選択します。


## クエリを定義する

1. [Creating a Destination Integration](/products/customer-data-platform/integration-hub/batch/export/creating-a-destination-integration)の手順を完了します。
2. **Data Workbench > Queries**に移動します。
3. データをエクスポートするクエリを選択します。
4. クエリを実行して結果セットを検証します。
5. **Export Results**を選択します。
6. 既存の連携認証を選択します。
![](/assets/gcs_v2_15.1c74570eefcf79f633e3ab3bec247ede3394d9cc9a5255a108c797b55dfeed2e.74434350.png)
7. 追加のExport Resultsの詳細を定義します。エクスポート連携の内容で、連携パラメータを確認します。たとえば、Export Results画面が異なる場合や、追加の詳細を入力する必要がない場合があります。
![](/assets/gcs_v2_14.f25fe76be733bc2aa2870a3048be84583db32cea8b9bce3d3aebcea9236d313e.74434350.png)
8. **Done**を選択します。
9. クエリを実行します。
10. 指定した出力先にデータが移動したことを確認します。


### Google Cloud Storageの連携パラメータ

| パラメータ | 必須 | 説明 |
|  --- | --- | --- |
| Bucket | はい | Google Cloud Storageのバケット名 |
| File Path | はい | ファイル名を含むオブジェクトパス。例：`path/to/filename.csv` |
| Content type | いいえ | 出力ファイルのMIMEタイプ。デフォルト値：application/octet-stream |
| Format | いいえ | 出力ファイルのフォーマット。デフォルト値：csv |
| Encoders | いいえ | エクスポートされたファイルに適用される圧縮。デフォルト値：none |
| Public Key | はい（EncodersがPGP Encryptionの場合） | 暗号化に使用する公開鍵。 |
| Key Identifier | いいえ（EncodersがPGP Encryptionの場合のみ適用） | 暗号化に使用する公開鍵のKey IDまたはFingerprint（16進数文字列） |
| Armor | いいえ（EncodersがPGP Encryptionの場合のみ適用） | ASCIIアーマーを使用するかどうか（暗号化に使用する公開鍵の16進数文字列） |
| Compression Type | いいえ（EncodersがPGP Encryptionの場合のみ適用） | ファイルの圧縮に使用する圧縮アルゴリズムを指定します。デフォルト値：none |
| Header line? | いいえ | 最初の行にカラム名を含むヘッダー行を書き込みます。デフォルト値：true |
| Delimiter | いいえ | カラムの区切り文字。デフォルト値：Default |
| Null string | いいえ | NULL値の代替文字列。デフォルト値：Default |
| End-of-line character | いいえ | 行終端文字。デフォルト値：CRLF |


### クエリの例


```sql
SELECT 
  col_1
FROM 
  tbl 
WHERE col_1 != 'email'
```

### エクスポート結果の検証

クエリが正常に完了すると、結果は指定したGoogle Cloud Storageの出力先に自動的にインポートされます：

![](/assets/gcs_v2_16.20e88d749df90fa6376351d0cdbe4e628d255ab5d27d0a0d06ed8b0c7c529b71.74434350.png)

## 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) を参照してください。

## Google Cloud Storage V2 CLIからのデータエクスポート

以下のコマンドを使用して、クエリ結果をGoogle Cloud Storageに送信するスケジュールクエリを設定できます。

**認証モードJSONKeyの場合**

- 以下のサンプル構文でJSON keyを指定します。
- バックスラッシュを使用して、コード構文を壊さずに改行できます。



```json
'{"type":"gcs_v2","bucket":"samplebucket","file_path":"output/test.csv","format":"csv","compression":"none","header_line":false,"delimiter":",","null_string":"","newline":"CRLF","auth_method":"json_key","json_keyfile":"{\"private_key_id\": \"ABCDEFGHIJ\", \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nABCDEFGHIJ\\ABCDEFGHIJ\\n-----END PRIVATE KEY-----\\n\", \"client_email\": \"ABCDEFGHIJ@developer.gserviceaccount.com\", \"client_id\": \"ABCDEFGHIJ.apps.googleusercontent.com\", \"type\": \"service_account\"}"}'
```

**認証モードWorkload Identity Federationの場合**

- 以下のサンプル構文でADC keyを指定します。
- バックスラッシュを使用して、コード構文を壊さずに改行できます。



```json
'{"type":"gcs_v2","bucket":"samplebucket","file_path":"output/test.csv","format":"csv","compression":"none","header_line":false,"delimiter":",","null_string":"","newline":"CRLF","auth_method":"wif","adc_keyfile":"{\"universe_domain\": \"googleapis.com\"......}"}'
```

例：


```bash
$ td sched:create scheduled_gcs_v2 "10 6 * * *" \
-d dataconnector_db "SELECT id,account,purchase,comment,time FROM data_connectors" \
-r '{"type":"gcs_v2","bucket":"samplebucket","file_path":"output/test.csv","format":"csv","compression":"none","header_line":false,"delimiter":",","null_string":"","newline":"CRLF","auth_method":"json_key","json_keyfile":"{\"private_key_id\": \"ABCDEFGHIJ\", \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nABCDEFGHIJ\\ABCDEFGHIJ\\n-----END PRIVATE KEY-----\\n\", \"client_email\": \"ABCDEFGHIJ@developer.gserviceaccount.com\", \"client_id\": \"ABCDEFGHIJ.apps.googleusercontent.com\", \"type\": \"service_account\"}"}'
```

**パラメータ**

| パラメータ | データ型 | 必須 | デフォルト値 | 説明 |
|  --- | --- | --- | --- | --- |
| bucket | string | はい | N/A | Google Cloud Storageのバケット名 |
| file_path | string | はい | N/A | ファイル名を含むオブジェクトパス。例：`path/to/filename.csv` |
| content_type | string | いいえ | application/octet-stream | 出力ファイルのMIMEタイプ。 |
| format | string | いいえ | csv | 出力ファイルのフォーマット。サポートされる値：csv/tsv |
| compression | string | いいえ | none | エクスポートされたファイルに適用される圧縮。サポートされる値：'none', 'gz', 'bzip2', 'encrypt_pgp' |
| public_key | string | はい（compressionがencrypt_pgpの場合） | N/A | 暗号化に使用する公開鍵。 |
| key_identifier | string | いいえ（compressionがencrypt_pgpの場合のみ適用） | N/A | 暗号化に使用する公開鍵のKey IDまたはFingerprint（16進数文字列） |
| armor | string | いいえ（compressionがencrypt_pgpの場合のみ適用） | N/A | ASCIIアーマーを使用するかどうか（暗号化に使用する公開鍵の16進数文字列） |
| compression_type | string | いいえ（compressionがencrypt_pgpの場合のみ適用） | N/A | ファイルの圧縮に使用する圧縮アルゴリズムを指定します。サポートされる値：'none', 'gzip', 'bzip2', 'bzip2_built_in', 'zip_built_in', 'zlib_built_in' |
| header_line | boolean | いいえ | true | 最初の行にカラム名を含むヘッダー行を書き込みます。サポートされる値：true/false |
| delimiter | string | いいえ | default | カラムの区切り文字。サポートされる値：'default', ',', '\t', '|' |
| null_string | string | いいえ | default | NULL値の代替文字列（string、オプション）。サポートされる値：'default', '', '\N', 'NULL', 'null' |
| newline | string | いいえ | CRLF | 行終端文字（string、オプション）。サポートされる値：'CRLF', 'LF', 'CR' |


## その他の設定

- Result Exportは、定期的にターゲットの出力先にデータをアップロードするように[スケジュール](/products/customer-data-platform/data-workbench/queries/scheduled/scheduling-a-query)できます。
- すべてのインポートおよびエクスポート連携は[Treasure ワークフロー](/products/customer-data-platform/data-workbench/workflows)に追加できます。**td** workflowオペレーターを使用して、クエリ結果を指定したコネクタにエクスポートできます。詳細については、[Workflow Operators](/products/customer-data-platform/data-workbench/workflows/operators)を参照してください。


## 参考資料

[Embulk-encoder-Encryptionドキュメント](/ja/int/embulk-encoder-encryption-pgp)

## GCS V2 Data ConnectorのFAQ

注意：ファイルを暗号化してアップロードする前に、必ず圧縮してください。

1. 非ビルトイン暗号化を使用して復号する場合、ファイルは.gzや.bz2などの圧縮形式に戻ります。
2. ビルトイン暗号化を使用して復号する場合、ファイルは生データに戻ります。