テーブル名の一覧表示Listing Table Names

このトピックでは spark.catalog.listTables()%sql show tables のパフォーマンス特性が異なる理由について説明します。This topic explains why spark.catalog.listTables() and %sql show tables have different performance characteristics.

問題点Problem

Metastore からすべてのテーブル名を取得するには、spark.catalog.listTables() または %sql show tables を使用できます。To fetch all the table names from metastore you can use either spark.catalog.listTables() or %sql show tables. 詳細を取得するための期間を確認すると、spark.catalog.listTables()%sql show tables よりも時間がかかることがあります。If you observe the duration to fetch the details you can see spark.catalog.listTables() usually takes longer than %sql show tables.

原因Cause

spark.catalog.listTables() は、最初にすべてのテーブルのメタデータをフェッチしてから、要求されたテーブル名を表示しようとします。spark.catalog.listTables() tries to fetch every table’s metadata first and then show the requested table names. 複雑なスキーマや多数のテーブルを処理する場合、このプロセスは遅くなります。This process is slow when dealing with complex schemas and larger numbers of tables.

ソリューションSolution

テーブル名だけを取得するには、テーブル名のみをフェッチする SessionCatalog.listTables 内部で呼び出す %sql show tables を使用します。To get only the table names, use %sql show tables which internally invokes SessionCatalog.listTables which fetches only the table names.