web-dev-qa-db-ja.com

ZipファイルをAzure BLOBにアップロードし、そこで解凍する方法

Zipファイルがたくさんあり、フォルダが少なく、50以上のファイルが含まれています。これらのZipファイルをAzureBLOBにアップロードし、そこで解凍するにはどうすればよいですか。

サーバー内のファイルを解凍し、その中のファイルを1つずつAzure BLOBにアップロードすると、面倒なプロセスになります。

Azureにはこれを実現する簡単な方法はありますか、または回避策はありますか?

私はこれをPHPで実装しています。

10
Mathankumar

簡単な答えは、Azure Blob Storageは解凍を行わないということです。これはあなたが自分でする必要があることです。どのようにするかはあなた次第です。

1つの可能性は、(おっしゃるように)サーバーにZipファイルをアップロードし、そこで解凍してから、個々のファイルをアップロードすることです。

別の可能性は、Webサーバーで発生する処理が心配な場合は、バックグラウンドプロセスを介してこれを解凍することです。このアプローチでは、Zipファイルをblobストレージにアップロードするだけです。次に、いくつかのバックグラウンドプロセス(Webジョブ、関数、ワーカーロール、仮想マシンなど)を使用して、これらのZipファイルをダウンロードし、解凍してから、これらの個々のファイルを再アップロードします。

バックグラウンドプロセスをオンデマンドでトリガーするには、Zipファイルがアップロードされたら、キューにメッセージを書き込んで、バックグラウンドプロセスにZipファイルをダウンロードして解凍プロセスを開始するように指示します。

4
Gaurav Mantri

あなたがたぶん。すでにインターネット上で見つかっているため、ストレージサーバー内でワークロードを実行することはできません...しかし: Azure関数をストレージアカウントのFileWatchに と記述し、ファイルを解凍してからアップロードすることができますそれら

3
EvertonMc

@Gauravが言及しているように、解凍は素朴にサポートされていません。これを機能として含める フィードバック項目 がありましたが、拒否されました。私は興味があるかもしれない2つの選択肢を考えることができます。

1)Azure Data Factoryを構築します カスタムアクティビティ 解凍を行います。ファイルが一時的な場所にアップロードされると、パイプラインで解凍してアプリケーションコンテナに書き込むことができます。これにはバッチサービスインスタンスが必要ですが、Data Factoryがすべてのオーケストレーションを処理し、障害などを警告するための管理機能を提供します。

2)adlcopy.exeを使用して、BLOBをAzure BlobStorageからAzureData LakeStoreに移動します。 Data Lake Storageに入ると、独自の カスタムエクストラクタ を作成し、Zip/gzipファイルをクエリできます。ドキュメントをもう一度調べてみると、USQLがこれをネイティブに実行できる可能性があるようです。 EXTRACT式 のセクションExtract from from the dataを探します。

3)Zip/gzipファイルをネイティブに読み取ることができるSQLデータウェアハウスでPolyBaseを使用します。これは最も簡単ですが、おそらく最も高価なオプションです。 CREATE EXTERNAL TABLE および CREATE EXTERNAL FILE FORMAT を参照してください。

4)そして、@ EvertonMcが今述べたように、トリガーでAzure関数を使用してそれを行うこともできます。これも良いオプションです。

頑張って、どうやって乗るか教えてください。

2
Murray Foxcroft