O OSS Load permite importar centenas de gigabytes de dados por vez do Object Storage Service (OSS) para o ApsaraDB for SelectDB pela rede interna. A importação ocorre de forma assíncrona: após o envio do job, o SelectDB processa os arquivos em segundo plano enquanto você continua trabalhando.
Quando usar o OSS Load
O OSS Load é a escolha ideal quando:
Você precisa importar grandes lotes de arquivos (de dezenas a centenas de gigabytes)
Os arquivos estão armazenados em um bucket do OSS na mesma região da instância do SelectDB
É necessário carregar arquivos CSV, PARQUET ou ORC
O OSS Load utiliza internamente o protocolo S3; portanto, a sintaxe contém as palavras-chave AWS e S3. Esse comportamento é esperado, pois o ApsaraDB for SelectDB suporta qualquer armazenamento de objetos compatível com S3, e o acesso ao OSS ocorre via endpoint compatível com S3.
Pré-requisitos
Antes de começar, verifique se você tem:
Um par de AccessKey. Consulte Criar um par de AccessKey.
Um bucket do OSS na mesma região da instância do ApsaraDB for SelectDB. Consulte Introdução ao uso do console do OSS.
Acesso ao OSS via Virtual Private Cloud (VPC), pois o OSS Load usa o endpoint interno da VPC, não o endpoint público
Sintaxe
LOAD LABEL <load_label>
(
data_desc1[, data_desc2, ...]
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "<region>",
"AWS_ENDPOINT" = "<endpoint>",
"AWS_ACCESS_KEY" = "<AccessKey ID>",
"AWS_SECRET_KEY" = "<AccessKey secret>"
)
PROPERTIES
(
"key1" = "value1", ...
);
O caminho do bucket do OSS deve começar com s3://.
Parâmetros
Descrição dos dados (data_desc)
Cada bloco data_desc descreve um grupo de arquivos para importação. A sintaxe completa é:
[MERGE|APPEND|DELETE]
DATA INFILE
(
"file_path1"[, "file_path2", ...]
)
[NEGATIVE]
INTO TABLE `<table_name>`
[PARTITION (p1, p2, ...)]
[COLUMNS TERMINATED BY "<column_separator>"]
[FORMAT AS "<file_type>"]
[(column_list)]
[COLUMNS FROM PATH AS (c1, c2, ...)]
[PRECEDING FILTER predicate]
[SET (column_mapping)]
[WHERE predicate]
[DELETE ON expr]
[ORDER BY source_sequence]
[PROPERTIES ("key1"="value1", ...)]
|
Parâmetro |
Descrição |
||
|
|
APPEND |
DELETE` |
Tipo de mesclagem de dados. Padrão: |
|
|
Caminho do(s) arquivo(s) para importar. Suporta caracteres curinga. Deve ser um caminho de arquivo, não de diretório. |
||
|
|
Importa dados usando um método negativo, que inverte valores inteiros em colunas agregadas por SUM para compensar dados incorretos importados anteriormente. Aplica-se apenas a tabelas que usam agregação SUM com colunas inteiras. |
||
|
|
Partições de destino da importação. Dados fora das partições especificadas são ignorados. |
||
|
|
Delimitador de coluna. Válido apenas para arquivos CSV. Deve ter um único byte. |
||
|
|
Formato do arquivo. Valores válidos: |
||
|
|
Ordem das colunas no arquivo de origem. Consulte Converter dados de origem. |
||
|
|
Colunas a extrair do caminho do arquivo. |
||
|
|
Condições predefinidas para filtragem de dados. Os dados são mesclados sequencialmente às linhas de dados de origem com base nos valores dos parâmetros |
||
|
|
Funções de transformação de colunas aplicadas aos dados de origem. |
||
|
|
Condições usadas para filtrar os dados importados. |
||
|
|
Uso exclusivo com o tipo |
||
|
|
Coluna de sequência para a importação. Aplica-se apenas a tabelas no modelo Unique Key, garantindo a ordenação dos dados durante a importação. |
||
|
|
Parâmetros adicionais de formato. Para arquivos JSON, defina |
Parâmetros de conexão do OSS (WITH S3)
|
Parâmetro |
Descrição |
|
|
Provedor de armazenamento de objetos. Defina como |
|
|
Região onde o bucket do OSS está localizado. |
|
|
Endpoint usado para acessar os dados no OSS. Consulte Regiões e endpoints. O bucket do OSS e a instância do SelectDB devem estar na mesma região. |
|
|
AccessKey ID usado para acessar o OSS. |
|
|
AccessKey secret usado para acessar o OSS. |
Propriedades do job (PROPERTIES)
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Tempo limite do job de importação, em segundos. |
|
|
|
Proporção máxima de linhas filtráveis devido a problemas de qualidade dos dados. Valores válidos: 0 a 1. |
|
|
|
Memória máxima disponível para o job de importação, em bytes. |
|
|
|
Indica se o modo estrito deve ser ativado para o job de importação. |
|
|
|
Fuso horário para funções relacionadas a tempo, como |
|
|
|
Número de tarefas de importação simultâneas. Aumente este valor para acelerar importações grandes. |
|
|
— |
Quantidade de tarefas simultâneas para envio de dados em lotes. Limitado pela configuração do BE |
|
|
|
Define se todos os dados devem ser importados para um único tablet por partição. Aplica-se apenas a tabelas no modelo Duplicate Key com particionamento aleatório. |
Importar dados do OSS
Este exemplo cria uma tabela, prepara um arquivo CSV de amostra no OSS e o carrega usando o OSS Load.
Etapa 1: Crie a tabela de destino.
CREATE TABLE test_table
(
id int,
name varchar(50),
age int,
address varchar(50),
url varchar(500)
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES("replication_num" = "1");
Etapa 2: Envie seu arquivo de dados para o OSS.
Faça upload de um arquivo CSV chamado test_file.txt para o seu bucket do OSS. O conteúdo do arquivo deve ser semelhante a:
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,23,shenzhen,http://example.com
Etapa 3: Envie o job de importação.
LOAD LABEL test_db.test_label_1
(
DATA INFILE("s3://your_bucket_name/test_file.txt")
INTO TABLE test_table
COLUMNS TERMINATED BY ","
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "oss-cn-beijing",
"AWS_ENDPOINT" = "oss-cn-beijing-internal.aliyuncs.com",
"AWS_ACCESS_KEY" = "<your_access_key>",
"AWS_SECRET_KEY" = "<your_secret_key>"
)
PROPERTIES
(
"timeout" = "3600"
);
A instrução LOAD possui quatro seções:
LABEL: Identificador exclusivo deste job de importação, usado para consultar seu status e cancelá-lo, se necessário.
Declaração de dados: Caminho do arquivo de origem, formato e tabela de destino.
WITH S3: Credenciais de conexão e endpoint do OSS.
PROPERTIES: Configurações no nível do job, como tempo limite.
Monitorar e gerenciar jobs de importação
Verificar o status do job
O OSS Load opera de forma assíncrona. Após enviar o job, use SHOW LOAD para acompanhar seu progresso.
SHOW LOAD
[FROM <db_name>]
[
WHERE
[LABEL [ = "your_label" | LIKE "label_matcher"]]
[STATE = ["PENDING"|"ETL"|"LOADING"|"FINISHED"|"CANCELLED"]]
]
[ORDER BY ...]
[LIMIT limit][OFFSET offset];
|
Parâmetro |
Padrão |
Descrição |
|
|
Banco de dados atual |
Banco de dados a ser consultado. |
|
|
— |
Filtra por rótulo. Suporta correspondência exata ( |
|
|
— |
Filtra pelo estado do job. |
|
|
— |
Ordena os resultados. |
|
|
Todos os registros |
Número máximo de registros a retornar. |
|
|
|
Quantidade de registros a pular. |
Exemplos:
Consulte jobs em example_db com rótulos correspondentes a 2014_01_02, retornando os 10 mais antigos:
SHOW LOAD FROM example_db WHERE LABEL LIKE "2014_01_02" LIMIT 10;
Consulte um job específico e ordene pelo horário de início:
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" ORDER BY LoadStartTime DESC;
Consulte jobs atualmente no estado LOADING:
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" AND STATE = "LOADING";
Consulte com paginação (pule os primeiros 5 e retorne os próximos 10):
SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC LIMIT 5,10;
SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC LIMIT 10 OFFSET 5;
Cancelar um job de importação
Cancele jobs que ainda não estejam no estado FINISHED ou CANCELLED. Após o cancelamento, quaisquer dados gravados pelo job sofrem rollback.
CANCEL LOAD
[FROM <db_name>]
WHERE [LABEL = "<load_label>" | LABEL LIKE "<label_pattern>"];
|
Parâmetro |
Padrão |
Descrição |
|
|
Banco de dados atual |
Banco de dados que contém o job de importação. |
|
|
— |
Rótulo do job a ser cancelado. Suporta correspondência exata e correspondência por padrão com |
Exemplos:
Cancele um job específico:
CANCEL LOAD
FROM example_db
WHERE LABEL = "example_db_test_load_label";
Cancele todos os jobs cujos rótulos comecem com example_:
CANCEL LOAD
FROM example_db
WHERE LABEL LIKE "example_";
Solução de problemas
A importação atinge o tempo limite
O tempo limite padrão é de 4 horas (14.400 segundos). Caso um job ultrapasse esse limite, evite simplesmente aumentar o timeout, pois novas tentativas longas tornam-se custosas quando o job falha tardiamente.
Em vez disso, divida arquivos grandes em menores e importe-os em múltiplos jobs.
Se o volume de dados estiver dentro do esperado, mas o job ainda assim atingir o tempo limite, aumente o valor de load_parallelism para executar mais tarefas simultaneamente e ajuste o parâmetro timeout adequadamente.