Para conectar PrestoDB a Tablestore, configure el Catalog y el Schema del Presto Server. Una vez establecida la conexión, utilice los ejemplos de SQL de este tema para realizar operaciones con los datos.
Configuración del servidor
Configure el Catalog y el Schema del Presto Server.
La configuración del Catalog define los ajustes del conector y el modo de configuración del Schema. Configure el Schema mediante una configuración dinámica con una tabla de metadatos o una configuración estática con un archivo local.
Con la configuración dinámica (modo de tabla de metadatos), no se requiere ninguna configuración de Schema antes de iniciar el Presto Server. Cree el Schema y las tablas de asignación después de iniciar la interfaz de línea de comandos (CLI) de SQL.
Configuración del Catalog
El archivo de configuración del Catalog se encuentra en etc/catalog/tablestore.properties dentro de la carpeta de instalación de 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
|
Elemento de configuración |
Ejemplo |
Obligatorio |
Descripción |
|
connector.name |
tablestore |
Sí |
Nombre del conector. Debe establecerse como |
|
tablestore.schema-mode |
meta-table |
Sí |
Modo de configuración del Schema. Valores válidos:
|
|
tablestore.schema-file |
/users/test/tablestore/presto/tablestore.schema |
Sí, condicional |
Obligatorio solo cuando Ruta completa al archivo estático local. Para más información, consulte Schema configuration. |
|
tablestore.meta-instance |
metastoreinstance |
Sí, condicional |
Obligatorio solo cuando Instancia de Tablestore utilizada para almacenar metadatos. Para más información, consulte Instances. Importante
Asegúrese de que la instancia configurada exista en su cuenta de Alibaba Cloud. |
|
tablestore.endpoint |
http://metastoreinstance.cn-hangzhou,ots.aliyuncs.com/ |
Sí, condicional |
Obligatorio solo cuando Endpoint de la instancia de Tablestore utilizada para almacenar metadatos. Para más información, consulte Endpoints. |
|
tablestore.accessid |
|
Sí, condicional |
Obligatorio solo cuando AccessKey ID y AccessKey secret de la cuenta de Alibaba Cloud o del usuario de Resource Access Management (RAM) que tenga permisos de acceso a la instancia de metadatos. |
|
tablestore.accesskey |
|
Sí, condicional |
|
|
tablestore.meta-table |
meta_table |
Sí, condicional |
Obligatorio solo cuando Nombre de la tabla de Tablestore utilizada para almacenar metadatos. |
|
tablestore.auto-create-meta-table |
true |
No |
Aplicable solo cuando Especifica si se debe crear automáticamente la tabla de metadatos. El valor predeterminado es |
Configuración del Schema
Configure el Schema en uno de dos modos: configuración dinámica con una tabla de metadatos (recomendado) o configuración estática con un archivo local.
Configuración dinámica con tabla de metadatos
No se requiere configuración de Schema antes de iniciar el Presto Server.
Después de conectarse e iniciar la CLI de SQL, utilice los comandos
create schemaycreate tablepara crear el Schema y las tablas de asignación. Para más información, consulte Create a Schema y Create a mapping table.
Configuración con archivo estático local
La ruta al archivo estático local debe coincidir con la ruta completa especificada para tablestore.schema-file en la configuración del Catalog.
Cree un archivo en el servidor con el siguiente contenido:
{
"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"}
]
}
}
}
}
}
|
Elemento de configuración |
Obligatorio |
Descripción |
|
|
account |
accessId |
Sí |
AccessKey ID y AccessKey secret de la cuenta de Alibaba Cloud o del usuario de RAM. |
|
accessKey |
Sí |
||
|
instances(map(<schema_name> -> <schema_info>)) |
Sí |
Mapa JSON que asocia nombres de Schema con su información correspondiente. Importante
Los nombres de Schema no distinguen entre mayúsculas y minúsculas en PrestoDB. |
|
|
<schema_info> |
instanceName |
Sí |
Nombre de la instancia de Tablestore correspondiente a este Schema. Para más información, consulte Instances. |
|
endpoint |
Sí |
Endpoint de la instancia de Tablestore. Para más información, consulte Endpoints. |
|
|
tables(map(<table_name> -> <table_info>)) |
Sí |
Lista de tablas montadas en PrestoDB. Importante
|
|
|
<table_info> |
originName |
No |
Nombre real de la tabla en Tablestore.
Si el conector no encuentra la tabla correspondiente en Tablestore, las operaciones de lectura y escritura en dicha tabla fallarán. |
|
columns(list([<column_info>])) |
Sí |
Metadatos de la tabla, incluidas todas las columnas definidas. Importante
|
|
|
<column_info> |
name |
Sí |
Nombre de la columna. Importante
Los nombres de columna no distinguen entre mayúsculas y minúsculas en PrestoDB. |
|
type |
Sí |
Tipo de la columna. Tipos de PrestoDB compatibles que se asignan a tipos de columna de Tablestore: Bigint, Varchar, Varbinary, Double y Boolean. Importante
El tipo de columna en PrestoDB debe coincidir con el tipo de columna en Tablestore. |
|
|
originName |
No |
Nombre de la columna correspondiente en la tabla de datos de Tablestore. |
|
Ejemplos comunes de SQL
A continuación se presentan ejemplos de SQL que muestran cómo trabajar con datos de Tablestore a través de PrestoDB. Todos los ejemplos utilizan un Schema llamado testdb conectado a la instancia de Tablestore myinstance, y una tabla de asignación llamada exampletable con el esquema (pk varchar, c1 double, c2 varchar, c3 varchar).
Crear un Schema
Un Schema configura el acceso a una instancia de Tablestore y gestiona la autenticación. El siguiente ejemplo crea un Schema llamado testdb para acceder a la instancia de Tablestore myinstance.
CREATE SCHEMA tablestore.testdb
WITH (
endpoint = 'https://myinstance.cn-hangzhou.ots.aliyuncs.com',
instance_name = 'myinstance',
access_id = '************************',
access_key = '********************************'
);
|
Parámetro |
Ejemplo |
Obligatorio |
Descripción |
|
endpoint |
https://myinstance.cn-hangzhou.ots.aliyuncs.com |
Sí |
Endpoint de la instancia de Tablestore. Para más información, consulte Endpoints. |
|
instance_name |
myinstance |
Sí |
Nombre de la instancia de Tablestore. Para más información, consulte Instances. |
|
access_id |
|
Sí |
AccessKey ID de la cuenta de Alibaba Cloud o del usuario de RAM. |
|
access_key |
|
Sí |
AccessKey secret de la cuenta de Alibaba Cloud o del usuario de RAM. |
Crear una tabla de asignación
Una tabla de asignación corresponde a una tabla física en una instancia de Tablestore.
Tenga en cuenta lo siguiente al crear una tabla de asignación:
Asegúrese de que los tipos de campo en la tabla de asignación coincidan con los de la tabla de datos de Tablestore. Para más información, consulte Field type mapping.
El nombre de la tabla de asignación debe coincidir con el nombre de la tabla en Tablestore.
La propiedad
table_nameen la sentencia CREATE TABLE asigna la tabla de PrestoDB a la tabla real en Tablestore. Varias tablas de asignación con nombres diferentes pueden apuntar a la misma tabla de datos de Tablestore.La tabla de asignación debe incluir todas las columnas de clave principal de la tabla de datos, pero puede incluir solo un subconjunto de las columnas de atributos.
Los nombres y el orden de las columnas de clave principal en la tabla de asignación deben coincidir con los de la tabla de datos de Tablestore. Asigne cada columna de atributo a su contraparte en Tablestore mediante el parámetro
origin_name.
El siguiente ejemplo crea una tabla de asignación llamada exampletable que se asigna a la tabla de datos de Tablestore del mismo nombre.
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'
);
Operaciones de Schema
Después de crear un Schema, liste todos los Schemas o seleccione uno para utilizarlo.
Listar todos los Schemas
show schemas;
Respuesta de ejemplo:
Schema
--------------------
information_schema
testdb
testdb1
(3 rows)
Utilizar un Schema
Seleccione un Schema antes de realizar operaciones en sus tablas.
Seleccione un Schema antes de realizar operaciones en las tablas que contiene.
El siguiente ejemplo selecciona el Schema testdb.
use testdb;
Respuesta de ejemplo:
USE
Operaciones de tabla de asignación
Después de crear una tabla de asignación, liste las tablas de un Schema, consulte los metadatos de la tabla o elimine una tabla de asignación.
Listar tablas en un Schema
Después de seleccionar un Schema, liste sus tablas.
show tables;
Respuesta de ejemplo:
Table
-----------------
exampletable
sampletable
sampletabletest
table1
testtable
(5 rows)
Describir una tabla
El siguiente ejemplo describe la tabla exampletable.
describe exampletable;
Respuesta de ejemplo:
Column | Type | Extra | Comment
--------+---------+-------+---------
pk | varchar | |
c1 | double | |
c2 | varchar | |
c3 | varchar | |
(4 rows)
Eliminar una tabla de asignación
El siguiente ejemplo elimina la tabla de asignación table1.
drop table table1;
Respuesta de ejemplo:
DROP TABLE
Operaciones de datos
Después de crear una tabla de asignación, escriba datos en la tabla de Tablestore correspondiente y lea datos de ella.
PrestoDB no admite operaciones UPDATE ni DELETE en tablas de Tablestore.
Escribir datos
-
Insertar una sola fila
El siguiente ejemplo inserta una fila en
exampletable.insert into exampletable values('101', 22.0, 'Mary', '10002');Respuesta de ejemplo:
INSERT: 1 row -
Importar datos por lotes
ImportanteAntes de importar datos por lotes, asegúrese de que la tabla de destino exista y de que su esquema coincida con el de la tabla de origen.
El siguiente ejemplo copia filas donde
c1 < 50deexampletableasampletable.insert into sampletable select pk, c1, c2, c3 from exampletable where c1 < 50;Respuesta de ejemplo:
INSERT: 3 rows
Leer datos
-
Consultar todas las filas
El siguiente ejemplo lee todos los datos de
exampletable.select * from exampletable;Respuesta de ejemplo:
pk | c1 | c2 | c3 -----+------+------+------- 100 | 11.0 | Lily | 10001 101 | 22.0 | Mary | 10002 102 | 12.0 | Jim | 10003 (3 rows) -
Consultar filas con condiciones
El siguiente ejemplo consulta filas en
exampletabledondec1 < 15yc3 = '10001'.select * from exampletable where c1 < 15 and c3 = '10001';Respuesta de ejemplo:
pk | c1 | c2 | c3 -----+------+------+------- 100 | 11.0 | Lily | 10001 (1 row)
Analizar datos
-
Calcular el promedio de una columna
El siguiente ejemplo calcula el promedio de la columna
c1enexampletable.select avg(c1) as Average from exampletable;Respuesta de ejemplo:
Average --------- 15.0 (1 row) -
Contar el total de filas
El siguiente ejemplo cuenta todas las filas en
exampletable.select count(*) as total from exampletable;Respuesta de ejemplo:
total ------- 3 (1 row)