建立及管理資料表

本頁說明如何使用 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. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。

  4. 輸入資料表的資料表 ID。

  5. 新增資料欄系列 (選用)。

    您可以立即新增資料欄,也可以之後再新增。表格必須至少有一個資料欄系列,才能寫入資料。表格至少要有一個資料欄系列,才能寫入資料或從中讀取變更串流。

  6. 選用:為資料表啟用變更串流。啟用變更串流前,請務必瞭解相關影響,包括儲存空間費用增加,以及應用程式設定檔用量需求。如要查看這些詳細資料,請參閱「變更串流總覽」。

    1. 選取「啟用變更串流」

    2. 在「到期時間」欄位中,輸入 1 到 7 之間的數字,指定要保留變更串流資料的天數。

    3. 點選「建立」

  7. 選用:如不想讓 Bigtable 每天備份資料表,請取消勾選「啟用自動備份」旁的核取方塊。詳情請參閱「使用自動備份」。

  8. 按一下「建立資料表」

gcloud

如要建立資料表,請執行下列指令。如需完整的選項清單,請參閱 gcloud bigtable instances tables create

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 每天備份資料表,並將每個備份保留預設的七天保留期限,請在建立資料表時使用 --enable-automated-backup 旗標。

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

    如要設定不同的保留期限,請使用 --automated-backup-retention-period 旗標,而非 --enable-automated-backup 旗標,並提供最多 90 天的值,以 mhd (分鐘、小時或天數) 為單位表示,例如 15d 代表 15 天。

cbt

請使用下列指令,並將 TABLE_NAME 替換為資料表名稱。您無法使用 cbt CLI 建立已啟用變更串流的資料表。

cbt createtable TABLE_ID

選用:如要在資料表中建立匯總資料欄系列,請在資料欄系列名稱後方附加匯總類型。以下會建立聚合資料欄系列,並採用 never 的垃圾收集政策。

cbt createtable TABLE_ID families=FAMILY_NAME:never:TYPE

更改下列內容:

  • TABLE_ID:新資料表的專屬 ID
  • FAMILY_NAME:以逗號分隔的資料欄系列名稱清單。您之後可以新增更多資料欄系列。
  • TYPE:匯總類型。必須是 intsumintminintmaxinthll

如需更多選項,請參閱 cbt CLI 參考資料中的「建立表格」。

如果誤刪資料表,請勿嘗試手動建立已刪除的資料表。使用 gcloud CLI 指令 bigtable instances tables undelete 復原資料表。

選用:依資料列鍵分割資料表

為提升效能,Bigtable 會持續將資料表分割到多個節點,平均分配每個節點儲存的資料量,並盡可能將經常存取的資料列分散開來。這項程序會持續自動進行。

建立新資料表時,您可以指定初始資料表分割。Bigtable 會在您提供的資料列索引鍵位置分割資料表。如果鍵空間過大,Bigtable 會進一步分割資料表。資料表建立完成後,初始分割會保留約 24 小時。您最多可以提供 100 個資料列鍵,做為初始分割點。

舉例來說,如果您即將在資料表中寫入大量資料列,可以指定特定資料列來預先分割資料表。

預先分割資料表並非必要,但好處是可讓 Bigtable 瞭解建立資料表時,負載和資料足跡可能落在哪裡。預先分割可避免 Bigtable 在資料抵達時,必須一次分割資料表並重新平衡負載。

主控台

使用Google Cloud 控制台建立資料表時,無法預先分割資料列。

gcloud

如要依資料列鍵分割資料表,請執行下列指令。如需完整的選項清單,請參閱 gcloud bigtable instances tables create

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] 替換為以半形逗號分隔的資料列鍵前置字串清單,用於預先分割。

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

舉例來說,如要在開頭為 1020 的資料列索引鍵位置預先分割資料表 my-table

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

修改資料表中的資料欄系列

您可以在現有資料表中新增資料欄系列。如果資料表未啟用防刪除功能,即可刪除資料表中的資料欄系列。

新增資料欄系列

主控台

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下您要查看其資料表的執行個體。

  3. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。

  4. 找到要修改的表格,然後按一下「編輯」

  5. 針對要新增的每個資料欄系列,完成下列步驟:

    1. 按一下「新增資料欄系列」
    2. 提供資料欄系列的專屬 ID。
    3. 為資料欄系列設定垃圾收集政策。
    4. 按一下 [完成]
    5. 按一下 [儲存]

gcloud

您無法使用 gcloud CLI 將資料欄系列新增至資料表。

cbt

如要將資料欄系列新增至資料表,請使用下列指令:

cbt createfamily TABLE_ID FAMILY_NAME

舉例來說,如要在 my-table 資料表中新增 cf1cf2 資料欄系列:

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

選用:如要將匯總資料欄新增至表格,請在資料欄系列名稱後方加上匯總類型。以下程式碼會建立資料表,其中包含具有 never 垃圾收集政策的匯總資料欄系列。

cbt createfamily TABLE_ID FAMILY_NAME:never:TYPE

更改下列內容:

  • TABLE_ID:資料表 ID
  • FAMILY_NAME:以半形逗號分隔的資料欄系列名稱清單。您之後可以新增更多資料欄系列。
  • TYPE:匯總類型。必須是 intsumintminintmaxinthll

刪除資料欄系列

您可以在未啟用防刪除功能的資料表中刪除資料欄系列。

主控台

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下您要查看其資料表的執行個體。

  3. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。

  4. 找到要修改的表格,然後按一下「編輯」

  5. 針對要刪除的每個資料欄系列,完成下列步驟:

    1. 將滑鼠游標懸停在要刪除的資料欄系列所在列。
    2. 按一下「」。
  6. 按一下 [儲存]

  7. 如要確認您瞭解刪除資料欄系列是永久性操作,且資料欄系列中的所有資料都會遭到刪除,請在文字欄位中輸入「Delete column families」。

  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. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。

