函數命名空間管理器¶
警告
這是一個正在積極開發中的實驗性功能。函數命名空間管理器的設定方式可能會變更。
函數命名空間管理器支援儲存和檢索 SQL 函數,允許 Presto 引擎執行諸如建立、修改、刪除函數等動作。
函數命名空間的格式為 catalog.schema
(例如 example.test
)。它可以被認為是用於儲存函數的綱要。但是,它不是一個成熟的綱要,因為它不支援儲存表格和視圖,而僅支援函數。
每個 Presto 函數,無論是內建函數還是使用者定義函數,都位於一個函數命名空間中。所有內建函數都位於 presto.default
函數命名空間中。函數的限定名稱是其所在的函數命名空間,後接其函數名稱(例如 example.test.func
)。內建函數可以在查詢中省略其函數命名空間來引用,而使用者定義函數則需要使用其限定名稱來引用。函數由其限定名稱和參數類型列表唯一識別。
每個函數命名空間管理器都綁定到一個目錄名稱,並管理該目錄中的所有函數。不建議使用現有連接器的目錄名稱,因為其行為未定義或未經測試,並且將來會被禁止。
目前,這些目錄名稱不對應於真實的目錄。它們不能在工作階段中指定為目錄,也不支援 CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA 或 SHOW 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 函數命名空間管理器支援的所有組態屬性。
名稱 |
描述 |
---|---|
|
MySQL 函數命名空間管理器使用的 MySQL 資料庫 URL。 |
|
儲存此管理器管理的所有函數命名空間的表格名稱。 |
|
儲存此管理器管理的所有函數的表格名稱。 |