O PrestoDB é um mecanismo de consulta SQL distribuído e open source para big data que utiliza uma arquitetura de processamento massivamente paralelo (MPP). Ele oferece suporte a diversas fontes de dados, como MySQL, Elasticsearch e Tablestore. Após conectar o PrestoDB ao Tablestore, use-o para consultar, analisar, gravar e importar dados no Tablestore.
Informações gerais
O PrestoDB é um mecanismo de consulta SQL distribuído e open source para big data baseado em arquitetura MPP. Sua compatibilidade abrange várias fontes de dados, incluindo MySQL, Elasticsearch e Tablestore. Essa ferramenta atende a diferentes necessidades de processamento de dados, funcionando como ferramenta de consulta, ferramenta de extração, transformação e carga (ETL), ferramenta de teste de carga ou mecanismo de consulta unificado.
Como ferramenta de consulta, o PrestoDB permite executar consultas SQL para desenvolvimento diário e solução de problemas.
Na função de ferramenta ETL, ele viabiliza a replicação de dados entre tabelas ou instâncias e a cópia de informações provenientes de fontes distintas.
Para testes de carga, o PrestoDB suporta varredura ou gravação de dados em lote.
Atuando como mecanismo de consulta unificado em uma camada intermediária de dados, ele possibilita a conexão com múltiplas fontes heterogêneas.
Para integrar o Tablestore ao PrestoDB, estabeleça uma conexão primeiro. Depois disso, use o PrestoDB para consultar, analisar, gravar e importar dados armazenados no Tablestore.
Pré-requisitos
-
Tenha um servidor Linux ou macOS com os seguintes softwares instalados. Este tópico utiliza um servidor Linux como exemplo.
NotaCaso não possua um servidor Linux, utilize uma instância do Elastic Compute Service (ECS). Para mais detalhes, consulte Create an instance using the wizard.
Java 8 (64 bits) e ambiente de desenvolvimento Python 3 instalados.
PrestoDB instalado.
-
Baixe o arquivo prestodb-tablestore-connector correspondente à sua versão do PrestoDB. Faça o upload e descompacte o arquivo no diretório
pluginda pasta de instalação do PrestoDB.A tabela abaixo detalha a compatibilidade entre as versões do plugin prestodb-tablestore-connector e do PrestoDB.
Versão do plugin
Versão do PrestoDB
Descrição
0.280
Lançamento inicial. Compatível com PrestoDB 0.280 e versões posteriores.
Tenha em mãos as informações necessárias do Tablestore, como conta de acesso, detalhes da instância e dados da tabela.
-
Crie um AccessKey para um usuário do Resource Access Management (RAM) com permissões para operar o Tablestore. Para mais informações, consulte Obtain an AccessKey pair.
NotaSe o usuário RAM não tiver as permissões necessárias para o Tablestore, conceda-as antes de prosseguir. Consulte Grant permissions to a RAM user using a RAM policy para obter instruções.
Observações
Este recurso aplica-se apenas a wide table models.
-
O modo de gravação padrão do PrestoDB é UpdateRow; o modo PutRow não é suportado. Para gravar dados no Tablestore via PrestoDB, verifique se o parâmetro Allow Update da tabela de dados está definido como Yes. Caso contrário, a operação falhará.
ImportanteNão é possível gravar dados via PrestoDB em tabelas que utilizam tempo de vida (TTL) de índice de busca. Isso ocorre porque o uso de TTL exige definir o parâmetro Allow Update como No (valor diferente de -1).
Para utilizar o modo de gravação PutRow, entre no grupo DingTalk 36165029092 (
Tablestore Technical Support-3) e fale conosco.
Verifique a configuração Allow Update na aba Basic Details da tabela de dados no console ou chamando a operação DescribeTable.
Mapeamento de tipos de campo
Tablestore e PrestoDB utilizam tipos de dados distintos. A tabela a seguir apresenta o mapeamento entre esses tipos.
|
Tipo de campo no Tablestore |
Tipo de campo no PrestoDB |
|
string |
varchar |
|
integer |
bigint |
|
double |
double |
|
boolean |
boolean |
|
binary |
varbinary |
Procedimento
Para usar o Tablestore com PrestoDB, conecte o PrestoDB ao Tablestore, inicie a interface de linha de comando (CLI) SQL do PrestoDB, crie um schema e uma tabela de mapeamento e, em seguida, opere os dados via SQL.
Etapa 1: Conectar o PrestoDB ao Tablestore
Após instalar o PrestoDB, configure o catálogo e o schema para estabelecer a conexão com o Tablestore. O arquivo de configuração do catálogo encontra-se em etc/catalog/tablestore.properties.
Detalhes da configuração
Procedimento
Etapa 2: Executar a CLI SQL do Presto
Com a conexão estabelecida, inicie o Presto Server e execute instruções SQL.
-
Obtenha o arquivo executável do cliente.
-
Baixe o cliente PrestoDB.
Este tópico usa presto-cli-0.280-executable.jar como exemplo.
Salve o cliente PrestoDB no diretório
binda pasta de instalação do PrestoDB.-
No diretório
binda instalação do PrestoDB, execute o comando abaixo para obter o arquivo executável do cliente.# Rename the PrestoDB client file to presto. Replace presto-cli-0.280-executable.jar with the name of your client version. mv presto-cli-0.280-executable.jar presto # Grant the user permissions to operate the presto file. chmod +x presto
-
-
No diretório
binda instalação do PrestoDB, execute o comando para iniciar o Presto Server.ImportanteAo iniciar o Presto Server, inicie o coordenador (coordinator) e pelo menos um trabalhador (worker).
# You can start the server in the foreground or background. The foreground mode is more convenient for viewing operational logs. # Method 1: Run in the background ./launcher start # Method 2: Run in the foreground ./launcher run -
No diretório
binda instalação do PrestoDB, execute o seguinte comando para iniciar a CLI SQL.NotaPor padrão, o PrestoDB opera na porta 8080. Para alterá-la, modifique a configuração
http-server.http.portno arquivoetc/config.properties.Após alterar configurações, reinicie o servidor para aplicar as mudanças.
No comando,
./prestorepresenta o caminho relativo do executável do cliente dentro do diretóriobinda instalação do PrestoDB.
./presto --server localhost:8080 --catalog tablestore --schema defaultA tabela abaixo detalha os itens de configuração.
Item de configuração
Exemplo
Obrigatório
Descrição
--server
localhost:8080
Sim
URI do Presto Server. Substitua o valor conforme necessário. Esta configuração deve ser idêntica ao parâmetro
discovery.urino arquivoetc/config.propertiesdo diretório de instalação do PrestoDB.--catalog
tablestore
Sim
Nome do arquivo de configuração do catálogo. Defina como
tablestore, correspondendo ao nome do arquivo criado.--schema
default
Sim
Configuração do schema. Mantenha o valor padrão.
Etapa 3: Criar um schema e uma tabela de mapeamento
Ao optar pela configuração dinâmica de schema com meta table, crie manualmente um schema para configurar a instância do Tablestore conectada e realizar a autenticação do usuário. Em seguida, crie uma tabela de mapeamento para a tabela do Tablestore, permitindo consultas e análises.
Esta etapa é desnecessária se você estiver utilizando o modo de configuração por arquivo estático local.
-
Execute o comando abaixo para criar um schema.
O exemplo a seguir demonstra a criação de um Schema chamado testdb para acessar a instância myinstance do Tablestore.
CREATE SCHEMA tablestore.testdb WITH ( endpoint = 'https://myinstance.cn-hangzhou.ots.aliyuncs.com', instance_name = 'myinstance', access_id = '************************', access_key = '********************************' );Consulte a tabela abaixo para a descrição dos parâmetros.
Parâmetro
Exemplo
Obrigatório
Descrição
endpoint
https://myinstance.cn-hangzhou.ots.aliyuncs.com
Sim
Endpoint da instância do Tablestore. Para mais informações, consulte Endpoints.
instance_name
myinstance
Sim
Nome da instância do Tablestore. Consulte Instances para detalhes.
access_id
Sim
AccessKey ID da conta Alibaba Cloud ou do usuário RAM.
access_key
Sim
AccessKey secret da conta Alibaba Cloud ou do usuário RAM.
-
Execute o comando
use <SCHEMA_NAME>;para selecionar o schema criado.Substitua
<SCHEMA_NAME>pelo nome do seu schema. Use o comandoshow schemas;para listar os schemas disponíveis. -
Execute o comando a seguir para criar uma tabela de mapeamento para a tabela de dados do Tablestore.
ImportanteAtente-se aos pontos abaixo ao criar uma tabela de mapeamento:
Garanta que os tipos de campo na tabela de mapeamento correspondam aos da tabela de dados do Tablestore. Consulte Field type mapping para mais informações.
O nome da tabela de mapeamento deve ser idêntico ao nome da tabela no Tablestore.
A propriedade
table_namena instrução CREATE TABLE vincula a tabela do PrestoDB à tabela real no Tablestore. É possível ter múltiplas tabelas de mapeamento com nomes diferentes apontando para a mesma tabela de dados.A tabela de mapeamento deve conter todas as colunas de chave primária da tabela de dados, mas pode incluir apenas um subconjunto das colunas de atributo.
Os nomes e a ordem das colunas de chave primária na tabela de mapeamento devem coincidir com os da tabela do Tablestore. Mapeie cada coluna de atributo à sua equivalente no Tablestore usando o parâmetro
origin_name.
Considere uma tabela de dados chamada main_table, contendo duas colunas de chave primária (gid e uid) e três colunas de atributo (col1, col2 e col3).
O exemplo SQL abaixo cria uma tabela de mapeamento com o mesmo nome para a tabela de dados main_table do Tablestore.
CREATE TABLE if not exists main_table ( gid bigint, uid bigint, c1 boolean with (origin_name = 'col1'), c2 bigint with (origin_name = 'col2'), c3 varchar with (origin_name = 'col3') ) WITH ( table_name = 'main_table' );
Etapa 4: Operar dados com SQL
Antes de manipular dados do Tablestore via SQL, assegure-se de ter executado o comando use <SCHEMA_NAME>; para selecionar o schema adequado.
Instruções SQL permitem consultar configurações de schema e metadados de tabelas, além de ler e gravar dados nas tabelas do Tablestore. Para mais exemplos de SQL, consulte Common SQL examples.
-
Consulte as configurações de schema.
-
Obtenha a lista de schemas
show schemas; -
Liste as tabelas de um schema específico
show tables;
-
-
Visualize os metadados de uma tabela específica
Substitua
<TABLE_NAME>pelo nome real da tabela.describe <TABLE_NAME>; -
Opere os dados.
Leia e grave dados no Tablestore.
-
Grave dados
-
Insira uma linha de dados
O exemplo abaixo insere uma linha de dados na tabela main_table.
insert into main_table values(10001,10001,true,100,'hangzhou'); -
Importe dados em lote
ImportanteAntes de importar dados em lote, verifique se a tabela de destino já foi criada e se seu schema corresponde ao da tabela de origem.
O exemplo a seguir importa dados das colunas gid, uid, c1, c2 e c3 da tabela main_table para sampletable, filtrando registros onde gid é maior que 0 e uid é menor que 10000.
insert into sampletable select gid, uid, c1, c2, c3 from main_table where gid > 0 and uid < 100000;
-
-
Leia dados
Este exemplo consulta linhas na tabela sampletable onde o valor da coluna gid é maior que 0, uid é menor que 10 e c1 é verdadeiro.
select * from sampletable where gid > 0 and uid < 10 and c1 = true;
-
Faturamento
Quando um mecanismo de computação acessa o Tablestore, o service mede e fatura o uso com base no throughput de leitura e gravação das requisições realizadas. Para mais informações, consulte Billing overview.
Referências
Outros mecanismos de computação, como MaxCompute, Spark, Function Compute e Flink, também podem consultar e analisar dados em tabelas do Tablestore. Consulte Compute and analysis overview para saber mais. Além disso, utilize os recursos de consulta SQL e agregação por índice de busca do próprio Tablestore para análise de dados. Veja SQL query e Search index.
O service de integração de dados do DataWorks também possibilita a migração de dados do Tablestore entre tabelas ou instâncias. Consulte Synchronize data from a Tablestore table to another Tablestore table para detalhes.
Para visualizar dados em gráficos ou outros formatos, utilize DataV ou Grafana. Consulte Data visualization para mais informações.