创建和管理表

本页面介绍如何使用 Google Cloud 控制台、Google Cloud CLI 或 cbt CLI 创建 Bigtable 表并对其执行操作。

cbt CLI 支持若干命令,本页面未对这些命令进行介绍。如需了解完整的命令列表,请参阅 cbt 参考文档

您还可以使用 Cloud Bigtable 客户端库服务 API 以编程方式创建和管理表。

如需了解如何创建和管理表的授权视图,请参阅授权视图

准备工作

如果您打算使用命令行工具来处理表,请按照本部分中的步骤操作。

  1. 安装 gcloud CLI

  2. 可选:如果您计划使用 cbt CLI,请按照安装 cbt CLI中的说明(包括创建 .cbtrc 文件的步骤)操作。

    本页面上的 cbt CLI 说明假定您已在 .cbtrc 文件中设置了项目 ID 和实例 ID。此外,每次运行 cbt CLI 命令时,您都可以使用 -project-instance 标志设置这些值。

创建表

创建表时,您无需指定要在表中使用的列族。您可以稍后添加或删除列族。

控制台

要在实例中创建新表,请执行以下操作:

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。

  4. 输入表 ID。

  5. 添加列族(可选)

    您可以现在添加列,也可以稍后添加。表必须至少有一个列族才能向其中写入数据。 表必须至少有一个列族才能向其中写入数据或从中读取变更数据流。

  6. 可选:为表启用变更数据流。在启用变更数据流之前,请务必了解影响,包括存储费用和应用配置文件使用需求增多。如需查看这些详细信息,请参阅变更数据流概览

    1. 选择启用变更数据流

    2. 到期时间字段中,输入一个介于 1 到 7 之间的数字,以指定变更数据流数据应保留的天数。

    3. 点击创建

  7. 点击创建表

gcloud

如需创建表,请运行以下命令。如需查看完整的选项列表,请参阅 gcloud bigtable 实例表创建

gcloud bigtable instances tables create TABLE_ID \
    --instance=INSTANCE_ID \
    --project=PROJECT_ID \
    --column-families=COLUMN-FAMILIES

替换以下内容:

  • TABLE_ID:新表的唯一 ID
  • INSTANCE_ID:实例的 ID
  • PROJECT_ID:将包含新表的项目
  • COLUMN-FAMILIES:列族名称的英文逗号分隔列表。您可以稍后添加更多列族。

可选:

  • 要防止表被删除,请在命令中附加 --deletion-protection。如果您未应用此设置,则可以删除表。您还可以通过附加 --no-deletion-protection 来明确允许删除表。

  • 如需为表启用变更数据流,请为变更数据流数据指定保留期限。在启用变更数据流之前,请务必了解影响,包括存储费用和应用配置文件使用需求增多。如需查看这些详细信息,请参阅变更数据流概览

    --change-stream-retention-period=RETENTION_PERIOD
    

    RETENTION_PERIOD 替换为 Bigtable 应将表的变更数据流数据保留的时长。时间必须介于 1 到 7 天之间。可接受的单位包括天 (d)、小时 (h)、分钟 (m) 和秒 (s)。示例:48h6d

  • 如需让 Bigtable 每日备份表,请使用以下命令:

    gcloud bigtable instances tables create TABLE_ID \
        --instance=INSTANCE_ID \
        --project=PROJECT_ID \
        --column-families=COLUMN-FAMILIES \
        --enable-automated-backup
    

cbt

使用以下命令,将 TABLE_NAME 替换为您的表名。您无法使用 cbt CLI 创建启用了变更数据流的表。

cbt createtable TABLE_ID

可选:如需在表中创建聚合列族预览版),请在列族名称中附加 :instsum 作为整数总和,并将 FAMILY_NAME 替换为新汇总列族的名称。以下代码会创建一个垃圾回收政策为 never 的聚合列族。

cbt createtable TABLE_ID families=FAMILY_NAME:never:intsum

如果您误删了表,请勿尝试手动创建已删除的表。使用 gcloud CLI 命令 bigtable instances tables undelete 恢复表。

可选:按行键拆分表

作为全代管式服务,Bigtable 的一项功能是自动跨多个节点拆分表。此功能会尽可能均匀分布存储在每个节点上的数据量,并确保频繁访问的行分散开来,因此可优化性能。

