Tous les produits
Search
Centre de documentation

Hologres:Accelerate MaxCompute queries with foreign tables

Dernière mise à jour :Aug 20, 2026

Hologres utilise des tables externes pour accélérer les requêtes sur les données MaxCompute. Cette approche permet d'accéder directement aux données MaxCompute et de les analyser, améliorant ainsi l'efficacité des requêtes et simplifiant le flux de traitement des données.

Autorisations

Pour accélérer les requêtes sur les données MaxCompute, accordez aux utilisateurs les autorisations nécessaires pour accéder aux projets et aux tables MaxCompute. Pour plus d'informations, consultez la rubrique Gérer les autorisations des utilisateurs à l'aide de commandes.

Mappage des types de données

Les types de données MaxCompute correspondent un par un aux types de données Hologres. Lors de la création d'une table, reportez-vous à la rubrique Mappage des types de données entre MaxCompute et Hologres.

Méthodes

Méthode

Cas d'utilisation

Fonctionnalités clés

Accélérer les requêtes sur les données MaxCompute avec CREATE FOREIGN TABLE

Idéal pour accélérer un petit nombre de tables, interroger un sous-ensemble de colonnes ou travailler avec des structures de table stables.

Créez manuellement des tables avec des définitions flexibles de colonnes et de commentaires.

Accélérer les requêtes sur les données MaxCompute avec IMPORT FOREIGN SCHEMA

Mappez toutes les tables au niveau du schéma ou de la base de données.

Synchronisez automatiquement les structures de table pour un schéma entier.

Accélérer les requêtes sur les données MaxCompute avec Auto Load

Grand nombre de tables, ou tables dont la structure change fréquemment (par exemple, ajout, suppression ou modification de colonnes).

Détecte automatiquement les modifications apportées aux tables source et prend en charge les chargements à la demande et complets.

Accélérer les requêtes avec CREATE FOREIGN TABLE

Utilisez l'instruction CREATE FOREIGN TABLE pour créer des tables externes MaxCompute. Cette instruction permet de personnaliser les noms de table, de sélectionner des colonnes spécifiques et de définir des commentaires. Cette section fournit des exemples illustrant comment interroger des données provenant de tables MaxCompute non partitionnées et partitionnées à l'aide de CREATE FOREIGN TABLE.

Vous pouvez également utiliser HoloWeb pour créer une table visuellement. Pour plus d'informations, consultez la rubrique Créer une table externe MaxCompute dans HoloWeb .

Exemple 1 : Interroger une table non partitionnée

  1. Créez une table non partitionnée dans MaxCompute et importez-y des données. Cet exemple utilise la table customer issue du jeu de données public BIGDATA_PUBLIC_DATASET.tpcds_10t de MaxCompute comme exemple de données.

    Afficher l'instruction DDL de la table exemple

    -- DDL for the table in the MaxCompute public dataset
    CREATE TABLE IF NOT EXISTS public_data.customer(
      c_customer_sk BIGINT,
      c_customer_id STRING,
      c_current_cdemo_sk BIGINT,
      c_current_hdemo_sk BIGINT,
      c_current_addr_sk BIGINT,
      c_first_shipto_date_sk BIGINT,
      c_first_sales_date_sk BIGINT,
      c_salutation STRING,
      c_first_name STRING,
      c_last_name STRING,
      c_preferred_cust_flag STRING,
      c_birth_day BIGINT,
      c_birth_month BIGINT,
      c_birth_year BIGINT,
      c_birth_country STRING,
      c_login STRING,
      c_email_address STRING,
      c_last_review_date_sk STRING);

    Exécutez la commande suivante pour afficher les données de la table exemple.

    -- Query the table in MaxCompute to check for data.
    SET odps.namespace.schema=true;
    SELECT * FROM BIGDATA_PUBLIC_DATASET.tpcds_10t.customer;
  2. Dans Hologres, créez une table externe mappée à la table source MaxCompute. Voici un exemple d'instruction :

    SET hg_enable_convert_type_for_foreign_table = true;
    CREATE FOREIGN TABLE customer (
        "c_customer_sk" int8,
        "c_customer_id" text,
        "c_current_cdemo_sk" int8,
        "c_current_hdemo_sk" int8,
        "c_current_addr_sk" int8,
        "c_first_shipto_date_sk" int8,
        "c_first_sales_date_sk" int8,
        "c_salutation" text,
        "c_first_name" text,
        "c_last_name" text,
        "c_preferred_cust_flag" text,
        "c_birth_day" int8,
        "c_birth_month" int8,
        "c_birth_year" int8,
        "c_birth_country" text,
        "c_login" text,
        "c_email_address" text,
        "c_last_review_date_sk" text)
    SERVER odps_server
    OPTIONS (project_name 'BIGDATA_PUBLIC_DATASET.tpcds_10t', table_name 'customer');

    Le tableau suivant décrit les paramètres.

    Paramètre

    Description

    SERVER

    Le serveur externe.

    Vous pouvez utiliser odps_server, qui est un serveur externe préconfiguré dans Hologres. Pour plus d'informations sur les principes, consultez Postgres FDW.

    project_name

    • Si votre projet MaxCompute utilise le modèle à trois couches, project_name spécifie le nom du projet MaxCompute et le nom du schéma au format odps_project_name.odps_schema_name.

    • Si votre projet MaxCompute utilise un modèle à deux couches, project_name correspond au nom du projet MaxCompute.

    Pour plus d'informations sur le modèle à trois couches, consultez la rubrique Opérations sur les schémas.

    table_name

    Le nom de la table MaxCompute que vous souhaitez interroger.

  3. Après avoir créé la table externe, interrogez-la dans Hologres pour récupérer les données de MaxCompute. Voici un exemple d'instruction :

    SELECT * FROM customer LIMIT 10;
    Important

    En cas d'erreur de requête, vérifiez que le compte utilisé pour exécuter la requête dispose des autorisations requises, telles que l'autorisation Select, sur la table MaxCompute. Pour plus d'informations, consultez la rubrique Autorisations.

