As tabelas externas permitem consultar dados do MaxCompute diretamente no AnalyticDB for MySQL ou carregá-los em tabelas internas para análises de alto desempenho, sem exigir uma etapa separada de movimentação de dados. Este tópico descreve como criar tabelas externas do MaxCompute e usá-las para importar dados no AnalyticDB for MySQL.
Quando usar tabelas externas
Tabelas externas são mapeamentos virtuais somente leitura para tabelas de origem do MaxCompute. Use-as quando:
Precisar executar consultas ad-hoc nos dados do MaxCompute sem copiá-los previamente.
Quiser usar
INSERT ... SELECTpara copiar dados do MaxCompute para tabelas internas do AnalyticDB for MySQL.
Para importações recorrentes e em grande escala com requisitos rigorosos de isolamento, considere o método de importação elástica descrito neste tópico (requer Milvus V3.1.10.0 ou posterior e um grupo de recursos de jobs).
As tabelas externas não substituem outros métodos de importação, como o Data Transmission Service (DTS) ou o carregamento em lote via OSS, caso essas alternativas se adequem melhor ao seu pipeline.
Métodos de acesso por edição
| Edição | Método de acesso | Versão do kernel | Throughput |
|---|---|---|---|
| Enterprise Edition, Basic Edition, Data Lakehouse Edition | Tunnel Record API | Sem limite | Adequado para importações em pequena escala. Throughput menor. |
| Tunnel Arrow API | V3.2.2.3 ou posterior | Lê dados em colunas, reduzindo o tempo de importação. Throughput maior. | |
| Data Warehouse Edition | Tunnel Record API | Sem limite | Usa um grupo de recursos público compartilhado do Data Transmission Service. Throughput menor. |
Pré-requisitos
Antes de começar, verifique se você tem:
Um projeto do MaxCompute e um cluster do AnalyticDB for MySQL na mesma região. Consulte Criar um cluster.
O bloco CIDR da Virtual Private Cloud (VPC) do cluster do AnalyticDB for MySQL adicionado à lista de permissões do projeto do MaxCompute. Consulte Gerenciar listas de permissões de IP. Para localizar o bloco CIDR: faça logon no console do AnalyticDB for MySQL e anote o ID da VPC na página Cluster Information. Em seguida, faça logon no console da VPC e pesquise o bloco CIDR dessa VPC.
-
Para clusters das edições Enterprise Edition, Basic Edition e Data Lakehouse Edition:
-
Acesso via Elastic Network Interface (ENI) ativado. No console, acesse Cluster Management > Cluster Information > Network Information e ative a chave de acesso ENI.
ImportanteAtivar ou desativar o acesso ENI interrompe as conexões com o banco de dados por aproximadamente 2 minutos. Nenhuma operação de leitura ou escrita é possível durante esse período. Avalie o impacto antes de fazer essa alteração.
(Apenas Tunnel Arrow API) Versão do kernel do cluster V3.2.2.3 ou posterior. Para visualizar e atualizar a versão secundária, vá até a seção Configuration Information na página Cluster Information.
-
O AccessKey ID e o AccessKey secret de uma conta Alibaba Cloud ou de um usuário do Resource Access Management (RAM) com permissões de leitura no projeto do MaxCompute.
Dados de exemplo
Os exemplos a seguir usam o projeto do MaxCompute odps_project e a tabela odps_nopart_import_test:
-- Create the source table in MaxCompute
CREATE TABLE IF NOT EXISTS odps_nopart_import_test (
id int,
name string,
age int)
PARTITIONED BY (dt string);
-- Add a partition
ALTER TABLE odps_nopart_import_test
ADD PARTITION (dt='202207');
-- Insert sample data
INSERT INTO odps_project.odps_nopart_import_test
PARTITION (dt='202207')
VALUES (1,'james',10),(2,'bond',20),(3,'jack',30),(4,'lucy',40);
Importar dados usando a Tunnel Record API
A Tunnel Record API oferece suporte a dois métodos de importação: importação regular (padrão) e importação elástica.
|
Método |
Funcionamento |
Indicado quando |
|
Importação regular |
Lê os dados de origem nos nós de computação e cria índices nos nós de armazenamento. Consome recursos de computação e armazenamento. |
Uso geral; nenhum grupo de recursos adicional necessário. |
|
Importação elástica |
Lê os dados de origem e cria índices dentro de um job Serverless Spark executado em um grupo de recursos de jobs. |
Você quer minimizar o impacto em leituras e gravações em tempo real e melhorar o isolamento de recursos. Requer Milvus V3.1.10.0 ou posterior e um grupo de recursos de jobs configurado. |
Importação regular
Abra o editor SQL. Faça logon no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione uma região. No painel de navegação à esquerda, clique em Clusters, localize e clique no ID do cluster e escolha Job Development > SQL Development.
-
Crie um banco de dados externo.
CREATE EXTERNAL DATABASE adb_external_db; -
Crie uma tabela externa que mapeie a tabela de origem do MaxCompute.
NotaAs colunas da tabela externa devem corresponder exatamente às da tabela de origem do MaxCompute: mesmos nomes de campos, mesma quantidade de campos, mesma ordem de campos e tipos de dados compatíveis. Para todos os parâmetros de
TABLE_PROPERTIES, consulte CREATE EXTERNAL TABLE.
Parâmetro
Descrição
ENGINE='ODPS'Especifica o MaxCompute como mecanismo de armazenamento.
endpointO endpoint de VPC do MaxCompute. Apenas endpoints de VPC têm suporte. Consulte Endpoints de VPC para obter os endpoints por região.
accessidO AccessKey ID com permissões de leitura no projeto do MaxCompute.
accesskeyO AccessKey secret correspondente ao AccessKey ID.
partition_columnO nome da coluna de partição. Omita este parâmetro se a tabela de origem do MaxCompute não for particionada.
project_nameO nome do workspace do MaxCompute.
table_nameO nome da tabela de origem no MaxCompute.
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_db.test_adb ( id int, name varchar(1023), age int, dt string ) ENGINE='ODPS' TABLE_PROPERTIES='{ "accessid":"yourAccessKeyID", "endpoint":"http://service.cn-hangzhou.maxcompute.aliyun.com/api", "accesskey":"yourAccessKeySecret", "partition_column":"dt", "project_name":"odps_project", "table_name":"odps_nopart_import_test" }';Principais parâmetros:
-
Verifique a tabela externa consultando os dados.
SELECT * FROM adb_external_db.test_adb;Saída esperada:
+------+-------+------+---------+ | id | name | age | dt | +------+-------+------+---------+ | 1 | james | 10 | 202207 | | 2 | bond | 20 | 202207 | | 3 | jack | 30 | 202207 | | 4 | lucy | 40 | 202207 | +------+-------+------+---------+ -
Crie um banco de dados e uma tabela de destino no AnalyticDB for MySQL.
NotaA tabela de destino e a tabela externa devem ter a mesma ordem e quantidade de campos, com tipos de dados compatíveis.
CREATE DATABASE adb_demo;CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test( id int, name string, age int, dt string, PRIMARY KEY(id,dt) ) DISTRIBUTED BY HASH(id) PARTITION BY VALUE('dt'); -
Importe os dados. Escolha um dos seguintes métodos:
-
**Método 1 —
INSERT INTO:** Importa dados e ignora linhas com chaves primárias duplicadas (equivalente aINSERT IGNORE INTO). Consulte INSERT INTO.INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.test_adb;Para importar apenas de uma partição específica:
INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.test_adb WHERE dt = '202207'; -
**Método 2 —
INSERT OVERWRITE INTO:** Sobrescreve todos os dados existentes na tabela de destino.INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.test_adb; -
**Método 3 —
INSERT OVERWRITE INTOassíncrono:** Envia a importação como um job em segundo plano. Adicione a dica/*+ direct_batch_load=true*/para acelerar o job. Consulte Gravações assíncronas.SUBMIT JOB INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.test_adb;O comando retorna um ID de job:
+---------------------------------------+ | job_id | +---------------------------------------+ | 2020112122202917203100908203303****** | +---------------------------------------+Use o ID do job para monitorá-lo ou cancelá-lo. Consulte Enviar uma tarefa de importação assíncrona.
-
Importação elástica
A importação elástica executa a importação dentro de um job Serverless Spark, reduzindo o impacto nas cargas de trabalho em tempo real. Esse método requer Milvus V3.1.10.0 ou posterior e um grupo de recursos de jobs configurado.
A importação elástica aceita apenas INSERT OVERWRITE INTO. Não é possível usar INSERT INTO com a importação elástica.
Abra o editor SQL. Faça logon no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione uma região. No painel de navegação à esquerda, clique em Clusters, localize e clique no ID do cluster e escolha Job Development > SQL Development.
-
Crie um banco de dados (ignore esta etapa se já existir um).
CREATE DATABASE adb_demo; -
Crie uma tabela externa.
NotaO nome da tabela externa deve corresponder ao nome do projeto do MaxCompute. Caso contrário, a criação da tabela externa falhará.
A importação elástica exige a criação de tabelas externas com
CREATE TABLE(não useCREATE EXTERNAL TABLE).As colunas da tabela externa devem corresponder exatamente às da tabela de origem do MaxCompute: mesmos nomes de campos, mesma quantidade de campos, mesma ordem de campos e mesmos tipos de dados.
CREATE TABLE IF NOT EXISTS test_adb ( id int, name string, age int, dt string ) ENGINE='ODPS' TABLE_PROPERTIES='{ "endpoint":"http://service.cn-hangzhou.maxcompute.aliyun-inc.com/api", "accessid":"yourAccessKeyID", "accesskey":"yourAccessKeySecret", "partition_column":"dt", "project_name":"odps_project", "table_name":"odps_nopart_import_test" }';Para descrições dos parâmetros de
TABLE_PROPERTIES, consulte Descrições de parâmetros. -
Verifique a tabela externa consultando os dados.
SELECT * FROM adb_demo.test_adb; -
Crie a tabela de destino no AnalyticDB for MySQL.
NotaA tabela de destino e a tabela externa devem ter os mesmos nomes de campos, quantidade de campos, ordem de campos e tipos de dados.
CREATE TABLE IF NOT EXISTS adb_import_test ( id int, name string, age int, dt string, PRIMARY KEY(id,dt) ) DISTRIBUTED BY HASH(id) PARTITION BY VALUE('dt') LIFECYCLE 30; -
Importe os dados usando um dos métodos abaixo. Ambos usam os parâmetros de dica
elastic_loadeelastic_load_configspara ativar e configurar o job de importação elástica. Definaelastic_loadcomotruepara ativar a importação elástica (padrão:false). Useelastic_load_configspara especificar parâmetros de configuração entre[ ]; separe múltiplos parâmetros com|.elastic_load_configsaceita os seguintes parâmetros:-
Método 1 — Importação elástica síncrona:
/*+ elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/ INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.test_adb; -
Método 2 — Importação elástica assíncrona:
ImportanteFilas de prioridade não têm suporte para tarefas de importação elástica assíncrona.
/*+ elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/ SUBMIT JOB INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.test_adb;O comando retorna um ID de job. Use-o para monitorar ou cancelar o job. Consulte Enviar uma tarefa de importação assíncrona.
Parâmetro
Obrigatório
Descrição
adb.load.resource.group.nameSim
Nome do grupo de recursos de jobs que executa o job de importação elástica.
adb.load.job.max.acuNão
Recursos máximos para o job de importação elástica. Unidade: AnalyticDB Compute Units (ACUs). Mínimo: 5 ACUs. Padrão: número de shards mais 1. Para consultar o número de shards:
SELECT count(1) FROM information_schema.kepler_meta_shards;spark.driver.resourceSpecNão
Tipo de recurso do driver Spark. Padrão:
small. Consulte a coluna Type na tabela de Especificações de recursos do Spark.spark.executor.resourceSpecNão
Tipo de recurso do executor Spark. Padrão:
large. Consulte a coluna Type na tabela de Especificações de recursos do Spark.spark.adb.executorDiskSizeNão
Capacidade de disco do executor Spark. Valores válidos: (0, 100]. Unidade: GiB. Padrão: 10 GiB. Consulte Especificar recursos de driver e executor.
-
-
(Opcional) Verifique se o job foi executado como uma tarefa de importação elástica.
SELECT job_name, (job_type = 3) AS is_elastic_load FROM INFORMATION_SCHEMA.kepler_meta_async_jobs WHERE job_name = "2023081818010602101701907303151******";Saída esperada:
+---------------------------------------+------------------+ | job_name | is_elastic_load | +---------------------------------------+------------------+ | 2023081517195203101701907203151****** | 1 | +---------------------------------------+------------------+is_elastic_load = 1indica uma tarefa de importação elástica.is_elastic_load = 0indica uma tarefa de importação regular.
Importar dados usando a Tunnel Arrow API
A Tunnel Arrow API lê dados do MaxCompute em colunas, o que reduz o volume de transferência de dados e acelera as importações. Esse recurso requer a versão do kernel do cluster V3.2.2.3 ou posterior.
Etapa 1: Ativar a Arrow API
Ative a Arrow API no nível do cluster usando SET ADB_CONFIG ou no nível da consulta usando uma dica.
-
Nível do cluster (persiste entre consultas):
SET ADB_CONFIG <config_name>= <value>; -
Nível da consulta (aplica-se a uma única consulta):
/*<config_name>= <value>*/ SELECT * FROM table;
Parâmetros de configuração da Arrow API:
|
Parâmetro |
Descrição |
|
|
Ativa a Arrow API. Valores válidos: |
|
|
Ativa a divisão dinâmica. Valores válidos: |
Etapa 2: Importar dados do MaxCompute
Após ativar a Arrow API, as etapas de importação são as mesmas da importação regular. Siga as etapas de 1 a 6 em Importação regular.
O cluster usa automaticamente a Tunnel Arrow API para todas as operações subsequentes de acesso e importação de dados do MaxCompute.
Importar dados (Data Warehouse Edition)
A Data Warehouse Edition usa a Tunnel Record API com um grupo de recursos público compartilhado do Data Transmission Service.
-
Crie o banco de dados de destino.
CREATE DATABASE test_adb; -
Crie uma tabela externa do MaxCompute. Este exemplo usa
odps_nopart_import_test_external_table.Parâmetro
Descrição
ENGINE='ODPS'Especifica o MaxCompute como mecanismo de armazenamento.
endpointO endpoint de VPC do MaxCompute. Apenas endpoints de VPC têm suporte. Consulte Endpoints de VPC para obter os endpoints por região.
accessidO AccessKey ID de uma conta Alibaba Cloud ou de um usuário RAM com permissões para acessar o MaxCompute. Consulte Contas e permissões.
accesskeyO AccessKey secret correspondente ao AccessKey ID. Consulte Contas e permissões.
partition_columnO nome da coluna de partição. Omita este parâmetro se a tabela de origem do MaxCompute não for particionada.
project_nameO nome do workspace do MaxCompute.
table_nameO nome da tabela de origem no MaxCompute.
CREATE TABLE IF NOT EXISTS odps_nopart_import_test_external_table ( id int, name string, age int, dt string ) ENGINE='ODPS' TABLE_PROPERTIES='{ "endpoint":"http://service.cn.maxcompute.aliyun-inc.com/api", "accessid":"yourAccessKeyID", "accesskey":"yourAccessKeySecret", "partition_column":"dt", "project_name":"odps_project1", "table_name":"odps_nopart_import_test" }'; -
Crie a tabela de destino no AnalyticDB for MySQL.
CREATE TABLE IF NOT EXISTS adb_nopart_import_test ( id int, name string, age int, dt string, PRIMARY KEY(id,dt) ) DISTRIBUTED BY HASH(id) PARTITION BY VALUE('dt') LIFECYCLE 30; -
Importe os dados. Escolha um dos seguintes métodos:
-
**Método 1 —
INSERT INTO:** Ignora linhas com chaves primárias duplicadas (equivalente aINSERT IGNORE INTO). Consulte INSERT INTO.INSERT INTO adb_nopart_import_test SELECT * FROM odps_nopart_import_test_external_table;Para verificar os dados importados:
SELECT * FROM adb_nopart_import_test;Saída esperada:
+------+-------+------+---------+ | id | name | age | dt | +------+-------+------+---------+ | 1 | james | 10 | 202207 | | 2 | bond | 20 | 202207 | | 3 | jack | 30 | 202207 | | 4 | lucy | 40 | 202207 | +------+-------+------+---------+Para importar apenas de uma partição específica:
INSERT INTO adb_nopart_import_test SELECT * FROM odps_nopart_import_test_external_table WHERE dt = '202207'; -
**Método 2 —
INSERT OVERWRITE:** Sobrescreve todos os dados existentes na tabela de destino.INSERT OVERWRITE adb_nopart_import_test SELECT * FROM odps_nopart_import_test_external_table; -
**Método 3 —
INSERT OVERWRITEassíncrono:** Envia a importação como um job em segundo plano. Consulte Gravação assíncrona.SUBMIT JOB INSERT OVERWRITE adb_nopart_import_test SELECT * FROM odps_nopart_import_test_external_table;O comando retorna um ID de job. Use-o para monitorar ou cancelar o job. Consulte Enviar uma tarefa de importação assíncrona.
-