本页面介绍了如何通过手动添加和移除列来管理列式引擎的列存储区的内容。
根据工作负载,您可以手动将列添加到列存储区,也可以从列存储区中删除表或物化视图的部分或全部列。查询评估会自动使用存储的列式数据来回应查询。
在选择要添加到列存储区的表、物化视图和列时,请同时考虑列存储区的大小和工作负载的状况。可供选择的理想候选项包括频繁扫描的大型表或视图。在这些表或视图中,需确定 OLAP 工作负载使用的任何非唯一性大型索引。您可以将这些索引的列添加到列存储区,并可能删除这些索引,从而消除在主实例上对其进行维护的相关性能成本。
使用以下方法之一可管理列式引擎的列存储区的内容:
如需了解向列存储区中添加表、列和物化视图时可以使用哪些数据类型和数据源,请参阅您可以向列存储区添加哪些数据。
准备工作
- 您必须在所使用的 Google Cloud 项目中拥有以下 IAM 角色之一:
roles/alloydb.admin
(AlloyDB Admin 预定义 IAM 角色)roles/owner
(Owner 基本 IAM 角色)roles/editor
(Editor 基本 IAM 角色)
如果您不拥有上述任何角色,请与组织管理员联系以申请访问权限。
通过更新数据库标志来管理列存储区内容
您可以通过更新 google_columnar_engine.relations
数据库标志来手动管理列存储区内容。该标志具有单个值,用于指定您的所有列存储区数据源。在重启期间,此标志中指定的列会自动填充到列存储区中。
您可以将此标志与自动列式处理结合使用。如果列式引擎在填充您通过 google_columnar_engine.relations
标志指定的列后有可用内存,则自动列式处理会根据需要向列存储区添加更多列。
如需详细了解如何使用 Google Cloud CLI 或 Google Cloud 控制台设置实例的数据库标志,请参阅配置实例的数据库标志。
使用标志添加列
如需向列存储区添加列,请定义实例的 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
如需详细了解如何在实例上设置数据库标志,请参阅配置实例的数据库标志。
关于命令行语法的说明
如果您使用 Google Cloud CLI 设置 google_columnar_engine.relations
标志,则必须使用备用分隔符语法来分隔您设置的数据库标志。这是因为列的列表是以英文逗号分隔的,从而在同一命令行参数中指定标志时,您需要使用非英文逗号字符。
以下示例演示了如何使用 gcloud CLI 将 public
架构中的两个列添加到列存储区中。此示例设置了一个单独的标志来启用列式引擎,因为使用 gcloud alloydb instance update
命令设置任何数据库标志时,还必须设置您希望具有非默认值的所有其他数据库标志,即使它们已设置也是如此。
gcloud alloydb instances update INSTANCE_NAME \
--database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
--region=REGION_ID \
--cluster=CLUSTER_ID
使用标志删除列
如需从列存储区中删除列,请为上一部分中所述的 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
数据库标志添加的列。不过,这样做后,这些列会在实例重启时重新添加到列式存储区中。