Para conectar o PrestoDB ao Tablestore, configure o Catalog e o Schema do Presto Server. Após a conexão, use os exemplos de SQL deste tópico para operar dados.
Configuração do servidor
Configure o Catalog e o Schema do Presto Server.
A configuração do Catalog define as configurações do conector e o modo de configuração do Schema. Configure o Schema usando configuração dinâmica com uma meta table ou configuração estática com um arquivo local.
Na configuração dinâmica (modo meta table), não é necessário configurar o Schema antes de iniciar o Presto Server. Crie o Schema e as tabelas de mapeamento após iniciar a interface de linha de comando (CLI) SQL.
Configuração do Catalog
O arquivo de configuração do Catalog está localizado em etc/catalog/tablestore.properties na pasta de instalação do PrestoDB.
connector.name=tablestore
tablestore.schema-mode=meta-table
#tablestore.schema-mode=file
tablestore.schema-file=/users/test/tablestore/presto/tablestore.schema
tablestore.meta-instance=metastoreinstance
tablestore.endpoint=http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/
tablestore.accessid=****************
tablestore.accesskey=**************************
tablestore.meta-table=meta_table
tablestore.auto-create-meta-table=true
|
Item de configuração |
Exemplo |
Obrigatório |
Descrição |
|
connector.name |
tablestore |
Sim |
Nome do conector. Defina como |
|
tablestore.schema-mode |
meta-table |
Sim |
Modo de configuração do Schema. Valores válidos:
|
|
tablestore.schema-file |
/users/test/tablestore/presto/tablestore.schema |
Sim, condicional |
Necessário apenas quando Caminho completo do arquivo estático local. Para mais informações, consulte Configuração do Schema. |
|
tablestore.meta-instance |
metastoreinstance |
Sim, condicional |
Necessário apenas quando Instância do Tablestore usada para armazenar metadados. Para mais informações, consulte Instâncias. Importante
Certifique-se de que a instância configurada exista em sua conta Alibaba Cloud. |
|
tablestore.endpoint |
http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/ |
Sim, condicional |
Necessário apenas quando Endpoint da instância do Tablestore usada para armazenar metadados. Para mais informações, consulte Endpoints. |
|
tablestore.accessid |
|
Sim, condicional |
Necessário apenas quando AccessKey ID e AccessKey secret da conta Alibaba Cloud ou do usuário do Resource Access Management (RAM) com permissões de acesso à instância de metadados. |
|
tablestore.accesskey |
|
Sim, condicional |
|
|
tablestore.meta-table |
meta_table |
Sim, condicional |
Necessário apenas quando Nome da tabela do Tablestore usada para armazenar metadados. |
|
tablestore.auto-create-meta-table |
true |
Não |
Aplicável apenas quando Define se a tabela de metadados será criada automaticamente. O padrão é |
Configuração do Schema
Configure o Schema em um dos dois modos: configuração dinâmica com uma meta table (recomendado) ou configuração estática com um arquivo local.
Configuração dinâmica com meta table
Não é necessário configurar o Schema antes de iniciar o Presto Server.
Após conectar e iniciar a CLI SQL, use os comandos
create schemaecreate tablepara criar o Schema e as tabelas de mapeamento. Para mais informações, consulte Criar um Schema e Criar uma tabela de mapeamento.
Configuração com arquivo estático local
O caminho do arquivo estático local deve corresponder ao caminho completo especificado para tablestore.schema-file na configuração do Catalog.
Crie um arquivo no servidor com o seguinte conteúdo:
{
"account" : {
"accessId" : "xxxxxxxx", ----- <Required> The AccessKey ID of the Alibaba Cloud account or RAM user.
"accessKey" : "xxxxxxxxxxxxxxx", ----- <Required> The AccessKey secret of the Alibaba Cloud account or RAM user.
},
"instances" : {
"mydb" : { ----- <Required> The Schema name in PrestoDB.
"instanceName" : "myinstance", ----- <Required> The name of the Tablestore instance.
"endpoint" : "http://myinstance.cn-hangzhou.ots.aliyuncs.com", ----- <Required> The endpoint of the Tablestore instance.
"tables": {
"mytable" : { ----- <Required> The table name in PrestoDB.
"originName" : "SampleTable", ----- <Optional> The name of the corresponding table in Tablestore (case-sensitive). If not configured, it is the same as the table name in Presto.
"columns" : [ ----- <Required> The metadata of the table. It must include all primary key columns, and the order of the primary key columns must be the same as the primary key order of the table.
{"name" : "gid", "type" : "bigint"},
{"name" : "uid", "type" : "bigint"},
{"name" : "c1", "type" : "boolean", "originName" : "col1"},
{"name" : "c2", "type" : "bigint", "originName" : "col2"},
{"name" : "C3", "type" : "varchar", "originName" : "col3"}
]
},
"anotherTable" : {
"originName" : "sampleTable2",
"columns" : [
{"name" : "gid", "type" : "bigint"},
{"name" : "uid", "type" : "bigint"},
{"name" : "a", "type" : "varchar"},
{"name" : "b", "type" : "varchar"},
{"name" : "c", "type" : "boolean"},
{"name" : "d", "type" : "bigint"},
{"name" : "e", "type" : "varchar"}
]
}
}
}
}
}
|
Item de configuração |
Obrigatório |
Descrição |
|
|
account |
accessId |
Sim |
AccessKey ID e AccessKey secret da conta Alibaba Cloud ou do usuário RAM. |
|
accessKey |
Sim |
||
|
instances(map(<schema_name> -> <schema_info>)) |
Sim |
Mapa JSON que associa nomes de Schema às informações do Schema. Importante
Os nomes de Schema não diferenciam maiúsculas de minúsculas no PrestoDB. |
|
|
<schema_info> |
instanceName |
Sim |
Nome da instância do Tablestore correspondente a este Schema. Para mais informações, consulte Instâncias. |
|
endpoint |
Sim |
Endpoint da instância do Tablestore. Para mais informações, consulte Endpoints. |
|
|
tables(map(<table_name> -> <table_info>)) |
Sim |
Lista de tabelas montadas no PrestoDB. Importante
|
|
|
<table_info> |
originName |
Não |
Nome real da tabela no Tablestore.
Se o conector não encontrar a tabela correspondente no Tablestore, as operações de leitura e gravação na tabela falharão. |
|
columns(list([<column_info>])) |
Sim |
Metadados da tabela, incluindo todas as colunas definidas. Importante
|
|
|
<column_info> |
name |
Sim |
Nome da coluna. Importante
Os nomes das colunas não diferenciam maiúsculas de minúsculas no PrestoDB. |
|
type |
Sim |
Tipo da coluna. Tipos do PrestoDB compatíveis que mapeiam para tipos de coluna do Tablestore: Bigint, Varchar, Varbinary, Double e Boolean. Importante
O tipo da coluna no PrestoDB deve corresponder ao tipo da coluna no Tablestore. |
|
|
originName |
Não |
Nome da coluna correspondente na tabela de dados do Tablestore. |
|
Exemplos comuns de SQL
Os exemplos de SQL a seguir demonstram como trabalhar com dados do Tablestore por meio do PrestoDB. Todos os exemplos usam um Schema chamado testdb conectado à instância do Tablestore myinstance e uma tabela de mapeamento chamada exampletable com o esquema (pk varchar, c1 double, c2 varchar, c3 varchar).
Criar um Schema
Um Schema configura o acesso a uma instância do Tablestore e gerencia a autenticação. O exemplo abaixo cria um Schema chamado testdb para acessar a instância do Tablestore myinstance.
CREATE SCHEMA tablestore.testdb
WITH (
endpoint = 'https://myinstance.cn-hangzhou.ots.aliyuncs.com',
instance_name = 'myinstance',
access_id = '************************',
access_key = '********************************'
);
|
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. Para mais informações, consulte Instâncias. |
|
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. |
Criar uma tabela de mapeamento
Uma tabela de mapeamento corresponde a uma tabela física em uma instância do Tablestore.
Observe os seguintes pontos ao criar uma tabela de mapeamento:
Garanta que os tipos de campo na tabela de mapeamento correspondam aos da tabela de dados do Tablestore. Para mais informações, consulte Mapeamento de tipos de campo.
O nome da tabela de mapeamento deve corresponder ao nome da tabela no Tablestore.
A propriedade
table_namena instrução CREATE TABLE mapeia a tabela do PrestoDB para a tabela real no Tablestore. Várias tabelas de mapeamento com nomes diferentes podem apontar para a mesma tabela de dados do Tablestore.A tabela de mapeamento deve incluir 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 corresponder aos da tabela de dados do Tablestore. Mapeie cada coluna de atributo à sua contraparte no Tablestore usando o parâmetro
origin_name.
O exemplo a seguir cria uma tabela de mapeamento chamada exampletable que mapeia para a tabela de dados do Tablestore de mesmo nome.
CREATE TABLE if not exists exampletable
(
pk varchar,
c1 double with (origin_name = 'col1'),
c2 varchar with (origin_name = 'col2'),
c3 varchar with (origin_name = 'col3')
) WITH (
table_name = 'exampletable'
);
Operações de Schema
Após criar um Schema, liste todos os Schemas ou selecione um Schema para uso.
Listar todos os Schemas
show schemas;
Resposta de exemplo:
Schema
--------------------
information_schema
testdb
testdb1
(3 rows)
Usar um Schema
Selecione um Schema antes de executar operações em suas tabelas.
Selecione um Schema antes de realizar operações nas tabelas contidas nele.
O exemplo a seguir seleciona o Schema testdb.
use testdb;
Resposta de exemplo:
USE
Operações de tabela de mapeamento
Após criar uma tabela de mapeamento, liste as tabelas em um Schema, visualize os metadados da tabela ou exclua uma tabela de mapeamento.
Listar tabelas em um Schema
Após selecionar um Schema, liste suas tabelas.
show tables;
Resposta de exemplo:
Table
-----------------
exampletable
sampletable
sampletabletest
table1
testtable
(5 rows)
Descrever uma tabela
O exemplo a seguir descreve a tabela exampletable.
describe exampletable;
Resposta de exemplo:
Column | Type | Extra | Comment
--------+---------+-------+---------
pk | varchar | |
c1 | double | |
c2 | varchar | |
c3 | varchar | |
(4 rows)
Excluir uma tabela de mapeamento
O exemplo a seguir exclui a tabela de mapeamento table1.
drop table table1;
Resposta de exemplo:
DROP TABLE
Operações de dados
Após criar uma tabela de mapeamento, grave e leia dados da tabela correspondente no Tablestore.
O PrestoDB não suporta operações UPDATE ou DELETE em tabelas do Tablestore.
Gravar dados
-
Inserir uma única linha
O exemplo a seguir insere uma linha em
exampletable.insert into exampletable values('101', 22.0, 'Mary', '10002');Resposta de exemplo:
INSERT: 1 row -
Importar dados em lote
ImportanteAntes de importar dados em lote, certifique-se de que a tabela de destino existe e seu esquema corresponde ao da tabela de origem.
O exemplo a seguir copia linhas onde
c1 < 50deexampletableparasampletable.insert into sampletable select pk, c1, c2, c3 from exampletable where c1 < 50;Resposta de exemplo:
INSERT: 3 rows
Ler dados
-
Consultar todas as linhas
O exemplo a seguir lê todos os dados de
exampletable.select * from exampletable;Resposta de exemplo:
pk | c1 | c2 | c3 -----+------+------+------- 100 | 11.0 | Lily | 10001 101 | 22.0 | Mary | 10002 102 | 12.0 | Jim | 10003 (3 rows) -
Consultar linhas com condições
O exemplo a seguir consulta linhas em
exampletableondec1 < 15ec3 = '10001'.select * from exampletable where c1 < 15 and c3 = '10001';Resposta de exemplo:
pk | c1 | c2 | c3 -----+------+------+------- 100 | 11.0 | Lily | 10001 (1 row)
Analisar dados
-
Calcular a média da coluna
O exemplo a seguir calcula a média da coluna
c1emexampletable.select avg(c1) as Average from exampletable;Resposta de exemplo:
Average --------- 15.0 (1 row) -
Contar o total de linhas
O exemplo a seguir conta todas as linhas em
exampletable.select count(*) as total from exampletable;Resposta de exemplo:
total ------- 3 (1 row)