Tous les produits
Search
Centre de documentation

Hologres:Access OSS data with Hive Metastore

Dernière mise à jour :Sep 12, 2026

À partir de la version V2.2, Hologres prend en charge Hive Metastore (HMS) comme source de métadonnées pour les lacs de données construits sur Object Storage Service (OSS). Si votre lac de données s'exécute sur un cluster E-MapReduce (EMR) utilisant OSS ou OSS-HDFS comme couche de stockage, connectez Hologres à HMS pour interroger directement les données OSS via SQL, sans migration ni copie des données.

Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Un service OSS activé. Consultez Démarrage rapide dans la console.

  • Un cluster de lac de données EMR avec des données de test chargées. Consultez Accès à OSS-HDFS depuis EMR Hive ou Spark et Créer un cluster. Le cluster doit répondre à toutes les conditions suivantes :

    • Version de Hive 3.1.3 ou ultérieure

    • Authentification Kerberos désactivée

    • Metadata défini sur Self-managed RDS ou Built-in MySQL

  • Une instance Hologres avec l'accélération du lac de données activée et une base de données créée. Consultez Acheter une instance Hologres et Créer une base de données.

    Pour activer l'accélération du lac de données, accédez à la console Hologres. Dans la colonne Actions de l'instance cible, cliquez sur Lake Acceleration et confirmez.
  • Une connexion réseau entre Hologres et le cluster EMR. Étant donné que Hologres est déployé sur un réseau classique et qu'EMR s'exécute dans un cloud privé virtuel (VPC), un endpoint inversé est requis pour permettre la communication entre les deux services. Soumettez une demande de connexion réseau. L'équipe support Hologres vous guidera ensuite à travers les étapes suivantes :

    1. Connectez-vous à la console VPC et créez un endpoint inversé. Consultez Accéder aux services Alibaba Cloud.

    2. Pour le paramètre Type et saisissez le nom du service d'endpoint pour la région où se trouve votre cluster EMR :

      Region

      Endpoint service name

      China (Beijing)

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

      China (Shanghai)

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

      China (Zhangjiakou)

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

    Si votre région n'est pas répertoriée, l'équipe Hologres créera un service d'endpoint et fournira le nom après soumission de votre demande. La connexion utilise une adresse IP. Si l'adresse IP du cluster EMR change, reconfigurez la connexion.

Limitations

  • Les instances secondaires Hologres en lecture seule ne prennent pas en charge l'accélération du lac de données.

  • Les commandes UPDATE, DELETE et TRUNCATE ne sont pas prises en charge sur les tables externes.

  • Auto Load (mappage par lot des tables externes depuis HMS) n'est pas pris en charge.

  • Les clusters EMR avec authentification Kerberos activée ne sont pas pris en charge.

Connecter Hologres à HMS

Hologres propose deux méthodes pour se connecter à HMS. Choisissez celle qui correspond à la version de votre instance et au niveau de contrôle souhaité sur le mappage des colonnes.

  • Méthode 1 : base de données externe (recommandée). Nécessite Hologres V3.0 ou ultérieur. Une base de données externe mappe simultanément chaque base de données et table HMS vers une base de données externe, un schéma et une table externe dans Hologres, ce qui permet d'interroger les données avec un nom en trois parties au lieu de créer une table externe à la fois.

  • Méthode 2 : hive_fdw. Utilisez cette méthode sur Hologres V2.2 ou ultérieur mais antérieur à V3.0, ou lorsque vous devez mapper un sous-ensemble de colonnes ou renommer des tables.

Méthode 1 : Utiliser une base de données externe (recommandée)

  1. Connectez-vous à votre instance Hologres et créez la base de données externe. Cette étape requiert des autorisations de superutilisateur.

    Pour la syntaxe complète, consultez 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>';

    Parameter

    Description

    Example

    external_database_name

    Nom de la base de données externe.

    catalog_hive

    owner

    Compte Hologres propriétaire de la base de données externe.

    p4_<ACCOUNT_ID>

    metastore_type

    Type de service de métadonnées. Définissez sur hms pour Hive Metastore.

    hms

    catalog_type

    Type de catalogue. Définissez sur hive pour un catalogue Hive.

    hive

    hive_metastore_uris

    URI du Hive Metastore. Format : thrift://<HIVE_METASTORE_IP>:<PORT>. Le port par défaut est 9083.

    thrift://10.0.0.1:9083

    metadata_cache_ttl_sec

    Facultatif. Durée de validité des métadonnées mises en cache, en secondes.

    600 (default)

    metadata_cache_update_interval_sec

    Facultatif. Intervalle entre les mises à jour du cache de métadonnées, en secondes.

    60 (default)

    metadata_refresh_interval_sec

    Facultatif. Intervalle entre les actualisations complètes des métadonnées, en secondes.

    7200 (default)

    oss_endpoint

    Endpoint OSS. Pour OSS natif, utilisez l'endpoint interne pour de meilleures performances.

    oss-cn-beijing-internal.aliyuncs.com

    table_count_limitation_per_schema

    Facultatif. Nombre maximal de tables chargées par schéma.

    2000 (default)

    comment

    Facultatif. Description de la base de données externe.

    holo-emr-hive

    Les intervalles de cache et la limite de tables ci-dessus sont des valeurs d'exemple. Ajustez-les en fonction de la fréquence de mise à jour de vos métadonnées et du nombre de tables dans HMS.
  2. (Facultatif) Créez un mappage utilisateur.

    Un mappage utilisateur fournit les identifiants qu'un compte Hologres donné utilise pour lire depuis OSS. Pour plus de détails, consultez 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. Interrogez les tables externes.

    Une fois la base de données externe créée, référencez n'importe quelle table avec un nom en trois parties : base de données externe, base de données Hive, table Hive.

    Table non partitionnée :

    SELECT *
    FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_TABLE_NAME>;

    Table partitionnée : filtrez sur la clé de partition dans la clause WHERE.

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

