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 移轉作業的定價資訊,請參閱「資料移轉服務定價」。
後續步驟
- 瞭解如何設定 PostgreSQL 移轉作業。
- 進一步瞭解 BigQuery 資料移轉服務。