Cómo utilizar tablas temporales locales de GaussDB (DWS) para el procesamiento de datos

Este artículo se comparte desde la comunidad de la nube de Huawei " Serie de tablas temporales GaussDB (DWS) - Tabla temporal local ", autor: acydy.

GaussDB (DWS) admite tres formas de tablas temporales a partir de la versión 8.2.1: tablas temporales locales, tablas temporales volátiles y tablas temporales globales. Este artículo presenta primero la función de tabla temporal local de DWS.

Características de las tablas temporales locales: las definiciones y los datos de las tablas están relacionados con la sesión y otras sesiones no pueden ver las tablas temporales locales creadas por esta sesión. Los metadatos se conservarán en la tabla del sistema y se puede admitir RETRY si el nodo del clúster falla de forma anormal .

Gramática y uso

CREAR [LOCAL] { TEMPORAL | TEMP } TABLA [ SI NO EXISTE ] nombre_tabla 
    ({ nombre_columna tipo_datos [ modo_compresión ] [ COLLATE intercalación ] [ restricción_columna [ ... ] ] 
        | restricción_tabla 
        | LIKE tabla_fuente [ opción_me gusta [...] ] } 
        [, ... ]) 
    [ CON ( {parámetro_almacenamiento = valor} [, ... ] ) ] 
    [ EN COMMIT {PRESERVAR FILAS | BORRAR FILAS } ]

Al crear una tabla, debe especificar TEMP o TEMPORARY, lo que significa crear una tabla temporal local.

  • EN COMPROMISO {PRESERVAR FILAS | BORRAR FILAS }

La opción ON COMMIT determina si se debe crear una tabla temporal en una transacción. Cuando se confirma la transacción, se ejecutarán las operaciones posteriores de esta tabla temporal.

  • PRESERVAR FILAS (valor predeterminado): no se realizan operaciones en la tabla temporal al enviar, y la tabla temporal y los datos de su tabla permanecen sin cambios. Se recomienda este tipo.
  • ELIMINAR FILAS: elimine los datos de la tabla temporal al enviar.

Otras partes son iguales a las mesas normales.

gaussdb=# crear tabla temporal tmp1(a int,b int); 
AVISO: La cláusula 'DISTRIBUTE BY' no está especificada. Usar round-robin como modo de distribución de forma predeterminada. 
SUGERENCIA: Utilice la cláusula 'DISTRIBUTE BY' para especificar la columna de distribución de datos adecuada. 
CREAR MESA

Las tablas temporales pueden tener el mismo nombre que las tablas no temporales. Si tienen el mismo nombre, la prioridad de las tablas temporales es mayor que la de las tablas no temporales.

gaussdb=# crear tabla temporal tmp1(a int,b int); 
AVISO: La cláusula 'DISTRIBUTE BY' no está especificada. Usar round-robin como modo de distribución de forma predeterminada. 
SUGERENCIA: Utilice la cláusula 'DISTRIBUTE BY' para especificar la columna de distribución de datos adecuada. 
CREAR TABLA 
gaussdb=# insertar en valores tmp1(1,1); 
INSERT 0 1 
gaussdb=# crear tabla tmp1(a int,b int); 
AVISO: La cláusula 'DISTRIBUTE BY' no está especificada. Usar round-robin como modo de distribución de forma predeterminada. 
SUGERENCIA: Utilice la cláusula 'DISTRIBUTE BY' para especificar la columna de distribución de datos adecuada. 
CREAR TABLA 
gaussdb=# select *from tmp1; 
 un | segundo 
---+--- 
 1 | 1 
(1 fila) 

gaussdb=# select *from public.tmp1; 
 un | b 
---+--- 
(0 filas)

Vistas: las vistas creadas en base a tablas temporales son vistas temporales.

postgres=# crear vista tmp_v1 como select *from tmp1; 
AVISO: la vista "tmp_v1" será una vista temporal 
CREAR VISTA

escenas a utilizar

  1. La lógica empresarial compleja se divide mediante tablas temporales locales

    Si la declaración SQL empresarial es demasiado compleja, puede utilizar una tabla temporal local para almacenar en caché los resultados intermedios de la ejecución, dividiendo así la lógica empresarial compleja en varias declaraciones más simples. La información estadística de declaraciones simples está más preparada y el negocio dividido es más fácil de mantener.

  2. Admite excepciones en nodos CN.
    GaussDB (DWS) es una base de datos de arquitectura distribuida. Hay múltiples Coordinadores (CN) y las relaciones son iguales. El cliente puede conectarse a cualquier CN. El CN almacena la información de metadatos de la tabla. Al ejecutar DDL, los metadatos se sincronizarán en todos los DN para garantizar la coherencia de los datos. Si se produce una anomalía en un CN, operaciones como crear y eliminar una tabla fallarán, lo que provocará que todo el trabajo falle.

    En este escenario, se pueden utilizar tablas temporales locales. Las tablas temporales locales solo son visibles en la sesión actual. Al realizar operaciones como creación, ALTERACIÓN y eliminación de tablas temporales locales, solo se modificarán los metadatos en el CN ​​actual. Esto no se verá afectado por anomalías en otros nodos CN y garantizará la continuidad del negocio.

