התחברות ל-Spanner

חיבור ל-Spanner ב-BigQuery מאפשר למשתמשים לשלוח שאילתות על נתונים ב-Spanner בזמן אמת, בלי להעתיק או להעביר נתונים ל-BigQuery. אתם יכולים ליצור חיבור ל-Spanner ולשתף אותו עם משתמשים.

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

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

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

המסוף

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית נתונים, לוחצים על הוספת נתונים.

    תיבת הדו-שיח Add data נפתחת.

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

    אפשר גם להזין Spanner בשדה Search for data sources.

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

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

  6. בחלונית External data source, מזינים את הפרטים הבאים:

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

מפעילים את ה-method‏ CreateConnection בשירות ConnectionService.

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

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

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

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

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

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

המסוף

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

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

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

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

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

BQ

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

API

משתמשים בשיטה projects.locations.connections.setIAM בקטע של מאמרי העזרה של BigQuery Connections 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");
    }
  }
}

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