# Microsoft Azure Data Lake Storage Import Integration Microsoft Azure Data Lake Storageは、ビッグデータ向けの業界をリードするストレージソリューションです。このインポート統合により、Azure Data Lake StorageからParquetファイルをTreasure Dataに取り込み、Treasure Dataで設定された他のデータソースと統合することができます。 ## この統合で何ができるか? - **既存のすべてのデータファイルをコピー**: Azure Data LakeのすべてのParquetファイルをTreasure Dataにコピーして、システムから移行できます。 - **データを直接取り込む**: ブリッジシステムを使用することなく、Azure Data LakeからTreasure Dataへ直接データをインポートします。 ## 前提条件 - Treasure Dataの基本知識 - Microsoft Azure Data Lakeの基本知識 - Shared Access Signaturesの作成とファイルのダウンロードに十分な権限を持つMicrosoft Azure Data Lakeアカウント ## 制限事項 - Azure Data Lake Storage (v2) のみをサポート - Spark Partition ([https://spark.apache.org/docs/2.4.0/sql-data-sources-parquet.html#partition-discovery](https://spark.apache.org/docs/2.4.0/sql-data-sources-parquet.html#partition-discovery)) として1レベルのパーティションキーのみをサポート - snappy圧縮コーデックのみをサポート - ダウンロードとParquetファイルスキーマの読み取りに時間がかかるため、データプレビューは利用できません - HTTP Proxyメソッドのみをサポート - AzureのBlobStorageEventsまたはSoftDeleteはサポートされません - deltaファイル形式はサポートされません。(CSVやTVSなどの他の一般的なファイル形式については、Microsoft Azure Blob Storageを使用してください) Parquetファイルサイズに関する推奨事項 - Treasure Dataでは、Row Group Sizeを3.4GB未満に制限することを推奨しています。Row Group Sizeが3.4GBより大きい場合、インポートジョブで「Out of Memory」エラーが発生する可能性があります。 これが発生した場合は、データをより小さなParquetファイルサイズに再パーティション化してから、インポートジョブを再試行する必要があります。 ## Microsoft Azure PortalからAccess KeyまたはShared Access Signatureを取得する 1. Azure PortalでStorage Accountの管理画面に移動します ![](/assets/image2021-9-10_13-50-26.8681dfcfe52df8be55de9a9057745c441f0386bc3bbe7d44fd542a25e117a012.be2392e9.png) 2. Access keysまたはShared access signaturesを選択します 3. TD認証設定で使用するためにキーをコピーします ## TD Consoleを使用して接続を作成する ### 新しい接続を作成する Treasure Dataでは、クエリを実行する前にデータ接続を作成して設定する必要があります。データ接続の一部として、統合にアクセスするための認証情報を提供します。 1. TD Consoleを開きます。 2. Integrations Hub > Catalogに移動します。 3. Catalog画面の右端にある検索アイコンをクリックして、「Azure Lake」と入力します。 4. Microsoft Azure Data Lakeコネクタにカーソルを合わせて、Create Authenticationを選択します。 ![](/assets/msazurelake.aaed38ee4d153a8565b6ddef84296c06764d2bbc14f918d9dacf1a27da62c307.be2392e9.png) 5. 以下のいずれかの認証方法を選択します: Account Key認証方法 Shared Access Signatures認証方法 Proxy Setting (オプション) On Premises Setting (オプション) 1. Authentication Modeドロップダウンメニューから**Shared Access Signature**を選択します。 ![](https://docs.treasuredata.com/download/attachments/17407455/Screen%20Shot%202021-08-30%20at%2011.29.09.png?version=1&modificationDate=1630297628500&api=v2) 1. ストレージの**Account Name**を入力します。 2. Azure Portalからコピーした**Account Key**を入力します。 3. Authentication Modeドロップダウンメニューから**Shared Access Signature**を選択します。 ![](https://docs.treasuredata.com/download/attachments/17407455/Screen%20Shot%202021-08-30%20at%2011.29.09.png?version=1&modificationDate=1630297628500&api=v2) 1. ストレージの**Account Name**を入力します。 2. Azure Portalからコピーした**Account Key**を入力します。 3. HTTP Proxyを経由して実行する場合は、Proxy Typeを選択します。 ![](https://docs.treasuredata.com/download/attachments/17407455/image2021-9-1_16-15-46.png?version=1&modificationDate=1630487604199&api=v2)** 1. **Proxy Host**、**Proxy Port**、**Proxy Username**、**Proxy Password**を入力します。 2. Data Lakeがオンプレミスにある場合は、On Premises Settingを指定します。 ![](https://docs.treasuredata.com/download/attachments/17407455/image2021-9-1_16-13-19.png?version=1&modificationDate=1630487457048&api=v2) 1. Premises Hostを入力します。 On Premises Settingでは、Shared Access Signatures認証方式のみがサポートされています。 2. 接続の名前を入力します。 3. 認証を他のユーザーと共有するかどうかを選択します。 4. Continueを選択します。 ### データをTreasure Dataに転送する 認証接続を作成すると、自動的にAuthenticationsページに移動します。 1. 作成した接続を検索します。 2. **New Source**を選択します。 3. Data Transfer フィールドに**Source**の名前を入力します**。** 4. **Next**を選択します。Source Tableダイアログが開きます。 ![](/assets/microsoft-azure-data-lake-storage-import-integration-2024-02-09.ee09ed7365f2ae06e3af338e48bcdd7edd953d3dc4da9b3347eafb96b2fc71db.be2392e9.png) 1. 以下のパラメータを編集します: | Parameters | Description | | --- | --- | | Container | Data Lakeのコンテナ名 | | Path Prefix | 取り込むすべてのファイルを含むフォルダへのパス | | Path Match Pattern (optional) | この正規表現パターンに一致するファイルのみをインポートします | | Sub folders are partitions | Spark Partitionフォルダ構造を使用していることを指定する場合に有効にします。サブフォルダは=valueの形式で名前を付ける必要があります | | Enable Schema Evolution | parquet用のスキーマエボリューションを有効にします | | Incremental Loading | インクリメンタルモードを有効にします。 | | End time | 指定した時刻以降に変更されたファイルのみがインポートされます。 | | Schema Settings | 「Sub Folders Are Partitions」が有効な場合、そのパーティションカラムのカラム名とデータ型を指定する必要があります | | Include Columns | インポートするカラムを制限します。リストで指定されたカラムのみがインポートされます。リストが空の場合、すべてのカラムがインポートされます。 | 1. Nextを選択します。 Data Settingsページは必要に応じて変更できます。また、このページをスキップすることもできます。 2. 必要に応じて、以下のパラメータを編集します: | Parameter | Description | | --- | --- | | --- | --- | | Retry Limit | 最大リトライ回数 | | Initial retry interval in millis | 初回リトライ間隔(ミリ秒) | | Max retry wait in millis | 最大リトライ間隔。初回リトライ後、待機間隔は最大値に達するまで2倍になります。 | | repartition_number | Out Of Memory例外を回避するために、入力ファイルを小さなファイルに分割します。大きなデータファイルに適用されます。デフォルト値は100です。 | 1. **Next**を選択します。 ### Data Preview Data Previewはこの統合ではサポートされていません。プレビューにはサンプルデータのみが表示されます。 ### Data Placement データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。 1. **Next** を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。 2. **Database** を選択 > **Select an existing** または **Create New Database** を選択します。 3. オプションで、database 名を入力します。 4. **Table** を選択 > **Select an existing** または **Create New Table** を選択します。 5. オプションで、table 名を入力します。 6. データをインポートする方法を選択します。 - **Append** (デフォルト) - データインポートの結果は table に追加されます。 table が存在しない場合は作成されます。 - **Always Replace** - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。 - **Replace on New Data** - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。 7. **Timestamp-based Partition Key** 列を選択します。 デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。 8. データストレージの **Timezone** を選択します。 9. **Schedule** の下で、このクエリを実行するタイミングと頻度を選択できます。 #### 一度だけ実行 1. **Off** を選択します。 2. **Scheduling Timezone** を選択します。 3. **Create & Run Now** を選択します。 #### 定期的に繰り返す 1. **On** を選択します。 2. **Schedule** を選択します。UI では、*@hourly*、*@daily*、*@monthly*、またはカスタム *cron* の 4 つのオプションが提供されます。 3. **Delay Transfer** を選択して、実行時間の遅延を追加することもできます。 4. **Scheduling Timezone** を選択します。 5. **Create & Run Now** を選択します。 転送が実行された後、**Data Workbench** > **Databases** で転送の結果を確認できます。 ## Workflowの設定(オプション) Treasure Workflow内で、ワークフロー内でこのデータコネクタの使用を指定できます。 詳細は[Using Workflows to Export Data with the TD Toolbelt](https://api-docs.treasuredata.com/en/tools/cli/api/#workflow-commands)を参照してください。 ### Azure Data Lake Storage Input用のワークフロー例 ```yaml +setup: echo>: start ${session_time} +import-with-sql: td_load>: config.yml database: ${td.some_database} table: ${td.some_table2} +teardown: echo>: finish ${session_time} ``` ### 例(config.yml) 以下は、Azure Data Lakeからファイルを取得するための設定ファイルの例です: ``` input: type: azure_datalake authentication_mode: account_key account_name: tdadl account_key: fjZliu61iZV sas_token: ?sv=sas_token container_name: test path_prefix: /traffic_data/partition/collisionrecords2/ path_match_pattern: /traffic_data/partition/collisionrecords2/* subfolder_partitions: true proxy_type: none proxy_host: host proxy_port: 3128 proxy_username: tdpy proxy_password: 321tre repartition_number: 100 schema_evolution: false incremental: true last_updated_at: "2023-12-20T03:51:20.937Z" include_columns: [ col0, col3, col4, ] ``` ## Blobのソフト削除を有効にする `"Soft delete for blobs"機能を有効にすると、コネクタはREST APIを使用するため動作しません。 この機能を使用するには、Azure Portalにログインし、概要ページからData Lake StorageのPropertiesを変更して、"Hierarchical namespace"を有効にします。 エラー例は次のようになります。 ``` Caused by: org.apache.hadoop.fs.azurebfs.contracts.exceptions.AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.", 403, HEAD, https://kfcusprdanalyticsadl.dfs.core.windows.net/data-science-container/?upn=false&action=getAccessControl&timeout=90&sp=racwdlmep&st=2024-08-26T15:03:55Z&se=2024-10-15T23:03:55Z&spr=https&sv=2022-11-02&sr=d&sig=XXXXX&sdd=2s, rId: 596f51a1-601f-000d-6fe0-f7dd2e000000 ``` ![](/assets/microsoft-azure-data-lake-storage-import-integration-2024-01-22-1.b750ccc25eaedbfedd0afde60be2d202068ada00dd83d08a52c7624981a7b4d2.be2392e9.png)