העברת סכימה ונתונים מ-Amazon Redshift

במסמך הזה מתואר תהליך ההעברה של נתונים מ-Amazon Redshift ל-BigQuery באמצעות כתובות IP ציבוריות.

אתם יכולים להשתמש בשירות העברת הנתונים ל-BigQuery כדי להעתיק את הנתונים ממחסן נתונים (data warehouse) של Amazon Redshift ל-BigQuery. השירות מפעיל סוכני העברה ב-GKE ומפעיל פעולת פריקה מ-Amazon Redshift לאזור זמני בדלי Amazon S3. לאחר מכן, שירות העברת הנתונים ל-BigQuery מעביר את הנתונים ממאגר Amazon S3 ל-BigQuery.

בתרשים הזה מוצג תהליך העברת הנתונים הכולל בין מחסן נתונים של Amazon Redshift לבין BigQuery במהלך העברה.

תהליך העבודה של העברה מ-Amazon Redshift ל-BigQuery.

אם רוצים להעביר נתונים ממופע Amazon Redshift דרך ענן וירטואלי פרטי (VPC) באמצעות כתובות IP פרטיות, אפשר לעיין במאמר בנושא העברת נתונים מ-Amazon Redshift באמצעות VPC.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and BigQuery Data Transfer Service APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and BigQuery Data Transfer Service APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

הגדרת ההרשאות הנדרשות

לפני שיוצרים העברה של Amazon Redshift:

  1. צריך לוודא שלחשבון המשתמש שיוצר את ההעברה יש את ההרשאות הבאות בפרויקט שמכיל את משימת ההעברה:

    • הרשאות bigquery.transfers.update ליצירת ההעברה
    • הרשאות bigquery.datasets.get וגם bigquery.datasets.update במערך הנתונים של היעד

    התפקיד המוגדר מראש roles/bigquery.admin בניהול זהויות והרשאות גישה (IAM) כולל את ההרשאות bigquery.transfers.update, bigquery.datasets.update ו-bigquery.datasets.get. מידע נוסף על תפקידי IAM בשירות העברת נתונים ל-BigQuery זמין במאמר בנושא בקרת גישה.

  2. כדאי לעיין במסמכי התיעוד של Amazon S3 כדי לוודא שהגדרתם את כל ההרשאות שנדרשות להפעלת ההעברה. לפחות, צריך להחיל על נתוני המקור ב-Amazon S3 את המדיניות המנוהלת של AWS‏ AmazonS3ReadOnlyAccess.

יצירת מערך נתונים

יוצרים מערך נתונים ב-BigQuery לאחסון הנתונים. אין צורך ליצור טבלאות.

הענקת גישה לאשכול Amazon Redshift

מוסיפים לרשימת ההיתרים את טווחי כתובות ה-IP הבאים של אשכול Amazon Redshift הפרטי על ידי הגדרת הכללים של קבוצת האבטחה. אתם יכולים להוסיף לרשימת ההיתרים את כתובות ה-IP שמתאימות למיקום של מערך הנתונים, או להוסיף לרשימת ההיתרים את כל כתובות ה-IP שבטבלה שלמטה. כתובות ה-IP האלה בבעלות Google שמורות להעברות נתונים ב-Amazon Redshift.

מיקומים אזוריים

