Como usar tabelas temporárias locais do GaussDB (DWS) para processamento de dados

Este artigo é compartilhado da comunidade Huawei Cloud " GaussDB (DWS) Temporary Table Series - Local Temporary Table ", autor: acydy.

GaussDB (DWS) suporta três formas de tabelas temporárias da versão 8.2.1: tabelas temporárias locais, tabelas temporárias voláteis e tabelas temporárias globais. Este artigo apresenta primeiro a função de tabela temporária local do DWS.

Recursos de tabelas temporárias locais: as definições e os dados da tabela estão relacionados à sessão e outras sessões não podem ver as tabelas temporárias locais criadas por esta sessão. Os metadados serão persistidos na tabela do sistema e RETRY poderá ser suportado se o nó do cluster falhar de forma anormal .

Gramática e uso

CRIAR [LOCAL] {TEMPORÁRIO | TEMP } TABLE [ SE NÃO EXISTE ] nome_da_tabela 
    ({ nome_da_coluna tipo_de_dados [ modo de compressão ] [ agrupamento COLLATE ] [ restrição_coluna [ ... ] ] 
        | restrição_tabela 
        | LIKE tabela_fonte [ like_option [...] ] } 
        [, ... ]) 
    [ COM ({parâmetro_de_armazenamento = valor} [, ... ] ) ] 
    [ ON COMMIT { PRESERVE ROWS | EXCLUIR LINHAS } ]

Ao criar uma tabela, você precisa especificar TEMP ou TEMPORARY, o que significa criar uma tabela temporária local.

  • ON COMMIT { PRESERVAR LINHAS | EXCLUIR LINHAS }

A opção ON COMMIT determina se deve ser criada uma tabela temporária em uma transação.Quando a transação for confirmada, as operações subsequentes desta tabela temporária serão executadas.

  • PRESERVE ROWS (valor padrão): Nenhuma operação é executada na tabela temporária durante o envio, e a tabela temporária e seus dados da tabela permanecem inalterados. Este tipo é recomendado.
  • DELETE ROWS: Exclua os dados da tabela temporária ao enviar.

Outras partes são iguais às tabelas comuns.

gaussdb=# cria tabela temporária tmp1(a int,b int); 
AVISO: A cláusula 'DISTRIBUTE BY' não foi especificada. Usando round-robin como modo de distribuição por padrão. 
DICA: Use a cláusula 'DISTRIBUTE BY' para especificar a coluna de distribuição de dados adequada. 
CRIAR A TABELA

As tabelas temporárias podem ter o mesmo nome das tabelas não temporárias. Se tiverem o mesmo nome, a prioridade das tabelas temporárias é maior que a das tabelas não temporárias.

gaussdb=# cria tabela temporária tmp1(a int,b int); 
AVISO: A cláusula 'DISTRIBUTE BY' não foi especificada. Usando round-robin como modo de distribuição por padrão. 
DICA: Use a cláusula 'DISTRIBUTE BY' para especificar a coluna de distribuição de dados adequada. 
CREATE TABLE 
gaussdb=# inserir em valores tmp1 (1,1); 
INSERT 0 1 
gaussdb=# cria tabela tmp1(a int,b int); 
AVISO: A cláusula 'DISTRIBUTE BY' não foi especificada. Usando round-robin como modo de distribuição por padrão. 
DICA: Use a cláusula 'DISTRIBUTE BY' para especificar a coluna de distribuição de dados adequada. 
CREATE TABLE 
gaussdb=# selecione *de tmp1; 
 um | b 
---+--- 
 1 | 1 
(1 linha) 

gaussdb=# selecione *de public.tmp1; 
 um | b 
---+--- 
(0 linhas)

Visualizações: as visualizações criadas com base em tabelas temporárias são visualizações temporárias.

postgres=# cria a visualização tmp_v1 como select *from tmp1; 
AVISO: a visualização "tmp_v1" será uma visualização temporária 
CREATE VIEW

cenas a serem usadas

  1. A lógica de negócios complexa é dividida usando tabelas temporárias locais

    Se a instrução SQL comercial for muito complexa, você poderá usar uma tabela temporária local para armazenar em cache os resultados intermediários da execução, dividindo assim a lógica comercial complexa em várias instruções mais simples. A informação estatística das demonstrações simples é mais preparada e o negócio dividido é mais fácil de manter.

  2. Suporta exceções em nós CN.
    GaussDB (DWS) é um banco de dados de arquitetura distribuída. Existem vários Coordenadores (CN) e os relacionamentos são iguais. O cliente pode se conectar a qualquer CN. O CN armazena as informações de metadados da tabela. Ao executar DDL, os metadados serão sincronizados em todos os DNs para garantir a consistência dos dados. Se ocorrer uma anormalidade em um CN, operações como criar uma tabela e excluir uma tabela falharão, causando falha em todo o trabalho.

    Neste cenário, tabelas temporárias locais podem ser usadas. As tabelas temporárias locais só são visíveis na sessão atual. Ao realizar operações como criação, ALTER e exclusão de tabelas temporárias locais, apenas os metadados serão modificados no CN atual. Isto não será afetado por anormalidades em outros nós CN e garantirá a continuidade dos negócios.

