El conector de AnalyticDB for PostgreSQL permite utilizar AnalyticDB for PostgreSQL como tabla de origen (beta), de dimensiones o sink en trabajos SQL de Realtime Compute for Apache Flink. AnalyticDB for PostgreSQL es un almacén de datos con procesamiento masivamente paralelo (MPP) diseñado para análisis en línea a gran escala.
Compatible con: Origen (beta) · Dimensiones · Sink | Streaming · Lotes | API SQL | El sink admite actualizaciones y eliminaciones
La lectura desde una tabla de origen requiere un conector personalizado configurado mediante Flink CDC. Para consultar las instrucciones de configuración, consulte Uso de Flink CDC para suscribirse a datos completos e incrementales en tiempo real .
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia y una tabla de AnalyticDB for PostgreSQL. Consulte Creación de una instancia y CREATE TABLE
Una lista de permitidos de direcciones IP configurada para la instancia. Consulte Configure an IP address whitelist
Limitaciones
AnalyticDB for PostgreSQL V7.0 requiere VVR 8.0.1 o posterior.
No se admiten bases de datos PostgreSQL autogestionadas.
Sintaxis
Utilice connector='adbpg' para tablas de dimensiones y sink, y connector='adbpg-cdc' para tablas de origen.
CREATE TEMPORARY TABLE adbpg_table (
id INT,
len INT,
content VARCHAR,
PRIMARY KEY (id)
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://<host>:<port>/<database>',
'tableName' = '<table>',
'userName' = '<username>',
'password' = '<password>'
);
Opciones del conector
Generales
Estas opciones aplican a todos los tipos de tabla.
|
Opción |
Obligatorio |
Predeterminado |
Tipo |
Descripción |
|
|
Sí |
— |
STRING |
Establezca este valor en |
|
|
Sí |
— |
STRING |
La URL de Java Database Connectivity (JDBC) con el formato |
|
|
Sí |
— |
STRING |
El nombre de la tabla en la base de datos. |
|
|
Sí |
— |
STRING |
El nombre de usuario de la base de datos de AnalyticDB for PostgreSQL. |
|
|
Sí |
— |
STRING |
La contraseña de la base de datos de AnalyticDB for PostgreSQL. |
|
|
No |
|
INTEGER |
El número máximo de intentos de reintento cuando falla una escritura. |
|
|
No |
|
STRING |
El nombre del esquema de la base de datos. |
|
|
No |
|
STRING |
Especifica si los identificadores distinguen entre mayúsculas y minúsculas. Valores válidos: |
|
|
No |
|
INTEGER |
El número máximo de conexiones en el pool de conexiones. El conector libera automáticamente las conexiones inactivas. Un valor demasiado alto puede provocar recuentos anómalos de conexiones en el servidor. |
Específicas del origen (beta)
Estas opciones aplican únicamente a las tablas de origen (connector='adbpg-cdc').
|
Opción |
Obligatorio |
Predeterminado |
Tipo |
Descripción |
|
|
Sí |
— |
STRING |
El nombre del esquema. Admite expresiones regulares para suscribirse a varios esquemas simultáneamente. |
|
|
Sí |
|
INTEGER |
El puerto de la instancia de AnalyticDB for PostgreSQL. |
|
|
Sí |
|
STRING |
El plugin de decodificación lógica de PostgreSQL. Establezca este valor en |
|
|
Sí |
— |
STRING |
El nombre del slot de decodificación lógica. Consulte Guía sobre nombres de slots. |
|
|
Sí |
— |
STRING |
Propiedades de configuración del cliente Debezium. Por ejemplo, establezca |
|
|
No |
|
BOOLEAN |
Especifica si se habilita la instantánea incremental. Valores válidos: |
|
|
No |
|
STRING |
El modo de inicio para el consumo de datos. Consulte Modos de inicio. |
|
|
No |
|
STRING |
Define cómo se codifican los eventos de cambio en el flujo de cambios. Valores válidos: |
|
|
No |
30 segundos |
DURATION |
El intervalo para enviar paquetes de latido, en milisegundos. Consulte Latidos y retención de WAL. |
|
|
No |
Primera columna de clave primaria |
STRING |
La columna que se utiliza como clave de fragmento durante las lecturas de instantáneas. |
Modos de inicio
|
Valor |
Comportamiento |
|
|
Realiza un escaneo completo de los datos históricos en el primer inicio y luego lee desde la posición más reciente del registro de escritura anticipada (WAL). |
|
|
Omite el escaneo de datos históricos y lee solo desde el extremo actual del WAL. |
|
|
Ejecuta un escaneo completo de los datos históricos y captura los datos del WAL generados durante dicho proceso. Se detiene al finalizar el escaneo. |
Modos de registro de cambios
|
Valor |
Eventos capturados |
|
|
|
|
|
|
Guía sobre nombres de slots
Los slots de replicación deben gestionarse con cuidado para evitar conflictos:
Dentro de un mismo trabajo de Flink: Utilice el mismo
slot.namepara todas las tablas de origen del trabajo.Entre distintos trabajos de Flink: Asigne un
slot.nameúnico por trabajo. Reutilizar un nombre de slot entre trabajos provoca el errorPSQLException: ERROR: replication slot "debezium" is active for PID 974.
Latidos y retención de WAL
Cuando una tabla de origen tiene actualizaciones poco frecuentes, es posible que el conector no avance el desplazamiento del slot de replicación. Esto impide que AnalyticDB for PostgreSQL recupere espacio en disco del WAL, ya que la base de datos conserva los archivos WAL hasta que el desplazamiento del slot avanza más allá de ellos. El envío periódico de latidos mantiene el avance del desplazamiento del slot y permite liberar los archivos WAL antiguos. Si los cambios en la tabla son esporádicos, configure heartbeat.interval.ms con un valor adecuado a su frecuencia de actualización.
Específicas del sink
Estas opciones aplican únicamente a las tablas sink (connector='adbpg').
|
Opción |
Obligatorio |
Predeterminado |
Tipo |
Descripción |
|
|
No |
|
STRING |
La estrategia de escritura para el primer intento. Consulte Modos de escritura y resolución de conflictos. |
|
|
No |
|
STRING |
Define cómo manejar los conflictos de clave primaria o índice. Consulte Modos de escritura y resolución de conflictos. |
|
|
No |
|
INTEGER |
El número de registros escritos por lote. |
|
|
No |
— |
INTEGER |
El tiempo máximo que espera el conector antes de volcar los registros en caché, en milisegundos. Si el búfer no alcanza el valor de |
|
|
No |
|
INTEGER |
El intervalo entre intentos de reintento, en milisegundos. |
Modos de escritura y resolución de conflictos
Las opciones writeMode y conflictMode funcionan en conjunto para controlar la escritura de registros y la gestión de conflictos.
|
** |
Descripción |
Notas |
|
|
Inserta los registros directamente. La gestión de conflictos depende de |
Adecuado para la mayoría de los casos de uso. |
|
|
Actualiza automáticamente los registros existentes cuando hay un conflicto. |
Requiere una clave primaria. |
|
|
Inserta registros mediante el comando |
Requiere VVR 11.1 o posterior. |
|
** |
Comportamiento ante conflictos |
Notas |
|
|
Reporta un error. |
|
|
|
Descarta silenciosamente el registro en conflicto. |
|
|
|
Actualiza el registro en conflicto. |
Útil para tablas sin clave primaria. Reduce el throughput de escritura. |
|
|
Actualiza el registro en conflicto. |
Requiere una clave primaria. Es más eficiente que |
Específicas de tablas de dimensiones
Estas opciones aplican únicamente a las tablas de dimensiones (connector='adbpg' utilizado en un JOIN con FOR SYSTEM_TIME AS OF).
|
Opción |
Obligatorio |
Predeterminado |
Tipo |
Descripción |
|
|
No |
|
STRING |
La directiva de caché para las búsquedas en la tabla de dimensiones. Consulte Directivas de caché. |
|
|
No |
|
LONG |
El número máximo de filas mantenidas en la caché. Solo surte efecto cuando |
|
|
No |
|
LONG |
El tiempo de vida de las entradas de caché en milisegundos. Su comportamiento depende de la configuración de |
|
|
No |
|
INTEGER |
El número máximo de filas para unir por cada registro de entrada. |
Directivas de caché
Elegir la directiva de caché adecuada permite equilibrar el throughput de consultas con la actualidad de los datos.
|
**Valor de |
Comportamiento |
Cuándo utilizarla |
|
|
Carga toda la tabla de dimensiones en memoria antes de iniciar el trabajo. Todas las búsquedas se resuelven desde la caché. Al expirar la caché ( |
Tablas de dimensiones pequeñas o medianas donde la actualización periódica de datos es aceptable. |
|
|
Almacena en caché un subconjunto de filas. Ante un fallo de caché, obtiene los datos de la base de datos y actualiza la caché. Expulsa las entradas menos utilizadas recientemente cuando la caché alcanza el límite de |
Tablas de dimensiones grandes donde almacenar todo en caché no es viable, o cuando resulta aceptable una caché parcial de baja latencia. |
|
|
Sin caché. Cada búsqueda consulta directamente la base de datos. |
Cuando los datos siempre deben leerse actualizados desde la base de datos. |
Mapeo de tipos de datos
|
Tipo de AnalyticDB for PostgreSQL |
Tipo de Flink SQL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ejemplos
Tabla sink
Este ejemplo lee desde un origen datagen y escribe en una tabla sink de AnalyticDB for PostgreSQL.
CREATE TEMPORARY TABLE datagen_source (
`name` VARCHAR,
`age` INT
)
COMMENT 'datagen source table'
WITH (
'connector' = 'datagen'
);
CREATE TEMPORARY TABLE adbpg_sink (
name VARCHAR,
age INT
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://<host>:<port>/<database>',
'tableName' = '<table>',
'userName' = '<username>',
'password' = '<password>'
);
INSERT INTO adbpg_sink
SELECT * FROM datagen_source;
Tabla de dimensiones
Este ejemplo une un flujo datagen con una tabla de dimensiones de AnalyticDB for PostgreSQL mediante una unión temporal.
CREATE TEMPORARY TABLE datagen_source (
a INT,
b BIGINT,
c STRING,
`proctime` AS PROCTIME()
)
COMMENT 'datagen source table'
WITH (
'connector' = 'datagen'
);
CREATE TEMPORARY TABLE adbpg_dim (
a INT,
b VARCHAR,
c VARCHAR
) WITH (
'connector' = 'adbpg',
'url' = 'jdbc:postgresql://<host>:<port>/<database>',
'tableName' = '<table>',
'userName' = '<username>',
'password' = '<password>'
);
CREATE TEMPORARY TABLE blackhole_sink (
a INT,
b STRING
)
COMMENT 'blackhole sink table'
WITH (
'connector' = 'blackhole'
);
INSERT INTO blackhole_sink
SELECT T.a, H.b
FROM datagen_source AS T
JOIN adbpg_dim FOR SYSTEM_TIME AS OF T.proctime AS H
ON T.a = H.a;
Tabla de origen (beta)
Para consultar la configuración y los ejemplos de tablas de origen, consulte Uso de Flink CDC para suscribirse a datos completos e incrementales en tiempo real.
Métricas
Las métricas de las tablas sink están disponibles en la consola de Realtime Compute for Apache Flink. Las tablas de dimensiones no exponen métricas. Para consultar las definiciones de las métricas, consulte Métricas.
|
Métrica |
Descripción |
|
|
Número total de registros escritos en el sink. |
|
|
Registros escritos por segundo. |
|
|
Total de bytes escritos en el sink. |
|
|
Bytes escritos por segundo. |
|
|
Tiempo empleado en la operación de escritura más reciente. |