Todos os produtos
Search
Central de documentação

Hologres:Accelerate MaxCompute queries with foreign tables

Última atualização: Aug 20, 2026

O Hologres usa tabelas externas para acelerar consultas a dados do MaxCompute. Essa abordagem permite acessar e analisar diretamente os dados no MaxCompute, o que aumenta a eficiência das consultas e simplifica o fluxo de processamento de dados.

Permissões

Para acelerar consultas a dados do MaxCompute, conceda aos usuários as permissões necessárias para acessar projetos e tabelas do MaxCompute. Para mais informações, consulte Gerencie permissões de usuário usando comandos.

Mapeamento de tipos de dados

Os tipos de dados do MaxCompute têm correspondência direta com os tipos de dados do Hologres. Ao criar uma tabela, consulte Mapeamento de tipos de dados entre MaxCompute e Hologres.

Métodos

Método

Casos de uso

Principais recursos

Acelere consultas em dados do MaxCompute com CREATE FOREIGN TABLE

Ideal para acelerar um pequeno número de tabelas, consultar um subconjunto de colunas ou trabalhar com estruturas de tabela estáveis.

Permite criar tabelas manualmente com definições flexíveis de colunas e comentários.

Acelere consultas em dados do MaxCompute com IMPORT FOREIGN SCHEMA

Mapeia todas as tabelas no nível de schema ou banco de dados.

Sincroniza automaticamente as estruturas de tabela de um schema inteiro.

Acelere consultas em dados do MaxCompute com Auto Load

Recomendado para um grande volume de tabelas ou tabelas com alterações estruturais frequentes (como adição, exclusão ou modificação de colunas).

Detecta automaticamente alterações nas tabelas de source e oferece suporte a carregamentos sob demanda e completos.

Acelere consultas com CREATE FOREIGN TABLE

Use a instrução CREATE FOREIGN TABLE para criar tabelas externas do MaxCompute. Essa instrução permite personalizar nomes de tabelas, selecionar colunas específicas e definir comentários. Esta seção apresenta exemplos de consulta a dados de tabelas não particionadas e particionadas do MaxCompute com CREATE FOREIGN TABLE.

Como alternativa, use o HoloWeb para criar uma tabela visualmente. Para mais informações, consulte Crie uma tabela externa do MaxCompute no HoloWeb .

Exemplo 1: Consultar uma tabela não particionada

  1. Crie uma tabela não particionada no MaxCompute e importe os dados. Este exemplo usa a tabela customer do conjunto de dados público BIGDATA_PUBLIC_DATASET.tpcds_10t no MaxCompute como dados de amostra.

    Visualize a instrução DDL da tabela de amostra

    -- 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);

    Execute o comando a seguir para visualizar os dados na tabela de amostra.

    -- Query the table in MaxCompute to check for data.
    SET odps.namespace.schema=true;
    SELECT * FROM BIGDATA_PUBLIC_DATASET.tpcds_10t.customer;
  2. No Hologres, crie uma tabela externa que mapeie a tabela de source do MaxCompute. Exemplo de instrução:

    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');

    A tabela a seguir descreve os parâmetros.

    Parâmetro

    Descrição

    SERVER

    O servidor externo.

    Use odps_server, um servidor externo pré-configurado no Hologres. Para mais informações sobre os princípios, consulte Postgres FDW.

    project_name

    • Se o projeto do MaxCompute usar o modelo de três camadas, project_name especifica o nome do projeto e o nome do schema do MaxCompute no formato odps_project_name.odps_schema_name.

    • Se o projeto do MaxCompute usar um modelo de duas camadas, project_name corresponde ao nome do projeto do MaxCompute.

    Para mais informações sobre o modelo de três camadas, consulte Operações de schema.

    table_name

    Nome da tabela do MaxCompute a ser consultada.

  3. Após criar a tabela externa, consulte-a no Hologres para recuperar dados do MaxCompute. Exemplo de instrução:

    SELECT * FROM customer LIMIT 10;
    Importante

    Se ocorrer um erro de consulta, verifique se a conta usada para executar a consulta tem as permissões necessárias, como a permissão Selecione, na tabela do MaxCompute. Para mais informações, consulte Permissões.

Exemplo 2: Consultar uma tabela particionada

  1. Prepare uma tabela particionada no MaxCompute e importe os dados. Este exemplo usa a tabela ods_enterprise_share_trade_h do conjunto de dados público BIGDATA_PUBLIC_DATASET.finance no MaxCompute como dados de amostra.

    Visualize a instrução DDL da tabela de amostra

    -- 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');

    Execute o comando a seguir para visualizar os dados na tabela de amostra.

    -- 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. No Hologres, crie uma tabela externa que mapeie a tabela particionada do MaxCompute. Exemplo de instrução:

    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. Consulte a tabela particionada do MaxCompute no Hologres.

    • Consulte as primeiras 10 linhas de dados. Exemplo de instrução SQL:

      SELECT * FROM foreign_ods_enterprise_share_trade_h limit 10;
    • Consulte dados em uma partição específica. Exemplo de instrução SQL:

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

    Se ocorrer um erro de consulta, verifique se a conta usada para executar a consulta tem as permissões necessárias, como a permissão Selecione, na tabela do MaxCompute. Para mais informações, consulte Permissões.

Acelere consultas com IMPORT FOREIGN SCHEMA

Para criar várias tabelas externas do MaxCompute, use a instrução IMPORT FOREIGN SCHEMA. Para mais informações, consulte IMPORT FOREIGN SCHEMA.

Acelere consultas com Auto Load

Se precisar acelerar um grande número de tabelas externas ou se os schemas das tabelas de source no MaxCompute mudarem frequentemente (por exemplo, colunas excluídas, reordenadas ou com tipos de dados modificados), use o recurso Auto Load. Esse recurso carrega dados do MaxCompute automaticamente, seja sob demanda ou completamente. Ele elimina a necessidade de alterar manualmente a estrutura da tabela externa, aumentando a eficiência das consultas. Para mais informações, consulte Auto Load para tabelas externas.