STL_DDLTEXT - Amazon Redshift

STL_DDLTEXT

Captura as seguintes instruções de DDL que foram executadas no sistema.

Essas instruções de DDL incluem as seguintes consultas e objetos:

  • CREATE SCHEMA, TABLE, VIEW

  • DROP SCHEMA, TABLE, VIEW

  • ALTER SCHEMA, TABLE

Consulte também STL_QUERYTEXT, STL_UTILITYTEXT e SVL_STATEMENTTEXT. Essas exibições fornecem uma linha do tempo dos comandos de SQL que são executados no sistema; esse histórico é útil para fins de solução de problemas e para criar uma trilha de auditoria de todas as atividades do sistema.

Use as colunas STARTTIME e ENDTIME para saber quais instruções foram registradas em um determinado período. Os blocos longos de texto SQL são quebrados em linhas de 200 caracteres; a coluna SEQUENCE identifica os fragmentos de texto que pertencem a uma única instrução.

STL_DDLTEXT permanece visível para todos os usuários. Os superusuários podem ver todas as linhas; usuários regulares podem ver somente seus próprios dados. Para ter mais informações, consulte Visibilidade de dados em tabelas e visualizações de sistema.

Alguns ou todos os dados nessa tabela também podem ser encontrados na exibição de monitoramento SYS SYS_QUERY_HISTORY. Os dados na exibição de monitoramento SYS são formatados para serem mais fáceis de usar e compreender. É recomendável usar a exibição de monitoramento SYS nas consultas.

Colunas da tabela

Nome da coluna Tipo de dados Descrição
userid inteiro O ID do usuário que gerou a entrada.
xid bigint O ID da transação associada à instrução.
pid inteiro O ID do processo associado à instrução.
label character(320) O nome do arquivo usado para executar a consulta ou um rótulo definido com o comando SET QUERY_GROUP. Se a consulta não for baseada em arquivos ou o parâmetro QUERY_GROUP não estiver definido, o valor deste campo será branco.
starttime timestamp O horário (em UTC) de início da consulta. O tempo total inclui consultas e execução, com seis dígitos de precisão para segundos fracionários. Por exemplo: 2009-06-12 11:29:19.131358.
endtime timestamp Horário em UTC em que a consulta foi finalizada. O tempo total inclui consultas e execução, com seis dígitos de precisão para segundos fracionários. Por exemplo: 2009-06-12 11:29:19.131358.
sequence inteiro Quando uma única instrução contém mais de 200 caracteres, são registradas linhas adicionais para essa instrução. O valor 0 da sequência é a primeira linha, 1 é a segunda, e assim por diante.
text character(200) O texto em SQL, em incrementos de 200 caracteres. Esse campo pode conter caracteres especiais como barra invertida (\\) e nova linha (\n).

Consultas de exemplo

A consulta a seguir retorna registros que incluem instruções de DDL executadas anteriormente.

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

Esta é uma saída de exemplo que mostra quatro instruções CREATE TABLE. As instruções de DDL aparecem na coluna text, que é truncada para legibilidade.

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)

Reconstrução de SQL armazenado

O SQL a seguir lista as linhas armazenadas na coluna text de STL_DDLTEXT. As linhas são ordenadas por xid e sequence. Se o SQL original for mais extenso que várias linhas de 200 caracteres, STL_DDLTEXT poderá conter várias linhas 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 o SQL armazenado na coluna text de STL_DDLTEXT, execute a instrução SQL a seguir. Ela reúne instruções de DDL de um ou mais segmentos na coluna text. Antes de executar o SQL reconstruído, substitua os caracteres especiais (\n) por uma nova linha no cliente SQL. Os resultados a seguir da instrução SELECT reúnem três linhas em sequência para reconstruir o SQL, no 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');