princípio

A diferença de metadados entre tabelas temporárias e tabelas comuns é que as tabelas temporárias não são visíveis em outras sessões, portanto, são construídas em um esquema que pertence apenas à sessão atual. Quando esta sessão criar uma tabela temporária pela primeira vez, o esquema da sessão será criado ao mesmo tempo. O esquema temporário é diferente para cada sessão.

Sessão 1:

gaussdb=# cria tabela temporária tmp1(a int,b int); 
AVISO: A cláusula 'DISTRIBUTE BY' não foi especificada. Usando round-robin como modo de distribuição por padrão. 
DICA: Use a cláusula 'DISTRIBUTE BY' para especificar a coluna de distribuição de dados adequada. 
CREATE TABLE 
gaussdb=# \d+ tmp1 
       Tabela "pg_temp_coordinator1_65_3_140257888512760.tmp1" 
 Coluna | Tipo | Modificadores | Armazenamento | Meta de estatísticas | Descrição 
--------+---------+-----------+---------+-------- ------+------------- 
 um | inteiro | | simples | | 
 b | inteiro | | simples | | 
Possui OIDs: não 
Distribuído por: ROUND ROBIN 
Nós de localização: ALL DATANODES 
Opções: orientação=linha, compressão=não:

Sessão 2, a tabela tmp1 não pode ser consultada.

gaussdb=# selecione * de tmp1; 
ERRO: relação "tmp1" não existe 
LINHA 1: selecione * de tmp1; 
                      ^

Regras de nomenclatura para esquema temporário: pg_temp_Coordinator name_timelineID_global auto-increment ID_threadID

Nome do coordenador: nome do CN, que isola esquemas criados por diferentes CNs.

timelineID: aumentará após o nó ser reiniciado e é usado para determinar se este esquema é inválido.

ID de incremento automático global: ID de incremento automático em um único CN. O mesmo CN não precisa ter IDs de incremento automático de sessão diferentes.

Metadados: O sinalizador de persistência da tabela temporária local é 't'.

gaussdb=# selecione relname, relpersistence de pg_class onde relname = 'tmp1'; 
 nome do rel | repersistência 
---------+---------------- 
 tmp1 | t

Limpeza de dados:

  1. A sessão termina normalmente.
    Quando a sessão termina normalmente, a definição da tabela e os dados da tabela temporária local serão excluídos. Os dados originais não estão mais acessíveis.

  2. Quando a sessão termina de forma anormal ou o CN atual ou um determinado nó DN está anormal.
    Quando ocorre uma exceção, os metadados e dados do nó não serão excluídos imediatamente. GaussDB (DWS) depende da ferramenta gs_clean do componente para limpar automática e regularmente tabelas temporárias locais. Certifique-se de que os dados sejam limpos após um período de tempo para evitar a expansão contínua do espaço.

CN Tentar novamente

Quando a função CN Retry estiver ativada, os dados da tabela temporária serão registrados. Para garantir a consistência dos dados, não é recomendado alternar o estado da chave CN Retry ao usar a tabela temporária. Mantenha a chave CN Retry sempre ativada ou desativada no sessão usando a tabela temporária.
Quando CN Retry está ativado, o nó DN é reiniciado de forma anormal e é garantido que os dados na tabela temporária não serão perdidos. Depois que o DN for reiniciado, as sessões anteriores ainda poderão ser acessadas.
Se você deseja que a tabela temporária não seja registrada:

definir max_query_retry_times = 0;

Usar restrições

  1. Se o aplicativo da camada superior usar o mecanismo de pool de conexões para se conectar ao GaussDB (DWS), ao usar uma tabela temporária, é altamente recomendável excluir ativamente a tabela temporária antes de retornar a conexão ao pool de conexões para evitar anomalias de dados causadas pelo conexão não está sendo desconectada. Ou use o comando DISCARD TEMPpara limpar as informações da tabela temporária da sessão.
  2. As tabelas temporárias locais são ignoradas durante a expansão.
  3. As tabelas temporárias locais gs_dump não são suportadas.

Clique para acompanhar e conhecer as novas tecnologias da Huawei Cloud o mais rápido possível

Lei Jun: A versão oficial do novo sistema operacional da Xiaomi, ThePaper OS, foi empacotada. A janela pop-up na página de loteria do Gome App insulta seu fundador. O Ubuntu 23.10 foi lançado oficialmente. Você também pode aproveitar a sexta-feira para atualizar! Episódio de lançamento do Ubuntu 23.10: A imagem ISO foi "recuperada" com urgência devido a conter discurso de ódio. Um estudante de doutorado de 23 anos corrigiu o "bug fantasma" de 22 anos no Firefox. O desktop remoto RustDesk 1.2.3 foi lançado, Wayland aprimorado para suportar a versão TiDB 7.4: Oficial compatível com MySQL 8.0. Depois de desconectar o receptor USB da Logitech, o kernel do Linux travou. O mestre usou o Scratch para esfregar o simulador RISC-V e executou com sucesso o kernel do Linux. JetBrains lançou o Writerside, uma ferramenta para criação de documentos técnicos.
{{o.nome}}
{{m.nome}}

Acho que você gosta

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