PostgreSQL 資料移轉作業簡介

您可以使用 PostgreSQL 連接器的 BigQuery 資料移轉服務,將資料從 PostgreSQL 載入 BigQuery。連接器支援託管於地端部署環境、Cloud SQL 和其他公有雲服務供應商 (例如 Amazon Web Services (AWS) 和 Microsoft Azure) 的 PostgreSQL 執行個體。本文件概略說明 PostgreSQL 移轉作業的資料擷取選項,以及資料類型對應和定價資訊。

如要瞭解如何排定 PostgreSQL 移轉作業,請參閱「將 PostgreSQL 資料載入 BigQuery」。

資料擷取選項

下列各節提供設定 PostgreSQL 資料移轉時,資料擷取選項的相關資訊。

傳輸層安全標準 (TLS) 設定

PostgreSQL 連接器支援傳輸層安全標準 (TLS) 設定,可加密移轉至 BigQuery 的資料。PostgreSQL 連接器支援下列 TLS 設定:

  • 「加密資料,並驗證憑證授權單位和主機名稱」模式。這個模式會透過 TCPS 通訊協定使用 TLS,對伺服器執行完整驗證。這項設定會加密所有傳輸中的資料,並驗證資料庫伺服器的憑證是否由信任的憑證授權單位 (CA) 簽署。這個模式也會檢查您連線的主機名稱,是否與伺服器憑證上的通用名稱 (CN) 或主體別名 (SAN) 完全相符。這個模式可防止攻擊者使用其他網域的有效憑證,冒充您的資料庫伺服器。

    如果主機名稱與憑證 CN 或 SAN 不符,連線就會失敗。您必須設定 DNS 解析,使其與憑證相符,或使用其他安全性模式。這個模式最安全,可防範中間人 (PITM) 攻擊。

  • 「加密資料,且僅驗證憑證授權單位」模式。這個模式會透過 TCPS 通訊協定使用 TLS 加密所有資料,並驗證伺服器的憑證是否由用戶端信任的 CA 簽署。不過,這個模式不會驗證伺服器的主機名稱。只要憑證有效且由信任的 CA 核發,無論憑證中的主機名稱是否與您連線的主機名稱相符,這個模式都能成功連線。

    如要確保連線的伺服器憑證是由信任的 CA 簽署,但主機名稱無法驗證,或您無法控管主機名稱設定,請使用這個模式。

  • 「僅加密」模式。這個模式會加密用戶端與伺服器之間傳輸的所有資料。不會執行任何憑證或主機名稱驗證。

    這個模式會保護傳輸中的資料,提供一定程度的安全性,但可能容易受到 PITM 攻擊。

    如果您需要確保所有資料都經過加密,但無法或不想驗證伺服器的身分,請使用這個模式。使用私人虛擬私有雲時,建議採用這個模式。

  • 不加密或驗證模式。這個模式不會加密任何資料,也不會執行任何憑證或主機名稱驗證。所有資料都會以純文字形式傳送。

    在處理機密資料的環境中,不建議使用這個模式。建議您只在不需考量安全性的隔離網路上,使用這個模式進行測試。

信任的伺服器憑證 (PEM)

