מבוא להעברות נתונים ב-PostgreSQL
אפשר לטעון נתונים מ-PostgreSQL ל-BigQuery באמצעות שירות העברת הנתונים ל-BigQuery למחבר PostgreSQL. המחבר תומך במכונות PostgreSQL שמתארחות בסביבה המקומית, ב-Cloud SQL ובספקי ענן ציבורי אחרים כמו Amazon Web Services (AWS) ו-Microsoft Azure. במאמר הזה מפורטות האפשרויות להעברת נתונים ב-PostgreSQL, ומוסבר על מיפוי סוגי הנתונים והתמחור.
הוראות לתזמון העברה של PostgreSQL מופיעות במאמר טעינת נתוני PostgreSQL ל-BigQuery.
אפשרויות להטמעת נתונים
בקטעים הבאים מפורטות האפשרויות להעברת נתונים כשמגדירים העברת נתונים מ-PostgreSQL.
הגדרת TLS
מחבר PostgreSQL תומך בהגדרה של אבטחה ברמת התעבורה (TLS) כדי להצפין את העברות הנתונים ל-BigQuery. מחבר PostgreSQL תומך בהגדרות ה-TLS הבאות:
המצב הצפנת נתונים ואימות של רשות האישורים ושם המארח. במצב הזה מתבצע אימות מלא של השרת באמצעות TLS דרך פרוטוקול TCPS. הוא מצפין את כל הנתונים בזמן ההעברה ומוודא שהאישור של שרת מסד הנתונים נחתם על ידי רשות אישורים (CA) מהימנה. בנוסף, במצב הזה נבדק ששם המארח שאליו מתחברים תואם בדיוק לשם הנפוץ (CN) או לשם הנושא החלופי (SAN) באישור של השרת. המצב הזה מונע מהתוקפים להשתמש באישור תקף לדומיין אחר כדי להתחזות לשרת מסד הנתונים שלכם.
אם שם המארח לא תואם ל-CN או ל-SAN באישור, החיבור נכשל. צריך להגדיר פתרון DNS שתואם לאישור או להשתמש במצב אבטחה אחר. מומלץ להשתמש במצב הזה כדי למנוע מתקפות מסוג 'אדם באמצע' (PITM) בצורה הכי מאובטחת.
המצב הצפנת נתונים ואימות CA בלבד. במצב הזה, כל הנתונים מוצפנים באמצעות TLS על גבי פרוטוקול TCPS, ונבדק אם האישור של השרת חתום על ידי רשות אישורים שהלקוח סומך עליה. עם זאת, במצב הזה לא מתבצע אימות של שם המארח של השרת. החיבור במצב הזה יתבצע בהצלחה כל עוד האישור תקף והונפק על ידי רשות אישורים מהימנה, בלי קשר לשאלה אם שם המארח באישור תואם לשם המארח שאליו מתחברים.
משתמשים במצב הזה אם רוצים לוודא שמתחברים לשרת שהאישור שלו חתום על ידי רשות מהימנה שמנפיקה אישורים (CA), אבל אי אפשר לאמת את שם המארח או שאין לכם שליטה על הגדרת שם המארח.
המצב הצפנה בלבד. במצב הזה כל הנתונים שמועברים בין הלקוח לשרת מוצפנים. היא לא מבצעת אימות של אישורים או של שמות מארחים.
המצב הזה מספק רמת אבטחה מסוימת על ידי הגנה על נתונים במעבר, אבל הוא עלול להיות פגיע למתקפות PITM.
משתמשים במצב הזה אם רוצים לוודא שכל הנתונים מוצפנים, אבל לא יכולים או לא רוצים לאמת את זהות השרת. מומלץ להשתמש במצב הזה כשעובדים עם רשתות VPC פרטיות.
מצב ללא הצפנה או אימות. במצב הזה לא מתבצעת הצפנה של נתונים ולא מתבצע אימות של אישורים או שמות מארחים. כל הנתונים נשלחים כטקסט פשוט.
לא מומלץ להשתמש במצב הזה בסביבה שבה מתבצע טיפול בנתונים רגישים. מומלץ להשתמש במצב הזה רק למטרות בדיקה ברשת מבודדת שבה האבטחה לא מהווה בעיה.
אישור שרת מהימן (PEM)
אם אתם משתמשים במצב הצפנת נתונים ואימות של רשות אישורים ושם מארח או במצב הצפנת נתונים ואימות של רשות אישורים, אתם יכולים גם לספק אישור אחד או יותר בקידוד PEM. האישורים האלה נדרשים בתרחישים מסוימים שבהם שירות העברת הנתונים ל-BigQuery צריך לאמת את הזהות של שרת מסד הנתונים במהלך חיבור TLS:
- אם אתם משתמשים באישור שחתום על ידי רשות אישורים פרטית בארגון שלכם או באישור עם חתימה עצמית, אתם צריכים לספק את שרשרת האישורים המלאה או את האישור היחיד עם החתימה העצמית. הדרישה הזו חלה על אישורים שהונפקו על ידי רשויות אישורים פנימיות של שירותי ספקי ענן מנוהלים, כמו Amazon Relational Database Service (RDS).
- אם האישור של שרת מסד הנתונים שלכם חתום על ידי רשות אישורים ציבורית (לדוגמה, Let's Encrypt, DigiCert או GlobalSign), אתם לא צריכים לספק אישור. אישורי הבסיס של רשויות ה-CA הציבוריות האלה מותקנים מראש ומהימנים על ידי שירות העברת הנתונים ל-BigQuery.
אפשר לציין אישורים בקידוד PEM בשדה Trusted PEM Certificate (אישור PEM מהימן) בהגדרות ההעברה, עם הדרישות הבאות:
- האישור צריך להיות שרשרת אישורים חוקית בקידוד PEM.
- האישור חייב להיות נכון לחלוטין. אם יש אישורים חסרים בשרשרת או תוכן שגוי, חיבור ה-TLS ייכשל.
- אם יש לכם אישור אחד, אתם יכולים לספק אישור אחד עם חתימה עצמית משרת מסד הנתונים.
- כדי לקבל שרשרת אישורים מלאה שהונפקה על ידי רשות אישורים פרטית, צריך לספק את שרשרת האמון המלאה. הוא כולל את האישור משרת מסד הנתונים ואת כל אישורי הביניים והאישורים הבסיסיים של רשות האישורים (CA).
העברות מלאות או מצטברות
כשמגדירים העברה מ-PostgreSQL, אפשר לציין איך הנתונים ייטענו ל-BigQuery על ידי בחירה באפשרות מלאה או מצטברת בהעדפת הכתיבה בהגדרות ההעברה. העברות מצטברות נתמכות בתצוגה מקדימה.
אפשר להגדיר העברת נתונים מלאה כדי להעביר את כל הנתונים ממערכי הנתונים של PostgreSQL בכל העברת נתונים.לחלופין, אפשר להגדיר העברת נתונים מצטברת ([בשלב טרום-השקה](https://cloud.google.com/products#product-launch-stages)) כדי להעביר רק את הנתונים שהשתנו מאז העברת הנתונים האחרונה, במקום לטעון את כל מערך הנתונים בכל העברת נתונים. אם בוחרים באפשרות מצטבר להעברת הנתונים, צריך לציין את מצבי הכתיבה הוספה או עדכון והוספה כדי להגדיר איך הנתונים ייכתבו ל-BigQuery במהלך העברת נתונים מצטברת. בקטעים הבאים מתוארים מצבי הכתיבה הזמינים.
הוספה למצב כתיבה
מצב הכתיבה 'הוספה' מוסיף רק שורות חדשות לטבלת היעד. האפשרות הזו מוסיפה את הנתונים שהועברו בלי לבדוק אם קיימות רשומות, ולכן המצב הזה עלול לגרום לשכפול נתונים בטבלת היעד.
כשבוחרים במצב הוספה, צריך לבחור עמודה של סימן מים. נדרשת עמודה של סימן מים כדי שמחבר PostgreSQL יוכל לעקוב אחרי שינויים בטבלת המקור.
בהעברות של PostgreSQL, מומלץ לבחור עמודה שמתעדכנת רק כשהרשומה נוצרה, ולא תשתנה בעדכונים הבאים. לדוגמה, העמודהCREATED_AT.
מצב כתיבה של Upsert
במצב הכתיבה upsert, המערכת מעדכנת שורה או מוסיפה שורה חדשה בטבלת היעד על ידי בדיקה של מפתח ראשי. אתם יכולים לציין מפתח ראשי כדי שמחבר PostgreSQL יוכל לקבוע אילו שינויים צריך לבצע כדי שהטבלה ביעד תהיה מעודכנת בהתאם לטבלה במקור. אם המפתח הראשי שצוין קיים בטבלת היעד ב-BigQuery במהלך העברת נתונים, המחבר של PostgreSQL מעדכן את השורה הזו עם נתונים חדשים מטבלת המקור. אם מפתח ראשי לא קיים במהלך העברת נתונים, המחבר של PostgreSQL מוסיף שורה חדשה.
כשבוחרים במצב upsert, צריך לבחור עמודה של סימן מים ומפתח ראשי:
- כדי לעקוב אחרי שינויים בטבלת המקור, מחבר PostgreSQL צריך עמודה של סימן מים.
- בוחרים עמודת סימן מים שמתעדכנת בכל פעם שמשנים שורה. מומלץ להשתמש בעמודות דומות לעמודות
UPDATED_ATאוLAST_MODIFIED.
- בוחרים עמודת סימן מים שמתעדכנת בכל פעם שמשנים שורה. מומלץ להשתמש בעמודות דומות לעמודות
המפתח הראשי יכול להיות עמודה אחת או יותר בטבלה, שנדרשות למחבר PostgreSQL כדי לקבוע אם צריך להוסיף או לעדכן שורה.
בוחרים עמודות שמכילות ערכים לא ריקים שהם ייחודיים בכל השורות של הטבלה. מומלץ להשתמש בעמודות שכוללות מזהים שנוצרו על ידי המערכת, קודי הפניה ייחודיים (למשל מזהים עם הגדלה אוטומטית) או מזהים של רצפים בלתי משתנים שמבוססים על זמן.
כדי למנוע אובדן נתונים או פגם בנתונים, בעמודות של המפתח הראשי שבוחרים צריכים להיות ערכים ייחודיים. אם יש לכם ספק לגבי הייחודיות של עמודת המפתח הראשי שבחרתם, מומלץ להשתמש במקום זאת במצב כתיבה של הוספה.
התנהגות של הוספה מצטברת
כשמבצעים שינויים בסכימת הטבלה במקור הנתונים, העברות נתונים מצטברות מהטבלאות האלה משתקפות ב-BigQuery בדרכים הבאות:
| שינויים במקור הנתונים | התנהגות של הוספה מצטברת |
|---|---|
| הוספת עמודה חדשה | עמודה חדשה נוספת לטבלת היעד ב-BigQuery. כל הרשומות הקודמות בעמודה הזו יקבלו ערכי null. |
| מחיקת עמודה | העמודה שנמחקה נשארת בטבלת היעד ב-BigQuery. ערכים חדשים בעמודה שנמחקה יאוכלסו בערכי null. |
| שינוי סוג הנתונים בעמודה | המחבר תומך רק ב
המרות של סוגי נתונים שנתמכות על ידי הצהרת ה-DDL ALTER COLUMN.
המרת סוג נתונים אחרת תגרום לכך שהעברת הנתונים תיכשל.
אם נתקלים בבעיות, מומלץ ליצור הגדרת העברה חדשה. |
| שינוי שם של עמודה | העמודה המקורית נשארת בטבלת היעד ב-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 זמין במאמר בנושא תמחור של שירות העברת נתונים.