创建和管理逻辑视图
在 Bigtable 中,逻辑视图是 SQL 查询的结果,可作为虚拟表供其他 SQL 查询查询。数据仍保留在源表中。
本文档介绍了逻辑视图以及如何创建和操作逻辑视图。如需了解与连续具体化视图和授权视图的比较,请参阅表和视图。
借助逻辑视图,您可以对 Bigtable 数据执行以下操作:
- 避免重复查询:您可以将列映射和转换逻辑存储在逻辑视图中,并不断完善,其他逻辑视图可以使用该逻辑视图,而无需复制和粘贴该逻辑或了解该逻辑。
- 与旨在从关系数据库读取数据的系统集成:借助逻辑视图,您可以让 Bigtable 数据像关系数据库表或 Cassandra 表一样可供读取。
- 针对多个表运行同一逻辑视图:通过修改
FROM
子句,您可以使用同一视图查询 Bigtable 实例中的任何表。 - 提供一致的界面:即使源表发生变化,您的应用也可以使用逻辑视图。
- 限制对特定列或行的读取权限:您可以仅公开您希望允许用户读取的数据,而无需向用户授予对整个表的访问权限。
逻辑视图是实例级资源。您可以使用 Google Cloud CLI 或 Google Cloud 控制台中的 Bigtable Studio 查询编辑器创建逻辑视图。如需查询逻辑视图,您可以使用 Bigtable Studio 查询编辑器或任何支持 SQL 的 Bigtable 客户端库。
逻辑视图具有以下特征:
- 必须使用 GoogleSQL for Bigtable 支持的 SQL 功能
- 只读
- 必须使用 SQL 读取,而不是通过调用
ReadRows
读取 - 可以使用任何支持 SQL 的 Bigtable 客户端库进行查询
- 使用定义者权限。如果您有权从某个逻辑视图中读取数据,即使您没有权从源表中读取数据,也可以查询该逻辑视图。
您用于定义逻辑视图的行键、列限定符和列值会被视为服务数据。因此,请勿使用包含敏感信息的行键、列限定符或列值来创建逻辑视图。如需了解服务数据的处理方式,请参阅Google Cloud 隐私权声明。
准备工作
如果您计划使用 gcloud CLI,请执行以下步骤:
-
Install the Google Cloud CLI.
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
所需的角色
如需使用逻辑视图,您需要以下权限:
如需管理逻辑视图,请执行以下操作:
- 如需创建、更新或删除逻辑视图,您需要拥有实例的 Bigtable Admin (
roles/bigtable.admin
) 角色。 - 或者,您也可以让管理员在实例级层向您授予以下权限:
- 创建:
bigtable.logicalViews.create
- 更新:
bigtable.logicalViews.update
- 删除:
bigtable.logicalViews.delete
- 创建:
如需查看和查询逻辑视图,请执行以下操作:
- 如需列出或描述逻辑视图,您需要拥有实例的 Bigtable Reader (
roles/bigtable.reader
) 角色。 或者,您也可以让管理员在实例级层为您授予以下权限:
- 列表:
bigtable.logicalViews.list
- 说明:
bigtable.logicalViews.get
- 列表:
如需查询逻辑视图,您需要拥有该逻辑视图的
bigtable.logicalViews.readRows
权限。
如需创建逻辑视图,请执行以下操作:
- 您必须至少拥有源表的
bigtable.tables.readRows
权限。
如需授予对特定视图的读取权限,请执行以下操作:
您可以授予用户读取特定逻辑视图的权限,即使他们没有任何其他 Bigtable 权限也是如此。为此,请使用 IAM 条件仅针对该视图授予 bigtable.logicalViews.readRows
权限:
- 向用户授予对项目的
bigtable.reader
角色。 创建 IAM 条件,将
bigtable.logicalViews.readRows
权限限制为仅适用于特定逻辑视图。例如:resource.name == projects/PROJECT_ID/instances/INSTANCE_ID/logicalViews/VIEW
替换以下内容:
PROJECT_ID
:Bigtable 实例所在的 Google Cloud 项目。VIEW
:新逻辑视图的 ID,最长为 128 个字符。该 ID 在实例中的所有表 ID 和视图 ID 中必须是唯一的。INSTANCE_ID
:要在其中创建逻辑视图的实例的 ID。
如需了解详情,请参阅使用 IAM 条件管理对资源的访问权限。
如需详细了解所有可用的角色和权限,请参阅使用 IAM 进行 Bigtable 访问权限控制。
创建逻辑视图
控制台
在 Google Cloud 控制台中打开 Bigtable 实例列表。
请选择一个实例。
在导航窗格中,点击 Bigtable Studio。
点击
,然后选择编辑器,即可打开新标签页。在查询编辑器中,编写查询。如果查询是有效的 SQL,系统会显示“有效”消息。
可选:如需以 SQL 样式设置语句格式,请点击格式。
点击运行。查询结果会显示在结果表中。
对查询感到满意后,点击保存,然后选择保存视图。
如需详细了解如何使用查询编辑器,请参阅使用 Bigtable Studio 管理数据。
gcloud
如需创建逻辑视图,请使用 gcloud bigtable logical-views create
命令。
gcloud bigtable logical-views create VIEW \
--instance=INSTANCE --query=QUERY
替换以下内容:
VIEW
:新逻辑视图的 ID,最长为 128 个字符。该 ID 在实例中的所有表 ID 和视图 ID 中必须是唯一的。QUERY
:有效的 GoogleSQL for Bigtable 查询INSTANCE
:要在其中创建逻辑视图的实例的 ID
可选:
- 如需防止逻辑视图被删除,请在命令中附加
--deletion-protection
标志。如果您未应用此设置,则可以删除逻辑视图。您还可以通过附加--no-deletion-protection
来明确允许删除逻辑视图。如需了解详情,请参阅本文档中的修改删除保护部分。
更新逻辑视图
控制台
在 Google Cloud 控制台中打开 Bigtable 实例列表。
从列表中选择一个实例。
在导航窗格中,点击 Bigtable Studio。探索器中会显示视图列表。
可选:系统会列出实例中的前 10 个视图。如需再查看 10 个,请点击展开。
在要更新的视图旁边,点击 more_vert 操作菜单,然后点击查看定义。
修改查询。
点击运行。
验证结果窗格中显示的数据应包含在视图中后,点击另存为。
在对话框中,输入您修改的视图的 ID。
该对话框会显示一条消息,警告您将覆盖现有视图。
点击保存。
gcloud
如需更新逻辑视图以运行其他查询,请使用 gcloud bigtable logical-views update
命令。
gcloud bigtable logical-views update VIEW \
--instance=INSTANCE --query=QUERY
替换以下内容:
VIEW
:要更新的逻辑视图的 IDQUERY
:有效的 GoogleSQL 查询INSTANCE
:包含逻辑视图的实例的 ID
如需更新逻辑视图以修改删除保护,请参阅本文档的修改删除保护部分。
删除逻辑视图
这是一项永久性的操作。
如果某个逻辑视图启用了删除防护,您将无法删除该视图。如需删除启用了删除保护的逻辑视图,您必须更新该逻辑视图以停用删除保护。如需了解详情,请参阅本文档中的修改删除保护部分。
控制台
在 Google Cloud 控制台中打开 Bigtable 实例列表。
从列表中选择一个实例。
在导航窗格中,点击 Bigtable Studio。探索器中会显示视图列表。
可选:系统会列出实例中的前 10 个视图。如需再查看 10 个,请点击展开。
展开视图。
在要删除的视图旁边,点击 more_vert 操作菜单,然后点击删除。
gcloud
如需删除逻辑视图,请使用 gcloud bigtable logical-views delete
命令。
gcloud bigtable logical-views delete VIEW \
--instance=INSTANCE
替换以下内容:
VIEW
:要更新的逻辑视图的 IDINSTANCE
:包含逻辑视图的实例的 ID
获取实例的逻辑视图列表
您可以查看实例的逻辑视图列表。
控制台
在 Google Cloud 控制台中打开 Bigtable 实例列表。
从列表中选择一个实例。
在导航窗格中,点击 Bigtable Studio。探索器中会显示视图列表。
可选:系统会列出实例中的前 10 个视图。如需再查看 10 个,请点击展开。
gcloud
如需查看实例的逻辑视图列表,请使用 gcloud bigtable logical-views list
命令。
gcloud bigtable logical-views list --instance=INSTANCE
将 INSTANCE
替换为实例 ID。
描述逻辑视图
如需获取有关逻辑视图的详细信息,请使用 gcloud bigtable logical-views
describe
命令。
gcloud bigtable logical-views describe VIEW \
--instance=INSTANCE
终端会显示类似如下所示的详细信息:
createTime: '2025-03-07T19:49:56.316578Z'
etag: W/"/v1/17919275593532352351"
name: projects/my-project/instances/my-instance/logicalViews/my-view
query: SELECT street FROM addresses
updateTime: '2025-03-07T19:49:56.316578Z'
deletion_protection: true
查询逻辑视图
创建逻辑视图后,您可以使用 SQL 查询它,就像查询常规表一样。您可以在 SELECT
语句的 FROM
子句中使用逻辑视图。
在查询编辑器中,输入引用视图名称的 GoogleSQL 查询。例如,如果您的视图名为 MyLogicalView
:
SELECT *
FROM MyLogicalView
LIMIT 100;
如需详细了解如何在 Bigtable 中执行 SQL 查询,请参阅在查询编辑器中使用 SQL 查询数据。
修改删除防护
删除保护功能可防止删除逻辑视图。如需为逻辑视图启用或停用删除防护,您需要拥有必需的权限。如需了解详情,请参阅本文档的必需的角色部分。
gcloud
如需为逻辑视图启用删除保护,请运行 gcloud bigtable logical-views update
命令:
gcloud bigtable logical-views update VIEW \
--instance=INSTANCE \
--deletion-protection
如需为逻辑视图停用删除保护,请运行以下命令:
gcloud bigtable logical-views update VIEW \
--instance=INSTANCE \
--no-deletion-protection
替换以下内容:
VIEW
:逻辑视图的 ID,最长为 128 个字符。该 ID 在实例中的所有表 ID 和视图 ID 中必须是唯一的。INSTANCE
:要更新逻辑视图的实例的 ID。