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 Get started with MaxCompute.
Uma instância do Hologres (V0.9 ou posterior) com uma ferramenta de desenvolvimento conectada. Consulte Connect and query with 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. 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:00a2262-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:
Crie ou identifique uma tabela interna do Hologres contendo os dados a exportar.
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 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 |
|
|
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 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 |
|
|
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 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:
Tente repetir a exportação.
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>;