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 設定:
「加密資料,並驗證 CA 和主機名稱」模式。這個模式會使用 TCPS 通訊協定透過 TLS 完整驗證伺服器。這項功能會加密所有傳輸中的資料,並驗證資料庫伺服器的憑證是否由信任的憑證授權單位 (CA) 簽署。這個模式也會檢查您連線的主機名稱,是否與伺服器憑證中的一般名稱 (CN) 或主體別名 (SAN) 完全相符。這個模式可防止攻擊者使用其他網域的有效憑證,冒充您的資料庫伺服器。
如果主機名稱與憑證 CN 或 SAN 不符,連線就會失敗。您必須設定 DNS 解析,以符合憑證或使用其他安全模式。如要採取最安全的做法,防止中間人 (PITM) 攻擊,請使用這個模式。
「加密資料,但僅驗證 CA」模式。這個模式會透過 TCPS 通訊協定使用 TLS 加密所有資料,並驗證伺服器憑證是否由用戶端信任的 CA 簽署。不過,這個模式不會驗證伺服器的主機名稱。只要憑證有效且由可信任的 CA 發行,這個模式就能成功連線,無論憑證中的主機名稱是否與您連線的主機名稱相符。
如果您想確保連線至憑證由信任的 CA 簽署的伺服器,但主機名稱無法驗證,或您無法控管主機名稱設定,請使用這個模式。
「僅加密」模式。這個模式會加密用戶端與伺服器之間傳輸的所有資料。不會執行任何憑證或主機名稱驗證。
這個模式會保護傳輸中的資料,提供一定程度的安全性,但可能容易受到中間人攻擊。
如果您需要確保所有資料都經過加密,但無法或不想驗證伺服器的身分,請使用這個模式。使用私人虛擬私有雲時,建議採用這個模式。
「無加密或驗證」模式。這個模式不會加密任何資料,也不會執行任何憑證或主機名稱驗證。所有資料都會以純文字形式傳送。
我們不建議在處理機密資料的環境中使用這個模式。建議您只在安全無虞的獨立網路中,將這個模式用於測試。
信任的伺服器憑證 (PEM)
如果您使用「加密資料,並驗證 CA 和主機名稱」模式或「加密資料,並驗證 CA」模式,也可以提供一或多個 PEM 編碼的憑證。在某些情況下,BigQuery 資料移轉服務需要在 TLS 連線期間驗證資料庫伺服器的身分,這時就需要這些憑證:
- 如果使用貴機構內私人 CA 簽署的憑證或自行簽署的憑證,請提供完整的憑證鏈結或單一自行簽署憑證。如果是透過代管雲端服務的內部 CA 發行的憑證,例如 Amazon Relational Database Service (RDS),則必須執行這項操作。
- 如果資料庫伺服器憑證是由公開 CA 簽署 (例如 Let's Encrypt、DigiCert 或 GlobalSign),您就不需要提供憑證。BigQuery 資料移轉服務會預先安裝並信任這些公開 CA 的根憑證。
您可以在轉移設定的「信任的 PEM 憑證」欄位中指定 PEM 編碼憑證,但須符合下列規定:
- 憑證必須是有效的 PEM 編碼憑證鏈結。
- 憑證必須完全正確。如果鏈結中缺少任何憑證或內容有誤,TLS 連線就會失敗。
- 如果是單一憑證,您可以提供資料庫伺服器中的單一自行簽署憑證。
- 如為私人 CA 核發的完整憑證鏈結,您必須提供完整的信任鏈結。包括資料庫伺服器的憑證,以及任何中繼和根 CA 憑證。
完整或累加轉移
設定 PostgreSQL 轉移作業時,您可以在轉移設定中選取「完整」或「增量」寫入偏好設定,指定資料載入 BigQuery 的方式。預先發布版支援增量轉移。
您可以設定完整資料轉移,在每次資料轉移時,轉移 PostgreSQL 資料集的所有資料。或者,您也可以設定增量資料移轉作業 ([預覽](https://cloud.google.com/products#product-launch-stages)),只移轉上次資料移轉作業後變更的資料,而非在每次資料移轉作業中載入整個資料集。如果為資料移轉選取「Incremental」(增量),請務必指定「Append」(附加) 或「Upsert」(新增或更新) 寫入模式,定義增量資料移轉期間資料寫入 BigQuery 的方式。以下各節說明可用的寫入模式。
附加寫入模式
附加寫入模式只會將新資料列插入目的地資料表。這個選項會嚴格附加移轉的資料,不會檢查現有記錄,因此這個模式可能會導致目的地表格中的資料重複。
選取附加模式時,必須選取浮水印欄。PostgreSQL 連接器必須使用浮水印資料欄,才能追蹤來源資料表中的變更。
如果是 PostgreSQL 轉移作業,建議選取只在建立記錄時更新的資料欄,後續更新不會變更該資料欄。例如「CREATED_AT」欄。
Upsert 寫入模式
系統會檢查主鍵,以更新資料列或在目標資料表中插入新資料列。您可以指定主鍵,讓 PostgreSQL 連接器判斷需要哪些變更,才能讓目標資料表與來源資料表保持同步。如果在資料移轉期間,指定的主鍵出現在目標 BigQuery 資料表中,PostgreSQL 連接器就會使用來源資料表中的新資料更新該列。如果資料轉移期間沒有主鍵,PostgreSQL 連接器就會插入新列。
選取「新增或更新」模式時,必須選取浮水印欄和主鍵:
- PostgreSQL 連接器必須使用水位線資料欄,才能追蹤來源資料表中的變更。
- 選取每次修改資料列時都會更新的水印資料欄。建議使用與
UPDATED_AT或LAST_MODIFIED欄類似的資料欄。
- 選取每次修改資料列時都會更新的水印資料欄。建議使用與
主鍵可以是資料表中的一或多個資料欄,PostgreSQL 連接器會根據這些資料欄判斷是否需要插入或更新資料列。
選取包含非空值的資料欄,這些值在資料表的所有資料列中都是不重複的。建議您使用包含系統產生的 ID、不重複的參照代碼 (例如自動遞增 ID) 或不可變動的時間序列 ID 的資料欄。
為避免資料遺失或損毀,您選取的主鍵資料欄必須具有不重複的值。如果您對所選主鍵欄的唯一性有疑慮,建議改用附加寫入模式。
增量擷取行為
在資料來源中變更資料表結構定義時,這些資料表的增量資料移轉作業會以以下方式反映在 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 資料移轉服務。