使用 gcloud CLI、cbt CLI 或 Cloud Bigtable 客户端库创建表时,您可以选择行键来预拆分表。例如,如果您要向表中写入多行,则可指定特定行来预拆分表。发生初始拆分时,您最多可以提供 100 个行键。

预拆分表并非必需操作,但这样做很有用,因为可让 Bigtable 了解在创建表时负载和数据可能归入何处。预拆分表后,Bigtable 就无需在数据到达时立即拆分表并再平衡负载。

不会一直保持按行键(即您在创建表时选择用于预拆分表的行键)拆分的状态。Bigtable 最终会根据表中的数据量以及各行的访问频率,按不同的行键拆分表。

控制台

使用 Google Cloud 控制台创建表时不能预拆分行。

gcloud

如需按行键拆分表,请运行以下命令。如需查看完整的选项列表,请参阅 gcloud bigtable 实例表创建

gcloud bigtable instances tables create TABLE_ID\
    --instance=INSTANCE_ID \
    --project=PROJECT_ID \
    --column-families=COLUMN-FAMILIES \
    --splits=SPLITS

替换以下内容:

  • TABLE_ID:新表的唯一 ID
  • INSTANCE_ID:实例的 ID
  • PROJECT_ID:将包含新表的项目
  • COLUMN-FAMILIES:列族名称的英文逗号分隔列表。您可以稍后添加更多列族。
  • SPLITS:最初应拆分表所按的行键,例如 10,20

cbt

如需根据行键预拆分表,请使用以下语法创建表。将 [TABLE_NAME] 替换为表名称,并将 [SPLITS] 替换为要在预拆分中使用的行键前缀的逗号分隔列表。

```
cbt createtable [TABLE_NAME] splits=[SPLITS]
```

例如,如需使用以 1020 开头的行键预拆分 my-table 表,请运行以下命令:

```
cbt createtable my-table splits=10,20
```

修改表中的列族

您可以在现有表中添加列族。如果表未启用删除保护,则可以删除表中的列族。

添加列族

控制台

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。

  4. 点击要修改的表的 修改

  5. 对于要添加的每个列族,完成以下操作:

    1. 点击添加列族 (Add column family)。
    2. 为列族提供唯一标识符。
    3. 为列族设置垃圾回收政策。
    4. 点击完成
    5. 点击保存

gcloud

您无法使用 gcloud CLI 将列族添加到表中。

cbt

如需将列族添加到表中,请使用以下命令,并将 [TABLE_NAME][FAMILY_NAME] 分别替换为表名称和列族名称:

cbt createfamily [TABLE_NAME] [FAMILY_NAME]

例如,如要向 my-table 表中添加 cf1cf2 列族,请使用以下命令:

cbt createfamily my-table cf1
cbt createfamily my-table cf2

可选:如需向表添加聚合列族预览版),请在列族名称中附加 :instsum 作为整数总和,并将 FAMILY_NAME 替换为新的汇总列族的名称。以下命令创建了一个表,其中包含一个聚合列族,垃圾回收政策为 never

cbt createtable TABLE_ID families=FAMILY_NAME:never:intsum

删除列族

您可以在未启用删除保护的表中删除列族。

控制台

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。

  4. 点击要修改的表的 修改

  5. 对于要删除的每个列族,完成以下操作:

    1. 将鼠标悬停在要删除的列族所在的行上。
    2. 点击
  6. 点击保存

  7. 如需确认您了解删除列族是永久性的并且列族中的所有数据都将被删除,请在文本框中输入“删除列族”。

  8. 点击确认

gcloud

您无法使用 gcloud CLI 从表中删除列族。

cbt

如需从表中删除列族,请使用以下命令,并将 [TABLE_NAME][FAMILY_NAME] 分别替换为表名称和列族名称:

cbt deletefamily [TABLE_NAME] [FAMILY_NAME]

例如,如需从 my-table 表中删除 cf2 列族,请运行以下命令:

cbt deletefamily my-table cf2

查看表的列表

控制台

要查看实例中的表列表,请执行以下操作:

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。

gcloud

如需查看表列表,请运行 gcloud bigtable instances tables list 命令。

gcloud bigtable instances tables list --instances=INSTANCE_IDS

替换以下内容:

  • INSTANCE_IDS:以英文逗号分隔的实例 ID 列表。

cbt

如需查看实例中的表列表,请运行以下命令:

    cbt ls INSTANCE_ID

替换以下内容:

  • INSTANCE_ID:实例的永久性标识符。

