跳到主要内容

HTTP(S) 支持

借助 httpfs 扩展,可以通过 HTTP(S) 协议直接查询文件。该能力适用于 Goose 及其各类扩展支持的所有文件格式,并提供只读访问。

SELECT *
FROM 'https://domain.tld/file.extension';

部分读取

对于 CSV 文件,由于其按行组织的格式特性,大多数情况下需要整文件下载。 对于 Parquet 文件,Goose 支持部分读取:结合 Parquet 元数据与 HTTP range requests,只下载查询真正需要的文件片段。例如,以下查询仅会读取 Parquet 元数据和 column_a 列数据:

SELECT column_a
FROM 'https://domain.tld/file.parquet';

在某些情况下,仅需读取元数据而无需读取实际数据:

SELECT count(*)
FROM 'https://domain.tld/file.parquet';

扫描多个文件

也支持通过 HTTP(S) 扫描多个文件:

SELECT *
FROM read_parquet([
'https://domain.tld/file1.parquet',
'https://domain.tld/file2.parquet'
]);

认证

若要对 HTTP(S) endpoint 进行认证,请使用 Secrets Manager 创建 HTTP secret:

CREATE SECRET http_auth (
TYPE http,
BEARER_TOKEN '⟨token⟩'
);

Or:

CREATE SECRET http_auth (
TYPE http,
EXTRA_HTTP_HEADERS MAP {
'Authorization': 'Bearer ⟨token⟩'
}
);

HTTP 代理

Goose 支持 HTTP 代理。

你可以通过 Secrets Manager添加 HTTP 代理:

CREATE SECRET http_proxy (
TYPE http,
HTTP_PROXY '⟨http_proxy_url⟩',
HTTP_PROXY_USERNAME '⟨username⟩',
HTTP_PROXY_PASSWORD '⟨password⟩'
);

也可使用 SCOPE 关键字为 HTTP 代理设置作用域。

CREATE SECRET http_proxy (
TYPE HTTP,
SCOPE ['⟨https://pub.kumose.cc⟩', '⟨https://some-other-website.org⟩'],
HTTP_PROXY '⟨http_proxy_url⟩',
HTTP_PROXY_USERNAME '⟨username⟩',
HTTP_PROXY_PASSWORD '⟨password⟩'
);

或者,你也可以通过配置项设置:

SET http_proxy = '⟨http_proxy_url⟩';
SET http_proxy_username = '⟨username⟩';
SET http_proxy_password = '⟨password⟩';

注意:无法通过配置项设置代理作用域。

使用自定义证书文件

若要让 httpfs 扩展使用自定义证书文件,请在加载扩展前设置以下配置项

LOAD httpfs;
SET ca_cert_file = '⟨certificate_file⟩';
SET enable_server_cert_verification = true;

若要通过 HTTP secret 对所有 HTTP 请求禁用 SSL 校验,可使用以下语句:

CREATE SECRET disable_ssl (
TYPE HTTP,
VERIFY_SSL 0
);

若要仅为某个特定 endpoint 重新启用,可借助 scope 参数:

CREATE SECRET enable_ssl_for_your_website (
TYPE HTTP,
SCOPE 'https://⟨your-website.com⟩',
VERIFY_SSL 1
);