函数命名空间管理器¶
警告
这是一个正在积极开发的实验性功能。函数命名空间管理器的配置方式可能会更改。
函数命名空间管理器支持存储和检索 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。 |
|
存储此管理器管理的所有函数命名空间的表的名称。 |
|
存储此管理器管理的所有函数的表的名称。 |