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:
Um projeto ativo no MaxCompute com uma ferramenta de desenvolvimento conectada. Consulte Introdução ao MaxCompute.
Uma instância do Hologres (V0.9 ou posterior) com uma ferramenta de desenvolvimento conectada. Consulte Conectar e consultar com o HoloWeb.
Limitações
Requisitos de versão:
|
Versão do Hologres |
Ação necessária |
|
V1.1 ou posterior |
Execute |
|
V0.9 ou V0.10 |
Adicione |
|
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:00a2262-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:
Crie ou identifique uma tabela interna do Hologres contendo os dados a serem exportados.
Crie uma tabela no MaxCompute para receber os dados.
Crie uma tabela externa no Hologres mapeada para a tabela do MaxCompute e execute
INSERT INTO ... SELECTpara 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 |
|
|
Nome do projeto de destino no MaxCompute |
|
|
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 |
|
|
Nome do projeto de destino no MaxCompute |
|
|
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:
Tente repetir a exportação.
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>;