全部產品
Search
文件中心

Hologres:基於Hive Metastore訪問OSS資料湖資料

更新時間:Sep 12, 2026

Hologres從V2.2版本開始,支援通過Hive Metastore訪問儲存於OSS上的資料湖資料,如您使用EMR叢集構建了基於OSS的資料湖環境,可通過簡單配置實現Hologres加速讀寫OSS和OSS-HDFS資料。

前提條件

  • 已開通OSS服務。具體操作,請參見控制台快速入門。

  • 已建立EMR資料湖叢集並構建測試資料。具體操作,請參見建立叢集。Hologres支援的EMR叢集需滿足以下條件:

    • Hive為3.1.3及以上版本。

    • 未開啟Kerberos身份認證。

    • 中繼資料選擇自建RDS或者內建MySQL。

  • 已購買Hologres執行個體並開啟資料湖加速,然後登入Hologres執行個體並建立資料庫。具體操作,請參見購買Hologres執行個體和建立資料庫。

    說明

    開啟資料湖加速方式:登入Hologres管理主控台,在執行個體列表中單擊目標執行個體操作列中的數據湖加速並確認,開啟資料湖加速功能。

  • 已完成網路打通。

    您需要先提交網路打通申請(網路打通申請連結請參見網路打通申請)。收到您的申請後,阿里雲Hologres技術支援人員會聯絡並協助您完成以下操作,從而實現網路互連:

    登入專用網路管理主控台建立反向終端節點,具體操作請參見訪問阿里雲服務。終端節點服務選擇其他終端節點服務,然後輸入EMR叢集所在地區的終端節點服務的名稱。各地區終端節點服務名稱如下。

    地區

    終端節點服務名稱

    北京

    com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmb

    上海

    com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3x

    張家口

    com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp

    說明
    • 如您所在地區未提供終端節點服務名稱,Hologres會在您提交網路打通申請後為您建立並提供反饋。

    • Virtual Private Cloud(Virtual Private Cloud)是基於阿里雲構建的一個隔離的網路環境,VPC網路之間、VPC網路與傳統傳統網路之間邏輯上徹底隔離,預設無法進行互訪。Hologres服務先於VPC網路存在,部署在傳統網路裡,因此需要通過配置反向終端節點來實現網路聯通。

    • 當前網路設定是通過IP來進行串連,當EMR叢集IP發生變化後,需要重新設定。

限制條件

  • Hologres唯讀從執行個體暫不支援開啟資料湖加速功能。

  • 不支援對外部表格執行UPDATE、DELETE及TRUNCATE等操作。

  • 暫不支援通過Auto Load方式映射來自HMS的外部表格。

  • 暫不支援開啟了Kerberos身份認證的Hive叢集。

使用說明

Hologres提供兩種方式接入Hive Metastore,請根據執行個體版本和外部表格映射需求選擇。

  • 方式一:使用External Database(推薦)。適用於Hologres V3.0及以上版本。External Database會將Hive Metastore中的資料庫和表映射為Hologres中的外部資料庫、Schema和外部表格,查詢時可直接使用三層名稱訪問資料,無需逐表建立外部表格。

  • 方式二:使用hive_fdw。適用於Hologres V2.2及以上、V3.0以下版本,或需要自訂外部表格欄位對應的情境。

