阿里雲Object Storage Service(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的網域名稱資訊,請參見訪問網域名稱和資料中心。