存储类型规范的 SQL 语法

本节将介绍 NPS SQL 语法的增强功能,以便在表和数据库级别指定和管理数据源的存储类型。 这些改进为配置存储选项提供了更大的灵活性,与现有的湖畔小屋功能类似。

创建表格后 ,无法更改现有表格的存储类型。 一种解决方法是使用CTAS(Create Table As Select)创建新表,指定所需的存储类型,然后删除原始表。

数据库级配置

  • 用户可以在数据库级别配置和修改默认存储类型。
  • 这样,数据库中所有表的存储行为都能保持一致,除非在单个表的级别上被覆盖。

默认存储类型

默认存储类型在系统级设置为“块”。 它可以从控制台进行修改。

创建表格时存储类型的优先级

创建表格时,系统会根据以下优先级确定存储类型:

  1. Create table 语句
  2. 会话级设置
  3. 数据库级设置
  4. 全系统设置

CREATE TABLE 声明本身是第一优先,也是最高优先。 如果 storagetype 未在语句中明确指定,系统会检查是否已应用会话级设置。 如果没有,则会查找在数据库级别设置的默认存储类型。 如果数据库级设置为 "default",则将使用全系统的 DEFAULT_STORAGE_TYPE

查看表格存储类型

要确定表的存储类型,请查询 _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_%';

可通过系统视图 _v_table 确定表的存储类型。 这里,1 代表 block,2 代表 object

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

一旦创建表格,就不能更改storagetype。 要将表复制到不同的存储类型,请使用 CTAS(创建表格为选择) 语句,如下所示:

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

SELECT 语句必须使用括号

不能指定 storagetype 对于物化视图。 存储类型由基本表继承

仅支持块存储的版本升级到支持对象存储的版本时,所有现有表都将具有其 storagetype 设置为 'block'

为数据库设置 storagetype

在创建数据库时,可以指定应用于特定数据库中创建的表的默认存储类型。

  1. CREATE DATABASE 声明
  2. 会话级设置
  3. 全系统设置

您可以在创建数据库时为其设置默认 storagetype

CREATE DATABASE database1 STORAGETYPE 'block';

如果未指定 storagetype,系统将:

  • 检查会话级设置
  • 如果找不到,则使用全系统默认值
  • 该值将作为数据库的默认值存储在内部 storagetype

要在数据库级别不设置默认值,请使用

CREATE DATABASE database1 STORAGETYPE 'default';

要检查数据库的默认 storagetype,请查询 _v_database 系统视图:

SELECT DATABASE, STORAGETYPE FROM _v_database;

示例输出:

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

仅支持块存储的版本升级到支持对象存储的版本时,默认 storagetype 所有现有数据库将设置为 'block'

可以使用 ALTER DATABASE 命令更改与数据库相关的默认 storagetype

  • 更改数据库存储类型

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