方式一:使用External Database(推薦)

  1. 登入Hologres執行個體,執行以下SQL建立External Database。

    建立External Database需要Superuser許可權,文法詳情請參見CREATE EXTERNAL DATABASE。

    CREATE EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME>
      owner '<ACCOUNT_NAME>'
      metastore_type 'hms'
      catalog_type 'hive'
      hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>'
      metadata_cache_ttl_sec '600'
      metadata_cache_update_interval_sec '60'
      metadata_refresh_interval_sec '7200'
      oss_endpoint 'oss-<REGION_ID>-internal.aliyuncs.com'
      table_count_limitation_per_schema '2000'
      comment '<EXTERNAL_DATABASE_COMMENT>';

    參數說明如下。

    參數

    說明

    樣本值

    external_database_name

    指定External Database的名稱。

    catalog_hive

    owner

    指定External Database的Owner。

    p4_<ACCOUNT_ID>

    metastore_type

    中繼資料服務類型。通過Hive Metastore訪問資料時,設定為hms。

    hms

    catalog_type

    Catalog類型。通過Hive Catalog訪問資料時,設定為hive。

    hive

    hive_metastore_uris

    Hive Metastore的URI。格式為thrift://<HIVE_METASTORE_IP>:<PORT>,連接埠號碼預設為9083。

    thrift://10.0.0.1:9083

    metadata_cache_ttl_sec

    (可選)中繼資料快取的有效時間,單位為秒。

    600(預設值)

    metadata_cache_update_interval_sec

    (可選)中繼資料快取的更新間隔,單位為秒。

    60(預設值)

    metadata_refresh_interval_sec

    (可選)中繼資料的重新整理間隔,單位為秒。

    7200(預設值)

    oss_endpoint

    OSS訪問地址。原生OSS儲存推薦使用OSS的內網Endpoint,以獲得更好的訪問效能。

    oss-cn-beijing-internal.aliyuncs.com

    table_count_limitation_per_schema

    (可選)限制每個Schema載入的表數量。

    2000(預設值)

    comment

    (可選)External Database的描述。

    holo-emr-hive

    說明

    以上緩衝時間、重新整理間隔和表數量限制均為樣本值,請根據業務規模和中繼資料更新頻率調整。

  2. (可選)建立使用者映射。

    Hologres支援通過CREATE USER MAPPING為指定帳號配置訪問OSS所需的身份憑證,詳情請參見CREATE USER MAPPING。

    CREATE USER MAPPING FOR <ACCOUNT_NAME>
    EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME>
    OPTIONS (
      oss_access_id '<ACCESS_KEY_ID>',
      oss_access_key '<ACCESS_KEY_SECRET>'
    );
  3. 查詢外部表格。

    External Database建立完成後,可使用由External Database、Hive資料庫和Hive表組成的三層名稱查詢外部表格。

    • 非分區表

      SELECT *
      FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_TABLE_NAME>;
    • 分區表:在WHERE條件中指定分區鍵。

      SELECT *
      FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_PARTITION_TABLE_NAME>
      WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';