Exemple 2 : Interroger une table partitionnée

  1. Préparez une table partitionnée dans MaxCompute et importez-y des données. Cet exemple utilise la table ods_enterprise_share_trade_h issue du jeu de données public BIGDATA_PUBLIC_DATASET.finance de MaxCompute comme exemple de données.

    Afficher l'instruction DDL de la table exemple

    -- DDL for the table in the public dataset
    CREATE TABLE IF NOT EXISTS public_data.ods_enterprise_share_trade_h(
      code STRING COMMENT 'Code',
      name STRING COMMENT 'Name',
      industry STRING COMMENT 'Industry',
      area STRING COMMENT 'Area',
      pe STRING COMMENT 'PE ratio',
      outstanding STRING COMMENT 'Outstanding shares',
      totals STRING COMMENT 'Total shares (in 10,000s)',
      totalassets STRING COMMENT 'Total assets (in 10,000s)',
      liquidassets STRING COMMENT 'Liquid assets',
      fixedassets STRING COMMENT 'Fixed assets',
      reserved STRING COMMENT 'Reserve fund',
      reservedpershare STRING COMMENT 'Reserve per share',
      eps STRING COMMENT 'EPS',
      bvps STRING COMMENT 'BVPS',
      pb STRING COMMENT 'PB ratio',
      timetomarket STRING COMMENT 'Time to market',
      undp STRING COMMENT 'Undistributed profit',
      perundp STRING COMMENT 'Undistributed profit per share',
      rev STRING COMMENT 'YoY revenue (%)',
      profit STRING COMMENT 'YoY profit (%)',
      gpr STRING COMMENT 'Gross profit margin (%)',
      npr STRING COMMENT 'Net profit margin (%)',
      holders_num STRING COMMENT 'Number of shareholders') 
      PARTITIONED BY (ds STRING) STORED AS ALIORC TBLPROPERTIES ('comment'='Data import date');

    Exécutez la commande suivante pour afficher les données de la table exemple.

    -- Query data from a specific partition in MaxCompute.
    SET odps.namespace.schema=true;
    SELECT * FROM BIGDATA_PUBLIC_DATASET.finance.ods_enterprise_share_trade_h WHERE ds = '20170113';
  2. Dans Hologres, créez une table externe mappée à la table MaxCompute partitionnée. Voici un exemple d'instruction :

    CREATE FOREIGN TABLE public.foreign_ods_enterprise_share_trade_h (
        "code" text,
        "name" text,
        "industry" text,
        "area" text,
        "pe" text,
        "outstanding" text,
        "totals" text,
        "totalassets" text,
        "liquidassets" text,
        "fixedassets" text,
        "reserved" text,
        "reservedpershare" text,
        "eps" text,
        "bvps" text,
        "pb" text,
        "timetomarket" text,
        "undp" text,
        "perundp" text,
        "rev" text,
        "profit" text,
        "gpr" text,
        "npr" text,
        "holders_num" text,
        "ds" text
    )
    SERVER odps_server
    OPTIONS (project_name 'BIGDATA_PUBLIC_DATASET#finance', table_name 'ods_enterprise_share_trade_h');
    comment on foreign table public.foreign_ods_enterprise_share_trade_h is 'Historical stock trading information';
    comment on column public.foreign_ods_enterprise_share_trade_h."code" is 'Stock symbol';
    comment on column public.foreign_ods_enterprise_share_trade_h."name" is 'Name';
    comment on column public.foreign_ods_enterprise_share_trade_h."industry" is 'Industry';
    comment on column public.foreign_ods_enterprise_share_trade_h."area" is 'Region';
    comment on column public.foreign_ods_enterprise_share_trade_h."pe" is 'Price-to-earnings ratio';
    comment on column public.foreign_ods_enterprise_share_trade_h."outstanding" is 'Outstanding shares';
    comment on column public.foreign_ods_enterprise_share_trade_h."totals" is 'Total shares (in 10,000s)';
    comment on column public.foreign_ods_enterprise_share_trade_h."totalassets" is 'Total assets (in 10,000s)';
    comment on column public.foreign_ods_enterprise_share_trade_h."liquidassets" is 'Liquid assets';
    comment on column public.foreign_ods_enterprise_share_trade_h."fixedassets" is 'Fixed assets';
    comment on column public.foreign_ods_enterprise_share_trade_h."reserved" is 'Reserve fund';
    comment on column public.foreign_ods_enterprise_share_trade_h."reservedpershare" is 'Reserve per share';
    comment on column public.foreign_ods_enterprise_share_trade_h."eps" is 'Earnings per share';
    comment on column public.foreign_ods_enterprise_share_trade_h."bvps" is 'Book value per share';
    comment on column public.foreign_ods_enterprise_share_trade_h."pb" is 'Price-to-book ratio';
    comment on column public.foreign_ods_enterprise_share_trade_h."timetomarket" is 'Time to market';
    comment on column public.foreign_ods_enterprise_share_trade_h."undp" is 'Undistributed profit';
    comment on column public.foreign_ods_enterprise_share_trade_h."perundp" is 'Undistributed profit per share';
    comment on column public.foreign_ods_enterprise_share_trade_h."rev" is 'YoY revenue (%)';
    comment on column public.foreign_ods_enterprise_share_trade_h."profit" is 'YoY profit (%)';
    comment on column public.foreign_ods_enterprise_share_trade_h."gpr" is 'Gross profit margin (%)';
    comment on column public.foreign_ods_enterprise_share_trade_h."npr" is 'Net profit margin (%)';
    comment on column public.foreign_ods_enterprise_share_trade_h."holders_num" is 'Number of shareholders';
  3. Interrogez la table MaxCompute partitionnée depuis Hologres.

    • Interrogez les 10 premières lignes de données. Voici un exemple d'instruction SQL :

      SELECT * FROM foreign_ods_enterprise_share_trade_h limit 10;
    • Interrogez les données d'une partition spécifique. Voici un exemple d'instruction SQL :

      SELECT * FROM foreign_ods_enterprise_share_trade_h 
      WHERE ds = '20170113';
    Important

    En cas d'erreur de requête, vérifiez que le compte utilisé pour exécuter la requête dispose des autorisations requises, telles que l'autorisation Select, sur la table MaxCompute. Pour plus d'informations, consultez la rubrique Autorisations.

Accélérer les requêtes avec IMPORT FOREIGN SCHEMA

Pour créer plusieurs tables externes MaxCompute, utilisez l'instruction IMPORT FOREIGN SCHEMA. Pour plus d'informations, consultez la rubrique IMPORT FOREIGN SCHEMA.

Accélérer les requêtes avec Auto Load

Si vous devez accélérer un grand nombre de tables externes, ou si les schémas des tables source dans MaxCompute changent fréquemment (par exemple, suppression de colonnes, réorganisation ou modification de leurs types de données), utilisez la fonctionnalité Auto Load. Cette fonctionnalité charge automatiquement les données de MaxCompute via des chargements à la demande ou complets. Elle élimine le besoin de modifier manuellement la structure de la table externe, améliorant ainsi l'efficacité des requêtes. Pour plus d'informations, consultez la rubrique Auto Load pour les tables externes.