STL_DDLTEXT - Amazon Redshift

STL_DDLTEXT

Captura las siguientes instrucciones DDL que se ejecutaron en el sistema.

Estas instrucciones DDL incluyen las siguientes consultas y objetos:

  • CREATE SCHEMA, TABLE, VIEW

  • DROP SCHEMA, TABLE, VIEW

  • ALTER SCHEMA, TABLE

Consulte también STL_QUERYTEXT, STL_UTILITYTEXT y SVL_STATEMENTTEXT. Estas vistas proporcionan una línea temporal de los comandos SQL que se ejecutan en el sistema; este historial es útil para solucionar problemas y para crear una traza de auditoría de todas las actividades del sistema.

Utilice las columnas STARTTIME y ENDTIME para averiguar qué instrucciones se registraron durante un periodo determinado. Los bloques grandes de texto de SQL se dividen en líneas de 200 caracteres. La columna SEQUENCE identifica los segmentos de texto que pertenecen a una única instrucción.

STL_DDLTEXT es visible para todos los usuarios. Los superusuarios pueden ver todas las filas; los usuarios normales solo pueden ver sus datos. Para obtener más información, consulte Visibilidad de datos en las tablas y vistas de sistema.

Algunos o todos los datos de esta tabla también están en la vista de monitoreo SYS SYS_QUERY_HISTORY. Los datos de la vista de monitoreo SYS están formateados para que sean más fáciles de usar y entender. Se recomienda utilizar la vista de monitoreo SYS para las consultas.

Columnas de la tabla

Nombre de la columna Tipo de datos Descripción
userid integer ID del usuario que generó la entrada.
xid bigint ID de la transacción asociado a la instrucción.
pid integer ID del proceso asociado a la instrucción.
etiqueta character(320) Ya sea el nombre del archivo utilizado para ejecutar la consulta o una etiqueta definida con un comando SET QUERY_GROUP. Si la consulta no se basa en archivos o si no se establece el parámetro QUERY_GROUP, el valor del campo queda en blanco.
starttime Marca de tiempo Hora en UTC en que comenzó la consulta. El tiempo total incluye colas y ejecución. Con 6 dígitos de precisión para fracciones de segundo. Por ejemplo: 2009-06-12 11:29:19.131358.
endtime Marca de tiempo Hora en UTC en la que finalizó la consulta. El tiempo total incluye colas y ejecución. Con 6 dígitos de precisión para fracciones de segundo. Por ejemplo: 2009-06-12 11:29:19.131358.
sequence integer Cuando una única instrucción tiene más de 200 caracteres, se registran filas adicionales para esa instrucción. Secuencia 0 es la primera fila, 1 es la segunda y, así, sucesivamente.
texto character(200) Texto SQL, en incrementos de 200 caracteres. El campo puede contener caracteres especiales como una barra inversa(\\) y una nueva línea (\n).

Consultas de ejemplo

La siguiente consulta devuelve registros que incluyen instrucciones DDL ejecutadas previamente.

select xid, starttime, sequence, substring(text,1,40) as text from stl_ddltext order by xid desc, sequence;

Aquí se incluye un resultado de ejemplo que muestra cuatro instrucciones CREATE TABLE. Las instrucciones DDL aparecen en la columna text, que se trunca para mejorar su legibilidad.

xid | starttime | sequence | text ------+----------------------------+----------+------------------------------------------ 1806 | 2013-10-23 00:11:14.709851 | 0 | CREATE TABLE supplier ( s_suppkey int4 N 1806 | 2013-10-23 00:11:14.709851 | 1 | s_comment varchar(101) NOT NULL ) 1805 | 2013-10-23 00:11:14.496153 | 0 | CREATE TABLE region ( r_regionkey int4 N 1804 | 2013-10-23 00:11:14.285986 | 0 | CREATE TABLE partsupp ( ps_partkey int8 1803 | 2013-10-23 00:11:14.056901 | 0 | CREATE TABLE part ( p_partkey int8 NOT N 1803 | 2013-10-23 00:11:14.056901 | 1 | ner char(10) NOT NULL , p_retailprice nu (6 rows)

Reconstruir SQL almacenados

El siguiente SQL muestra las filas almacenadas en la columna text de STL_DDLTEXT. Las filas están ordenadas por xid y sequence. Si el SQL original tenía más de 200 caracteres en varias filas, STL_DDLTEXT puede contener varias filas por sequence.

SELECT xid, sequence, LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') WITHIN GROUP (ORDER BY sequence) as query_statement FROM stl_ddltext GROUP BY xid, sequence ORDER BY xid, sequence;
xid | sequence | query_statement --------+-----------+----------------- 7886671 0 create external schema schema_spectrum_uddh\nfrom data catalog\ndatabase 'spectrum_db_uddh'\niam_role ''\ncreate external database if not exists; 7886752 0 CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league\n(\n league_rank smallint,\n prev_rank smallint,\n club_name varchar(15),\n league_name varchar(20),\n league_off decimal(6,2),\n le 7886752 1 ague_def decimal(6,2),\n league_spi decimal(6,2),\n league_nspi smallint\n)\nROW FORMAT DELIMITED \n FIELDS TERMINATED BY ',' \n LINES TERMINATED BY '\\n\\l'\nstored as textfile\nLOCATION 's 7886752 2 3://mybucket-spectrum-uddh/'\ntable properties ('skip.header.line.count'='1'); ...

Para reconstruir el SQL almacenado en la columna text de STL_DDLTEXT, ejecute la siguiente instrucción SQL. Reúne las instrucciones DDL de uno o varios segmentos en la columna text. Antes de ejecutar el SQL reconstruido, sustituya cualquier carácter especial (\n) con una nueva línea en el cliente SQL. Los resultados de la siguiente instrucción SELECT reúnen tres filas secuenciales para reconstruir el SQL, en el campo query_statement.

SELECT LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement FROM stl_ddltext GROUP BY xid, endtime order by xid, endtime;
query_statement -------------- create external schema schema_spectrum_uddh\nfrom data catalog\ndatabase 'spectrum_db_uddh'\niam_role ''\ncreate external database if not exists; CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league\n(\n league_rank smallint,\n prev_rank smallint,\n club_name varchar(15),\n league_name varchar(20),\n league_off decimal(6,2),\n league_def decimal(6,2),\n league_spi decimal(6,2),\n league_nspi smallint\n)\nROW FORMAT DELIMITED \n FIELDS TERMINATED BY ',' \n LINES TERMINATED BY '\\n\\l'\nstored as textfile\nLOCATION 's3://mybucket-spectrum-uddh/'\ntable properties ('skip.header.line.count'='1');