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');