# Microsoft Azure Blob Storage Import Integration

[Microsoft Azure Blob Storage Export Integrationの詳細はこちら](/ja/int/microsoft-azure-blob-storage-export-integration)をご覧ください。

Microsoft Azure Blob Storage用のオープンデータコネクタは、Azure Blob Storageコンテナに保存されている*.tsvおよび*.csvファイルの内容をインポートできます。

# 制限事項

**コネクタUIの制限事項**。コネクタUIでの編集には多くの制限があります。編集にはCLIの使用を推奨します。

階層型名前空間が有効になっている場合、増分フローは正常に動作しません。

## 前提条件

- Treasure Dataの基本知識
- Microsoft Azure Platformアカウント


## 接続の設定

Microsoft Azure Blob Storage用のDataConnectorは、[Connector UI](https://console.treasuredata.com/app/connections)から送信できます。

![](/assets/image-20191015-154021.a5cc6ed2d6c8814d389e469db0eee27e0144a91e90a2a1bb2f1573c020746a54.743883bd.png)

## 新しいMicrosoft Azure Blob Storageコネクタの作成

まず、以下のパラメータを設定してコネクタを登録する必要があります。

- **Storage Account name**:Microsoft Azure Blob Storageアカウントの名前。
- **Primary access key:** Microsoft Azure Blob Storageアカウントへのアクセスに使用するアクセスキー。


![](/assets/image-20191015-154039.ffdcfb7e9cd7929c00d3c2a69133a08267aff7678c0aa1977b9cacd943b16850.743883bd.png)

プロキシ設定が有効な場合

![](/assets/image2021-9-20_13-54-47.a9d4f91ae596b2cc09993d4d6af92ac72d25a04bbb1af94e1f623422c181929a.743883bd.png)

## Microsoft Azure Storageからデータを転送する

次に、My Connectionsページで「New Transfer」を作成します。アドホックDataConnectorジョブまたはスケジュールDataConnectorジョブを準備できます。以下の手順を実行してください。

![](/assets/image-20191015-154058.379b76779f527bd1c574756b4a413be14a62c4ed61182febca7b2ff6f9ad01f4.743883bd.png)

### Fetch from

取り込みたい情報を登録します。

- **Container**: Azureクラウドストレージのコンテナ名（例: *your_cont*）
- **Path Prefix**: ターゲットキーのプレフィックス。（例: *logs/data_*）
- **Path Regex**: ファイルパスにマッチする正規表現。ファイルパスがこのパターンにマッチしない場合、そのファイルはスキップされます。（例: *.csv$* # この場合、パスがこのパターンにマッチしない場合、ファイルはスキップされます）


##### 例: CloudFront

Amazon CloudFrontは、静的および動的なWebコンテンツの配信を高速化するWebサービスです。CloudFrontを設定して、CloudFrontが受信するすべてのユーザーリクエストに関する詳細情報を含むログファイルを作成できます。ロギングを有効にすると、次のようなCloudFrontログファイルを保存できます。


```
[your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-15.a103fd5a.gz]
[your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-15.b2aede4a.gz]
[your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-16.594fa8e6.gz]
[your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-16.d12f42f9.gz]
```

この場合、「Fetch from」の設定は以下のようになります。

- **Container**: your_container
- **Path Prefix**: logging/
- **Path Regex**: *.gz$*（必須ではありません）


![](/assets/image-20191015-154114.8752d03745b3b93f6ef2fe555ee753273ac81b6cfccaaca9db12362215dd7591.743883bd.png)

### Preview

設定したデータのプレビューを表示できます。プレビューが表示されない場合、またはプレビューの表示に問題がある場合は、[サポート](mailto:support@treasuredata.com)にお問い合わせください。

![](/assets/image-20191209-211644.78d7eda5add6ed363b9050c68fcb1b7e6fcf1a3e0ed6f3f666e792ad54a83013.743883bd.png)

プレビューコマンドは、指定されたバケットから1つのファイルをダウンロードし、そのファイルから結果を表示します。これにより、プレビューとissueコマンドの結果に違いが生じる可能性があります。

特定のカラム名を設定したい場合は、**Advanced Settings**を選択してください。

#### Advanced Settings

Advanced Settingsでは、推測されたプロパティを編集できます。必要に応じて以下のセクションを編集してください。

- **Default timezone**: 値自体にタイムゾーンが含まれていない場合、タイムスタンプカラムのタイムゾーンを変更します。
- **Columns**:
  - **Name**: カラム名を変更します。カラム名に使用できる文字は、小文字のアルファベット、数字、「_」（アンダースコア）のみです。
  - **Type**: 値を指定されたタイプとして解析し、そのタイプをTreasure Dataスキーマの一部として保存します。
    - **boolean**
    - **long**
    - **timestamp**: Treasure DataではString型としてインポートされます（例: 2017-04-01 00:00:00.000）
    - **double**
    - **string**
    - **json**
- **Total file count limit**: 読み込むファイルの最大数。（オプション）


### Transfer to

このフェーズでは、インポート先のターゲットdatabaseとtableを選択します。`Create new database`または`Create new table`のチェックボックスを使用して、新しいdatabaseまたはtableを作成できます。

- **Mode**: Append – 既存のtableにレコードを追加できます。
- **Mode**: Replace – tableの既存データを、インポートされるデータで置き換えます。
- **Partition key Seed**: パーティショニング時間カラムとして使用したいlongまたはtimestampカラムを選択します。時間カラムを指定しない場合、転送のアップロード時間がadd_timeフィルタの追加と併せて使用されます。


![](/assets/image-20191015-154201.3b19c127a567d44468ddb9d0ec5b68c35be196f47ea4a1c4c330d9e7eacb0f54.743883bd.png)

### When

このフェーズでは、ジョブのアドホックまたはスケジュール設定を行うことができます。

- When
  - **Once now**: 転送を1回だけ実行します。
  - **Repeat…**
    - **Schedule**: 次の3つのオプションを受け付けます: `@hourly`、`@daily`、`@monthly`、およびカスタム`cron`。
    - **Delay Transfer**: 実行時間に遅延を追加します。
  - **Data Storage Timezone**: データが保存されるタイムゾーン。データはこのタイムゾーンでも表示されます。「Asia/Tokyo」などの拡張タイムゾーン形式をサポートしています。


![](/assets/image-20191015-154222.2e3ccc0223d646f83485d513f7eb860b0e0d9c7338cb1df4fdd8cf50f85fb185.743883bd.png)

頻度を選択した後、**Start Transfer**を選択して転送を開始します。エラーがなければ、Treasure Dataへの転送が完了し、データが利用可能になります。転送が実行されると、ジョブが起動されます。JobsセクションまたはMy Input Transfersセクションを使用して、データ転送の進行状況を監視できます。

# データインポートのトラブルシューティング

ジョブログを確認してください。警告とエラーは、インポートの成功に関する情報を提供します。たとえば、[インポートエラーに関連するソースファイル名を特定する](https://docs.treasuredata.com/smart/project-product-documentation/data-import-error-troubleshooting)ことができます。

# CLIを使用したコネクタの設定

コマンドラインインターフェイスからMicrosoft Azure Blob Storageデータコネクタを使用することもできます。以下の手順は、CLIを使用してデータをインポートする方法を示しています。

## 'td'コマンド v0.11.9以降をインストールする

最新の[Treasure Data Toolbelt](https://toolbelt.treasuredata.com/)をインストールしてください。


```
$ td --version
0.11.10
```

## シード設定ファイル (seed.yml) の作成

まず、以下の例のように、アカウント情報を含む *seed.yml* を準備します（[Azure ストレージアカウントについて](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create)を確認してください）。また、コンテナ名とターゲットファイル名（または複数ファイルのプレフィックス）も指定する必要があります。


```
in:
  type: azure_blob_storage
  account_name: myaccount
  account_key: myaccount_key
  container: my-container
  path_prefix: logs/csv-
out:
  mode: append
```

Data Connector for Microsoft Azure Blob Storage は、指定されたプレフィックスに一致するすべてのファイルをインポートします。（例: path_prefix: `path/to/sample_` –> `path/to/sample_201501.csv.gz`, `path/to/sample_201502.csv.gz`, …, `path/to/sample_201505.csv.gz`）

利用可能な *out* モードの詳細については、以下の付録を参照してください。

## 4.3. フィールドの推測 (load.yml の生成)

次に、*connector:guess* を使用します。このコマンドは、ソースファイルを自動的に読み取り、ファイル形式を評価（ロジックを使用して推測）します。


```
$ td connector:guess seed.yml -o load.yml
```

*load.yml* を開くと、ファイル形式、エンコーディング、カラム名、型を含む推測されたファイル形式定義が表示されます。


```yaml
in:
  type: azure_blob_storage
  account_name: myaccount
  account_key: myaccount_key
  container: my-container
  path_prefix: logs/csv-
  decoders:
  - {type: gzip}
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    header_line: true
    columns:
    - {name: id, type: long}
    - {name: account, type: long}
    - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'}
    - {name: purchase, type: timestamp, format: '%Y%m%d'}
    - {name: comment, type: string}
out:
  mode: append
```

次に、*preview* コマンドを使用して、システムがファイルをどのように解析するかをプレビューできます。


```
$ td connector:preview load.yml
+-------+---------+----------+---------------------+
| id    | company | customer | created_at          |
+-------+---------+----------+---------------------+
| 11200 | AA Inc. |    David | 2015-03-31 06:12:37 |
| 20313 | BB Imc. |      Tom | 2015-04-01 01:00:07 |
| 32132 | CC Inc. | Fernando | 2015-04-01 10:33:41 |
| 40133 | DD Inc. |    Cesar | 2015-04-02 05:12:32 |
| 93133 | EE Inc. |     Jake | 2015-04-02 14:11:13 |
+-------+---------+----------+---------------------+
```

|  |
|  --- |
| guess コマンドは、ソースデータからサンプル行を使用してカラム定義を推測するため、ソースデータファイルに3行以上と2カラム以上が必要です。 |


システムがカラム名またはカラム型を予期せず検出した場合は、*load.yml* を直接修正して、再度プレビューしてください。

現在、Data Connector は "boolean"、"long"、"double"、"string"、および "timestamp" 型の解析をサポートしています。

データロードジョブを実行する前に、ローカルデータベースとテーブルを作成する必要があります。以下の手順に従ってください。


```
$ td database:create td_sample_db
$ td table:create td_sample_db td_sample_table
```

## 4.4. ロードジョブの実行

最後に、ロードジョブを送信します。データのサイズによっては、数時間かかる場合があります。データが格納される Treasure Data データベースとテーブルを指定してください。

Treasure Data のストレージは時間によってパーティション化されているため（[データパーティショニング](https://docs.treasuredata.com/smart/project-product-documentation/data-partitioning-in-treasure-data)を参照）、*--time-column* オプションを指定することをお勧めします。オプションが指定されていない場合、Data Connector は最初の *long* または *timestamp* カラムをパーティショニング時間として選択します。*--time-column* で指定されるカラムの型は、*long* および *timestamp* 型のいずれかである必要があります。

データに時間カラムがない場合は、*add_time* フィルターオプションを使用して時間カラムを追加できます。詳細については、[add_time フィルタープラグイン](https://docs.treasuredata.com/smart/project-product-documentation/add_time-filter-function)を参照してください。


```
$ td connector:issue load.yml --database td_sample_db --table td_sample_table \
  --time-column created_at
```

connector:issue コマンドは、*database(td_sample_db)* と *table(td_sample_table)* が既に作成されていることを前提としています。データベースまたはテーブルが TD に存在しない場合、connector:issue コマンドは失敗するため、[手動で](https://docs.treasuredata.com/smart/project-product-documentation/data-management)データベースとテーブルを作成するか、*td connector:issue* コマンドで *--auto-create-table* オプションを使用してデータベースとテーブルを自動作成してください。


```
$ td connector:issue load.yml --database td_sample_db --table td_sample_table --time-column created_at --auto-create-table
```

|  |
|  --- |
| 現在、Data Connector はサーバー側でレコードをソートしません。時間ベースのパーティショニングを効果的に使用するには、事前にファイル内のレコードをソートしてください。 |


*time* というフィールドがある場合は、*--time-column* オプションを指定する必要はありません。


```
$ td connector:issue load.yml --database td_sample_db --table td_sample_table
```

# スケジュール実行

増分的な Microsoft Azure Blob Storage ファイルインポートのために、定期的な Data Connector の実行をスケジュールできます。高可用性を確保するために、スケジューラーを慎重に設定しています。この機能を使用することで、ローカルデータセンターに *cron* デーモンが不要になります。

スケジュールされたインポートでは、Data Connector for Microsoft Azure Blob Storage は、指定されたプレフィックスに一致するすべてのファイル（例: path_prefix: `path/to/sample_` –> `path/to/sample_201501.csv.gz`, `path/to/sample_201502.csv.gz`, …, `path/to/sample_201505.csv.gz`）を最初にインポートし、次の実行のために最後のパス（`path/to/sample_201505.csv.gz`）を記憶します。

2回目以降の実行では、コネクターはアルファベット順（辞書順）で最後のパスの後に来るファイルのみをインポートします（`path/to/sample_201506.csv.gz`, …）。

## スケジュールの作成

新しいスケジュールは、*td connector:create* コマンドを使用して作成できます。以下が必要です: スケジュールの名前、cron スタイルのスケジュール、データが格納されるデータベースとテーブル、および Data Connector 設定ファイル。


```
$ td connector:create \
    daily_import \
    "10 0 * * *" \
    td_sample_db \
    td_sample_table \
    load.yml
```

Treasure Data のストレージは時間によってパーティション化されているため（[データパーティショニング](https://docs.treasuredata.com/smart/project-product-documentation/data-partitioning-in-treasure-data)を参照）、*--time-column* オプションを指定することをお勧めします。


```
$ td connector:create \    daily_import \
    "10 0 * * *" \
    td_sample_db \
    td_sample_table \
    load.yml \
    --time-column created_at
```

|  |
|  --- |
| `cron`パラメータは、`@hourly`、`@daily`、`@monthly`の3つの特別なオプションも受け付けます。 |


| --- |

## スケジュールの一覧表示

*td connector:list*コマンドを実行することで、現在スケジュールされているエントリの一覧を確認できます。


```
$ td connector:list
+--------------+------------+----------+-------+--------------+-----------------+-------------------------------------------+
| Name         | Cron       | Timezone | Delay | Database     | Table           | Config                                    |
+--------------+------------+----------+-------+--------------+-----------------+-------------------------------------------+
| daily_import | 10 0 * * * | UTC      | 0     | td_sample_db | td_sample_table | {"in"=>{"type"=>"azure_blob_storage", ... |
+--------------+------------+----------+-------+--------------+-----------------+-------------------------------------------+
```

## 設定とスケジュール履歴の表示

*td connector:show*は、スケジュールエントリの実行設定を表示します。


```
% td connector:show daily_import
Name     : daily_import
Cron     : 10 0 * * *
Timezone : UTC
Delay    : 0
Database : td_sample_db
Table    : td_sample_table
```

*td connector:history*は、スケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、*td job jobid*を使用します。


```
% td connector:history daily_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 set
```

## スケジュールの削除

*td connector:delete*は、スケジュールを削除します。


```
$ td connector:delete daily_import
```

# 付録

## A) outプラグインのモード

seed.ymlの*out*セクションでファイルインポートモードを指定できます。

### append（デフォルト）

これはデフォルトのモードで、レコードはターゲットテーブルに追加されます。


```
in:
  ...
out:
  mode: append
```

### replace（td 0.11.10以降）

このモードは、ターゲットテーブルのデータを置き換えます。このモードでは、ターゲットテーブルに対して手動で行ったスキーマ変更はそのまま保持されることに注意してください。


```
in:
  ...
out:
  mode: replace
```

## B) プロキシ設定


```
in:
  type: azure_blob_storage
  account_name: myaccount
  account_key: myaccount_key
  container: my-container
  path_prefix: logs/csv-
  proxy:
	type: http
	host: 201.202.203.10
	port: 8080
	user: test
	password: test
```

## B) 最終パスによる増分ロード


```
in:      type: azure_blob_storage  account_name: myaccount  account_key: myaccount_key  container: my-container  path_prefix: logs/csv-  incremental: true  use_modified_time: false  last_path: logs/csv-123.csv
```

## C) 最終更新時刻による増分ロード


```
in:      type: azure_blob_storage  account_name: myaccount  account_key: myaccount_key  container: my-container  path_prefix: logs/csv-  incremental: true  use_modified_time: true  last_modified_time: 2025-04-09T00:00:00.000Z
```