扩展
Goose 提供灵活的扩展机制,支持动态加载扩展。 扩展可通过增加文件格式支持、引入新类型和领域特定能力来增强 Goose 功能。
扩展可在所有客户端中加载(例如 Python、R)。 通过 Core 和 Community 仓库分发的扩展会在 macOS、Windows、Linux 上构建和测试,且都支持 AMD64 与 ARM64 架构。
列出扩展
要获取扩展列表,请使用 goose_extensions 函数:
SELECT extension_name, installed, description
FROM goose_extensions();
| extension_name | installed | description |
|---|---|---|
| arrow | false | A zero-copy data integration between Apache Arrow and Goose |
| autocomplete | false | Adds support for autocomplete in the shell |
| ... | ... | ... |
该列表会显示可用扩展、已安装扩展、版本、安装位置等信息。 列表包含大多数(但非全部)核心扩展。完整清单请参阅核心扩展列表。
内置扩展
Goose 二进制发行版默认包含少量内置扩展。它们被静态链接进二进制,可直接使用。
例如,用内置 json 扩展读取 JSON 文件:
SELECT *
FROM 'test.json';
为保持 Goose 发行版轻量,仅内置少量关键扩展,不同发行版会略有差异。各平台内置扩展可见核心扩展列表。
安装更多扩展
若要在 Goose 中使用非内置扩展,需要两步:
-
扩展安装:下载扩展二进制并验证元数据。安装期间 Goose 会把扩展及部分元数据存到本地目录,后续可从该目录加载。因此安装通常只需一次。
-
扩展加载:将二进制动态加载进 Goose 实例。Goose 会在本地扩展目录查找已安装扩展并加载,使其功能可用。这意味着每次 Goose 重启后,使用到的扩展都需要重新加载。
扩展安装与加载受一些限制约束。
Goose 对可安装扩展执行安装与加载主要有两种方式:显式方式与自动加载(autoloading)。
显式 INSTALL 与 LOAD
在 Goose 中,扩展也可以显式安装和加载。无论是否支持自动加载,都可用该方式。
显式安装/加载分别使用 SQL 语句 INSTALL 和 LOAD。例如,安装并加载 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 扩展,无需显式 INSTALL 或 LOAD。
并非所有扩展都可自动加载。原因包括:某些扩展会对运行中的 Goose 实例做多处变更,技术上暂不适合自动加载;另一些扩展由于会改变 Goose 行为,更适合要求用户显式选择启用。
可自动加载的扩展请查看核心扩展列表。
社区扩展
Goose 支持安装第三方社区扩展。例如可通过以下方式安装 avro 社区扩展:
INSTALL avro FROM community;
社区扩展由社区成员贡献,但会在中心化仓库中完成构建、签名和分发。
更新扩展
由于内置扩展随 Goose 二进制发布,版本与 Goose 发布绑定;而可安装扩展可以独立更新。要确保当前已安装扩展均为最新版本,可执行:
UPDATE EXTENSIONS;
扩展版本详情请参阅扩展版本管理页面。
开发扩展
核心扩展使用的同一套 API 也可用于开发自定义扩展,便于按业务领域扩展 Goose 能力。
可在 extension-template 仓库获取扩展模板,其中也包含入门文档。