INVALID_PARAMETER_VALUE.LOCATION_OVERLAP: overlaps with managed storage error - Databricksの翻訳です。
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
外部テーブルは、カタログやスキーマのストレージロケーションと重複させることはできません。そうではなく、サブディレクトリに作成すべきです。
問題
共有クラスターで、マネージドテーブルにマウントされた外部ロケーション(AWS | Azure | GCP)にアクセスするためにdbutils
を使用しています。そのロケーションのパスを一覧しようとした場合、INVALID_PARAMETER_VALUE.LOCATION_OVERLAP
エラーメッセージで失敗します。
エラーは、指定されたパスがマネージドストレージと重複していると言っています。
dbutils.fs.ls("<storage-blob>://path/")
AnalysisException: [RequestId=96dd6185-e0dc-4fe0-94ad-bd8ab05fbd8e ErrorClass=INVALID_PARAMETER_VALUE.LOCATION_OVERLAP] Input path url '://path' overlaps with managed storage
原因
マネージドディレクトリに対するリストコマンドの実行はUnity Catalogではサポートされていません。カタログやスキーマのロケーションはマネージドストレージとして予約されています。
ソリューション
外部テーブルはカタログやスキーマのストレージロケーションと重複させることはできませんが、ルートロケーションのサブディレクトリ配下に作成することはできます。カタログやスキーマで使用されるルートロケーションやその上位ディレクトリに外部テーブルを作ってはいけません。
例えば、ルートロケーションが<storage-blob>://<some-root>
だとします。対応するカタログやスキーマのロケーションは、<storage-blob>://<some-root>/__unitystorage/catalogs/<catalog-id>
となるマネージドストレージロケーションと同じものになります。
マネージドテーブルと重複しない限り、some-root/
配下に外部ロケーションを作成することができます。この例では、<storage-blob>://<some-root>/<some-path>/<external-table-path>
は外部ロケーションとして適切なパスとなります。
この例のロケーションのコンテンツを一覧しようとした場合には、実行は成功します。