跳到主要内容

扩展

Goose 提供灵活的扩展机制,支持动态加载扩展。 扩展可通过增加文件格式支持、引入新类型和领域特定能力来增强 Goose 功能。

扩展可在所有客户端中加载(例如 Python、R)。 通过 Core 和 Community 仓库分发的扩展会在 macOS、Windows、Linux 上构建和测试,且都支持 AMD64 与 ARM64 架构。

列出扩展

要获取扩展列表,请使用 goose_extensions 函数:

SELECT extension_name, installed, description
FROM goose_extensions();
extension_nameinstalleddescription
arrowfalseA zero-copy data integration between Apache Arrow and Goose
autocompletefalseAdds support for autocomplete in the shell
.........

该列表会显示可用扩展、已安装扩展、版本、安装位置等信息。 列表包含大多数(但非全部)核心扩展。完整清单请参阅核心扩展列表

内置扩展

Goose 二进制发行版默认包含少量内置扩展。它们被静态链接进二进制,可直接使用。 例如,用内置 json 扩展读取 JSON 文件:

SELECT *
FROM 'test.json';

为保持 Goose 发行版轻量,仅内置少量关键扩展,不同发行版会略有差异。各平台内置扩展可见核心扩展列表

安装更多扩展

若要在 Goose 中使用非内置扩展,需要两步:

  1. 扩展安装:下载扩展二进制并验证元数据。安装期间 Goose 会把扩展及部分元数据存到本地目录,后续可从该目录加载。因此安装通常只需一次。

  2. 扩展加载:将二进制动态加载进 Goose 实例。Goose 会在本地扩展目录查找已安装扩展并加载,使其功能可用。这意味着每次 Goose 重启后,使用到的扩展都需要重新加载。

扩展安装与加载受一些限制约束。

Goose 对可安装扩展执行安装加载主要有两种方式:显式方式与自动加载(autoloading)

显式 INSTALLLOAD

在 Goose 中,扩展也可以显式安装和加载。无论是否支持自动加载,都可用该方式。 显式安装/加载分别使用 SQL 语句 INSTALLLOAD。例如,安装并加载 spatial 扩展

INSTALL spatial;
LOAD spatial;

执行后 Goose 会确保 spatial 已安装(若已安装则忽略 INSTALL),随后加载该扩展(若已加载则忽略 LOAD)。

扩展仓库

可在 INSTALL / FORCE INSTALL 命令后添加 FROM ⟨repository⟩ 指定安装仓库。 仓库既可使用别名(如 community),也可是单引号包裹的直接 URL。

安装/加载后,可通过 goose_extensions 函数查看更多信息。

自动加载扩展

对于许多 Goose 核心扩展,无需显式安装和加载。Goose 内置自动加载机制,可在扩展首次被查询使用时自动安装并加载。例如执行:

SELECT *
FROM 'https://raw.githubusercontent.com/kumo-pub/goose/master/static/data/weather.csv';

Goose 会自动安装并加载 httpfs 扩展,无需显式 INSTALLLOAD

并非所有扩展都可自动加载。原因包括:某些扩展会对运行中的 Goose 实例做多处变更,技术上暂不适合自动加载;另一些扩展由于会改变 Goose 行为,更适合要求用户显式选择启用。

可自动加载的扩展请查看核心扩展列表

社区扩展

Goose 支持安装第三方社区扩展。例如可通过以下方式安装 avro 社区扩展

INSTALL avro FROM community;

社区扩展由社区成员贡献,但会在中心化仓库中完成构建、签名和分发。

更新扩展

由于内置扩展随 Goose 二进制发布,版本与 Goose 发布绑定;而可安装扩展可以独立更新。要确保当前已安装扩展均为最新版本,可执行:

UPDATE EXTENSIONS;

扩展版本详情请参阅扩展版本管理页面

开发扩展

核心扩展使用的同一套 API 也可用于开发自定义扩展,便于按业务领域扩展 Goose 能力。 可在 extension-template 仓库获取扩展模板,其中也包含入门文档。

使用扩展

请参阅安装说明高级安装方式页面