如果您使用的是「加密資料,並驗證憑證授權單位和主機名稱」模式,或「加密資料,並驗證憑證授權單位」模式,則也可以提供一或多個 PEM 編碼憑證。在某些情況下,BigQuery 資料移轉服務需要在 TLS 連線期間驗證資料庫伺服器的身分,因此需要這些憑證:

  • 如果您使用的是由貴組織內私人 CA 簽署的憑證,或自行簽署的憑證,則必須提供完整的憑證鏈結或單一自行簽署憑證。如果憑證是由代管雲端服務供應商服務 (例如 Amazon Relational Database Service (RDS)) 的內部 CA 核發,就必須提供這項資訊。
  • 如果資料庫伺服器憑證是由公開 CA (例如 Let's Encrypt、DigiCert 或 GlobalSign) 簽署,則不需提供憑證。這些公開 CA 的根憑證已預先安裝,並由 BigQuery 資料移轉服務信任。

您可以在移轉設定的「Trusted PEM Certificate」(信任的 PEM 憑證) 欄位中指定 PEM 編碼憑證,但須符合下列規定:

  • 憑證必須是有效的 PEM 編碼憑證鏈結。
  • 憑證必須完全正確。如果鏈結中缺少任何憑證或內容不正確,TLS 連線就會失敗。
  • 如果是單一憑證,您可以提供資料庫伺服器的單一自行簽署憑證。
  • 如為私人 CA 核發的完整憑證鏈結,您必須提供完整的信任鏈結。包括資料庫伺服器的憑證,以及任何中繼和根 CA 憑證。

完整或增量轉移

設定 PostgreSQL 移轉作業時,您可以在移轉設定中選取「Full」(完整) 或「Incremental」(漸進式) 寫入偏好設定,指定將資料載入 BigQuery 的方式。

您可以設定「完整」資料移轉,在每次資料移轉時,從 PostgreSQL 資料集移轉所有資料。

或者,您也可以設定增量資料移轉,只移轉上次資料移轉後變更的資料,而不是每次資料移轉時都載入整個資料集。如果選取「Incremental」(增量) 做為資料移轉模式,則必須指定「Append」(附加) 或「Upsert」(新增或更新) 寫入模式,定義在增量資料移轉期間,資料寫入 BigQuery 的方式。以下各節將說明可用的寫入模式。

附加寫入模式

附加寫入模式只會將新資料列插入目的地資料表。這個選項只會附加移轉的資料,不會檢查現有記錄,因此可能會導致目的地資料表中的資料重複。

選取附加模式時,必須選取浮水印欄。PostgreSQL 連接器需要浮水印資料欄,才能追蹤來源資料表中的變更。

如果是 PostgreSQL 移轉作業,建議選取只在建立記錄時更新,且不會隨著後續更新而變更的資料欄,例如 CREATED_AT 資料欄。

更新插入寫入模式

upsert 寫入模式會檢查主鍵,然後更新目的地資料表中的資料列,或插入新的資料列。您可以指定主鍵,讓 PostgreSQL 連接器判斷需要進行哪些變更,確保目的地資料表與來源資料表保持同步。如果資料移轉期間,目的地 BigQuery 資料表中有指定的主鍵,PostgreSQL 連接器就會使用來源資料表的新資料更新該資料列。如果資料移轉期間沒有主鍵,PostgreSQL 連接器會插入新資料列。

選取 upsert 模式時,必須選取浮水印欄和主鍵:

  • PostgreSQL 連接器必須有浮水印資料欄,才能追蹤來源資料表的變更。
    • 選取每次修改資料列時都會更新的水印欄。建議使用與 UPDATED_AT 或 LAST_MODIFIED 欄類似的資料欄。
  • 主鍵可以是一或多個資料表資料欄,PostgreSQL 連接器會根據主鍵,判斷是否需要插入或更新資料列。

    選取包含非空值的資料欄,這些值在資料表的所有資料列中都是不重複的。建議您使用包含系統產生 ID、不重複參考代碼 (例如自動遞增 ID) 或不可變更的時間序列 ID 的資料欄。

    為避免資料遺失或損毀,您選取的主鍵資料欄必須包含不重複的值。如果您不確定所選主鍵欄是否不重複,建議改用附加寫入模式。

增量擷取行為

變更資料來源中的資料表結構定義時,這些資料表的遞增資料移轉作業會以下列方式反映在 BigQuery 中:

資料來源異動 增量擷取行為
新增資料欄 目的地 BigQuery 資料表會新增資料欄。這個資料欄的任何先前記錄都會是空值。
刪除資料欄 刪除的資料欄會保留在目的地 BigQuery 資料表中。這個已刪除資料欄的新項目會填入空值。
變更資料欄的資料類型 連接器僅支援 ALTER COLUMN DDL 陳述式支援的資料類型轉換。任何其他資料類型轉換都會導致資料移轉失敗。

如果遇到任何問題,建議您建立新的移轉設定。

重新命名資料欄 原始資料欄會保留在目的地 BigQuery 資料表中,而目的地資料表會新增一個資料欄,並使用更新後的名稱。

資料類型對應

下表將 PostgreSQL 資料類型對應至相應的 BigQuery 資料類型:

PostgreSQL 資料類型 BigQuery 資料類型 更新 BigQuery 資料類型
array STRING
bigint INTEGER
bigserial INTEGER
bit(n) STRING
bit varying(n) STRING
boolean BOOLEAN
box STRING
bytea BYTES
character STRING
character varying STRING
cidr STRING
circle STRING
circularstring STRING
compoundcurve STRING
curvepolygon STRING
date DATE
double precision FLOAT
enum STRING
geometrycollection STRING
inet STRING
integer INTEGER
interval STRING
json STRING JSON
jsonb STRING JSON
line STRING
linestring STRING
lseg STRING
macaddr STRING
macaddr8 STRING
money STRING
multicurve STRING
multilinestring STRING
multipoint STRING
multipolygon STRING
multisurface STRING
numeric(precision, scale)/decimal(precision, scale) NUMERIC
path STRING
point STRING
polygon STRING
polyhedralsurface STRING
range STRING
real FLOAT
serial INTEGER
smallint INTEGER
smallserial INTEGER
text STRING
time [ (p) ] [ without timezone ] TIMESTAMP
time [ (p) ] with time zone TIMESTAMP
tin STRING
timestamp [ (p) ] [ without timezone ] TIMESTAMP DATETIME
timestamp [ (p) ] with time zone TIMESTAMP
triangle STRING
tsquery STRING
tsvector STRING
uuid STRING
xml STRING

定價

如要瞭解 PostgreSQL 移轉作業的定價資訊,請參閱「資料移轉服務定價」。

後續步驟