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
);