C++

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

namespace cbt = ::google::cloud::bigtable;
namespace cbta = ::google::cloud::bigtable_admin;
using ::google::cloud::StreamRange;
[](cbta::BigtableTableAdminClient admin, std::string const& project_id,
   std::string const& instance_id) {
  std::string instance_name = cbt::InstanceName(project_id, instance_id);

  google::bigtable::admin::v2::ListTablesRequest r;
  r.set_parent(instance_name);
  r.set_view(google::bigtable::admin::v2::Table::NAME_ONLY);

  StreamRange<google::bigtable::admin::v2::Table> tables =
      admin.ListTables(std::move(r));
  for (auto& table : tables) {
    if (!table) throw std::move(table).status();
    std::cout << table->name() << "\n";
  }
}

C#

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

// Lists tables in intance.
// Initialize request argument(s).
ListTablesRequest request = new ListTablesRequest
{
    ParentAsInstanceName = s_instanceName
};
try
{
    // Make the request.
    PagedEnumerable<ListTablesResponse, Table> response = bigtableTableAdminClient.ListTables(request);

}
catch (Exception ex)
{
    Console.WriteLine($"Error listing tables {ex.Message}");
}

Java

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

// Lists tables in the current instance.
try {
  List<String> tableIds = adminClient.listTables();
  for (String tableId : tableIds) {
    System.out.println(tableId);
  }
} catch (NotFoundException e) {
  System.err.println("Failed to list tables from a non-existent instance: " + e.getMessage());
}

Node.js

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

// List tables in current project
const [tables] = await instance.getTables();
tables.forEach(table => {
  console.log(table.id);
});

PHP

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

use Google\Cloud\Bigtable\Admin\V2\Client\BigtableInstanceAdminClient;
use Google\Cloud\Bigtable\Admin\V2\Client\BigtableTableAdminClient;
use Google\Cloud\Bigtable\Admin\V2\ListTablesRequest;

/**
 * List tables in an instance
 *
 * @param string $projectId The Google Cloud project ID
 * @param string $instanceId The ID of the Bigtable instance
 */
function list_tables(
    string $projectId,
    string $instanceId
): void {
    $instanceAdminClient = new BigtableInstanceAdminClient();
    $tableAdminClient = new BigtableTableAdminClient();

    $instanceName = $instanceAdminClient->instanceName($projectId, $instanceId);

    printf('Listing Tables:' . PHP_EOL);
    $listTablesRequest = (new ListTablesRequest())
        ->setParent($instanceName);
    $tables = $tableAdminClient->listTables($listTablesRequest)->iterateAllElements();
    $tables = iterator_to_array($tables);
    if (empty($tables)) {
        print('No table exists.' . PHP_EOL);
        return;
    }
    foreach ($tables as $table) {
        print($table->getName() . PHP_EOL);
    }
}

Python

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

tables = instance.list_tables()
print("Listing tables in current project...")
if tables != []:
    for tbl in tables:
        print(tbl.table_id)
else:
    print("No table exists in current project...")

Ruby

如需了解如何安装和使用 Bigtable 的客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

# instance_id = "my-instance"
bigtable.tables(instance_id).all.each do |t|
  puts "Table: #{t.name}"
end

查看表的相关信息

控制台

要查看表的相关信息,请执行以下操作:

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。 对于每个表,Google Cloud 控制台会显示存储该表的集群数量、表的状态、存储空间利用率以及表的任何当前备份的标识符。

  4. 如需查看表的列族名称,请点击 。如需关闭修改表窗格,请点击取消

  5. 如需查看有关表的其他详细信息(包括表级层指标和复制状态),请点击表的名称。

gcloud

如需查看表的相关信息,请运行 gcloud bigtable instances tables describe 命令。

gcloud bigtable instances tables describe TABLE_ID \
    --instance=INSTANCE_ID

替换以下内容:

  • TABLE_ID:表的唯一 ID
  • INSTANCE_ID:实例的 ID

cbt

您可以使用 cbt CLI 获取表中现有列族的列表。

使用以下命令,将 [TABLE_NAME] 替换为表名称:

cbt ls [TABLE_NAME]

设置垃圾回收政策

垃圾回收政策告诉 Bigtable 要保留哪些数据以及要将哪些数据标记为待删除。垃圾回收政策是在列族级设置的。您可以在创建表时或之后设置这些政策。

