自動ローダーについてよく寄せられる質問

Databricks 自動ローダーについてよく寄せられる質問です。

ファイルにデータが追加されるか上書きされる場合、自動ローダーはファイルを再び処理しますか?

cloudFiles.allowOverwrites が有効になっていない限り、ファイルは 1 回だけ処理されます。 ファイルにデータが追加されるか上書きされる場合、Azure Databricks では、どのバージョンのファイルが処理されるのかは保証されません。 また、ファイル通知モードで cloudFiles.allowOverwrites を有効にする場合は、注意が必要です。自動ローダーは、ファイル通知とディレクトリ一覧の両方を通じて新しいファイルを識別する可能性があるからです。 ファイル通知イベント時刻とファイル変更時刻の不一致により、自動ローダーは 2 つの異なるタイムスタンプを取得する可能性があるため、ファイルが 1 回だけ書き込まれる場合でも、自動ローダーが同じファイルを 2 回取り込む可能性があります。

一般に、Databricks では、変更できないファイルのみを取り込むために自動ローダーを使用し、cloudFiles.allowOverwrites を設定するのは避けることをお勧めします。 これが要件を満たしていない場合は、Azure Databricks のアカウント チームにお問い合わせください。

データ ファイルが継続的ではなく、一定の間隔 (たとえば、1 日に 1 回) で到着する場合でも、このソースを使用する必要がありますか? また、ベネフィットはありますか?

この場合、Trigger.AvailableNow (Databricks Runtime 10.4 LTS 以降で使用可能) 構造化ストリーミング ジョブを設定し、予想されるファイル到着時刻の後に実行するようにスケジュールを設定できます。 自動ローダーは、頻繁でない更新と頻繁な更新の両方でうまく機能します。 最終的な更新が非常に大きい場合でも、自動ローダーは入力サイズに合わせてスケーリングします。 自動ローダーの効率的なファイル検出手法とスキーマ展開機能により、増分データ インジェストの方法として自動ローダーが推奨されます。

ストリームの再起動時にチェックポイントの場所を変更すると、どうなりますか?

チェックポイントの場所は、ストリームの重要な識別情報を保持します。 チェックポイントの場所を変更することは、実質的には、前のストリームを破棄して、新しいストリームを開始することを意味します。

イベント通知サービスを事前に作成する必要がありますか?

いいえ。 ファイル通知モードを選択し、必要なアクセス許可を提供する場合、自動ローダーでファイル通知サービスを作成できます。 「自動ローダー ファイル通知モードとは」を参照してください

自動ローダーによって作成されたイベント通知リソースをクリーンアップするにはどうすればよいですか?

クラウド リソース マネージャーを使用して、リソースの一覧表示と破棄を行うことができます。 また、クラウド プロバイダーの UI または API を使用して、これらのリソースを手動で削除することもできます。

同じバケット/コンテナー上の異なる入力ディレクトリから複数のストリーミング クエリを実行できますか?

はい。それらが親子ディレクトリ (prod-logs/ など) でない限り可能です。prod-logs/usage/ は、/usage/prod-logs の子ディレクトリであるため、機能しません。

バケットまたはコンテナーに既存のファイル通知があるときに、この機能を使用できますか?

はい。入力ディレクトリが既存の通知プレフィックス (上記の親子ディレクトリなど) と競合しない限り可能です。

自動ローダーはどのようにスキーマを推論するのですか?

データフレームが最初に定義されたときに、自動ローダーはソース ディレクトリを一覧表示して、(ファイルの変更時刻に基づいて) 最新の 50 GB のデータまたは 1000 ファイルを選択し、それらを使用してデータ スキーマを推論します。

また、自動ローダーは、ソース ディレクトリ構造を調べてパーティション列を推論し、/key=value/ 構造を含むファイル パスを探します。 次のように、ソース ディレクトリの構造に一貫性がない場合、

base/path/partition=1/date=2020-12-31/file1.json
// inconsistent because date and partition directories are in different orders
base/path/date=2020-12-31/partition=2/file2.json
// inconsistent because the date directory is missing
base/path/partition=3/file3.json

自動ローダーはパーティション列を空と推論します。 ディレクトリ構造から列を明示的に解析するには、cloudFiles.partitionColumns を使用します。

ソース フォルダーが空の場合、自動ローダーはどのように動作しますか?

ソース ディレクトリが空の場合、自動ローダーが推論を実行するためのデータがないため、スキーマを提供するよう求められます。

自動ローダーによるスキーマの推論はいつ行われますか? マイクロバッチが実行されるたびに、スキーマは自動的に展開されるのですか?

スキーマは、コード内でデータフレームが最初に定義されたときに推論されます。 各マイクロバッチの実行中に、スキーマの変更がその場で評価されます。そのため、パフォーマンスの低下について心配する必要はありません。 ストリームが再起動すると、スキーマの場所から展開済みスキーマが取得され、推論のオーバーヘッドなしに実行が開始されます。

自動ローダーのスキーマ推論を使用する場合、データを取り込む際にパフォーマンスにどのような影響がありますか?

最初のスキーマ推論時は、非常に大きなソース ディレクトリではスキーマ推論に数分かかることが予想されます。 それ以外の場合は、ストリームの実行中にパフォーマンスが大幅に低下することはありません。 Azure Databricks ノートブックでコードを実行すると、自動ローダーがサンプリングのためにディレクトリを表示し、データ スキーマを推論するタイミングを示す状態の更新を確認できます。

バグが原因で、問題のあるファイルによってスキーマが大幅に変更されました。 スキーマの変更をロールバックするにはどうすればよいですか?

Databricks サポートにお問い合わせください。