函數命名空間管理器

警告

這是一個正在積極開發中的實驗性功能。函數命名空間管理器的設定方式可能會變更。

函數命名空間管理器支援儲存和檢索 SQL 函數,允許 Presto 引擎執行諸如建立、修改、刪除函數等動作。

函數命名空間的格式為 catalog.schema(例如 example.test)。它可以被認為是用於儲存函數的綱要。但是,它不是一個成熟的綱要,因為它不支援儲存表格和視圖,而僅支援函數。

每個 Presto 函數,無論是內建函數還是使用者定義函數,都位於一個函數命名空間中。所有內建函數都位於 presto.default 函數命名空間中。函數的限定名稱是其所在的函數命名空間,後接其函數名稱(例如 example.test.func)。內建函數可以在查詢中省略其函數命名空間來引用,而使用者定義函數則需要使用其限定名稱來引用。函數由其限定名稱和參數類型列表唯一識別。

每個函數命名空間管理器都綁定到一個目錄名稱,並管理該目錄中的所有函數。不建議使用現有連接器的目錄名稱,因為其行為未定義或未經測試,並且將來會被禁止。

目前,這些目錄名稱不對應於真實的目錄。它們不能在工作階段中指定為目錄,也不支援 CREATE SCHEMAALTER SCHEMADROP SCHEMASHOW SCHEMAS。相反,可以使用以下描述的方法來新增命名空間。

組態

Presto 目前將所有與函數命名空間管理器相關的資訊儲存在 MySQL 中。

要實例化一個管理目錄 example 的基於 MySQL 的函數命名空間管理器,管理員首先需要有一個正在運行的 MySQL 伺服器。假設 MySQL 伺服器可以透過 localhost:1080 存取,請新增一個檔案 etc/function-namespace/example.properties,內容如下

function-namespace-manager.name=mysql
database-url=jdbc:mysql://example.net:3306/database?user=root&password=password
function-namespaces-table-name=example_function_namespaces
functions-table-name=example_sql_functions

當 Presto 首次啟動時,使用上述 MySQL 函數命名空間管理器組態,如果不存在,則會建立兩個 MySQL 表格。

  • example_function_namespaces 儲存目錄 example 的函數命名空間。

  • example_sql_functions 儲存目錄 example 的 SQL 呼叫函數。

可以透過在 etc/function-namespace 下放置多個屬性檔案來實例化多個函數命名空間管理器。它們可以設定為使用相同的表格。如果是這樣,每個管理器將僅建立並與其綁定的目錄的條目互動。

若要建立新的函數命名空間,請插入 example_function_namespaces 表格中

INSERT INTO example_function_namespaces (catalog_name, schema_name)
VALUES('example', 'test');

組態參考

function-namespace-manager.name 是要實例化的函數命名空間管理器的類型。目前僅支援 mysql

下表列出了 MySQL 函數命名空間管理器支援的所有組態屬性。

名稱

描述

database-url

MySQL 函數命名空間管理器使用的 MySQL 資料庫 URL。

function-namespaces-table-name

儲存此管理器管理的所有函數命名空間的表格名稱。

functions-table-name

儲存此管理器管理的所有函數的表格名稱。

另請參閱

CREATE FUNCTIONALTER FUNCTIONDROP FUNCTIONSHOW FUNCTIONS