方式二:使用hive_fdw

  1. 執行SQL命令,建立EXTENSION。

    建立EXTENSION需要Superuser許可權,該操作針對整個DB生效,一個DB只需執行一次。

    CREATE EXTENSION IF NOT EXISTS hive_fdw;
  2. 基於hive_fdw建立Foreign Server(外部伺服器)並配置Endpoint資訊。

    CREATE SERVER IF NOT EXISTS <SERVER_NAME> FOREIGN DATA WRAPPER hive_fdw 
    OPTIONS (
       hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>',
       oss_endpoint 'oss-<REGION_ID>-internal.aliyuncs.com | <BUCKET_NAME>.<REGION_ID>.oss-dls.aliyuncs.com' 
    );

    參數

    是否必填

    說明

    樣本值

    server_name

    是

    自訂Foreign Server名稱。

    hive_server

    hive_metastore_uris

    是

    Hive MetaStore的URI。格式為thrift://<HIVE_METASTORE_IP>:<PORT>,連接埠號碼預設為9083。

    說明

    您可以登入E-MapReduce控制台,單擊目的地組群操作列中的節點管理。在節點管理頁簽,擷取master節點的內網 IP,內網IP即Hive metastore的IP地址。

    thrift://172.16.0.250:9083

    oss_endpoint

    是

    OSS的Endpoint地址。您可以根據自己實際業務選擇:

    • 原生OSS儲存:為獲得更好的訪問效能,推薦使用OSS的內網Endpoint。

    • OSS-HDFS儲存:目前僅支援內網訪問。

    說明

    您可以登入OSS管理主控台,進入Bucket檔案的概覽頁面,在訪問連接埠地區,擷取OSS的Endpoint地址。

    • OSS

      oss-cn-shanghai-internal.aliyuncs.com
    • OSS-HDFS

      <BUCKET_NAME>.cn-beijing.oss-dls.aliyuncs.com
  3. (可選)建立使用者映射。

    Hologres支援通過CREATE USER MAPPING來指定其他使用者身份訪問特定的Foreign Server。例如:Foreign Server的Owner可以通過CREATE USER MAPPING指定RAM使用者(123xxx)來訪問OSS外部資料。CREATE USER MAPPING詳情,請參見postgres create user mapping。

    CREATE USER mapping FOR <ACCOUNT_NAME> server <SERVER_NAME> options
    (
        dlf_access_id '<ACCESS_KEY_ID>', 
        dlf_access_key '<ACCESS_KEY_SECRET>',
        oss_access_id '<ACCESS_KEY_ID>', 
        oss_access_key '<ACCESS_KEY_SECRET>'
    );

    樣本如下。

    --為目前使用者建立使用者映射
    CREATE USER mapping FOR current_user server <SERVER_NAME> options
    (
        dlf_access_id '<ACCESS_KEY_ID>', 
        dlf_access_key '<ACCESS_KEY_SECRET>',
        oss_access_id '<ACCESS_KEY_ID>', 
        oss_access_key '<ACCESS_KEY_SECRET>'
    );
    
    --為RAM使用者123xxx建立使用者映射
    CREATE USER mapping FOR "p4_123xxx" server <SERVER_NAME> options
    (
        dlf_access_id '<ACCESS_KEY_ID>', 
        dlf_access_key '<ACCESS_KEY_SECRET>',
        oss_access_id '<ACCESS_KEY_ID>', 
        oss_access_key '<ACCESS_KEY_SECRET>'
    );
    
    --刪除使用者映射
    Drop USER MAPPING FOR CURRENT_USER server <SERVER_NAME>;
    Drop USER MAPPING FOR "p4_123xxx" server <SERVER_NAME>;
  4. 建立外部表格。

    Hologres支援以下命令建立外部表格:

    • CREATE FOREIGN TABLE:一次僅建立一張外部表格,但支援通過指定部分列來自訂建立外部表格,適用於需要建立的外部表格較少且無需映射所有外部表格欄位的情況。

    • IMPORT FOREIGN SCHEMA:大量建立外部表格,適用於需要建立多張外部表格或者外部資料源批量映射的情境。

    說明
    • Hologres支援讀取OSS中的分區表,並且支援將TEXT、VARCHAR和INT作為分區鍵的資料類型。使用CREATE FOREIGN TABLE方式時,由於只進列欄位映射而不實際儲存資料,只需要將分區欄位作為普通欄位來建立即可;而使用IMPORT FOREIGN SCHEMA方式時,則無需關心表欄位,系統會自動處理表欄位對應。

    • 如果OSS外部表格存在和Hologres內部表同名的表,IMPORT FOREIGN SCHEMA會跳過該外部表格的建立。建議使用CREATE FOREIGN TABLE來定義一個非重複表格名來建立。

    -- CREATE FOREIGN TABLE方式
    CREATE FOREIGN TABLE <HOLO_SCHEMA_NAME>.<TABLE_NAME>
    (
      { column_name data_type }
      [, ... ]
      ] )
    )
    SERVER <SERVER_NAME>
    OPTIONS
    (
      schema_name '<HIVE_DATABASE_NAME>',
      table_name '<HIVE_TABLE_NAME>'
    );
    
    
    -- IMPORT FOREIGN SCHEMA方式
    IMPORT FOREIGN SCHEMA <HIVE_DATABASE_NAME> 
    [
      { limit TO | EXCEPT } 
      ( table_name [, ...] ) 
    ]
    FROM server <SERVER_NAME>
    INTO <HOLO_SCHEMA_NAME> 
    options(
      if_table_exist 'update',
      if_unsupported_type 'error'
            );
  5. 查詢外部表格。

    建立外部表格成功後,可以直接查詢外部表格讀取OSS中的資料。

    • 非分區表

      SELECT * FROM <HOLO_SCHEMA_NAME>.<TABLE_NAME>;
    • 分區表

      SELECT * FROM <HOLO_SCHEMA_NAME>.<PARTITION_TABLE_NAME> WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';