Todos os produtos
Search
Central de documentação

Hologres:Export data to MaxCompute

Última atualização: Jun 28, 2026

Exporte dados do Hologres para o MaxCompute criando um mapeamento de tabela externa e executando instruções INSERT INTO ... SELECT. Essa abordagem funciona tanto para tabelas não particionadas quanto para particionadas.

Pré-requisitos

Antes de começar, verifique se você tem:

Limitações

Requisitos de versão:

Versão do Hologres

Ação necessária

V1.1 ou posterior

Execute INSERT INTO ... SELECT diretamente

V0.9 ou V0.10

Adicione SET hg_experimental_enable_write_maxcompute = on; antes de cada instrução INSERT INTO ... SELECT

Anterior à V0.9

Atualize sua instância primeiro.

Suporte a tipos de dados:

O Hologres V1.3 e versões posteriores suportam a exportação dos tipos ARRAY e DATE para o MaxCompute. Versões anteriores não aceitam tipos complexos: DATE, ARRAY, MAP e STRUCT. Para obter os mapeamentos de tipos de dados, consulte Mapeamento de tipos de dados entre MaxCompute e Hologres.

Outras limitações:

  • Não há suporte para exportação de dados para tabelas transacionais no MaxCompute.

  • Para campos TIMESTAMPTZ, os valores válidos variam de 1677-09-21 00:00:00 a 2262-04-12 00:00:00.

Observações de uso

  • Exportação entre regiões: Há suporte para essa operação, mas implantações na mesma região oferecem melhor desempenho devido a conexões de rede mais estáveis.

  • Suporte a partições: O Hologres suporta apenas particionamento de nível único, mas permite exportar dados para partições de segundo nível no MaxCompute. Isso exige o mapeamento correto dos valores da chave de partição do MaxCompute com os campos correspondentes na tabela do Hologres. Também é possível exportar de uma tabela particionada do Hologres para uma tabela não particionada do MaxCompute.

  • Horários de pico: O SDK do MaxCompute Tunnel impõe limites a gravações simultâneas e ao volume de dados. Evite executar exportações em horários de pico (como nas primeiras horas da manhã) para reduzir a probabilidade de atingir os limites de cota.

  • Ordem dos campos: Especifique os campos na mesma sequência em que aparecem na tabela do Hologres.

Exportar dados de uma tabela não particionada

O processo de exportação segue três etapas:

  1. Crie ou identifique uma tabela interna do Hologres contendo os dados a serem exportados.

  2. Crie uma tabela no MaxCompute para receber os dados.

  3. Crie uma tabela externa no Hologres mapeada para a tabela do MaxCompute e execute INSERT INTO ... SELECT para copiar os dados.

Etapa 1: Criar uma tabela interna do Hologres

BEGIN;
CREATE TABLE "public"."bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "card" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8
);
COMMIT;

Etapa 2: Criar uma tabela do MaxCompute

A ordem dos campos e os tipos de dados devem corresponder aos da tabela interna do Hologres. Para consultar a sintaxe de tabelas do MaxCompute, veja Operações de tabela.

CREATE TABLE IF NOT EXISTS mc_bank
(
 age             BIGINT COMMENT 'Age',
 job             STRING COMMENT 'Job type',
 marital         STRING COMMENT 'Marital status',
 education       STRING COMMENT 'Education level',
 card            STRING COMMENT 'Credit card available or not',
 housing         STRING COMMENT 'Mortgage',
 loan            STRING COMMENT 'Loan',
 contact         STRING COMMENT 'Contact information',
 month           STRING COMMENT 'Month',
 day_of_week     STRING COMMENT 'Day of the week',
 duration        STRING COMMENT 'Duration',
 campaign        BIGINT COMMENT 'Number of contacts during the campaign',
 pdays           DOUBLE COMMENT 'Time elapsed since the last contact',
 previous        DOUBLE COMMENT 'Number of contacts with the customer',
 poutcome        STRING COMMENT 'Result of the previous marketing campaign',
 emp_var_rate    DOUBLE COMMENT 'Employment change rate',
 cons_price_idx  DOUBLE COMMENT 'Consumer price index',
 cons_conf_idx   DOUBLE COMMENT 'Consumer confidence index',
 euribor3m       DOUBLE COMMENT 'Euro deposit rate',
 nr_employed     DOUBLE COMMENT 'Number of employees',
 y               BIGINT COMMENT 'Time deposit available or not'
);

Etapa 3: Criar uma tabela externa no Hologres

Crie uma tabela externa no Hologres mapeada para a tabela do MaxCompute. Como alternativa, use a instrução Import Foreign Schema para gerar automaticamente a definição da tabela externa.

