O AnalyticDB for MySQL permite consultar dados do Tablestore diretamente por meio de tabelas externas ou importá-los para tabelas internas para análises recorrentes. Utilize a consulta direta para acessos ad hoc. Opte pela importação em cenários que exigem alta performance ou consultas frequentes, pois a consulta em uma tabela interna é mais rápida do que em uma tabela externa.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster do AnalyticDB for MySQL nas edições Enterprise, Basic ou Data Lakehouse.
Caso sua instância do Tablestore esteja vinculada a uma virtual private cloud (VPC), o cluster do AnalyticDB for MySQL deve estar na mesma VPC.
Contexto
Uma instância do Tablestore gerencia tabelas e dados no serviço, funcionando de forma equivalente a um banco de dados. Cada instância do Tablestore corresponde a um schema ou banco de dados no AnalyticDB for MySQL.
Acesso à rede: Se nenhuma VPC estiver vinculada à instância do Tablestore, o AnalyticDB for MySQL acessa os dados diretamente. Caso haja uma VPC vinculada, o cluster do AnalyticDB for MySQL precisa estar na mesma VPC.
Dados de exemplo
Os exemplos neste tópico utilizam uma tabela do Tablestore chamada person com os dados a seguir. Ignore esta seção caso já possua dados de source.
|
id (chave primária) |
name |
age |
|
1 |
james |
10 |
|
2 |
bond |
20 |
|
3 |
jack |
30 |
|
4 |
lucy |
40 |
Abrir o editor SQL
Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione uma região. No painel de navegação à esquerda, clique em Clusters. Localize o cluster desejado e clique em seu ID.
No painel de navegação à esquerda, escolha Job Development > SQL Development.
Consultar dados do Tablestore
Etapa 1: Crie um banco de dados externo
CREATE EXTERNAL DATABASE adb_external_db;
Etapa 2: Crie uma tabela externa
A tabela externa deve corresponder à tabela do Tablestore em nomes de campos, quantidade e ordem. Os tipos de dados dos campos também precisam ser compatíveis. Para obter detalhes sobre o mapeamento de tipos de dados, consulte Mapeamentos de tipos de dados.
O exemplo a seguir cria uma tabela chamada person no banco de dados adb_external_db:
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_db.person (
id int,
name string,
age int
)
ENGINE = 'OTS'
TABLE_PROPERTIES = '{
"mapped_name": "person",
"location": "https://w0****la.cn-hangzhou.vpc.tablestore.aliyuncs.com"
}';
|
Parâmetro |
Descrição |
|
|
Mecanismo de armazenamento para leitura e gravação de dados do Tablestore. Defina sempre como |
|
|
Nome da tabela na instância do Tablestore. Para localizar o nome da tabela, acesse o console do Tablestore e abra a página All Instances. |
|
|
URL da VPC da instância do Tablestore. Para encontrar a URL, acesse o console do Tablestore e abra a página All Instances. |
Etapa 3: Consultar os dados
Após a criação da tabela externa, o AnalyticDB for MySQL mapeia automaticamente os dados da tabela do Tablestore. Execute a instrução SELECT a seguir para consultar os dados:
SELECT * FROM adb_external_db.person;
Saída esperada:
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | james | 10 |
| 2 | bond | 20 |
| 3 | jack | 30 |
| 4 | lucy | 40 |
+------+-------+------+
4 rows in set (0.35 sec)
Importar dados do Tablestore para o AnalyticDB for MySQL
A importação de dados do Tablestore para uma tabela interna do AnalyticDB for MySQL possibilita consultas recorrentes mais rápidas. Existem três métodos de gravação disponíveis — escolha aquele que melhor atende aos seus requisitos de deduplicação e desempenho.
Etapa 1: Crie um banco de dados
CREATE DATABASE adb_demo;
Etapa 2: Crie uma tabela de destino
A tabela de destino deve ter a mesma quantidade e ordem de campos da tabela externa. Os tipos de dados dos campos precisam ser compatíveis.
CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test (
id int,
name string,
age int
)
DISTRIBUTED BY HASH(id);
Etapa 3: Gravar dados
Selecione um método de gravação conforme a estratégia desejada para tratar chaves primárias duplicadas:
|
Método |
Tratamento de duplicatas |
Sintaxe |
|
INSERT INTO |
Ignora duplicatas (equivalente a INSERT IGNORE INTO) |
|
|
INSERT OVERWRITE |
Substitui duplicatas |
|
|
SUBMIT JOB |
Substituição assíncrona |
|
Método 1: INSERT INTO (ignorar duplicatas)
Caso já exista uma linha com chave primária duplicada, essa linha será ignorada.
INSERT INTO adb_demo.adb_import_test
SELECT * FROM adb_external_db.person;
Verifique o resultado:
SELECT * FROM adb_demo.adb_import_test;
Saída esperada:
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | james | 10 |
| 2 | bond | 20 |
| 3 | jack | 30 |
| 4 | lucy | 40 |
+------+-------+------+
Método 2: INSERT OVERWRITE (substituir duplicatas)
Se houver uma linha com chave primária duplicada, a linha existente será sobrescrita.
INSERT OVERWRITE adb_demo.adb_import_test
SELECT * FROM adb_external_db.person;
Método 3: SUBMIT JOB (importação assíncrona)
Na maioria dos casos, utilize SUBMIT JOB para executar a importação de forma assíncrona. É possível adicionar a dica /*+ direct_batch_load=true*/ para acelerar o job.
SUBMIT JOB
INSERT OVERWRITE adb_demo.adb_import_test
SELECT * FROM adb_external_db.person;
A instrução retorna um ID de job:
+---------------------------------------+
| job_id |
+---------------------------------------+
| 2020112122202917203100908203303****** |
Para monitorar o job assíncrono, consulte Enviar um job de importação assincronamente.
Mapeamentos de tipos de dados
A tabela a seguir descreve os mapeamentos de tipos de dados entre o Tablestore e o AnalyticDB for MySQL.
|
Tablestore |
AnalyticDB for MySQL |
|
INTEGER (8 bytes) |
BIGINT (8 bytes) |
|
STRING |
VARCHAR |
|
BINARY |
BINARY |
|
DOUBLE |
DOUBLE |
|
BOOLEAN |
BOOLEAN |
Próximos passos
Para entender como a instrução INSERT INTO trata duplicatas, consulte INSERT INTO.
Para saber mais sobre opções de importação assíncrona e a sintaxe INSERT OVERWRITE SELECT, consulte INSERT OVERWRITE SELECT.