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 簽署的伺服器,但主機名稱無法驗證,或您無法控管主機名稱設定,請使用這個模式。
「僅加密」模式。這個模式會加密用戶端與伺服器之間傳輸的所有資料。不會執行任何憑證或主機名稱驗證。
這個模式會保護傳輸中的資料,提供一定程度的安全性,但可能容易受到中間人攻擊。
如果您需要確保所有資料都經過加密,但無法或不想驗證伺服器的身分,請使用這個模式。使用私人虛擬私有雲時,建議採用這個模式。
「不加密或驗證」模式。這個模式不會加密任何資料,也不會執行任何憑證或主機名稱驗證。所有資料都會以純文字形式傳送。
我們不建議在處理機密資料的環境中使用這項模式。建議您只在不需考量安全性的隔離網路上,使用這個模式進行測試。
信任的伺服器憑證 (PEM)
如果您使用「加密資料,並驗證憑證授權單位和主機名稱」模式或「加密資料,並驗證憑證授權單位」模式,也可以提供一或多個 PEM 編碼憑證。在某些情況下,BigQuery 資料移轉服務需要在 TLS 連線期間驗證資料庫伺服器的身分,因此需要這些憑證:
- 如果您使用的是由貴組織內私人 CA 簽署的憑證,或自行簽署的憑證,則必須提供完整的憑證鏈結或單一自行簽署憑證。如果是透過代管雲端服務 (例如 Amazon Relational Database Service (RDS)) 的內部 CA 發行的憑證,則必須執行這項操作。
- 如果資料庫伺服器憑證是由公開 CA (例如 Let's Encrypt、DigiCert 或 GlobalSign) 簽署,則不需提供憑證。這些公開 CA 的根憑證已預先安裝,並由 BigQuery 資料移轉服務信任。
您可以在移轉設定的「信任的 PEM 憑證」欄位中指定 PEM 編碼憑證,但須符合下列規定:
- 憑證必須是有效的 PEM 編碼憑證鏈結。
- 憑證必須完全正確。如果鏈結中缺少任何憑證或內容不正確,TLS 連線就會失敗。
- 如果是單一憑證,您可以提供資料庫伺服器自行簽署的單一憑證。
- 如為私人 CA 核發的完整憑證鏈結,您必須提供完整的信任鏈結。包括資料庫伺服器的憑證,以及任何中繼和根 CA 憑證。
完整或增量轉移
設定 PostgreSQL 移轉作業時,您可以在移轉設定中選取「Full」(完整) 或「Incremental」(遞增) 寫入偏好設定,指定資料載入 BigQuery 的方式。
您可以設定完整資料移轉,在每次移轉資料時,移轉 PostgreSQL 資料集中的所有資料。或者,您也可以設定增量資料移轉,只移轉上次資料移轉後變更的資料,而不是每次資料移轉時都載入整個資料集。如果選取「Incremental」(增量) 做為資料移轉模式,則必須指定「Append」(附加) 或「Upsert」(新增或更新) 寫入模式,定義在增量資料移轉期間,資料寫入 BigQuery 的方式。以下各節說明可用的寫入模式。
附加寫入模式
附加寫入模式只會將新資料列插入目的地資料表。這個選項只會附加轉移的資料,不會檢查現有記錄,因此可能會導致目的地資料表出現重複資料。
選取附加模式時,必須選取浮水印欄。PostgreSQL 連接器必須有浮水印資料欄,才能追蹤來源資料表的變更。
如果是 PostgreSQL 移轉作業,建議選取只在建立記錄時更新,且不會隨著後續更新而變更的資料欄,例如CREATED_AT 資料欄。
更新插入寫入模式
透過 upsert 寫入模式,系統會檢查主鍵,藉此更新資料列或在目的地資料表中插入新資料列。您可以指定主鍵,讓 PostgreSQL 連接器判斷需要哪些變更,才能讓目的地資料表與來源資料表保持同步。如果資料移轉期間,目的地 BigQuery 資料表中有指定的主鍵,PostgreSQL 連接器會使用來源資料表的新資料更新該資料列。如果資料移轉期間沒有主鍵,PostgreSQL 連接器就會插入新資料列。
選取「新增或更新」模式時,必須選取浮水印欄和主鍵:
- 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 資料移轉服務。