SLS es compatible con el protocolo PostgreSQL. Utilice psql, JDBC o cualquier herramienta compatible con PG para leer, escribir y gestionar datos de registro mediante SQL.
Funciones
Mediante el protocolo PostgreSQL, usted puede:
Gestionar logstores con la sintaxis estándar de SQL (crear, modificar, eliminar).
Analizar datos de registro con la sintaxis SQL de PostgreSQL.
Escribir datos de registro mediante instrucciones INSERT.
Consultar metadatos del esquema del logstore con la sintaxis nativa de PostgreSQL, totalmente compatible con las tablas del sistema de PostgreSQL.
Límites
Se aplican los siguientes límites:
|
Limitaciones |
Descripción |
|
Prepared Statement |
Las instrucciones preparadas (parse/bind/execute) no son compatibles. Para JDBC, establezca el modo de consulta en simple:
O bien, configure el parámetro preferQueryMode en la URL de JDBC:
|
|
Compatibilidad con transacciones |
Las instrucciones begin, commit y rollback se ignoran y no tienen ningún efecto. |
|
Claves primarias y valores predeterminados |
No se admiten restricciones como claves primarias ni valores predeterminados. |
Requisitos previos
Ha creado un project.
Cuenta con un par de AccessKey (AccessKey ID y AccessKey secret). Create an AccessKey.
Tiene instalado un cliente compatible con PostgreSQL (como psql).
Conexión a SLS
Formato de la URL de conexión del cliente PostgreSQL:
postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}
# The connection enables TLS by default (MD5 for authentication). To explicitly disable TLS (for example, if the client does not support it), set the sslmode parameter to disable.
postgresql://{AccessKey_ID}:{AccessKey_Secret}@{Endpoint}:5432/{Project_Name}?sslmode=disable
Ejemplo de conexión JDBC:
private static final String URL = "jdbc:postgresql://{Endpoint}:5432/{Project_Name}?preferQueryMode=simple";
private static final String AccessKey_ID = "xyz";
private static final String AccessKey_Secret = "123456";
public static void main(String[] args) throws Exception
{
Properties props = new Properties();
props.setProperty(PGProperty.USER.getName(), AccessKey_ID);
props.setProperty(PGProperty.PASSWORD.getName(), AccessKey_Secret);
try (Connection conn = DriverManager.getConnection(URL, props)) {
System.out.println("Connection successful!");
}
}
Parámetros
|
Parámetro |
Descripción |
Ejemplo |
|
AccessKey_ID |
El AccessKey ID de su cuenta de Alibaba Cloud o usuario RAM. |
LTAI5t*** |
|
AccessKey_Secret |
El AccessKey secret de su cuenta de Alibaba Cloud o usuario RAM. |
*** |
|
Endpoint |
El endpoint de SLS. Debe incluir el nombre del proyecto como se muestra en la columna Ejemplo. Endpoints. |
{projectName}.cn-hangzhou.log.aliyuncs.com |
|
Project_Name |
El nombre del proyecto de registro. |
my-project |
Gestión de tablas
Una tabla se asigna a un logstore de SLS.
Creación de una tabla
Cree un logstore con CREATE TABLE:
CREATE TABLE users (
id BIGINT,
name TEXT,
create_time TIMESTAMP
)
WITH (
shard_count = 4,
ttl = 14,
default_query_range = '1d',
full_text_search_enabled = true,
index_tokens = '&[ ]",''\',
log_time_field = 'create_time',
insert_any_allowed = false
);
Tipos de columna admitidos:
|
Tipo de PostgreSQL |
Tipo de SLS |
Descripción |
|
int8/bigint/int4/integer/int2/smallint/oid |
long |
Tipo entero |
|
text/varchar/char/bpchar/uuid |
text |
Tipo cadena |
|
float4/real/float8/double precision/numeric |
double |
Tipo número de punto flotante |
|
json |
json |
Tipo JSON |
Propiedades de la tabla (cláusula WITH):
|
Nombre de propiedad |
Tipo |
Descripción |
Valor predeterminado |
Ejemplo |
|
shard_count |
Integer |
El número de shards en el logstore. |
4 |
4 |
|
ttl |
Integer |
El periodo de retención de datos en días. |
365 |
14 |
|
default_query_range |
String |
El intervalo de tiempo de consulta predeterminado. Formato: {n}{d/m/s} (día/minuto/segundo). |
'1d' |
'3d' |
|
full_text_search_enabled |
Boolean |
Indica si se habilita la indización de texto completo. |
false |
true |
|
index_tokens |
String |
Los tokens utilizados para la tokenización. |
Delimitadores predeterminados |
'&[]",''' |
|
log_time_field |
String |
El campo que se utiliza como hora del registro durante las escrituras. Debe ser timestamp o long (segundos, milisegundos, microsegundos o nanosegundos epoch). La unidad se detecta automáticamente. |
- |
'create_time' |
|
insert_any_allowed |
Boolean |
Indica si se permiten escrituras sin validación de esquema. Establezca este valor en false para aplicar las comprobaciones de esquema. |
true |
false |
|
hot_ttl |
Integer |
Días para conservar los datos en almacenamiento caliente antes de pasar al almacenamiento IA. Si no se configura, los datos permanecen en almacenamiento caliente durante todo su TTL. Manage intelligent tiering. |
- |
7 |
|
chn_columns |
String |
Columnas que contienen texto en chino, lo que habilita la tokenización en chino para sus índices. Separe varios nombres con comas. Utilice __line__ para el índice de texto completo. Nota: La tokenización en chino afecta el rendimiento. Úsela con precaución. |
- |
'__line__,message,error' |
Modificación de una columna
Modificaciones de columna admitidas:
Agregar una columna:
ALTER TABLE users ADD COLUMN change_time TEXT;
Cambiar el nombre de una columna:
ALTER TABLE users RENAME COLUMN change_time TO update_time;
Modificar el tipo de una columna:
ALTER TABLE users ALTER COLUMN update_time TYPE TIMESTAMP;
Eliminar una columna:
ALTER TABLE users DROP COLUMN update_time;
Limpieza de datos
Elimine todos los datos de una tabla con TRUNCATE:
TRUNCATE TABLE users;
Nota : Después de eliminar los datos, el cambio tarda aproximadamente 30 segundos en reflejarse en las consultas SQL.
Eliminación de una tabla
Elimine una tabla y su logstore correspondiente con DROP TABLE:
DROP TABLE users;
Consulta de datos
Consulta básica
Consulte datos con SELECT:
SELECT id, name FROM users LIMIT 10;
Nota : Si no se especifica un intervalo de tiempo en la instrucción SQL, se utiliza el intervalo predeterminado definido pordefault_query_range. Si no se configuródefault_query_rangeal crear la tabla, la consulta toma por defecto los últimos 15 minutos de datos.
Especificación de un intervalo de tiempo de consulta
Existen dos formas de especificar un intervalo de tiempo de consulta:
Método 1: Uso del campo __time__
-- Specify the lower limit of the time range
SELECT id, name FROM users
WHERE __time__ > 1766646000
LIMIT 10;
-- Specify the time range
SELECT id, name FROM users
WHERE __time__ > 1766646000 AND __time__ < 1766646987
LIMIT 10;
Nota : El valor de __time__ es una marca de tiempo Unix en segundos. Debe establecer un límite inferior para que el intervalo de tiempo surta efecto. Si no se establece un límite superior, la hora de finalización toma por defecto la hora actual.
Método 2: Uso de las variables query_begin y query_end
-- Set the lower limit of the time range
SET query_begin = 1766646000;
SELECT id, name FROM users LIMIT 10;
-- Set the time range
SET query_begin = 1766646000;
SET query_end = 1766646987;
SELECT id, name FROM users LIMIT 10;
-- Set the variables in a single statement (recommended)
SET query_begin = 1766646000; SET query_end = 1766646987; SELECT id, name FROM users LIMIT 10;
Nota : Una vez configuradas, las variables query_begin y query_end permanecen vigentes durante toda la sesión de conexión. Ejecute show query_begin o show query_end para consultar sus valores actuales. Un valor de 0 indica que la variable no se ha configurado.
Escritura de datos
Escritura básica
Escriba datos con INSERT INTO:
INSERT INTO users (id, name, create_time)
VALUES
(1, 'Name#1', '2025-12-25T06:54:19'),
(2, 'Name#2', '2025-12-25T06:54:20'),
(3, 'Name#3', '2025-12-25T06:54:21');
Escrituras EXACTLY-ONCE
SLS no admite restricciones de unicidad de clave primaria, pero proporciona semántica EXACTLY-ONCE para evitar escrituras duplicadas.
Configure hash_key y seq_id para habilitar las escrituras EXACTLY-ONCE:
SET hash_key = 'file#1';
SET seq_id = 1;
INSERT INTO users (id, name, create_time)
VALUES
(1, 'Name#1', '2025-12-25T06:54:19'),
(2, 'Name#2', '2025-12-25T06:54:20'),
(3, 'Name#3', '2025-12-25T06:54:21');
Parámetros
|
Parámetro |
Descripción |
|
hash_key |
Una clave única que identifica el origen de datos. |
|
seq_id |
El número de serie. Debe comenzar en 1 y aumentar monótonamente para el mismo hash_key. |
Manejo de errores por datos duplicados:
En caso de escrituras duplicadas, el servidor devuelve un error:
error: sequence id is lower than expected, hash_key=xyz,current sequence_id=100,requested sequence_id=90
Extraiga el seq_id actual con esta expresión regular:
current\s+sequence_id=(\d+)
Consulta de metadatos
Consulta de todos los logstores
SELECT
table_schema,
table_name
FROM
information_schema.tables;
Nota : Por defecto, un logstore se asigna a un esquema dentro de un proyecto con el mismo nombre.
Consulta de la estructura de campos
SELECT
column_name,
data_type
FROM
information_schema.columns
WHERE
table_name = 'access_log';