手动管理列存储内容

本页介绍了如何通过手动添加和移除列来管理列式引擎的列存储区的内容。

根据您的工作负载,您可以手动将列添加到列存储区,也可以从列存储区中删除表或具体化视图的部分或全部列。查询评估会自动使用存储的列式数据来回应查询。

选择要添加到列存储区中的表、具体化视图和列时,请同时考虑列存储区的大小和工作负载的形状。适合选择的理想候选对象包括频繁扫描的大型表或视图。在这些表或视图中,识别 OLAP 工作负载使用的任何非唯一性大型索引。您可以将这些索引的列添加到列存储区,并可能删除这些索引,从而消除在主实例上对其进行维护的性能开销。

您可以使用以下任一方法管理列式引擎的列存储区的内容:

如需了解在向列存储区添加表、列和 materialized view 时可以使用哪些数据类型和数据源,请参阅您可以向列存储区添加哪些数据

准备工作

  • 您必须在所使用的 Google Cloud 项目中拥有以下某个 IAM 角色:
    • roles/alloydb.admin(AlloyDB Admin 预定义 IAM 角色)
    • roles/owner(Owner 基本 IAM 角色)
    • roles/editor(Editor 基本 IAM 角色)

    如果您不具备上述任何角色,请与您的 Organization Administrator 联系以请求访问权限。

通过更新数据库标志来管理列存储内容

您可以通过更新 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 数据库标志来移除添加的列。不过,执行此操作后,这些列将在实例重启时重新添加到列存储区。