创建和管理表

本页面介绍了如何使用 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 会跨多个节点持续拆分表,均匀分布存储在每个节点上的数据量,并尽可能让经常访问的行分散开来。这个持续的过程是自动进行的。

创建新表时,您可以指定初始表拆分。 Bigtable 根据您提供的行键拆分表。如果键空间过大,Bigtable 会进一步拆分表。表创建完成后,初始拆分会保留大约 24 小时。您最多可以在初始拆分的位置提供 100 个行键。

例如,如果您要向表中写入很多行,则可以指定特定行来预拆分表。

预拆分表并非必需操作,但这样做很有用,因为可让 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 启用或停用删除保护。