创建列族时,您可以指定要在该列族的每个列中保留的单元数量。如果您未指定此设置,Bigtable 将使用以下任一默认设置:

  • 如果您使用 Java 版 Cloud Bigtable HBase 客户端或 HBase shell 创建列族,或通过使用 Java 版 HBase 客户端的其他工具创建列族,Bigtable 会为列族中的每个行/列交集仅保留一个单元。此默认设置与 HBase 一致。

  • 如果您使用 Google Cloud 控制台、任何其他客户端库或 cbt CLI 创建列族,则 Bigtable 会在每一列中保留无限数量的单元。

如需详细了解如何查看、设置和更新垃圾回收政策,请参阅配置垃圾回收政策

备份和恢复表

请参阅管理备份,了解如何备份表以及利用备份恢复到新表。

如果您在创建表时启用了自动备份,则可以修改表的自动备份配置以启用或停用自动备份,或者将保留期限更改为自备份创建之时起最多 90 天。如需了解详情,请参阅使用自动备份

启用、停用或配置变更数据流

如需了解以下任务,请参阅配置变更数据流

  • 在现有表上启用变更数据流
  • 停用变更数据流
  • 更新变更数据流的保留期限

删除表

删除表时,该表的所有授权视图也会一并删除。如果表的任何授权视图启用了删除保护,则无法删除表。

控制台

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。

  4. 点击要删除的表的

  5. 点击删除

  6. 如需确认此操作将从实例的所有集群中删除该表,并且只能在七天内恢复删除的表,请在文本框中输入表 ID。

  7. 点击删除

gcloud

  1. 如需删除表,请运行 gcloud bigtable instances tables delete 命令。

    gcloud bigtable instances tables delete --instance=INSTANCE_ID
    

    替换以下内容:

    • INSTANCE_ID:实例的 ID
  2. 在终端中输入 y 以确认删除表。

cbt

如需删除表,请使用以下命令,并将 [TABLE_NAME] 替换为表名称:

cbt deletetable [TABLE_NAME]

恢复删除的表

如果您不小心删除了表,可以使用 gcloud CLI 命令 bigtable instances tables undeleteundelete取消删除或恢复表。 请勿首先尝试手动创建该被删除的表。

如需恢复删除的表,请在终端中运行以下命令:

gcloud bigtable instances tables undelete TABLE_ID --instance=INSTANCE_ID

替换以下内容:

  • TABLE_ID:表的唯一标识符
  • INSTANCE_ID:实例的 ID

存在以下限制:

  • 您只能在表删除后的约七天内恢复删除的表。
  • 您无法使用 Google Cloud 控制台、Cloud Bigtable 客户端库或 cbt CLI 恢复删除的表。
  • 您无法从已删除的实例中恢复删除的表。
  • 如果删除的表启用了 CMEK,则无法恢复。
  • 恢复删除的表时,不会恢复删除操作之前该表拥有的任何精细 IAM 政策绑定。

您可以视需要在审核日志中查看 undelete 操作的状态。

修改删除保护

如果您是包含 bigtable.tables.update 权限的角色中的主账号(例如 roles/bigtable.admin),则可以为表启用或停用删除保护。删除保护可防止删除表、表中的所有列族以及包含表的实例。

为表启用删除保护并不会为表的授权视图启用该功能。同样,停用表的删除保护也不会针对表的已获授权的视图停用删除保护。您必须单独更新表的授权视图

控制台

  1. 在 Google Cloud 控制台中打开 Bigtable 实例列表。

    打开实例列表

  2. 点击要查看其表的实例。

  3. 在左侧窗格中,点击

    页面显示实例中的表列表。

  4. 点击表 ID 旁边的

  5. 如需启用删除防护,请点击防止删除。如需停用删除保护,请点击启用删除。只有有效选项才可见。

gcloud

如需为表启用删除保护,请运行 gcloud bigtable instances table update 命令:

gcloud bigtable instances tables update TABLE_ID \
    --instance=INSTANCE_ID \
    --deletion-protection

如需为表停用删除保护,请运行以下命令:

gcloud bigtable instances tables update TABLE_ID \
    --instance=INSTANCE_ID \
    --no-deletion-protection

替换以下内容:

+ TABLE_ID: the unique identifier for the table
+ INSTANCE_ID: the ID of the instance

cbt

您无法使用 cbt CLI 启用或停用删除防护。