Bigtable 中的資料類型強制執行

Bigtable 的彈性結構定義可讓您在 Bigtable 資料表中儲存任何類型的資料,包括字串、日期、數字、JSON 文件,甚至是圖片或 PDF。

本文說明 Bigtable 何時會強制執行型別,要求您在應用程式程式碼中編碼或解碼。如需 Bigtable 資料類型清單,請參閱 Data API 參考說明文件中的「類型」。

強制執行的類型

系統會強制執行下列資料的資料類型:

  • 匯總資料欄系列 (計數器)
  • 時間戳記
  • 具體化檢視表

匯總

如果是匯總資料類型,編碼方式取決於匯總類型。建立匯總資料欄系列時,必須指定匯總類型。

下表顯示每種匯總類型的輸入類型和編碼。

匯總類型 輸入類型 編碼
總和 Int64 BigEndianBytes
最小值 Int64 BigEndianBytes
Max Int64 BigEndianBytes
HLL 位元組 Zetasketch HLL++

使用 SQL 查詢匯總儲存格中的資料時,SQL 會自動納入型別資訊。

使用 Data API 的 ReadRows 方法讀取匯總儲存格中的資料時,Bigtable 會傳回位元組,因此應用程式必須使用 Bigtable 將型別資料對應至位元組時所用的編碼,解碼這些值。

如果資料欄系列包含非匯總資料,就無法轉換為匯總資料欄系列。匯總資料欄系列中的資料欄不得包含非匯總儲存格,標準資料欄系列則不得包含匯總儲存格。

如要進一步瞭解如何建立含有匯總資料欄系列的資料表,請參閱「建立資料表」。如需程式碼範例,瞭解如何使用編碼值遞增匯總儲存格,請參閱「遞增值」。

時間戳記

每個 Bigtable 儲存格都有 Int64 時間戳記,該值須為微秒,精確的位數只到毫秒。Bigtable 會拒絕精確度達微秒的時間戳記,例如 3023483279876543。在這個範例中,可接受的時間戳記值為 3023483279876000。時間戳記是自 Unix Epoch 紀元時間 (1970-01-01 00:00:00 UTC) 起算的微秒數。

持續性 materialized view

持續具體化檢視區塊是唯讀資源,您可以使用 SQL 或 ReadRows Data API 呼叫讀取。具體化檢視中的資料會根據定義檢視的查詢進行輸入。如需總覽,請參閱「持續性 materialized view」。

使用 SQL 查詢持續性具體化檢視區塊時,SQL 會自動納入型別資訊。

使用 Data API ReadRows 要求從連續具體化檢視區塊讀取資料時,您必須瞭解每個資料欄的類型,並在應用程式程式碼中解碼。

系統會根據檢視定義中資料欄的輸出類型,使用下表所述的編碼方式,儲存連續具體化檢視中的匯總值。

類型 編碼
BOOL 1 位元組值,1 = true,0 = false
BYTES 無編碼
INT64 (或 INT、SMALLINT、INTEGER、BIGINT、TINYINT、BYTEINT) 64 位元大端
FLOAT64 64 位元 IEEE 754,不含 NaN 和 +/-inf
STRING UTF-8
TIME/TIMESTAMP 64 位元整數,代表自 Unix 紀元起算的微秒數 (與 GoogleSQL 一致)
詳情請參閱 Data API 參考資料中的「 編碼」。

結構化資料列索引鍵

結構化資料列鍵可讓您使用多欄鍵存取資料,類似於關聯式資料庫中的複合鍵。

結構化資料列索引鍵的類型和編碼是由資料列索引鍵結構定義所定義,您可以選擇將其新增至 Bigtable 表格。結構化資料列鍵資料會以位元組形式儲存,但您對資料表執行 SQL 查詢時,Bigtable 的 GoogleSQL 會自動使用資料列鍵結構定義中定義的類型和編碼。

系統不支援使用資料列索引鍵結構定義,透過 ReadRows 要求查詢資料表。持續性具體化檢視表預設具有資料列鍵結構定義。如要進一步瞭解結構化資料列索引鍵,請參閱「管理資料列索引鍵結構定義」。

未強制執行的類型

如果未提供類型資訊,Bigtable 會將每個儲存格視為具有不明編碼的位元組。

查詢未強制執行型別的資料欄系列時,您必須在讀取時提供型別資訊,確保資料讀取正確無誤。這與行為取決於資料類型的資料庫函式有關。Bigtable 的 GoogleSQL 提供 CAST 函式,可在查詢時進行型別轉換。這些函式會將位元組轉換為各種函式預期的型別。

雖然 Bigtable 不會強制執行型別,但某些作業會假設資料型別。瞭解這點有助於確保資料的寫入方式可在資料庫中處理。以下是幾個範例:

  • 使用 ReadModifyWriteRow 遞增時,系統會假設儲存格包含 64 位元大端序的帶正負號整數。
  • SQL 中的 TO_VECTOR64 函式預期儲存格包含位元組陣列,該陣列是 64 位元浮點數的大端序位元組串連。
  • SQL 中的 TO_VECTOR32 函式預期儲存格包含位元組陣列,該陣列是 32 位元浮點數的大端位元組串連。

後續步驟