阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。本文将会为您介绍如何使用SQL命令将Hologres中的数据导出至知道的OSS。

命令介绍

dump to oss:把在Hologres中查询的结果dump到指定的oss。

命令格式

在Hologres中dump to oss的命令格式如下:

COPY (query) TO PROGRAM 'hg_dump_to_oss --AccessKeyId dummy_id --AccessKeySecret dummy_key --Endpoint dummy_host --BucketName dummy_bucket --DirName dummy_dir --BatchSize 5000 ' DELIMITER ',';

参数说明

参数说明

参数 描述 示例说明
query 输入的query 示例:select * from dual;
AccessKeyId 当前账号的Access ID 前往用户信息可以查看
AccessKeySecret 当前账号的Access ID 前往用户信息可以查看
Endpoint oss对应的经典网络地址 在oss Bucket概览可查看,示例:oss-cn-beijing-internal.aliyuncs.com
BucketName oss对应的bucket名字 示例:dummy_bucket
DirName oss指定的结果输出到目录 示例:testdemo/
BatchSize 可选,每次dump oss的batch的行数,默认1000 示例:5000
DELIMITER 可选,指定的结果列之间的分隔字符,默认是TSV 示例:','

使用说明

只有当前Hologres实例的superuser或者具备pg_execute_server_program权限的用户,才能使用dump to oss功能。superuser可以为其他账号授权,使其成为pg_execute_server_program,授权命令如下:

grant pg_execute_server_program to "云账号ID/云账号";

使用示例

在Hologres中dump to oss的使用示例如下:

//将Hologres内表数据dump到指定oss
COPY (select * from test LIMIT 2) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName <holo-ingestion> --DirName <holotest>/ --BatchSize 3000' DELIMITER ',';

//将Hologres外表数据dump到指定oss
COPY (select * from bank_data LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName holo-ingestion --DirName holotest/ --BatchSize 3000' DELIMITER ',';

//跨region dump到指定oss
COPY (select * from bank_data LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-beijing-internal.aliyuncs.com --BucketName hologres-demo-oss --DirName demotest/ --BatchSize 3000' DELIMITER ',';
642
说明 当前Hologres支持跨region dump到指定oss,示例Hologres的实例为杭州region,但是可以将查询到的数据dump到北京region的oss

常见问题

  • 执行完之后报错:ERROR: syntax error at or near ")"LINE 1: COPY (select 1,2,3 from ) TO PROGRAM 'hg_dump_to_oss2 --Acce...

    输入的查询query有问题,请检查query。

  • 执行完之后报错:DETAIL: child process exited with exit code 255

    oss的网络类型选择错误,公共云请选择经典网络地址

  • 执行完之后报错:DETAIL: command not found

    dump to oss目前必须指定prpgram是hg_dump_to_oss,若输入错误则会报这个错。

  • 执行完之后报错:ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 101

    输入的AccessKeyId不合法,请使用当前账号的access id。

  • 执行完之后报错:ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 102

    输入的AccessKeySecret不合法,请使用当前账号的accesskey。

  • 执行完之后报错:ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 103

    输入的Endpoint不合法,请确认对应的oss经典网络。

  • 执行完之后报错:ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 104

    输入的BucketName不合法,请确认对应的bucket name。

  • 执行完之后报错:ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 105

    缺少了必要的参数,请对照参数说明检查参数。

  • 单次上传数据量不能超过5G。