Migre dados do Apache Doris para o ApsaraDB for SelectDB usando o recurso de migração de dados do ApsaraDB for SelectDB, OSS, um catalog ou X2Doris. Escolha o método mais adequado às necessidades do seu negócio. Migre dados do Apache Doris para o ApsaraDB for SelectDB usando o recurso de migração de dados do ApsaraDB for SelectDB, OSS ou um catalog. Escolha o método mais adequado às necessidades do seu negócio.
Migre dados do Apache Doris para o
ApsaraDB for SelectDB
usando o recurso de migração de dados do
ApsaraDB for SelectDB
, OSS, um catalog ou X2Doris. Escolha o método mais adequado às necessidades do seu negócio.
Seleção de método
A tabela a seguir compara os métodos de migração disponíveis e seus casos de uso.
|
Método |
Casos de uso |
Benefícios |
Referência |
|
Migração com o recurso de migração de dados do ApsaraDB for SelectDB (Recomendado) |
Indicado para todos os cenários. |
|
|
|
Uso de um bucket do OSS |
Ideal para grandes volumes de dados já armazenados na Alibaba Cloud. |
|
|
|
Uso de um catalog |
Recomendado quando os dados estão armazenados na Alibaba Cloud e o volume é pequeno. Nota
Este método é adequado para cenários como a migração de dados de clusters do Alibaba Cloud E-MapReduce (EMR). |
|
As seções a seguir descrevem como migrar dados offline do Doris para o SelectDB usando um catalog ou exportando e importando via OSS.
Usar um bucket do OSS para migrar dados
Pré-requisitos
-
Requisitos do OSS:
O OSS deve estar ativado. Para mais informações, consulte Ativar o OSS.
O usuário RAM usado para acessar o OSS deve ter permissões de leitura e escrita nos objetos do OSS. Para mais informações sobre como conceder permissões, consulte Visão geral de permissões e controle de acesso.
-
Requisitos da conta:
Crie uma conta de banco de dados. Para mais informações, consulte Gerenciamento de contas.
Preparativos
Crie um bucket no OSS. Para mais informações, consulte Criar buckets.
Certifique-se de que o bucket do OSS e sua instância do ApsaraDB for SelectDB estejam na mesma região.
Neste exemplo, o bucket recebe o nome test-selectdb.
Etapa 1: Exportar os dados de source
-
Faça login no cluster de source.
Para obter informações sobre como fazer login em um banco de dados Doris autogerenciado, consulte Conexão via protocolo MySQL - Apache Doris.
-
(Opcional) Prepare os dados de amostra.
Se você já tiver dados prontos para migração, pule esta etapa.
-
Crie um banco de dados.
Execute a seguinte instrução para criar um banco de dados:
CREATE DATABASE source_db; -
Crie uma tabela.
Execute a seguinte instrução para criar uma tabela:
CREATE TABLE IF NOT EXISTS source_tb ( `c1` int(11) NULL, `c2` string NULL, `c3` bigint NULL ) DISTRIBUTED BY HASH(c1) BUCKETS 20 PROPERTIES("replication_num" = "1"); -
Insira dados de amostra.
INSERT INTO source_tb VALUES (1, 'doris', 18), (2, 'nereids', 20), (3, 'pipelibe', 99999), (4, 'Apache', 122123455), (5, null, null); -
Verifique os dados.
Execute a seguinte instrução para verificar os dados de amostra:
SELECT * FROM `source_tb` limit 10;O seguinte resultado é retornado:
+--------------+--------------+--------------+ | c1 | c2 | c3 | +--------------+--------------+--------------+ | 1 | doris | 18 | | 3 | pipelibe | 99999 | | 5 | | | | 2 | nereids | 20 | | 4 | Apache | 122123455 | +--------------+--------------+--------------+
-
-
Faça backup da instrução
CREATE TABLEda tabela de source.Use a instrução
SHOW CREATE TABLEpara visualizar a instrução de criação da tabela de destino e faça o backup. Veja um exemplo abaixo.SHOW CREATE TABLE source_tb ;O seguinte resultado é retornado:
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | source_tb | CREATE TABLE `source_tb` ( `c1` int NULL, `c2` text NULL, `c3` bigint NULL ) ENGINE=OLAP DUPLICATE KEY(`c1`) DISTRIBUTED BY HASH(`c1`) BUCKETS 20 PROPERTIES ( "file_cache_ttl_seconds" = "0", "is_being_synced" = "false", "storage_medium" = "hdd", "storage_format" = "V2", "inverted_index_storage_format" = "V2", "light_schema_change" = "true", "disable_auto_compaction" = "false", "enable_single_replica_compaction" = "false", "group_commit_interval_ms" = "10000", "group_commit_data_bytes" = "134217728" ); | +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Rows returned: [1], Time taken: [22ms] -
Exporte os dados para o bucket do OSS.
Execute a instrução EXPORT para exportar os dados para o bucket do OSS.
Sintaxe:
EXPORT TABLE table_name [PARTITION (p1[,p2])] [WHERE] TO export_path [opt_properties] WITH S3 [s3_properties];A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
table_name
Sim
Nome da tabela da qual você deseja exportar dados.
partition
Não
Especifica as partições da tabela que você deseja exportar.
where
Não
Filtra os dados a serem exportados.
export_path
Sim
Caminho onde os arquivos exportados serão armazenados.
Pode ser um diretório ou um diretório com prefixo de arquivo, como
s3://path/to/my_file_.opt_properties
Não
Especifica propriedades para o trabalho de exportação. Para mais informações, consulte Sintaxe de opt_properties.
s3_properties
Sim
Especifica propriedades relacionadas ao protocolo S3. Para mais informações, consulte Sintaxe de s3_properties.
Sintaxe de opt_properties:
[PROPERTIES ("key"="value", ...)]É possível especificar os seguintes parâmetros.
Parâmetro
Obrigatório
Descrição
label
Não
Rótulo para o trabalho de exportação. Se nenhum rótulo for especificado, o sistema gerará um automaticamente.
column_separator
Não
Delimitador de coluna para os dados exportados.
O valor padrão é
\t. Este parâmetro suporta caracteres multibyte e é usado apenas para o formato de arquivo CSV.line_delimiter
Não
Delimitador de linha para os dados exportados.
O padrão é
\ne suporta caracteres multibyte. Este parâmetro é usado apenas para o formato de arquivo CSV.columns
Não
Especifica as colunas da tabela que você deseja exportar.
format
Não
Formato de arquivo dos dados exportados.
Formatos suportados: parquet, orc, csv, csv_with_names e csv_with_names_and_types.
O formato padrão é csv.
max_file_size
Não
Tamanho máximo de um único arquivo exportado. Se o conjunto de resultados exceder esse tamanho, ele será dividido em vários arquivos.
-
Intervalo de valores: 5 MB a 2 GB
-
Valor padrão: 1 GB
Ao especificar o formato de arquivo de exportação como ORC (ou seja, o parâmetro format_as é ORC), o tamanho real do arquivo dividido será
ceil (max_file_size/64) * 64MB.parallelism
Não
Paralelismo do trabalho de exportação. O valor padrão é 1.
Um trabalho de exportação inicia um número de threads igual ao valor de paralelismo para executar instruções
select into outfile. (Se o valor de paralelismo for maior que o número de tablets na tabela, o sistema definirá automaticamente o paralelismo como o número de tablets. Isso significa que cada instruçãoselect into outfileserá responsável por um tablet).delete_existing_files
Não
Define se todos os arquivos no caminho de destino devem ser excluídos.
false(padrão): Não exclui arquivos no caminho de destino.true: Exclui todos os arquivos no diretório especificado por
export_pathe depois exporta os dados para esse diretório. Por exemplo:-
Se
"file_path" = "/user/tmp", todos os arquivos e diretórios em"/user/"serão excluídos. -
Se
"file_path" = "/user/tmp/", todos os arquivos e diretórios em"/user/tmp/"serão excluídos.
Aviso-
Especificar
delete_existing_files = trueé uma operação perigosa. Recomendamos usar essa configuração apenas em ambiente de teste. -
Para usar o parâmetro delete_existing_files, envie um ticket para o suporte da Alibaba Cloud. O parâmetro delete_existing_files só entrará em vigor após a equipe técnica do SelectDB adicionar a configuração
enable_delete_existing_files = trueao arquivo fe.conf e reiniciar o FE.
with_bom
Não
O valor padrão é
false. Se definido comotrue, os arquivos exportados serão codificados em UTF-8 com Byte Order Mark (BOM). Este parâmetro é válido apenas para formatos de arquivo relacionados a CSV.timeout
Não
Tempo limite para o trabalho de exportação. O valor padrão é 2 horas. Unidade: segundos.
Sintaxe de s3_properties:
("key"="value"[,...])É possível especificar os seguintes parâmetros.
Parâmetro
Obrigatório
Descrição
s3.endpoint
Sim
Endpoint do destino de armazenamento compatível com S3.
Este exemplo usa o Alibaba Cloud OSS para migração. Nesse caso, o parâmetro corresponde ao Endpoint de acesso a dados do OSS
Endpoint. Para obter o endpoint, consulte Regiões e endpoints.ImportanteCertifique-se de que o bucket do OSS e sua instância do ApsaraDB for SelectDB estejam na mesma região.
s3.access_key
Sim
AccessKey ID do destino de armazenamento compatível com S3.
Este exemplo usa o Alibaba Cloud OSS para migração. Corresponde ao
AccessKey IDdo usuário RAM usado para acessar o OSS.s3.secret_key
Sim
AccessKey secret do destino de armazenamento compatível com S3.
Este exemplo usa o Alibaba Cloud OSS para migração. Corresponde ao
AccessKey secretdo usuário RAM que acessa o OSS.s3.region
Sim
Região do destino de armazenamento compatível com S3.
Como este exemplo usa o Alibaba Cloud OSS para migração, este parâmetro corresponde à região do bucket do OSS. Para obter informações sobre como identificar a região, consulte Regiões e endpoints.
use_path_style
Não
O padrão é
false.Por padrão, o SDK S3 usa o estilo virtual-hosted para acesso.
No entanto, alguns sistemas de armazenamento de objetos podem não suportar o acesso no estilo virtual-hosted. Adicione o parâmetro
use_path_stylepara forçar o acesso no estilo path-style.NotaAtualmente, as URIs suportam três esquemas:
http://,https://es3://.-
Se você usar
http://ouhttps://, o parâmetrouse_path_stylecontrolará se o acesso no estilo path-style será usado para o destino do protocolo S3. -
Se você usar
s3://, o destino S3 será acessado usando o estilo virtual-hosted.
O código a seguir fornece um exemplo:
EXPORT TABLE source_tb -- Export data from the source_tb table. TO "s3://test-selectdb/test/" -- Export data to the test folder in the test-selectdb bucket. PROPERTIES ( "label" = "test_export", -- A label for the job. "format" = "orc", -- The storage format of the file is ORC. "max_file_size" = '2048MB', -- The size for splitting files. 'parallelism' = '10' -- The export parallelism is 10. ) WITH s3 ( "s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com", -- The URL for accessing the OSS bucket. "s3.region" = "oss-cn-hangzhou", -- The region of the OSS bucket. "s3.secret_key"="yourAccessKeySecret", -- The AccessKey secret of the RAM user for accessing OSS. "s3.access_key" = "LTAI****************" -- The AccessKey ID of the RAM user for accessing OSS. ); -
-
Verifique se os dados foram exportados.
Valide a exportação de dados de uma das seguintes maneiras:
-
Execute uma instrução.
Em um cliente conectado ao Doris, execute a seguinte instrução para verificar o status da exportação:
SHOW export;Exportação bem-sucedida: Se o
StateforFINISHED, a exportação foi concluída com sucesso.Falha na exportação: Se o
Stateno resultado forCANCELLED, a exportação falhou. Use as informações emErrorMsgpara solucionar o problema.
-
Use o console do OSS.
Faça login no console do OSS e verifique se os arquivos correspondentes foram gerados no caminho de exportação especificado.
-
Etapa 2: Importar dados
Faça login no cluster de destino. Para mais informações, consulte Conectar-se a uma instância do ApsaraDB for SelectDB usando o DMS.
Crie a tabela de destino.
-
Crie um banco de dados.
-
(Opcional) Crie um banco de dados.
Se você já tiver um banco de dados de destino, pule esta etapa.
Execute a seguinte instrução para criar um banco de dados:
CREATE DATABASE aim_db; -
Crie uma tabela.
Execute a instrução
CREATE TABLEda qual você fez backup na etapa de exportação.O código a seguir fornece um exemplo:
CREATE TABLE IF NOT EXISTS aim_tb ( `c1` int(11) NULL, `c2` string NULL, `c3` bigint NULL ) ENGINE=OLAP DUPLICATE KEY(`c1`) DISTRIBUTED BY HASH(c1) BUCKETS 20 PROPERTIES("replication_num" = "1");
-
-
Importe os dados.
Use o S3 load para importar dados do OSS para o SelectDB. Para a sintaxe do
S3 loade mais exemplos, consulte OSS Load.O código a seguir fornece um exemplo:
LOAD LABEL label_1 -- A unique identifier for the job. You can specify a custom name. ( DATA INFILE("s3://test-selectdb/test/59ab2e9dc4ec4c04-9e50e45a6fda2c8e_0.orc") -- The OSS path of the data file exported in the previous step. INTO TABLE aim_tb -- The name of the table to which you want to import data. FORMAT AS ORC -- The format of the import file, which must be the same as the exported file format. ) WITH S3 ( "AWS_PROVIDER" = "OSS", "AWS_REGION" = "oss-cn-hangzhou", -- The region of the OSS bucket. "AWS_ENDPOINT" = "oss-cn-hangzhou-internal.aliyuncs.com", -- The URL for accessing the OSS bucket. "AWS_ACCESS_KEY" = "LTAI****************", -- The AccessKey ID of the RAM user for accessing OSS. "AWS_SECRET_KEY"="yourAccessKeySecret" -- The AccessKey secret of the RAM user for accessing OSS. ) PROPERTIES ( "timeout" = "3600" -- The timeout period for the import job. ); -
Verifique os resultados da importação.
Confira os resultados da importação de uma das seguintes formas:
-
Execute uma instrução.
Em um cliente conectado ao SelectDB, execute a seguinte instrução para verificar o status da importação.
SHOW load;Importação bem-sucedida: Se o
Stateno resultado forFINISHED, a importação de dados foi concluída com sucesso. -
Consulte a tabela de destino. O código a seguir fornece um exemplo:
SELECT * FROM `aim_tb` limit 10;O seguinte resultado é retornado:
+--------------+--------------+--------------+ | c1 | c2 | c3 | +--------------+--------------+--------------+ | 1 | doris | 18 | | 3 | pipelibe | 99999 | | 5 | | | | 2 | nereids | 20 | | 4 | Apache | 122123455 | +--------------+--------------+--------------+Os dados na tabela de destino correspondem aos dados de source da Etapa 1: Exportar os dados de source, confirmando o sucesso da importação.
-
Usar um catalog para migrar dados
Pré-requisitos
-
Garanta a conectividade de rede entre a instância do Doris e a instância do SelectDB.
A instância do Doris e a instância do SelectDB devem estar na mesma VPC. Se estiverem em VPCs diferentes, resolva primeiro o problema de conectividade de rede. Para mais informações, consulte Como resolver problemas de conectividade de rede entre uma instância do SelectDB e uma fonte de dados?
O endereço IP da instância do Doris deve ter sido adicionado à lista de permissões do SelectDB. Para mais informações, consulte Definir uma lista de permissões.
-
Se a instância do Doris usar uma lista de permissões, adicione o intervalo de endereços IP da instância do SelectDB à lista de permissões da instância do Doris.
Para obter o intervalo de IPs da VPC onde sua instância do SelectDB reside, consulte Como encontrar o bloco CIDR de IP da VPC onde minha instância do ApsaraDB for SelectDB está localizada?
Para obter o endereço IP público da sua instância do SelectDB, use o comando
pingem seu endpoint público SelectDB.
-
A versão do SelectDB não pode ser inferior à versão do Doris.
NotaO SelectDB é um data warehouse em tempo real nativo da nuvem construído sobre o Doris. Para entender a relação entre suas versões, consulte as Notas de lançamento do kernel.
Familiarize-se com catalogs e suas operações básicas. Para mais informações, consulte Data lakehouse.
Ambiente de amostra
Este exemplo migra dados da tabela doris_t no banco de dados doris_db do Doris para a tabela test_doris2SelectDB no banco de dados test_db do SelectDB. Modifique os parâmetros conforme suas necessidades reais. O ambiente do exemplo é o seguinte:
Banco de dados de destino:
test_dbTabela de destino:
test_doris2SelectDBBanco de dados de source:
doris_dbTabela de source:
doris_t
Preparar os dados de source
Faça login no seu banco de dados Doris de source e execute as seguintes operações:
-
Crie um banco de dados.
CREATE DATABASE doris_db; -
Crie uma tabela.
CREATE TABLE doris_t ( id int, name string, age int ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1"); -
Insira dados.
INSERT INTO doris_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
Procedimento
Conecte-se à instância do SelectDB. Para mais informações, consulte Conectar-se a uma instância do Cloud Database SelectDB usando um cliente MySQL.
-
Crie um JDBC catalog para o banco de dados Doris.
CREATE CATALOG doris_catalog PROPERTIES ( "type"="jdbc", "user"="root", "password"="123456", "jdbc_url" = "jdbc:mysql://127.0.0.1:9030/doris_db", "driver_url" = "mysql-connector-java-8.0.25.jar", "driver_class" = "com.mysql.cj.jdbc.Driver" )Parâmetro
Obrigatório
Padrão
Descrição
user
Sim
Nenhum
Nome de usuário da conta do banco de dados Doris.
password
Sim
Nenhum
Senha da conta do banco de dados Doris.
jdbc_url
Sim
Nenhum
String de conexão JDBC, que deve incluir o endereço de conexão do banco de dados Doris.
Formato:
jdbc:mysql://<host>:<port>/<database>-
host: Endereço IP do banco de dados Doris. -
port: Número da porta do banco de dados Doris. -
database: Nome do banco de dados que você deseja acessar.
Exemplo:
jdbc:mysql://127.0.0.1:9030/doris_dbdriver_url
Sim
Nenhum
Nome do arquivo JAR do driver JDBC.
Nota-
Recomendamos o uso de
mysql-connector-java-8.0.25.jar. -
Caso precise usar um arquivo JAR diferente, envie um ticket de suporte.
driver_class
Sim
Nenhum
Nome da classe do driver JDBC.
A configuração recomendada é
com.mysql.cj.jdbc.Driver.lower_case_table_names
NotaEste parâmetro foi renomeado para
lower_case_meta_namesna versão 4.0.Não
"false"
Define se os nomes de bancos de dados e tabelas da fonte de dados JDBC externa devem ser sincronizados em letras minúsculas.
true: Permite consultar bancos de dados e tabelas com nomes que não estejam em minúsculas, mantendo um mapeamento dos nomes em minúsculas para seus nomes reais no sistema remoto. Nesse caso, os nomes de bancos de dados, tabelas e colunas são convertidos para minúsculas.false: Não permite consultar bancos de dados e tabelas com nomes que não estejam em minúsculas.Importante-
Para o SelectDB 3.0:
-
Quando o parâmetro
lower_case_table_namesdo FE estiver definido como1ou2, o parâmetrolower_case_table_namesdo Catalog deve ser definido comotrue. -
Quando o parâmetro
lower_case_table_namesdo FE estiver definido como0, o parâmetro do Catalog pode sertrueoufalse.
-
-
Para o SelectDB 4.0:
-
Quando o parâmetro
lower_case_table_namesdo FE estiver definido como0ou2, os nomes de bancos de dados, tabelas ou colunas não serão convertidos. -
Quando o parâmetro
lower_case_table_namesdo FE estiver definido como1, os nomes das tabelas serão convertidos para minúsculas, enquanto os nomes de bancos de dados e colunas não serão alterados.
-
only_specified_database
Não
"false"
Define se apenas o banco de dados especificado deve ser sincronizado.
true: Sincroniza apenas o banco de dados especificado na URL JDBC.false: Sincroniza todos os bancos de dados acessíveis através da URL JDBC.include_database_list
Não
""
Quando
only_specified_database=true, especifique um ou mais bancos de dados para sincronizar, separados por vírgulas. Os nomes dos bancos de dados diferenciam maiúsculas de minúsculas.exclude_database_list
Não
""
Quando
only_specified_database=true, especifique os bancos de dados a serem excluídos da sincronização, separados por vírgulas. Os nomes dos bancos de dados diferenciam maiúsculas de minúsculas.meta_names_mapping
Não
""
Se uma fonte de dados externa possuir nomes idênticos, diferenciando-se apenas pelo uso de maiúsculas e minúsculas (como DORIS e doris), o Doris reportará um erro ao consultar o Catalog devido à ambiguidade. Para resolver esse conflito, configure o parâmetro
meta_names_mapping.Para mais informações, consulte Sincronização de nomes em minúsculas.
ImportanteEste parâmetro aplica-se apenas à versão 4.0 do SelectDB.
-
-
Visualize os catalogs.
SHOW CATALOGS; -- Check whether the catalog was created successfully.O seguinte resultado é retornado:
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | 436009309195 | doris_catalog | jdbc | | 2024-08-06 17:09:08.058 | 2024-07-19 18:04:37 | | | 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ -
(Opcional) Alterne para o catalog externo
doris_catalog.Visualize e acesse dados no catalog externo
doris_catalogda mesma forma que você acessa dados no catalog interno.NotaAtualmente, o ApsaraDB for SelectDB suporta apenas operações de leitura em dados de um External Catalog.
SWITCH doris_catalog; -
(Opcional) Alterne para o catalog interno.
Se você não executou a etapa 4, pule esta etapa.
SWITCH internal; -
(Opcional) Crie um banco de dados.
Se você já tiver um banco de dados de destino, pule esta etapa.
CREATE database test_db; -
Alterne para o banco de dados de destino.
USE test_db; -
Crie uma tabela.
Se a tabela de destino já existir, garanta que os tipos de dados das colunas correspondam corretamente aos da tabela de source.
Se você não tiver uma tabela de destino, assegure-se de que os tipos de dados das colunas mapeiem corretamente para a tabela de source do Doris ao criar a tabela.
Para mais informações sobre mapeamento de colunas, consulte Mapeamentos de tipos de dados.
CREATE TABLE test_doris2SelectDB ( id int, name string, age int ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1"); -
Migre os dados.
INSERT INTO test_doris2SelectDB SELECT * FROM doris_catalog.doris_db.doris_t; -
Verifique a importação de dados.
SELECT * FROM test_doris2SelectDB;
Migrar dados incrementais
Em ambientes de produção, os dados do Doris incluem dados offline e incrementais. Para migrar dados incrementais para o SelectDB visando aceleração de consultas, considere os seguintes métodos:
Escreva uma cópia dos dados no SelectDB em paralelo durante a geração dos dados no Doris.
Use jobs periódicos para ler dados particionados do Doris e gravá-los no SelectDB.