阿里云對象存儲(Object Storage Service,簡稱 OSS)是阿里云提供的安全、低成本及高可靠的云存儲服務。本文指導您使用copy to
命令語句和hg_dump_to_oss
命令語句將查詢的數據導出到指定的OSS。
使用限制
僅當前Hologres實例的Superuser或擁有
pg_execute_server_program
權限的用戶,才可以使用hg_dump_to_oss
導出Hologres的數據至OSS。Superuser可以授予其他用戶pg_execute_server_program
權限,命令如下。--DB開啟簡單權限模型,執行以下語句 CALL spm_grant('pg_execute_server_program','云賬號ID/云郵箱/RAM賬號'); --DB使用的是專家權限模型,執行以下語句 GRANT pg_execute_server_program TO 云賬號ID/云郵箱/RAM賬號;
單次導入至OSS的數據量不能超過5GB。
命令介紹
COPY命令:
COPY
命令是PostgreSQL表和標準文件系統之間移動數據的工具,Hologres支持COPY
命令。COPY TO
語句將SELECT查詢的結果內容復制到一個文件或者其他輸出介質中。COPY FROM
語句用于從一個文件復制數據到一個表。hg_dump_to_oss命令:用于將在Hologres中查詢的結果dump到指定的OSS。
COPY命令
如下內容將為您介紹COPY TO
命令的具體語法格式和參數說明:
命令格式
COPY ( query ) TO { PROGRAM 'command' | STDOUT } [ [ WITH ] ( option [, ...] ) ]
其中,option可以是下列之一:
FORMAT [format_name] DELIMITER 'delimiter_character' NULL 'null_string' HEADER QUOTE 'quote_character' ESCAPE 'escape_character' ENCODING 'encoding_name'
參數說明
參數
描述
query
輸入的查詢語句。查詢語句前后的圓括號必需保留。
PROGRAM
一個要執行的命令,輸出會寫入到該命令的標準輸入。
STDOUT
指定輸出,該輸出將同步到客戶端應用。
FORMAT
選擇數據格式,其格式可以為text,csv 或者binary。默認為text。
DELIMITER
指定分隔文件每行中各列的字符,這必須是一個單一的單字節字符。各數據格式的字符說明如下:
text格式中默認是一個制表符(如\t)。
csv格式默認是一個逗號(,)。
binary格式時不支持使用這個選項。
NULL
指定表示一個空值的字符串。各數據格式的字符說明如下:
text格式中默認是\N。
csv格式默認是一個未加引用的空串。
binary格式時不支持使用這個選項。
HEADER
指定文件包含標題行,其中有每一列的名稱。只有csv格式支持該選項。
QUOTE
指定應該出現在一個匹配QUOTE值的數據字符之前的字符,這必須是一個單一的單字節字符。 默認和QUOTE值一樣。只有csv格式支持該選項。
ENCODING
指定文件按照encoding_name編碼。如果省略,將使用當前的客戶端編碼。
hg_dump_to_oss命令
如下內容將為您介紹hg_dump_to_oss
命令的具體語法格式和參數說明,在Hologres中hg_dump_to_oss
命令與COPY TO
命令組合在一起使用。
命令格式
COPY (query) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <accessid> --AccessKeySecret <accesskey> --Endpoint <ossendpoint> --BucketName <bucketname> --DirName <dirname> --FileName <filename> --BatchSize <xxx> ' (DELIMITER ',', HEADER true, FORMAT CSV);
說明<dirname>前請不要添加
/
、\
等字符。參數說明
參數
描述
示例
query
輸入的查詢語句。
select * from dual;
AccessKeyId
當前賬號的AccessKey ID。
您可以單擊AccessKey 管理,獲取AccessKey ID。
無
AccessKeySecret
當前賬號的AccessKey Secret。
無
Endpoint
OSS的經典網絡訪問域名。
您可以單擊Bucket列表頁面的目標Bucket名稱,進入Bucket詳情頁查看。
oss-cn-beijing-internal.aliyuncs.com
BucketName
OSS對應的Bucket名稱。
dummy_bucket
DirName
OSS存放輸出結果的目錄。
testdemo/
FileName
(可選)OSS對應的文件名稱。
file_name
BatchSize
每次執行
hg_dump_to_oss
的行數,默認為1000。5000
DELIMITER
結果列之間的分隔符,默認為制表符(Tab-separated Values,簡稱TSV)。
','
使用示例
在Hologres中hg_dump_to_oss
命令與COPY TO
命令的使用示例如下。
-- 將Hologres內部表數據dump到指定OSS
COPY (SELECT * FROM holo_test LIMIT 2) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' DELIMITER ',';
-- 將Hologres外部表數據dump到指定OSS
COPY (SELECT * FROM foreign_holo_test LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-hangzhou-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' (DELIMITER ',', HEADER true);
-- 跨region dump到指定OSS
COPY (SELECT * FROM holo_test_1 LIMIT 20) TO PROGRAM 'hg_dump_to_oss --AccessKeyId <access id> --AccessKeySecret <access key> --Endpoint oss-cn-beijing-internal.aliyuncs.com --BucketName hologres-demo --DirName holotest/ --FileName file_name --BatchSize 3000' (DELIMITER ',', HEADER true, FORMAT CSV);
Hologres支持跨地域導出數據至指定的OSS。例如,可以導出杭州地域的實例查詢出的數據至北京地域的OSS。
常見問題
常見的報錯內容及解決方法如下:
ERROR: syntax error at or near ")"LINE 1: COPY (select 1,2,3 from ) TO PROGRAM 'hg_dump_to_oss2 --Acce...
輸入的query有誤,請檢查對應的查詢語句。
DETAIL: child process exited with exit code 255
選擇的OSS網絡類型有誤。如果您使用的是公共云,請選擇經典網絡。
DETAIL: command not found
您需要配置
DUMP TO OSS
的program為hg_dump_to_oss,否則會出現該報錯。ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 101
輸入的AccessKeyId不合法,請使用當前賬號的AccessKey ID。
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 102
輸入的AccessKeySecret不合法,請使用當前賬號的AccessKey Secret。
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 103
輸入的Endpoint不合法,請確認對應OSS經典網絡的Endpoint。
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 104
輸入的BucketName不合法,請確認對應的Bucket名稱。
ERROR: program "hg_dump_to_oss ..." failed DETAIL: child process exited with exit code 105
缺少參數,請對照參數說明,檢查必選參數是否均已配置。
ERROR: program "hg_dump_to_oss ...” failed DETAIL: child process exited with exit code 255
一般情況下是由于holo server與指定的OSS網絡不通導致該報錯,可以更換OSS域名(例如:OSS網絡類型選擇經典網絡)。更多關于OSS的域名信息,請參見訪問域名和數據中心。