Méthode 2 : Utiliser hive_fdw

Étape 1 : Créer l'extension

Exécutez la commande SQL suivante pour installer le wrapper de données étrangères (FDW) hive_fdw. Cette opération requiert des autorisations de superutilisateur et ne doit être exécutée qu'une seule fois par base de données.

CREATE EXTENSION IF NOT EXISTS hive_fdw;

Étape 2 : Créer un serveur étranger

Créez un serveur étranger pointant vers votre instance HMS et votre stockage OSS.

Avant d'exécuter la commande, collectez les valeurs suivantes :

  • Adresse IP HMS : Dans la console E-MapReduce, cliquez sur Other Endpoint Services pour votre cluster. Dans l'onglet Node Management, recherchez l'Node Management du nœud maître.

  • Endpoint OSS : Dans la console OSS, ouvrez la page de présentation du bucket et vérifiez la zone Internal IP.

CREATE SERVER IF NOT EXISTS <SERVER_NAME> FOREIGN DATA WRAPPER hive_fdw
OPTIONS (
  hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>',
  oss_endpoint '<OSS_ENDPOINT>'
);

Parameter

Required

Description

Example

server_name

Yes

Nom personnalisé pour le serveur étranger.

hive_server

hive_metastore_uris

Yes

URI du Hive Metastore. Format : thrift://<HIVE_METASTORE_IP>:<PORT>. Le port par défaut est 9083.

thrift://172.16.0.250:9083

oss_endpoint

Yes

Endpoint OSS. Pour OSS natif, utilisez l'endpoint interne pour de meilleures performances. Pour OSS-HDFS, seul l'endpoint interne est pris en charge.

Voir les exemples ci-dessous

Pour oss_endpoint, choisissez en fonction de votre type de stockage :

  • OSS natif : Utilisez l'endpoint interne.

    oss-cn-shanghai-internal.aliyuncs.com
  • OSS-HDFS : Seul l'accès via le réseau interne est pris en charge.

    <BUCKET_NAME>.cn-beijing.oss-dls.aliyuncs.com

Étape 3 : (Facultatif) Créer un mappage utilisateur

Un mappage utilisateur contrôle quels comptes Hologres peuvent accéder aux données externes via un serveur étranger. Par exemple, le propriétaire d'un serveur étranger peut accorder à un utilisateur Resource Access Management (RAM) l'accès aux données OSS.

Pour plus de détails sur la syntaxe CREATE USER MAPPING, consultez la documentation PostgreSQL.

-- Grant the current user access to the foreign server
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>'
);

-- Grant a RAM user (123xxx) access to the foreign server
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>'
);

-- Remove user mappings
DROP USER MAPPING FOR CURRENT_USER SERVER <SERVER_NAME>;
DROP USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME>;

Étape 4 : Créer une table externe

Hologres propose deux commandes pour créer des tables externes :

Command

Best for

CREATE FOREIGN TABLE

Un petit nombre de tables, ou lorsque vous devez mapper un sous-ensemble de colonnes ou attribuer un nom de table personnalisé.

IMPORT FOREIGN SCHEMA

Mappage par lot de plusieurs tables depuis un schéma externe.

Hologres prend en charge les tables partitionnées dans OSS. Les types de clés de partition pris en charge sont TEXT, VARCHAR et INT.
Avec CREATE FOREIGN TABLE : définissez les champs de partition comme des colonnes régulières, car cette commande mappe le schéma sans stocker les données.
Avec IMPORT FOREIGN SCHEMA : le système gère automatiquement le mappage des champs.
Si un nom de table externe entre en conflit avec une table interne Hologres existante, IMPORT FOREIGN SCHEMA ignore cette table. Utilisez CREATE FOREIGN TABLE pour la mapper avec un nom différent.
-- Create a single 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 multiple foreign tables in batch
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'
);

Étape 5 : Interroger la table externe

Après avoir créé la table externe, interrogez-la directement pour lire les données depuis OSS.

Table non partitionnée :

SELECT * FROM <HOLO_SCHEMA_NAME>.<TABLE_NAME>;

Table partitionnée :

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