טעינת נתונים מ-MySQL ל-BigQuery
אפשר לטעון נתונים מ-MySQL ל-BigQuery באמצעות המחבר של שירות העברת הנתונים ל-BigQuery ל-MySQL. הוא תומך במופעי MySQL שמתארחים בסביבה המקומית, ב-Cloud SQL ובספקי שירותי ענן ציבורי אחרים כמו Amazon Web Services (AWS) ו-Microsoft Azure. באמצעות שירות העברת הנתונים ל-BigQuery, אתם יכולים לתזמן משימות העברה חוזרות שמוסיפות את הנתונים העדכניים מ-MySQL ל-BigQuery.
לפני שמתחילים
- יוצרים משתמש במסד הנתונים של MySQL.
- מוודאים שביצעתם את כל הפעולות שנדרשות כדי להפעיל את שירות העברת הנתונים ל-BigQuery.
- יוצרים מערך נתונים ב-BigQuery לאחסון הנתונים.
- מוודאים שיש לכם את התפקידים הנדרשים כדי להשלים את המשימות שמתוארות במסמך הזה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת העברת נתונים באמצעות שירות העברת נתונים ל-BigQuery, צריך לבקש מהאדמין להקצות לכם את תפקיד BigQuery Admin (roles/bigquery.admin) ב-IAM בפרויקט.
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקיד המוגדר מראש הזה כולל את ההרשאות שנדרשות ליצירת העברת נתונים בשירות העברת נתונים ל-BigQuery. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור העברת נתונים באמצעות שירות העברת הנתונים ל-BigQuery, נדרשות ההרשאות הבאות:
-
הרשאות של שירות העברת נתונים ל-BigQuery:
-
bigquery.transfers.update -
bigquery.transfers.get
-
-
הרשאות ב-BigQuery:
-
bigquery.datasets.get -
bigquery.datasets.getIamPolicy -
bigquery.datasets.update -
bigquery.datasets.setIamPolicy -
bigquery.jobs.create
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
מידע נוסף מופיע במאמר בנושא מתן גישה ל-bigquery.admin.
אם אתם מתכוונים להגדיר התראות על הפעלת העברה ב-Pub/Sub, ודאו שיש לכם הרשאה לניהול זהויות והרשאות גישה (IAM) pubsub.topics.setIamPolicy. אם מגדירים רק התראות באימייל, לא צריך הרשאות Pub/Sub. מידע נוסף זמין במאמר בנושא התראות על הפעלת שירות העברת נתונים ל-BigQuery.
חיבורים לרשת
אם אין כתובת IP ציבורית לחיבור למסד הנתונים של MySQL, צריך להגדיר קובץ מצורף לרשת.
הוראות מפורטות להגדרת הרשת הנדרשת מופיעות במסמכים הבאים:
- אם אתם מעבירים מ-Cloud SQL, כדאי לעיין במאמר בנושא הגדרת גישה למופע Cloud SQL.
- אם אתם מעבירים נתונים מ-AWS, כדאי לעיין במאמר בנושא הגדרת ה-VPN של AWS-Google Cloud והקשר לרשת.
- אם אתם מעבירים מ-Azure, כדאי לעיין במאמר בנושא הגדרת ה-VPN של Azure-Google Cloud והצמדת הרשת.
מגבלות
העברות נתונים מ-MySQL כפופות למגבלות הבאות:
- המספר המקסימלי של חיבורים בו-זמניים למסד נתונים של MySQL נקבע על ידי פרמטר ההגדרה של MySQL
max_connections. כברירת מחדל, הערך הזה מוגדר ל-151 חיבורים, אבל אפשר להגדיר מכסה גבוהה יותר לפי הצורך. כתוצאה מכך, מספר ההפעלות של העברת נתונים בו-זמנית למסד נתונים יחיד של MySQL מוגבל למספר המקסימלי הזה. המגבלה הזו גם אומרת שמספר העבודות להעברה בו-זמנית צריך להיות מוגבל לערך שקטן ממספר החיבורים המקסימלי בו-זמנית שנתמך על ידי מסד הנתונים של MySQL. - כל הגדרה של העברת נתונים יכולה לתמוך רק בהרצה אחת של העברת נתונים בכל זמן נתון. אם מתוכננת העברת נתונים שנייה לפני שההעברה הראשונה מסתיימת, רק ההעברה הראשונה תושלם. כל העברת נתונים אחרת שחופפת להעברה הראשונה תדלג.
- כדי להימנע מדילוג על העברות במסגרת הגדרת העברה יחידה, מומלץ להגדיר את תדירות החזרה כדי להגדיל את משך הזמן בין העברות של נתונים בכמות גדולה.
- במהלך העברת נתונים, מחבר MySQL מזהה עמודות מפתח עם אינדקסים ומחיצות כדי להעביר את הנתונים שלכם באצוות מקבילות. לכן, מומלץ לציין עמודות של מפתח ראשי או להשתמש בעמודות עם אינדקס בטבלה כדי לשפר את הביצועים ולהקטין את שיעור השגיאות בהעברות הנתונים.
- אם יש לכם אילוצים של אינדקס או של מפתח ראשי, אפשר ליצור אצוות מקבילות רק עם סוגי העמודות הבאים:
INTEGERTINYINTSMALLINTFLOATREALDOUBLENUMERICBIGINTDECIMALDATE
- העברות נתונים של MySQL שלא משתמשות במפתח ראשי או בעמודות עם אינדקס לא יכולות לתמוך ביותר מ-2,000,000 רשומות לכל טבלה.
- אם יש לכם אילוצים של אינדקס או של מפתח ראשי, אפשר ליצור אצוות מקבילות רק עם סוגי העמודות הבאים:
אפשרויות להטמעת נתונים
בקטעים הבאים מפורטות האפשרויות להעברת נתונים כשמגדירים העברת נתונים מ-MySQL.
הגדרת TLS
מחבר MySQL תומך בהגדרה של אבטחה ברמת התעבורה (TLS) כדי להצפין את העברות הנתונים ל-BigQuery. מחבר MySQL תומך בהגדרות ה-TLS הבאות:
- הצפנת נתונים ואימות של CA ושם מארח: במצב הזה מתבצע אימות מלא של השרת באמצעות TLS בפרוטוקול TCPS. הוא מצפין את כל הנתונים בזמן ההעברה ומוודא שהאישור של שרת מסד הנתונים נחתם על ידי רשות אישורים (CA) מהימנה. בנוסף, במצב הזה נבדק אם שם המארח שאליו מתחברים תואם בדיוק לשם הנפוץ (CN) או לשם חלופי של בעלים (subject) (SAN) באישור של השרת. המצב הזה מונע מהתוקפים להשתמש באישור תקף לדומיין אחר כדי להתחזות לשרת מסד הנתונים שלכם.
- אם שם המארח לא תואם ל-CN או ל-SAN של האישור, החיבור נכשל. צריך להגדיר פתרון DNS שתואם לאישור או להשתמש במצב אבטחה אחר.
- השתמשו במצב הזה כדי לקבל את האפשרות המאובטחת ביותר למניעת מתקפות מסוג 'אדם באמצע' (PITM).
- הצפנת נתונים ואימות רשות האישורים בלבד: במצב הזה כל הנתונים מוצפנים באמצעות TLS בפרוטוקול TCPS, ומאומת שהאישור של השרת נחתם על ידי רשות אישורים שהלקוח סומך עליה. עם זאת, במצב הזה לא מתבצע אימות של שם המארח של השרת. החיבור במצב הזה יצליח כל עוד האישור תקף והונפק על ידי רשות אישורים מהימנה, בלי קשר לשאלה אם שם המארח באישור תואם לשם המארח שאליו מתחברים.
- כדאי להשתמש במצב הזה אם רוצים לוודא שמתחברים לשרת שהאישור שלו חתום על ידי רשות מהימנה שמנפיקה אישורים (CA), אבל אי אפשר לאמת את שם המארח או שאין לכם שליטה על הגדרת שם המארח.
- הצפנה בלבד: במצב הזה מוצפנים כל הנתונים שמועברים בין הלקוח לשרת. היא לא מבצעת אימות של אישורים או של שמות מארחים.
- המצב הזה מספק רמת אבטחה מסוימת על ידי הגנה על נתונים במעבר, אבל הוא עלול להיות פגיע למתקפות PITM.
- משתמשים במצב הזה אם רוצים לוודא שכל הנתונים מוצפנים, אבל לא יכולים או לא רוצים לאמת את זהות השרת. מומלץ להשתמש במצב הזה כשעובדים עם רשתות VPC פרטיות.
- ללא הצפנה או אימות: במצב הזה לא מוצפנים נתונים ולא מתבצע אימות של אישורים או שמות מארחים. כל הנתונים נשלחים כטקסט רגיל.
- לא מומלץ להשתמש במצב הזה בסביבה שבה מתבצע טיפול במידע אישי רגיש.
- מומלץ להשתמש במצב הזה רק למטרות בדיקה ברשת מבודדת שבה האבטחה לא מהווה בעיה.
אישור שרת מהימן (PEM)
אם אתם משתמשים במצב הצפנת נתונים ואימות של רשות אישורים ושם מארח או במצב הצפנת נתונים ואימות של רשות אישורים, אתם יכולים לספק גם אישור אחד או יותר בקידוד PEM. האישורים האלה נדרשים בתרחישים מסוימים שבהם שירות העברת הנתונים ל-BigQuery צריך לאמת את הזהות של שרת מסד הנתונים במהלך חיבור ה-TLS:
- אם אתם משתמשים באישור שחתום על ידי רשות אישורים פרטית בארגון שלכם או באישור עם חתימה עצמית, אתם צריכים לספק את שרשרת האישורים המלאה או את האישור היחיד עם החתימה העצמית. הדבר נדרש לאישורים שהונפקו על ידי רשויות אישורים פנימיות של שירותים מנוהלים של ספקי שירותי ענן, כמו Amazon Relational Database Service (RDS).
- אם האישור של שרת מסד הנתונים שלכם נחתם על ידי רשות אישורים ציבורית (למשל, Let's Encrypt, DigiCert או GlobalSign), אתם לא צריכים לספק אישור. אישורי הבסיס של רשויות ה-CA הציבוריות האלה מותקנים מראש ומהימנים על שירות העברת הנתונים ל-BigQuery.
כשיוצרים הגדרת העברה של MySQL, אפשר לספק אישורים בקידוד PEM בשדה Trusted PEM Certificate (אישור PEM מהימן), עם הדרישות הבאות:
- האישור צריך להיות שרשרת אישורים חוקית בקידוד PEM.
- האישור חייב להיות נכון לחלוטין. אם יש אישורים חסרים בשרשרת או תוכן שגוי, חיבור ה-TLS ייכשל.
- אם יש לכם אישור יחיד, אתם יכולים לספק אישור יחיד עם חתימה עצמית משרת מסד הנתונים.
- כדי להשתמש בשרשרת אישורים מלאה שהונפקה על ידי רשות אישורים פרטית, צריך לספק את שרשרת האמון המלאה. הוא כולל את האישור משרת מסד הנתונים ואישורי ביניים ואישורי בסיס של רשות האישורים (CA).
טעינת נתונים מ-MySQL ל-BigQuery
כדי להוסיף נתונים מ-MySQL ל-BigQuery, צריך להגדיר העברה באמצעות אחת מהאפשרויות הבאות:
המסוף
עוברים לדף העברות נתונים.
לוחצים על Create transfer (יצירת העברה).
בקטע סוג המקור, בשדה מקור, בוחרים באפשרות MySQL.
בקטע שם הגדרת ההעברה, בשדה שם מוצג, מזינים שם להעברה. שם ההעברה יכול להיות כל ערך שיאפשר לכם לזהות את ההעברה אם תצטרכו לשנות אותה בהמשך.
בקטע Schedule options:
- בוחרים את תדירות החזרה. אם בוחרים באפשרות שעות, ימים (ברירת מחדל), שבועות או חודשים, צריך לציין גם תדירות. אפשר גם לבחור באפשרות בהתאמה אישית כדי ליצור תדירות חזרה ספציפית יותר. אם בוחרים באפשרות על פי דרישה, העברת הנתונים תתבצע רק כשמפעילים אותה באופן ידני.
- אם רלוונטי, בוחרים באפשרות התחלה מיידית או באפשרות התחלה בשעה מוגדרת ומזינים תאריך התחלה ומשך זמן הפעלה.
בקטע הגדרות יעד, בשדה קבוצת נתונים, בוחרים את קבוצת הנתונים שיצרתם לאחסון הנתונים, או לוחצים על יצירת קבוצת נתונים חדשה ויוצרים קבוצת נתונים לשימוש כקבוצת נתוני היעד.
בקטע Data source details (פרטים של מקור הנתונים):
- בקטע Network attachment (צירוף לרשת), בוחרים צירוף קיים לרשת או לוחצים על Create Network Attachment (יצירת צירוף לרשת). מידע נוסף זמין בקטע חיבורי רשת במאמר הזה.
- בשדה מארח, מזינים את שם המארח או את כתובת ה-IP של שרת מסד הנתונים של MySQL.
- בשדה מספר יציאה, מזינים את מספר היציאה של שרת מסד הנתונים של MySQL.
- בשדה שם מסד הנתונים, מזינים את השם של מסד הנתונים של MySQL.
- בשדה שם משתמש, מזינים את שם המשתמש של משתמש MySQL שיוזם את החיבור למסד הנתונים של MySQL.
- בשדה סיסמה, מזינים את הסיסמה של משתמש MySQL שמפעיל את החיבור למסד הנתונים של MySQL.
- בתפריט מצב TLS, בוחרים באחת מהאפשרויות. מידע נוסף על מצבי TLS זמין במאמר בנושא הגדרת TLS.
- בשדה Trusted PEM Certificate (אישור PEM מהימן), מזינים את האישור הציבורי של רשות האישורים (CA) שהנפיקה את אישור ה-TLS של שרת מסד הנתונים. מידע נוסף זמין במאמר אישור שרת מהימן (PEM).
כדי להעביר אובייקטים של MySQL, מבצעים אחת מהפעולות הבאות:
- לוחצים על עיון כדי לבחור את הטבלאות ב-MySQL שנדרשות להעברה, ואז לוחצים על בחירה.
- מזינים באופן ידני את השמות של הטבלאות באובייקטים של MySQL שרוצים להעביר.
אופציונלי: בקטע אפשרויות התראות, מבצעים את הפעולות הבאות:
- כדי להפעיל התראות באימייל, לוחצים על המתג התראות באימייל ומעבירים אותו למצב מופעל. כשמפעילים את האפשרות הזו, האדמין של ההעברה מקבל התראה באימייל כשהרצת ההעברה נכשלת.
- כדי להגדיר התראות ב-Pub/Sub להעברה, לוחצים על המתג Pub/Sub notifications (התראות Pub/Sub) למצב מופעל. אפשר לבחור את שם הנושא או ללחוץ על יצירת נושא כדי ליצור נושא.
לוחצים על Save.
BQ
מזינים את הפקודה bq mk ומציינים את דגל יצירת ההעברה --transfer_config:
bq mk --transfer_config --project_id=PROJECT_ID --data_source=DATA_SOURCE --display_name=DISPLAY_NAME --target_dataset=DATASET --params='PARAMETERS'
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID (אופציונלי): מזהה הפרויקט ב- Google Cloud .
אם לא מציינים פרויקט ספציפי באמצעות הדגל
--project_id, נעשה שימוש בפרויקט שמוגדר כברירת מחדל. - DATA_SOURCE: מקור הנתונים, שהוא
mysql. - DISPLAY_NAME: השם המוצג של הגדרת העברת הנתונים. שם ההעברה יכול להיות כל ערך שיעזור לכם לזהות את ההעברה אם תצטרכו לשנות אותה בהמשך.
- DATASET: מערך הנתונים של היעד להגדרת העברת הנתונים.
PARAMETERS: הפרמטרים של הגדרת ההעברה שנוצרה בפורמט JSON. לדוגמה:
--params='{"param":"param_value"}'. אלה הפרמטרים להעברה של MySQL:-
connector.networkAttachment(אופציונלי): השם של קובץ הרשת המצורף לחיבור למסד הנתונים של MySQL. -
connector.database: השם של מסד הנתונים של MySQL. connector.endpoint.host: שם המארח או כתובת ה-IP של מסד הנתונים.-
connector.endpoint.port: מספר היציאה של מסד הנתונים. -
connector.authentication.username: שם המשתמש של המשתמש במסד הנתונים. -
connector.authentication.password: הסיסמה של משתמש מסד הנתונים. connector.connectionType -
connector.connectionType(אופציונלי): סוג החיבור לקביעת כתובת ה-URL של החיבור. הערך יכול להיותSERVICE,SIDאוTNS. אם לא מציינים ערך, ברירת המחדל היאSERVICE. -
connector.tls.mode: מציינים תצורת TLS לשימוש בהעברה הזו:-
ENCRYPT_VERIFY_CA_AND_HOSTלהצפנת נתונים ולאימות של CA ושם מארח -
ENCRYPT_VERIFY_CAלהצפנת נתונים ולאימות CA בלבד -
ENCRYPT_VERIFY_NONEלהצפנת נתונים בלבד -
DISABLEללא הצפנה או אימות
-
-
connector.tls.trustedServerCertificate: (אופציונלי) מציינים אישור אחד או יותר בקידוד PEM. חובה רק אם הערך שלconnector.tls.modeהואENCRYPT_VERIFY_CA_AND_HOSTאוENCRYPT_VERIFY_CA. -
assets: רשימה של שמות הטבלאות ב-MySQL שיועברו ממסד הנתונים של MySQL כחלק מההעברה.
-
לדוגמה, הפקודה הבאה יוצרת העברה של MySQL בשם My Transfer:
bq mk --transfer_config --target_dataset=mydataset --data_source=mysql --display_name='My Transfer' --params='{"assets":["DB1/DEPARTMENT","DB1/EMPLOYEES"], "connector.authentication.username": "User1", "connector.authentication.password":"ABC12345", "connector.encryptionMode":"FULL", "connector.database":"DB1", "connector.endpoint.host":"54.74.220.23", "connector.endpoint.port":3306 "connector.tls.mode": "ENCRYPT_VERIFY_CA_AND_HOST", "connector.tls.trustedServerCertificate": "PEM-encoded certificate"}'
API
משתמשים ב-projects.locations.transferConfigs.create method ומספקים מופע של TransferConfig resource.
כדי להפעיל העברת נתונים ידנית מחוץ ללוח הזמנים הרגיל, אפשר להתחיל הפעלה של מילוי חוסרים.
מיפוי סוגי נתונים
בטבלה הבאה מפורטים סוגי הנתונים ב-MySQL וסוגי הנתונים התואמים ב-BigQuery.
| סוג הנתונים ב-MySQL | סוג נתונים ב-BigQuery |
|---|---|
BIT |
BOOLEAN |
TINYINT |
INTEGER |
BOOL, BOOLEAN | INTEGER
במסד נתונים של MySQL, סוגי הנתונים |
SMALLINT |
INTEGER |
MEDIUMINT |
INTEGER |
INT, INTEGER |
INTEGER |
BIGINT |
BIGNUMERIC |
FLOAT |
FLOAT |
DOUBLE |
FLOAT |
DECIMAL |
BIGNUMERIC |
DATE |
DATE |
DATETIME |
TIMESTAMP |
TIMESTAMP |
TIMESTAMP |
TIME |
TIME |
YEAR |
DATE |
CHAR |
STRING |
VARCHAR |
STRING |
BINARY |
BYTES |
VARBINARY |
BYTES |
TINYBLOB |
BYTES |
TINYTEXT |
STRING |
BLOB |
BYTES |
TEXT |
STRING |
MEDIUMBLOB |
BYTES |
MEDIUMTEXT |
STRING |
LONGBLOB |
BYTES |
LONGTEXT |
STRING |
ENUM |
STRING |
SET |
STRING |
JSON |
JSON |
פתרון בעיות
אם נתקלתם בבעיות בהגדרת העברת הנתונים, כדאי לעיין במאמר בנושא בעיות בהעברת נתונים ב-MySQL.
תמחור
למידע על תמחור העברות של MySQL, אפשר לעיין במאמר בנושא תמחור של שירות העברת נתונים.
המאמרים הבאים
- סקירה כללית של שירות העברת הנתונים ל-BigQuery זמינה במאמר מהו שירות העברת נתונים ל-BigQuery?.
- מידע על שימוש בהעברות, כולל קבלת מידע על הגדרות העברה, הצגת רשימה של הגדרות העברה והצגת היסטוריית ההרצה של העברה, זמין במאמר ניהול העברות.
- איך טוענים נתונים באמצעות פעולות בין עננים