תיאור האזור שם האזור כתובות IP
אמריקה
קולומבוס, אוהיו us-east5 34.162.72.184
34.162.173.185
34.162.205.205
34.162.81.45
34.162.182.149
34.162.59.92
34.162.157.190
34.162.191.145
דאלאס us-south1 34.174.172.89
34.174.40.67
34.174.5.11
34.174.96.109
34.174.148.99
34.174.176.19
34.174.253.135
34.174.129.163
איווה us-central1 34.121.70.114
34.71.81.17
34.122.223.84
34.121.145.212
35.232.1.105
35.202.145.227
35.226.82.216
35.225.241.102
לאס וגאס us-west4 34.125.53.201
34.125.69.174
34.125.159.85
34.125.152.1
34.125.195.166
34.125.50.249
34.125.68.55
34.125.91.116
לוס אנג'לס us-west2 35.236.59.167
34.94.132.139
34.94.207.21
34.94.81.187
34.94.88.122
35.235.101.187
34.94.238.66
34.94.195.77
מקסיקו northamerica-south1 34.51.6.35
34.51.7.113
34.51.12.83
34.51.10.94
34.51.11.219
34.51.11.52
34.51.2.114
34.51.15.251
מונטריאול northamerica-northeast1 34.95.20.253
35.203.31.219
34.95.22.233
34.95.27.99
35.203.12.23
35.203.39.46
35.203.116.49
35.203.104.223
צפון וירג'יניה us-east4 35.245.95.250
35.245.126.228
35.236.225.172
35.245.86.140
35.199.31.35
35.199.19.115
35.230.167.48
35.245.128.132
35.245.111.126
35.236.209.21
אורגון us-west1 35.197.117.207
35.199.178.12
35.197.86.233
34.82.155.140
35.247.28.48
35.247.31.246
35.247.106.13
34.105.85.54
סולט לייק סיטי us-west3 34.106.37.58
34.106.85.113
34.106.28.153
34.106.64.121
34.106.246.131
34.106.56.150
34.106.41.31
34.106.182.92
סאו פאולו southamerica-east1 35.199.88.228
34.95.169.140
35.198.53.30
34.95.144.215
35.247.250.120
35.247.255.158
34.95.231.121
35.198.8.157
סנטיאגו southamerica-west1 34.176.188.48
34.176.38.192
34.176.205.134
34.176.102.161
34.176.197.198
34.176.223.236
34.176.47.188
34.176.14.80
דרום קרוליינה us-east1 35.196.207.183
35.237.231.98
104.196.102.222
35.231.13.201
34.75.129.215
34.75.127.9
35.229.36.137
35.237.91.139
טורונטו northamerica-northeast2 34.124.116.108
34.124.116.107
34.124.116.102
34.124.116.80
34.124.116.72
34.124.116.85
34.124.116.20
34.124.116.68
אירופה
בלגיה europe-west1 35.240.36.149
35.205.171.56
34.76.234.4
35.205.38.234
34.77.237.73
35.195.107.238
35.195.52.87
34.76.102.189
ברלין europe-west10 34.32.28.80
34.32.31.206
34.32.19.49
34.32.33.71
34.32.15.174
34.32.23.7
34.32.1.208
34.32.8.3
פינלנד europe-north1 35.228.35.94
35.228.183.156
35.228.211.18
35.228.146.84
35.228.103.114
35.228.53.184
35.228.203.85
35.228.183.138
פרנקפורט europe-west3 35.246.153.144
35.198.80.78
35.246.181.106
35.246.211.135
34.89.165.108
35.198.68.187
35.242.223.6
34.89.137.180
לונדון europe-west2 35.189.119.113
35.189.101.107
35.189.69.131
35.197.205.93
35.189.121.178
35.189.121.41
35.189.85.30
35.197.195.192
מדריד europe-southwest1 34.175.99.115
34.175.186.237
34.175.39.130
34.175.135.49
34.175.1.49
34.175.95.94
34.175.102.118
34.175.166.114
מילאנו europe-west8 34.154.183.149
34.154.40.104
34.154.59.51
34.154.86.2
34.154.182.20
34.154.127.144
34.154.201.251
34.154.0.104
הולנד europe-west4 35.204.237.173
35.204.18.163
34.91.86.224
34.90.184.136
34.91.115.67
34.90.218.6
34.91.147.143
34.91.253.1
פריז europe-west9 34.163.76.229
34.163.153.68
34.155.181.30
34.155.85.234
34.155.230.192
34.155.175.220
34.163.68.177
34.163.157.151
שטוקהולם europe-north2 34.51.133.48
34.51.136.177
34.51.128.140
34.51.141.252
34.51.139.127
34.51.142.55
34.51.134.218
34.51.138.9
טורינו europe-west12 34.17.15.186
34.17.44.123
34.17.41.160
34.17.47.82
34.17.43.109
34.17.38.236
34.17.34.223
34.17.16.47
ורשה europe-central2 34.118.72.8
34.118.45.245
34.118.69.169
34.116.244.189
34.116.170.150
34.118.97.148
34.116.148.164
34.116.168.127
ציריך europe-west6 34.65.205.160
34.65.121.140
34.65.196.143
34.65.9.133
34.65.156.193
34.65.216.124
34.65.233.83
34.65.168.250
אסיה ואזור האוקיינוס השקט
בנגקוק asia-southeast3 34.15.142.80
34.15.131.78
34.15.141.141
34.15.143.6
34.15.142.166
34.15.138.0
34.15.135.129
34.15.139.45
דלהי asia-south2 34.126.212.96
34.126.212.85
34.126.208.224
34.126.212.94
34.126.208.226
34.126.212.232
34.126.212.93
34.126.212.206
הונג קונג asia-east2 34.92.245.180
35.241.116.105
35.220.240.216
35.220.188.244
34.92.196.78
34.92.165.209
35.220.193.228
34.96.153.178
ג'קארטה asia-southeast2 34.101.79.105
34.101.129.32
34.101.244.197
34.101.100.180
34.101.109.205
34.101.185.189
34.101.179.27
34.101.197.251
מלבורן australia-southeast2 34.126.196.95
34.126.196.106
34.126.196.126
34.126.196.96
34.126.196.112
34.126.196.99
34.126.196.76
34.126.196.68
מומבאי asia-south1 34.93.67.112
35.244.0.1
35.200.245.13
35.200.203.161
34.93.209.130
34.93.120.224
35.244.10.12
35.200.186.100
אוסקה asia-northeast2 34.97.94.51
34.97.118.176
34.97.63.76
34.97.159.156
34.97.113.218
34.97.4.108
34.97.119.140
34.97.30.191
סיאול asia-northeast3 34.64.152.215
34.64.140.241
34.64.133.199
34.64.174.192
34.64.145.219
34.64.136.56
34.64.247.158
34.64.135.220
סינגפור asia-southeast1 34.87.12.235
34.87.63.5
34.87.91.51
35.198.197.191
35.240.253.175
35.247.165.193
35.247.181.82
35.247.189.103
סידני australia-southeast1 35.189.33.150
35.189.38.5
35.189.29.88
35.189.22.179
35.189.20.163
35.189.29.83
35.189.31.141
35.189.14.219
טייוואן asia-east1 35.221.201.20
35.194.177.253
34.80.17.79
34.80.178.20
34.80.174.198
35.201.132.11
35.201.223.177
35.229.251.28
35.185.155.147
35.194.232.172
טוקיו asia-northeast1 34.85.11.246
34.85.30.58
34.85.8.125
34.85.38.59
34.85.31.67
34.85.36.143
34.85.32.222
34.85.18.128
34.85.23.202
34.85.35.192
המזרח התיכון
דמאם me-central2 34.166.20.177
34.166.10.104
34.166.21.128
34.166.19.184
34.166.20.83
34.166.18.138
34.166.18.48
34.166.23.171
דוחה me-central1 34.18.48.121
34.18.25.208
34.18.38.183
34.18.33.25
34.18.21.203
34.18.21.80
34.18.36.126
34.18.23.252
תל אביב me-west1 34.165.184.115
34.165.110.74
34.165.174.16
34.165.28.235
34.165.170.172
34.165.187.98
34.165.85.64
34.165.245.97
אפריקה
יוהנסבורג africa-south1 34.35.11.24
34.35.10.66
34.35.8.32
34.35.3.248
34.35.2.113
34.35.5.61
34.35.7.53
34.35.3.17

