Sintaxe SQL para especificação do tipo de armazenamento

Esta seção descreve os aprimoramentos da sintaxe SQL do NPS para especificar e gerenciar tipos de armazenamento para recursos de dados nos níveis de tabela e de banco de dados. Essas melhorias proporcionam maior flexibilidade na configuração das opções de armazenamento, semelhante à funcionalidade existente no Lakehouse.

O tipo de armazenamento de uma tabela existente não pode ser alterado após a criação da tabela. Uma solução alternativa seria criar uma nova tabela usando CTAS (Create Table As Select), especificando o tipo de armazenamento desejado e excluir a tabela original.

Configuração no nível do banco de dados

  • Os usuários podem configurar e modificar o tipo de armazenamento padrão no nível do banco de dados.
  • Isso permite um comportamento de armazenamento consistente em todas as tabelas de um banco de dados, a menos que seja substituído no nível da tabela individual.

Tipo de armazenamento padrão

O tipo de armazenamento padrão é definido como "bloco" no nível do sistema. Pode ser modificado a partir do console.

Precedência do tipo de armazenamento para a criação de tabelas

Ao criar uma tabela, o sistema determina o tipo de armazenamento com base na seguinte precedência:

  1. Instrução de criação de tabela
  2. Configuração em nível de sessão
  3. Configuração em nível de banco de dados
  4. Configuração em todo o sistema

A primeira e mais alta precedência é a própria declaração CREATE TABLE. Se o endereço storagetype não for explicitamente especificado na declaração, o sistema verificará se uma configuração em nível de sessão foi aplicada. Caso contrário, ele procura o tipo de armazenamento padrão definido no nível do banco de dados. Se a configuração em nível de banco de dados for "default", será usada a configuração de todo o sistema DEFAULT_STORAGE_TYPE.

Exibição do tipo de armazenamento da tabela

Para determinar o tipo de armazenamento de uma tabela, consulte a visualização do sistema _v_table:

SELECT TABLENAME, STORAGESOURCE, CASE WHEN STORAGESOURCE = 1 THEN 'BLOCK' WHEN STORAGESOURCE = 2 THEN 'OBJECT' END AS STORAGETYPE FROM _v_table WHERE TABLENAME like 'TEST_%';

O tipo de armazenamento de uma tabela pode ser determinado na visualização do sistema _v_table. Aqui, 1 representa block e 2 representa object.

| TABLENAME | STORAGESOURCE | STORAGETYPE |
|-----------|---------------|-------------|
| TEST_OBJ  | 2             | OBJECT      |
| TEST_BLK  | 1             | BLOCK       |

Depois que uma tabela é criada, seu endereço storagetype não pode ser alterado. Para copiar uma tabela para um tipo de armazenamento diferente, use a instrução CTAS (Create Table As Select) da seguinte forma:

CREATE TABLE t3 AS (SELECT * FROM t1) STORAGETYPE 'block';

São necessários parênteses ao redor da declaração SELECT

Não é possível especificar storagetype para exibições materializadas. O tipo de armazenamento é herdado da tabela de base.

Durante uma atualização de uma versão que suporta apenas o armazenamento em bloco para uma que suporta o armazenamento em objeto, todas as tabelas existentes terão seu storagetype definido como 'block'.

Configuração de storagetype para um banco de dados

O tipo de armazenamento padrão a ser aplicado às tabelas criadas em um determinado banco de dados pode ser especificado durante a criação do banco de dados.

  1. CREATE DATABASE declaração
  2. Configuração em nível de sessão
  3. Configuração em todo o sistema

Você pode definir o endereço storagetype padrão para um banco de dados durante a criação:

CREATE DATABASE database1 STORAGETYPE 'block';

Se storagetype não for especificado, o sistema irá:

  • Verifique se há uma configuração em nível de sessão.
  • Se nenhum for encontrado, use o padrão de todo o sistema.
  • Esse valor é então armazenado internamente como o padrão do banco de dados storagetype.

Para deixar o padrão não definido no nível do banco de dados, use:

CREATE DATABASE database1 STORAGETYPE 'default';

Para verificar o padrão storagetype para bancos de dados, consulte a visualização do sistema _v_database:

SELECT DATABASE, STORAGETYPE FROM _v_database;

Saída de exemplo:

 DATABASE |  STORAGETYPE
----------+----------------
 DB1      | BLOCK
 DB2      | OBJECT
 SYSTEM   | SYSTEM DEFAULT
(3 rows)

Durante uma atualização de uma versão que suporta apenas o armazenamento em bloco para uma versão que suporta o armazenamento em objeto, o endereço padrão storagetype para todos os bancos de dados existentes será definido como 'block'.

O storagetype padrão associado a um banco de dados pode ser alterado com o comando ALTER DATABASE.

  • Alterar o tipo de armazenamento do banco de dados

    ALTER DATABASE <database_name> STORAGETYPE '<storage_type>';