BEGIN;
CREATE FOREIGN TABLE "public"."mapping_bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "card" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8
)
SERVER odps_server
OPTIONS (project_name '<maxcompute-project-name>', table_name 'mc_bank');
COMMIT;

Parâmetro

Descrição

project_name

Nome do projeto de destino no MaxCompute

table_name

Nome da tabela de destino no MaxCompute

Etapa 4: Exportar os dados

Exportar todos os campos:

-- Optional: use Serverless Computing for large-scale offline imports and ETL jobs.
SET hg_computing_resource = 'serverless';

INSERT INTO mapping_bank
SELECT * FROM bank;

-- Reset to stop using serverless computing resources for subsequent statements.
RESET hg_computing_resource;

Exportar campos selecionados:

INSERT INTO mapping_bank
SELECT age, job FROM bank;
O Hologres V2.1.17 e versões posteriores oferecem suporte à Visão geral da computação serverless , que aloca recursos adicionais de computação serverless para importações de dados em lote de grande escala, tarefas de extração, transformação e carga (ETL) e consultas a tabelas externas com grandes volumes de dados. Isso melhora a estabilidade da instância e reduz erros de falta de memória (OOM). A cobrança ocorre apenas pelos recursos de computação serverless consumidos pelas suas tarefas. Para detalhes de uso, consulte Ativar Computação Serverless .

Exportar dados de uma tabela particionada

O processo de exportação segue as mesmas três etapas das tabelas não particionadas. A principal diferença é que a tabela do MaxCompute pode ter partições de nível único ou de segundo nível, sendo necessário mapear os valores da chave de partição adequadamente.

Etapa 1: Criar uma tabela particionada do Hologres

BEGIN;
CREATE TABLE "public"."par_bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "default" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8,
 "ds" text
)
PARTITION BY list (ds);
COMMIT;

-- Create child tables.
CREATE TABLE "public"."par_bank_20190830" PARTITION OF "public"."par_bank" FOR VALUES IN ('20190830');
CREATE TABLE "public"."par_bank_20190901" PARTITION OF "public"."par_bank" FOR VALUES IN ('20190901');

Etapa 2: Criar uma tabela do MaxCompute

A tabela do MaxCompute pode ter partições de nível único ou de segundo nível. Os campos e tipos de dados devem corresponder aos da tabela interna do Hologres. Para consultar a sintaxe de tabelas do MaxCompute, veja Operações de tabela.

Particionamento de nível único:

CREATE TABLE IF NOT EXISTS mc_par_bank
(
    age            BIGINT COMMENT 'Age',
    job            STRING COMMENT 'Job type',
    marital        STRING COMMENT 'Marital status',
    education      STRING COMMENT 'Education level',
    default        STRING COMMENT 'Credit card available or not',
    housing        STRING COMMENT 'Mortgage',
    loan           STRING COMMENT 'Loan',
    contact        STRING COMMENT 'Contact information',
    month          STRING COMMENT 'Month',
    day_of_week    STRING COMMENT 'Day of the week',
    duration       STRING COMMENT 'Duration',
    campaign       BIGINT COMMENT 'Number of contacts during the campaign',
    pdays          DOUBLE COMMENT 'Time elapsed since the last contact',
    previous       DOUBLE COMMENT 'Number of contacts with the customer',
    poutcome       STRING COMMENT 'Result of the previous marketing campaign',
    emp_var_rate   DOUBLE COMMENT 'Employment change rate',
    cons_price_idx DOUBLE COMMENT 'Consumer price index',
    cons_conf_idx  DOUBLE COMMENT 'Consumer confidence index',
    euribor3m      DOUBLE COMMENT 'Euro deposit rate',
    nr_employed    DOUBLE COMMENT 'Number of employees',
    y              BIGINT COMMENT 'Time deposit available or not'
)
PARTITIONED BY
(
    ds             STRING
);

ALTER TABLE mc_par_bank ADD IF NOT EXISTS PARTITION (ds='20190830');
ALTER TABLE mc_par_bank ADD IF NOT EXISTS PARTITION (ds='20190901');

Particionamento de segundo nível:

CREATE TABLE IF NOT EXISTS mc_par_bank_2
(
    age            BIGINT COMMENT 'Age',
    job            STRING COMMENT 'Job type',
    marital        STRING COMMENT 'Marital status',
    education      STRING COMMENT 'Education level',
    default        STRING COMMENT 'Credit card available or not',
    housing        STRING COMMENT 'Mortgage',
    loan           STRING COMMENT 'Loan',
    contact        STRING COMMENT 'Contact information',
    month          STRING COMMENT 'Month',
    day_of_week    STRING COMMENT 'Day of the week',
    duration       STRING COMMENT 'Duration',
    campaign       BIGINT COMMENT 'Number of contacts during the campaign',
    pdays          DOUBLE COMMENT 'Time elapsed since the last contact',
    previous       DOUBLE COMMENT 'Number of contacts with the customer',
    poutcome       STRING COMMENT 'Result of the previous marketing campaign',
    emp_var_rate   DOUBLE COMMENT 'Employment change rate',
    cons_price_idx DOUBLE COMMENT 'Consumer price index',
    cons_conf_idx  DOUBLE COMMENT 'Consumer confidence index',
    euribor3m      DOUBLE COMMENT 'Euro deposit rate',
    nr_employed    DOUBLE COMMENT 'Number of employees'
)
PARTITIONED BY
(
    y              BIGINT,
    ds             STRING
);

ALTER TABLE mc_par_bank_2 ADD IF NOT EXISTS PARTITION (y='1', ds='20190830');
ALTER TABLE mc_par_bank_2 ADD IF NOT EXISTS PARTITION (y='1', ds='20190901');

Etapa 3: Criar tabelas externas no Hologres

Para particionamento de nível único do MaxCompute:

BEGIN;
CREATE FOREIGN TABLE "public"."mapping_par_bank" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "default" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8,
 "ds" text
)
SERVER odps_server
OPTIONS (project_name '<maxcompute-project-name>', table_name 'mc_par_bank');
COMMIT;

Para particionamento de segundo nível do MaxCompute:

BEGIN;
CREATE FOREIGN TABLE "public"."mapping_par_bank_2" (
 "age" int8,
 "job" text,
 "marital" text,
 "education" text,
 "default" text,
 "housing" text,
 "loan" text,
 "contact" text,
 "month" text,
 "day_of_week" text,
 "duration" text,
 "campaign" int8,
 "pdays" float8,
 "previous" float8,
 "poutcome" text,
 "emp_var_rate" float8,
 "cons_price_idx" float8,
 "cons_conf_idx" float8,
 "euribor3m" float8,
 "nr_employed" float8,
 "y" int8,
 "ds" text
)
SERVER odps_server
OPTIONS (project_name '<maxcompute-project-name>', table_name 'mc_par_bank_2');
COMMIT;

Parâmetro

Descrição

project_name

Nome do projeto de destino no MaxCompute

table_name

Nome da tabela de destino no MaxCompute

Etapa 4: Exportar os dados

Exportar para partições de nível único do MaxCompute:

-- Optional: Use Serverless Computing for bulk load and ETL tasks.
SET hg_computing_resource = 'serverless';

-- Option 1: Insert into the parent table with a WHERE clause to filter by partition.
INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank" WHERE ds='20190830';

-- Option 2: Insert into the child table directly.
INSERT INTO mapping_par_bank SELECT * FROM "public"."par_bank_20190901";

-- Reset to stop using serverless computing resources for subsequent statements.
RESET hg_computing_resource;

Exportar para partições de segundo nível do MaxCompute:

-- Optional: use Serverless Computing for bulk load and ETL tasks.
SET hg_computing_resource = 'serverless';

-- Option 1: Query the parent table with a WHERE clause to filter by both partition levels.
INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank" WHERE y='1' AND ds='20190830';

-- Option 2: Query the child partition table and filter by the second-level partition.
INSERT INTO mapping_par_bank_2 SELECT * FROM "public"."par_bank_20190901" WHERE y='1';

-- Reset to stop using serverless computing resources for subsequent statements.
RESET hg_computing_resource;

Perguntas frequentes

Por que recebo um erro FlowExceeded ao exportar para o MaxCompute?

Descrição do problema: Durante os horários de pico do serviço SDK do MaxCompute Tunnel (como nas primeiras horas da manhã), caso sua tarefa de gravação exceda os limites de gravações simultâneas ou de volume de dados.

Causa: O Hologres usa o SDK do MaxCompute Tunnel para realizar exportações de dados de alto desempenho. O SDK do Tunnel aplica limites às solicitações de gravação simultâneas e ao tamanho dos dados para proteger a infraestrutura compartilhada. Consulte Comandos do Tunnel e Limites do MaxCompute para obter detalhes.

Resolução:

  1. Tente repetir a exportação.

  2. Se o erro persistir, limite a concorrência de gravação:

-- Set to a value between 0 and your table's shard count.
SET hg_experimental_write_maxcompute_dop = <count>;