מיקומים במספר אזורים

תיאור של המיקום 'במספר אזורים' השם של המיקום 'במספר אזורים' כתובות IP
מרכזי נתונים במדינות החברות באיחוד האירופי1 EU 34.76.156.158
34.76.156.172
34.76.136.146
34.76.1.29
34.76.156.232
34.76.156.81
34.76.156.246
34.76.102.206
34.76.129.246
34.76.121.168
מרכזי נתונים בארצות הברית US 35.185.196.212
35.197.102.120
35.185.224.10
35.185.228.170
35.197.5.235
35.185.206.139
35.197.67.234
35.197.38.65
35.185.202.229
35.185.200.120

1 נתונים שנמצאים במיקום 'במספר אזורים' של EU לא מאוחסנים במרכזי הנתונים europe-west2 (לונדון) או europe-west6 (ציריך).

הענקת גישה לקטגוריית Amazon S3

כדי להעביר את הנתונים מ-Amazon Redshift ל-BigQuery, צריך להשתמש בקטגוריית Amazon S3 כשטח אחסון זמני. הוראות מפורטות זמינות במסמכי התיעוד של Amazon.

  1. מומלץ ליצור משתמש ייעודי ב-Amazon IAM ולהעניק למשתמש הזה הרשאת קריאה בלבד ל-Amazon Redshift והרשאת קריאה וכתיבה ל-Amazon S3. כדי לבצע את השלב הזה, אפשר להחיל את המדיניות הבאה:

    הרשאות Amazon להעברה של Amazon Redshift

  2. יוצרים זוג מפתחות גישה למשתמש IAM ב-Amazon.

