Todos os produtos
Search
Central de documentação

Hologres:Export data to MaxCompute

Última atualização: Aug 21, 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. Para solicitar uma atualização, consulte Troubleshooting upgrade preparation errors ou entre no grupo do DingTalk do Hologres para obter suporte. Para mais informações, consulte How do I get more online support?.

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 mapeamentos de tipos de dados, consulte Data type mapping between MaxCompute and Hologres.

Outras limitações:

  • A exportação de dados para tabelas transacionais no MaxCompute não é suportada.

  • 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: Suportada, 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 e dos 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 MaxCompute Tunnel SDK limita gravações simultâneas e o volume de dados. Evite executar exportações em horários de pico (como nas primeiras horas da manhã) para reduzir a probabilidade de atingir 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 exportar.

  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 e inserir dados de teste

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;

INSERT INTO "public"."bank" VALUES
(32, 'farmer', 'married', 'university.degree', 'yes', 'yes', 'no', 'cellular', 'may', 'mon', '261', 1, 999, 0, 'nonexistent', 1.1, 93.994, -36.4, 4.857, 5191.0, 0),
(45, 'technician', 'single', 'basic.9y', 'no', 'no', 'no', 'telephone', 'jul', 'thu', '149', 2, 6, 2, 'success', -1.8, 94.215, -41.8, 4.962, 5228.1, 1),
(28, 'teacher', 'divorced', 'high.school', 'yes', 'yes', 'yes', 'cellular', 'nov', 'tue', '385', 3, 999, 0, 'nonexistent', -2.9, 93.444, -42.7, 1.044, 4991.6, 0),
(13, 'student', 'married', 'professional.course', 'yes', 'no', 'no', 'cellular', 'aug', 'fri', '672', 1, 12, 5, 'failure', 0.7, 93.918, -37.2, 4.000, 5076.2, 1),
(37, 'doctor', 'single', 'unknown', 'no', 'no', 'no', 'telephone', 'dec', 'wed', '210', 5, 999, 0, 'nonexistent', 1.4, 92.893, -46.2, 1.211, 5099.1, 0);

Etapa 2: Criar uma tabela no MaxCompute

A ordem dos campos e os tipos de dados devem corresponder aos da tabela interna do Hologres. Para a sintaxe de tabelas do MaxCompute, consulte Table operations.

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. Alternativamente, 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;
Nota

O Hologres V2.1.17 e versões posteriores suportam o Serverless Computing. Em cenários como importação de dados offline em grande escala, grandes tarefas de ETL e consultas de alto volume em tabelas externas, utilize o Serverless Computing. Esse recurso usa recursos serverless adicionais em vez dos recursos da sua instância, o que melhora a estabilidade e reduz a probabilidade de erros de falta de memória (OOM). Não é necessário reservar recursos de computação extras para sua instância, e a cobrança ocorre apenas pelas tarefas executadas. Para mais informações sobre o Serverless Computing, consulte Serverless Computing. Para instruções sobre como usar o Serverless Computing, consulte Use Serverless Computing.

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, e você deve mapear os valores da chave de partição adequadamente.

Etapa 1: Criar uma tabela particionada no 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 no 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 a sintaxe de tabelas do MaxCompute, consulte Table operations.

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 no 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 no 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 no 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 no 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 service MaxCompute Tunnel SDK (como nas primeiras horas da manhã), caso sua tarefa de gravação exceda os limites de gravação simultânea ou volume de dados.

Causa: O Hologres usa o MaxCompute Tunnel SDK para exportar dados com alto desempenho. O Tunnel SDK impõe limites nas solicitações de gravação simultâneas e no tamanho dos dados para proteger a infraestrutura compartilhada. Consulte Tunnel commands e MaxCompute limits para obter detalhes.

Resolução:

  1. Tente repetir a exportação.

  2. Se o erro persistir, limite a simultaneidade de gravação:

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