principio

La diferencia de metadatos entre las tablas temporales y las tablas ordinarias es que las tablas temporales no son visibles en otras sesiones, por lo que se crean en un esquema que solo pertenece a la sesión actual. Cuando esta sesión crea una tabla temporal por primera vez, el esquema de la sesión se creará al mismo tiempo. El esquema temporal es diferente para cada sesión.

Sesión 1:

gaussdb=# crear tabla temporal tmp1(a int,b int); 
AVISO: La cláusula 'DISTRIBUTE BY' no está especificada. Usar round-robin como modo de distribución de forma predeterminada. 
SUGERENCIA: Utilice la cláusula 'DISTRIBUTE BY' para especificar la columna de distribución de datos adecuada. 
CREAR TABLA 
gaussdb=# \d+ tmp1 
       Tabla "pg_temp_coordinator1_65_3_140257888512760.tmp1" 
 Columna | Tipo | Modificadores | Almacenamiento | Objetivo de estadísticas | Descripción 
--------+---------+-----------+---------+-------- ------+------------- 
 a | entero | | llano | | 
 segundo | entero | | llano | | 
Tiene OID: no 
Distribuir por: ROUND ROBIN 
Nodos de ubicación: TODOS LOS DATOS 
Opciones: orientación=fila, compresión=no:

Sesión 2, no se puede consultar la tabla tmp1.

gaussdb=# seleccione * de tmp1; 
ERROR: la relación "tmp1" no existe 
LÍNEA 1: seleccione * de tmp1; 
                      ^

Reglas de nomenclatura para el esquema temporal: pg_temp_Coordinator name_timelineID_global auto-increment ID_threadID

Nombre del coordinador: nombre de CN, que aísla los esquemas creados por diferentes CN.

timelineID: aumentará después de reiniciar el nodo y se utiliza para determinar si este esquema no es válido.

ID de incremento automático global: ID de incremento automático en un único CN. No es necesario que el mismo CN tenga diferentes ID de incremento automático de sesión.

Metadatos: el indicador de persistencia de la tabla temporal local es 't'.

gaussdb=# seleccione relname, relpersistence de pg_class donde relname = 'tmp1'; 
 nombre real | persistencia 
---------+---------------- 
 tmp1 | t

Limpieza de datos:

  1. La sesión sale normalmente.
    Cuando la sesión sale normalmente, se eliminarán la definición de la tabla y los datos de la tabla temporal local. Los datos originales ya no son accesibles.

  2. Cuando la sesión se cierra de forma anormal o el CN ​​actual o un determinado nodo DN es anormal.
    Cuando ocurre una excepción, los metadatos y datos del nodo no se eliminarán inmediatamente. GaussDB (DWS) se basa en la herramienta gs_clean del componente para limpiar de forma automática y periódica las tablas temporales locales. Asegúrese de que los datos se limpien después de un período de tiempo para evitar una expansión continua del espacio.

Reintento CN

Cuando la función CN Retry está activada, los datos de la tabla temporal se registrarán. Para garantizar la coherencia de los datos, no se recomienda cambiar el estado del interruptor CN Retry cuando se utiliza la tabla temporal. Mantenga el interruptor CN Retry siempre encendido o apagado en la tabla temporal. sesión usando la tabla temporal.
Cuando CN Retry está activado, el nodo DN se reinicia de forma anormal y se garantiza que los datos de la tabla temporal no se perderán. Después de reiniciar el DN, aún se puede acceder a las sesiones anteriores.
Si desea que la tabla temporal no se registre:

establecer max_query_retry_times = 0;

Usar restricciones

  1. Si la aplicación de capa superior utiliza el mecanismo del grupo de conexiones para conectarse a GaussDB (DWS), cuando use una tabla temporal, se recomienda eliminar activamente la tabla temporal antes de devolver la conexión al grupo de conexiones para evitar anomalías de datos causadas por la conexión no se desconecta. O utilice el comando DISCARD TEMPpara borrar la información de la tabla temporal de la sesión.
  2. Las tablas temporales locales se ignoran al expandirse.
  3. Las tablas temporales locales gs_dump no son compatibles.

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible

Lei Jun: La versión oficial del nuevo sistema operativo de Xiaomi, ThePaper OS, ha sido empaquetada. La ventana emergente en la página de lotería de la aplicación Gome insulta a su fundador. Ubuntu 23.10 se lanza oficialmente. ¡También podrías aprovechar el viernes para actualizar! Episodio de lanzamiento de Ubuntu 23.10: La imagen ISO fue "retirada" urgentemente debido a que contenía discurso de odio. Un estudiante de doctorado de 23 años solucionó el "error fantasma" de 22 años en Firefox. Se lanzó el escritorio remoto RustDesk 1.2.3. Wayland mejorado para soportar TiDB 7.4 Lanzamiento: Oficial Compatible con MySQL 8.0. Después de desconectar el receptor USB Logitech, el kernel de Linux falló. El maestro usó Scratch para frotar el simulador RISC-V y ejecutó con éxito el kernel de Linux. JetBrains lanzó Writerside, una herramienta para la creación de documentos técnicos.
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10119758
Recomendado
Clasificación