הגדרת בקרת עומס עבודה עם תור העברה נפרד

אופציונלי, אתם יכולים להגדיר תור של Amazon Redshift למטרות מיגרציה כדי להגביל את המשאבים שמשמשים למיגרציה ולהפריד ביניהם. אתם יכולים להגדיר את תור ההעברה הזה עם מספר מקסימלי של שאילתות מקבילות. לאחר מכן תוכלו לשייך קבוצת משתמשים מסוימת להעברה לתור ולהשתמש בפרטי הכניסה האלה כשמגדירים את ההעברה כדי להעביר נתונים ל-BigQuery. לשירות ההעברה יש גישה רק לתור ההעברה.

איסוף פרטי ההעברה

כדי להגדיר את ההעברה באמצעות שירות העברת הנתונים ל-BigQuery, צריך לאסוף את המידע הבא:

  • כדי לקבל את כתובת ה-URL של JDBC, פועלים לפי ההוראות האלה .
  • מקבלים את שם המשתמש והסיסמה של משתמש עם הרשאות מתאימות למסד הנתונים שלכם ב-Amazon Redshift.
  • פועלים לפי ההוראות במאמר Grant access to your Amazon S3 bucket (מתן גישה לקטגוריית Amazon S3) כדי לקבל צמד מפתחות גישה של AWS.
  • מקבלים את ה-URI של קטגוריית Amazon S3 שרוצים להשתמש בה להעברה. כדי להימנע מחיובים מיותרים, מומלץ להגדיר מדיניות מחזור חיים לדלי הזה. זמן התפוגה המומלץ הוא 24 שעות, כדי לאפשר מספיק זמן להעברת כל הנתונים ל-BigQuery.

בדיקת הנתונים

במסגרת העברת הנתונים, שירות העברת הנתונים ל-BigQuery כותב נתונים מ-Amazon Redshift ל-Cloud Storage כקובצי CSV. אם הקבצים האלה מכילים את התו ASCII 0, אי אפשר לטעון אותם ל-BigQuery. מומלץ לבדוק את הנתונים כדי להבין אם הבעיה הזו רלוונטית לכם. אם כן, אפשר לעקוף את הבעיה על ידי ייצוא הנתונים ל-Amazon S3 כקובצי Parquet, ואז לייבא את הקבצים האלה באמצעות שירות העברת הנתונים ל-BigQuery. מידע נוסף זמין במאמר סקירה כללית של העברות מ-Amazon S3.

הגדרת העברה של Amazon Redshift

בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. לוחצים על העברות נתונים.

  3. לוחצים על יצירת העברה.

  4. בקטע סוג המקור, בוחרים באפשרות העברה: Amazon Redshift מהרשימה מקור.

  5. בקטע Transfer config name (שם הגדרת ההעברה), מזינים שם להעברה, כמו My migration, בשדה Display name (שם מוצג). השם המוצג יכול להיות כל ערך שיאפשר לכם לזהות בקלות את ההעברה אם תצטרכו לשנות אותה בהמשך.

  6. בקטע הגדרות יעד, בוחרים את מערך הנתונים שיצרתם מתוך הרשימה מערך נתונים.

  7. בקטע Data source details (פרטים של מקור הנתונים), מבצעים את הפעולות הבאות:

    1. בקטע JDBC connection url for Amazon Redshift (כתובת אתר של חיבור JDBC ל-Amazon Redshift), מציינים את כתובת ה-JDBC כדי לגשת לאשכול Amazon Redshift.
    2. בשדה שם המשתמש של מסד הנתונים, מזינים את שם המשתמש של מסד הנתונים ב-Amazon Redshift שרוצים להעביר.
    3. בשדה סיסמה של מסד הנתונים, מזינים את הסיסמה של מסד הנתונים.

    4. בקטעים מזהה מפתח גישה ומפתח גישה סודי, מזינים את זוג מפתחות הגישה שקיבלתם מתוך מתן גישה לקטגוריית S3.

    5. בשדה Amazon S3 URI, מזינים את ה-URI של קטגוריית S3 שבה רוצים להשתמש כאזור זמני.

    6. בשדה Amazon Redshift Schema (סכימת Amazon Redshift), מזינים את סכימת Amazon Redshift שרוצים להעביר.

    7. בקטע Table name patterns (תבניות של שמות טבלאות), מציינים שם או תבנית להתאמה של שמות הטבלאות בסכימה. אפשר להשתמש בביטויים רגולריים כדי לציין את התבנית בפורמט: <table1Regex>;<table2Regex>. הדפוס צריך להתאים לתחביר של ביטויים רגולריים ב-Java. לדוגמה:

      • lineitem;ordertb תואם לטבלאות שנקראות lineitem ו-ordertb.
      • .* matches all tables.

      כדי להעביר את כל הטבלאות מהסכימה שצוינה, צריך להשאיר את השדה הזה ריק.

    8. בשביל VPC and the reserved IP range, משאירים את השדה ריק.

  8. בתפריט Service Account בוחרים חשבון שירות מתוך חשבונות השירות שמשויכים לGoogle Cloud פרויקט. אתם יכולים לשייך לחשבון שירות את ההעברה במקום להשתמש בפרטי הכניסה של המשתמש. מידע נוסף על שימוש בחשבונות שירות בהעברות נתונים זמין במאמר שימוש בחשבונות שירות.

  9. אופציונלי: בקטע אפשרויות התראות, מבצעים את הפעולות הבאות:

    1. לוחצים על המתג כדי להפעיל את ההתראות באימייל. אם מפעילים את האפשרות הזו, האדמין של ההעברה מקבל התראה באימייל כשהרצת העברה נכשלת.
    2. בקטע Select a Pub/Sub topic, בוחרים את שם הנושא או לוחצים על Create a topic. באמצעות האפשרות הזו אפשר להגדיר התראות על הפעלת Pub/Sub להעברה.
  10. לוחצים על Save.

  11. במסוף מוצגים כל פרטי ההגדרה של ההעברה, כולל שם המשאב של ההעברה. Google Cloud

BQ

מזינים את הפקודה bq mk ומספקים את הדגל ליצירת העברה --transfer_config. נדרשים גם הדגלים הבאים:

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params
bq mk \
    --transfer_config \
    --project_id=project_id \
    --data_source=data_source \
    --target_dataset=dataset \
    --display_name=name \
    --service_account_name=service_account \
    --params='parameters'

כאשר:

  • project_id הוא מזהה הפרויקט. Google Cloud אם לא מציינים את --project_id, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
  • data_source הוא מקור הנתונים: redshift.
  • dataset הוא מערך הנתונים של יעד BigQuery להגדרת ההעברה.
  • name הוא השם המוצג של הגדרת ההעברה. שם ההעברה יכול להיות כל ערך שיאפשר לכם לזהות את ההעברה אם תצטרכו לשנות אותה בהמשך.
  • service_account: הוא השם של חשבון השירות שמשמש לאימות ההעברה. חשבון השירות צריך להיות בבעלות אותו project_id ששימש ליצירת ההעברה, וצריכות להיות לו כל ההרשאות הנדרשות.
  • parameters מכיל את הפרמטרים של הגדרת ההעברה שנוצרה בפורמט JSON. לדוגמה: --params='{"param":"param_value"}'.

הפרמטרים שנדרשים להגדרת העברה ב-Amazon Redshift הם:

  • jdbc_url: כתובת ה-URL של חיבור JDBC משמשת לאיתור אשכול Amazon Redshift.
  • database_username: שם המשתמש לגישה למסד הנתונים כדי לבטל את הטעינה של טבלאות ספציפיות.
  • database_password: הסיסמה שמשמשת עם שם המשתמש כדי לגשת למסד הנתונים שלכם ולבטל את הטעינה של טבלאות ספציפיות.
  • access_key_id: מזהה מפתח הגישה לחתימה על בקשות שנשלחות אל AWS.
  • secret_access_key: מפתח הגישה הסודי שמשמש עם מזהה מפתח הגישה לחתימה על בקשות שנשלחות אל AWS.
  • s3_bucket: ה-URI של Amazon S3 שמתחיל ב-s3://‎ ומציין תחילית לקבצים זמניים לשימוש.
  • redshift_schema: הסכימה של Amazon Redshift שמכילה את כל הטבלאות שרוצים להעביר.
  • table_name_patterns: תבניות של שמות טבלאות, מופרדות באמצעות נקודה ופסיק (;). תבנית הטבלה היא ביטוי רגולרי לטבלאות שרוצים להעביר. אם לא מציינים, כל הטבלאות בסכימת מסד הנתונים מועברות.

