חיבור ל-Spanner

אדמינים ב-BigQuery יכולים ליצור חיבור כדי לגשת לנתונים ב-Spanner. החיבור הזה מאפשר למנתחי נתונים להריץ שאילתות על נתונים ב-Spanner.

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

יצירת חיבורים ל-Spanner

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

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית Explorer, לוחצים על Add data.

    תיבת הדו-שיח הוספת נתונים נפתחת.

  3. בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Databases.

    אפשרות אחרת היא להזין Spanner בשדה חיפוש מקורות נתונים.

  4. בקטע מקורות נתונים מומלצים, לוחצים על Google Cloud Spanner.

  5. לוחצים על כרטיס הפתרון Google Cloud Spanner: BigQuery Federation.

  6. בחלונית מקור נתונים חיצוני, מזינים את הפרטים הבאים:

    • בשדה Connection type (סוג החיבור), בוחרים באפשרות Cloud Spanner.
    • בשדה מזהה החיבור, מזינים מזהה למשאב החיבור. מותר להשתמש באותיות, במספרים ובקווים תחתונים.
    • בשדה Location type, בוחרים מיקום (או אזור) ב-BigQuery שתואם לאזור של מקור הנתונים החיצוני.
    • אופציונלי: בשדה שם ידידותי, מזינים שם ידידותי לחיבור, כמו My connection resource. השם הידידותי יכול להיות כל ערך שיעזור לכם לזהות את משאב החיבור אם תצטרכו לשנות אותו בהמשך.
    • אופציונלי: בשדה Description, מזינים תיאור למשאב החיבור הזה.
    • בשדה שם מסד הנתונים, מזינים את השם של מסד הנתונים של Spanner בפורמט הבא: "projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE"
    • אופציונלי: כדי לבצע קריאות מקבילות, בוחרים באפשרות קריאת נתונים במקביל. ‫Spanner יכול לחלק שאילתות מסוימות לחלקים קטנים יותר, או למחיצות, ולאחזר את המחיצות במקביל. מידע נוסף זמין במאמר קריאת נתונים במקביל במסמכי התיעוד של Spanner. האפשרות הזו מוגבלת לשאילתות שבהן האופרטור הראשון בתוכנית הביצוע הוא אופרטור של איחוד מבוזר. שאר השאילתות מחזירות שגיאה. כדי לראות את תוכנית הביצוע של שאילתת Spanner, אפשר לעיין במאמר הסבר על אופן הביצוע של שאילתות ב-Spanner.
    • אופציונלי: בשדה Database role (תפקיד במסד הנתונים), מזינים את השם של תפקיד במסד נתונים של Spanner. אם לא משאירים את השדה ריק, כברירת מחדל, החיבור הזה שולח שאילתות ל-Spanner באמצעות תפקיד מסד הנתונים הזה. משתמשים ב-Spanner עם בקרת גישה ברמת גרנולריות גבוהה ששולחים שאילתות דרך החיבור הזה צריכים לקבל מהאדמין שלהם גישה לתפקיד הזה, ולתפקיד במסד הנתונים צריכה להיות הרשאת SELECT לכל אובייקטי הסכימה שצוינו בשאילתות חיצוניות. מידע על בקרת גישה פרטנית זמין במאמר מידע על בקרת גישה פרטנית.
    • אופציונלי: כדי להפעיל את Data Boost, בוחרים באפשרות Use Spanner Data Boost (שימוש ב-Spanner Data Boost). ‫Data Boost מאפשר לכם להריץ שאילתות ניתוח ולייצא נתונים כמעט ללא השפעה על עומסי העבודה הקיימים במופע BigQuery שהוקצה. כדי להפעיל את Data Boost, בוחרים באפשרות Data Boost ואז באפשרות קריאת נתונים במקביל.
  7. לוחצים על יצירת קישור.

BQ

כדי ליצור את הקישור, משתמשים בפקודה bq mk עם הדגל --connection.