gcloud

如要查看資料表清單,請執行 gcloud bigtable instances tables list 指令。

gcloud bigtable instances tables list --instances=INSTANCE_IDS

更改下列內容:

  • INSTANCE_IDS:以半形逗號分隔的執行個體 ID 清單。

cbt

如要查看執行個體中的資料表清單,請執行下列指令:

    cbt ls INSTANCE_ID

更改下列內容:

  • INSTANCE_ID: 執行個體的永久 ID。

C++

如要瞭解如何安裝及使用 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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

// 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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

// 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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

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

PHP

如要瞭解如何安裝及使用 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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

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

查看資料表資訊

主控台

如要查看資料表的相關資訊,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下您要查看其資料表的執行個體。

  3. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。針對每個資料表, Google Cloud 控制台會顯示儲存資料表的叢集數量、資料表狀態、儲存空間用量,以及資料表目前備份的 ID。

  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 只會保留資料欄系列中每個資料列/資料欄交集的 1 個儲存格。此預設的設定與 HBase 一致。

  • 如果您使用 Google Cloud 控制台、任何其他用戶端程式庫或 cbt CLI 建立資料欄系列,Bigtable 會保留每個資料欄中的無限個儲存格。

如需查看、設定及更新垃圾收集政策的詳細操作說明,請參閱「設定垃圾收集政策」。

備份及還原資料表

如需備份資料表,以及從備份還原至新資料表的操作說明,請參閱「管理備份」。

如果您在建立資料表時啟用自動備份功能,可以修改資料表的自動備份設定,啟用或停用自動備份功能,或將保留期限變更為備份建立時間起算最多 90 天。詳情請參閱「使用自動備份」。

啟用、停用或設定變更串流

如需下列工作的操作說明,請參閱「設定變更串流」。

  • 在現有表格上啟用變更串流
  • 停用變更串流
  • 更新變更串流的保留期限

刪除資料表

刪除資料表時,也會刪除該資料表的所有授權檢視畫面。如果資料表的任何授權檢視區已啟用防刪除功能,您就無法刪除該資料表。此外,如果資料表有以其為基礎的連續具體化檢視區塊,您也無法刪除該資料表。

主控台

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下您要查看其資料表的執行個體。

  3. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。

  4. 按一下要刪除的表格的

  5. 點選「刪除」。

  6. 如要確認您瞭解這項操作會刪除執行個體中所有叢集的資料表,且您只有七天時間可以取消刪除資料表,請在「刪除資料表」方塊中輸入資料表 ID。

  7. 點選「刪除」。

gcloud

  1. 如要刪除表格,請執行 gcloud bigtable instances tables delete 指令。

    gcloud bigtable instances tables delete TABLE_ID --instance=INSTANCE_ID
    

    更改下列內容:

    • TABLE_ID:資料表的專屬 ID
    • INSTANCE_ID:執行個體的 ID
  2. 在終端機中輸入 y,確認要刪除資料表。

cbt

如要刪除資料表,請使用下列指令,並將 [TABLE_NAME] 替換為資料表名稱:

cbt deletetable [TABLE_NAME]

取消刪除資料表

如果不小心刪除資料表,可以使用 gcloud CLI 指令 bigtable instances tables undelete 取消刪除或還原資料表。請勿嘗試手動重建已刪除的資料表。

如要取消刪除資料表,請在終端機中執行下列指令:

gcloud bigtable instances tables undelete TABLE_ID --instance=INSTANCE_ID

更改下列內容:

  • TABLE_ID:資料表的專屬 ID
  • INSTANCE_ID:執行個體的 ID

還原資料表後,Bigtable 會自動為該資料表啟用防刪除功能。

限制如下:

  • 您可以在資料表刪除後七天內取消刪除。
  • 您無法使用 Google Cloud 控制台、Cloud Bigtable 用戶端程式庫或 cbt CLI 還原已刪除的資料表。
  • 您無法從已刪除的執行個體中取消刪除資料表。
  • 您無法還原已啟用 CMEK 的資料表。
  • 還原資料表時,Bigtable 不會將任何細微的身分與存取權管理政策繫結還原至已刪除的資料表。

您也可以選擇在稽核記錄中查看 undelete 作業的狀態。

修改防刪除設定

如果您是具備 bigtable.tables.update 權限 (例如 roles/bigtable.admin) 的角色主體,可以啟用或停用資料表的防刪除功能。防刪除功能可防止刪除資料表、資料表中的所有資料欄系列,以及包含資料表的執行個體。

為資料表啟用防刪除功能時,不會為該資料表的授權檢視區啟用這項功能。同樣地,停用資料表的防刪除功能時,不會停用該資料表授權檢視區塊的防刪除功能。您必須分別更新資料表的授權檢視區塊

主控台

  1. 在 Google Cloud 控制台中開啟 Bigtable 執行個體清單。

    開啟執行個體清單

  2. 按一下您要查看其資料表的執行個體。

  3. 按一下左側窗格中的 [Tables] (資料表)。

    「Tables」(資料表) 頁面會顯示執行個體中的資料表清單。

  4. 按一下資料表 ID 旁的

  5. 如要啟用防刪除功能,請按一下「防止刪除」。如要停用防刪除功能,請按一下「啟用刪除功能」。系統只會顯示有效選項。

gcloud

如要為資料表啟用防刪除功能,請執行 gcloud bigtable instances table update 指令:

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

如要停用資料表的防刪除功能,請執行下列指令:

```sh
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 啟用或停用刪除防護功能。