לדוגמה, הפקודה הבאה יוצרת העברה של Amazon Redshift בשם My Transfer עם מערך נתונים ליעד בשם mydataset ופרויקט עם המזהה google.com:myproject.

bq mk \
    --transfer_config \
    --project_id=myproject \
    --data_source=redshift \
    --target_dataset=mydataset \
    --display_name='My Transfer' \
    --params='{"jdbc_url":"jdbc:postgresql://test-example-instance.sample.us-west-1.redshift.amazonaws.com:5439/dbname","database_username":"my_username","database_password":"1234567890","access_key_id":"A1B2C3D4E5F6G7H8I9J0","secret_access_key":"1234567890123456789012345678901234567890","s3_bucket":"s3://bucket/prefix","redshift_schema":"public","table_name_patterns":"table_name"}'

API

משתמשים בשיטה projects.locations.transferConfigs.create ומספקים מופע של המשאב TransferConfig.

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create redshift transfer config
public class CreateRedshiftTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String datasetRegion = "US";
    String jdbcUrl = "MY_JDBC_URL_CONNECTION_REDSHIFT";
    String dbUserName = "MY_USERNAME";
    String dbPassword = "MY_PASSWORD";
    String accessKeyId = "MY_AWS_ACCESS_KEY_ID";
    String secretAccessId = "MY_AWS_SECRET_ACCESS_ID";
    String s3Bucket = "MY_S3_BUCKET_URI";
    String redShiftSchema = "MY_REDSHIFT_SCHEMA";
    String tableNamePatterns = "*";
    String vpcAndReserveIpRange = "MY_VPC_AND_IP_RANGE";
    Map<String, Value> params = new HashMap<>();
    params.put("jdbc_url", Value.newBuilder().setStringValue(jdbcUrl).build());
    params.put("database_username", Value.newBuilder().setStringValue(dbUserName).build());
    params.put("database_password", Value.newBuilder().setStringValue(dbPassword).build());
    params.put("access_key_id", Value.newBuilder().setStringValue(accessKeyId).build());
    params.put("secret_access_key", Value.newBuilder().setStringValue(secretAccessId).build());
    params.put("s3_bucket", Value.newBuilder().setStringValue(s3Bucket).build());
    params.put("redshift_schema", Value.newBuilder().setStringValue(redShiftSchema).build());
    params.put("table_name_patterns", Value.newBuilder().setStringValue(tableNamePatterns).build());
    params.put(
        "migration_infra_cidr", Value.newBuilder().setStringValue(vpcAndReserveIpRange).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDatasetRegion(datasetRegion)
            .setDisplayName("Your Redshift Config Name")
            .setDataSourceId("redshift")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    createRedshiftTransfer(projectId, transferConfig);
  }

  public static void createRedshiftTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Cloud redshift transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Cloud redshift transfer was not created." + ex.toString());
    }
  }
}

מכסות ומגבלות

ב-BigQuery יש מכסת טעינה של 15TB לכל משימת טעינה לכל טבלה. מערכת Amazon Redshift דוחסת את נתוני הטבלה באופן פנימי, ולכן גודל הטבלה המיוצאת יהיה גדול יותר מגודל הטבלה שמדווח על ידי Amazon Redshift. אם אתם מתכננים לבצע מיגרציה של טבלה בגודל של יותר מ-15TB, עליכם לפנות קודם אל Cloud Customer Care.

השימוש בשירות הזה עלול לגרום לחיובים מחוץ ל-Google. פרטים נוספים מופיעים בדפי התמחור של Amazon Redshift ושל Amazon S3.

בגלל מודל העקביות של Amazon S3, יכול להיות שחלק מהקבצים לא ייכללו בהעברה ל-BigQuery.

המאמרים הבאים