全部產品
Search
文件中心

Hologres:使用COPY命令匯出Hologres的資料至OSS

更新時間:Sep 11, 2024

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