本页介绍了如何通过手动添加和移除列来管理列式引擎的列存储区的内容。
根据您的工作负载,您可以手动将列添加到列存储区,也可以从列存储区中删除表或具体化视图的部分或全部列。查询评估会自动使用存储的列式数据来回应查询。
选择要添加到列存储区中的表、具体化视图和列时,请同时考虑列存储区的大小和工作负载的形状。适合选择的理想候选对象包括频繁扫描的大型表或视图。在这些表或视图中,识别 OLAP 工作负载使用的任何非唯一性大型索引。您可以将这些索引的列添加到列存储区,并可能删除这些索引,从而消除在主实例上对其进行维护的性能开销。
您可以使用以下任一方法管理列式引擎的列存储区的内容:
如需了解在向列存储区添加表、列和 materialized view 时可以使用哪些数据类型和数据源,请参阅您可以向列存储区添加哪些数据。
通过更新数据库标志来管理列存储内容
您可以通过更新 google_columnar_engine.relations
数据库标志来手动管理列存储内容。该标志只有一个值,用于指定列存储的所有数据源。在重启期间,此标志中指定的列会自动填充到列存储区中。
您可以将此标志与自动列化结合使用。如果列式引擎在通过 google_columnar_engine.relations
标志填充您指定的列后有可用内存,则自动列化会根据需要向列存储区添加更多列。
使用标志添加列
如需向列存储区添加列,请定义实例的 google_columnar_engine.relations
标志。将其值设置为以英文逗号分隔的项列表,其中每个项都指定要从特定表中包含的列的列表,格式如下:
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)
替换以下内容:
DATABASE_NAME:包含要添加到列存储区的列的数据库。
SCHEMA_NAME:用于标识要添加到列存储区中的表或物化视图的架构,例如
public
。TABLE_NAME:包含要添加到列存储区中的列的表或具体化视图。
COLUMN_LIST:要添加到列存储区中的列的英文逗号分隔列表。
如需添加一个表或一个具体化视图的所有列,请省略列列表:
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
ALTER SYSTEM SET google_columnar_engine.relations='DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_1,COLUMN_2)';
使用标志删除列
如需从列存储区中删除列,请为使用标志添加列中所述的 google_columnar_engine.relations
标志设置新值,并忽略要删除的列。
如需从列存储区中删除所有列,请从实例中取消设置 google_columnar_engine.relations
标志。
如需详细了解如何在实例上设置数据库标志,请参阅配置实例的数据库标志。
使用 SQL 函数管理列存储内容
您可以使用 SQL 函数手动管理列存储内容。
使用 SQL 函数添加列
运行 google_columnar_engine_add
SQL 函数,将列添加到列存储区。
此方法会将指定的列添加到列存储区,并且仅管理已连接节点中的列。新列不会在实例重启后保留在存储区中。
此方法不会更改 google_columnar_engine.relations
数据库标志。自动列化不会考虑此 SQL 函数添加的列。
psql 客户端
SELECT google_columnar_engine_add( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
-
替换以下内容:
- TABLE_NAME:包含表或具体化视图名称的字符串。如果表或视图位于
public
以外的架构中,请指定架构的名称、英文句点和表或视图的名称;例如'myschema.mytable'
。 - COLUMN_LIST:一个字符串,其中包含要添加的列名称的英文逗号分隔的列表(区分大小写)。如果您想将表或具体化视图的所有列添加到列存储区,请忽略此参数。
使用 SQL 函数删除列
运行 google_columnar_engine_drop
SQL 函数,具体代码如下所示:
psql 客户端
SELECT google_columnar_engine_drop( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
- TABLE_NAME:包含表或具体化视图名称的字符串。如果表或视图位于
public
以外的架构中,请指定架构的名称、英文句点和表或视图的名称;例如'myschema.mytable'
。 - COLUMN_LIST:一个字符串,其中包含要添加的列名称的英文逗号分隔的列表(区分大小写)。如果您想将表或具体化视图的所有列添加到列存储区,请忽略此参数。
您可以使用 google_columnar_engine_drop
函数通过修改 google_columnar_engine.relations
数据库标志来移除添加的列。不过,如果您这样做,这些列会在实例重启时重新添加到列存储区。