函数命名空间管理器

警告

这是一个正在积极开发的实验性功能。函数命名空间管理器的配置方式可能会更改。

函数命名空间管理器支持存储和检索 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