bq mk --connection \
    --connection_type=CLOUD_SPANNER \
    --properties='PROPERTIES' \
    --location=LOCATION \
    --display_name='FRIENDLY_NAME' \
    --description 'DESCRIPTION' \
    CONNECTION_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROPERTIES: אובייקט JSON עם השדות הבאים:

    • "database": מסד הנתונים של Spanner לחיבור

      מציינים כמחרוזת בפורמט הבא: "projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE".

    • "use_parallelism": (אופציונלי) אם true, החיבור הזה מבצע קריאות מקבילות

      ערך ברירת המחדל הוא false. מערכת Spanner יכולה לחלק שאילתות מסוימות לחלקים קטנים יותר, או למחיצות, ולאחזר את המחיצות במקביל. מידע נוסף זמין במאמר קריאת נתונים במקביל במסמכי התיעוד של Spanner. האפשרות הזו מוגבלת לשאילתות שהאופרטור הראשון שלהן בתוכנית הביצוע הוא אופרטור distributed union. שאר השאילתות מחזירות שגיאה. כדי לראות את תוכנית הביצוע של שאילתת Spanner, אפשר לעיין במאמר הסבר על אופן הביצוע של שאילתות ב-Spanner.

    • "database_role": (אופציונלי) אם השדה לא ריק, החיבור הזה שולח שאילתות ל-Spanner באמצעות תפקיד מסד הנתונים הזה כברירת מחדל. משתמשים ב-Spanner עם בקרת גישה ברמת גרנולריות גבוהה ששולחים שאילתות דרך החיבור הזה צריכים לקבל מהאדמין שלהם גישה לתפקיד הזה, ולתפקיד במסד הנתונים צריכה להיות הרשאת SELECT לכל אובייקטי הסכימה שצוינו בשאילתות חיצוניות.

      אם לא מציינים תפקיד, החיבור מאומת באמצעות תפקידים מוגדרים מראש ב-IAM עבור Spanner, ולחשבון המשתמש שמריץ שאילתות באמצעות החיבור הזה צריך להיות מוקצה תפקיד roles/spanner.databaseReader ב-IAM.

      מידע על בקרת גישה פרטנית זמין במאמר מידע על בקרת גישה פרטנית.

    • "useDataBoost": (אופציונלי) אם true, החיבור הזה מאפשר למשתמשים להשתמש בData Boost. התכונה Data Boost מאפשרת למשתמשים להריץ שאילתות מאוחדות בקיבולת מחשוב נפרדת ועצמאית, ששונה ממופעים שהוקצו, כדי למנוע השפעה על עומסי עבודה קיימים. כדי להפעיל את Data Boost, מגדירים את "useDataBoost" ל-true ואת "use_parallelism" ל-true.

      כדי להשתמש ב-Data Boost, לחשבון המשתמש שמריץ שאילתות עם החיבור הזה צריכה להיות הרשאה spanner.databases.useDataBoost. ההרשאה הזו כלולה כברירת מחדל בתפקידים roles/spanner.admin ו-roles/spanner.databaseAdmin.

  • LOCATION: מיקום ב-BigQuery שתואם לאזור של מקור הנתונים החיצוני.

  • CONNECTION_ID: מזהה של משאב החיבור

    מזהה החיבור יכול להכיל אותיות, מספרים וקווים תחתונים. אם לא מספקים מזהה חיבור, BigQuery יוצר מזהה ייחודי באופן אוטומטי.

    בדוגמה הבאה נוצר משאב חיבור חדש בשם my_connection_id.

    bq mk --connection \
      --connection_type='CLOUD_SPANNER' \
      --properties='{"database":"projects/my_project/instances/my_instance/databases/database1"}' \
      --project_id=federation-test \
      --location=us \
      my_connection_id

API

מבצעים קריאה ל-CreateConnection בשירות ConnectionService.

שיתוף חיבורים עם משתמשים

אתם יכולים להקצות את התפקידים הבאים כדי לאפשר למשתמשים לשלוח שאילתות לנתונים ולנהל חיבורים:

  • roles/bigquery.connectionUser: מאפשר למשתמשים להשתמש בחיבורים כדי להתחבר למקורות נתונים חיצוניים ולהריץ עליהם שאילתות.

  • roles/bigquery.connectionAdmin: מאפשר למשתמשים לנהל את החיבורים.

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

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

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

    החיבורים מופיעים בפרויקט בקבוצה שנקראת Connections (חיבורים).

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. לוחצים על הפרויקט, לוחצים על Connections (חיבורים) ובוחרים חיבור.

  4. בחלונית פרטים, לוחצים על שיתוף כדי לשתף חיבור. לאחר מכן מבצעים את הפעולות הבאות:

    1. בתיבת הדו-שיח Connection permissions, מוסיפים או עורכים חשבונות משתמשים כדי לשתף את החיבור עם חשבונות משתמשים אחרים.

    2. לוחצים על Save.

BQ

אי אפשר לשתף חיבור עם כלי שורת הפקודה של BigQuery. כדי לשתף חיבור, משתמשים במסוף Google Cloud או בשיטה BigQuery Connections API.

API

משתמשים בשיטה projects.locations.connections.setIAM בקטע BigQuery Connections API בארכיטקטורת REST הפניית API ומספקים מופע של משאב policy.

Java

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

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

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

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