概要
Databricks における spark_catalog がどういったオブジェクトであるかを調査しました。調査結果と spark_catalog を確認できるケースを記載します。
調査結果
spark_catalog とは hive_metastore のシノニムのようなものであると解釈しました。spark_catalog という記述を実施するのではなく hive_metastore と記載することが望ましいです。
%sql
SELECT
-- spark_catalog と記載しても動作する
spark_catalog.functions_test_01.get_abc() AS spark_catalog,
-- カタログエクスプローラーで確認できる hive_metastore と記載することが望ましい
hive_metastore.functions_test_01.get_abc() AS hive_metastore
なお、ドキュメントにて予約語として記載されておりませんでしたが、 spark_catalog というカタログの作成をできませんでした。
%sql
CREATE CATALOG spark_catalog;
com.databricks.backend.common.rpc.SparkDriverExceptions$SQLExecutionException: org.apache.spark.sql.AnalysisException: [MODIFY_BUILTIN_CATALOG] Modifying built-in catalog spark_catalog is not supported.
引用元:Reserved words and schemas - Azure Databricks - Databricks SQL | Microsoft Learn
spark_catalog を確認できるケース
1. Databricks の current_catalog 関数のドキュメントの Examples
以前から違和感を感じておりましたが、下記のように spark_catalog がリターンされるという実行例が記載されています。
> SELECT current_catalog();
spark_catalog
引用元:current_catalog function | Databricks on AWS
2. Unity Catalog が有効でないワークスペースにて関数定義の表示結果
関数名として spark_catalog が記載されていることを確認できました。
%sql
CREATE SCHEMA IF NOT EXISTS functions_test_01;
CREATE OR REPLACE FUNCTION functions_test_01.get_abc()
RETURNS STRING
LANGUAGE SQL
RETURN 'abc'
;
DESC FUNCTION EXTENDED functions_test_01.get_abc;
Function: spark_catalog.functions_test_01.get_abc
関数の定義を確認する際、 hive_metastore と記述する場合には、spark_catalog と表示されませんでした。
%sql
DESC FUNCTION EXTENDED hive_metastore.functions_test_01.get_abc;
Function: hive_metastore.functions_test_01.get_abc