הרצת שאילתות בטבלאות BigLake ב-Amazon S3

באמצעות BigQuery Omni, אתם יכולים להריץ שאילתות GoogleSQL ב-BigQuery על נתונים שמאוחסנים בטבלאות BigLake של Amazon Simple Storage Service (Amazon S3)‎. שליחת שאילתות לטבלאות BigLake ב-Amazon S3 מאפשרת לנתח נתונים ב-Amazon S3 ולצרף אותם לטבלאות אחרות בלי להעתיק או להעביר את הקבצים הבסיסיים.

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

מוודאים שיש לכם טבלת BigLake של Amazon S3.

התפקידים הנדרשים

כדי לשלוח שאילתות לטבלאות של Amazon S3 BigLake, צריך לוודא שלגורם שמפעיל את BigQuery API יש את התפקידים הבאים:

  • משתמש בחיבור ל-BigQuery‏ (roles/bigquery.connectionUser)
  • צפייה בנתוני BigQuery‏ (roles/bigquery.dataViewer)
  • משתמש BigQuery‏ (roles/bigquery.user)

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

כדי לראות את ההרשאות הנדרשות לשליחת שאילתות לטבלאות BigLake ב-Amazon S3, מרחיבים את הקטע Required permissions:

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

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

הרצת שאילתות בטבלאות BigLake ב-Amazon S3

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

תוצאות השאילתה שנשמרו במטמון מאוחסנות בטבלה זמנית ב-BigQuery. כדי לשלוח שאילתה לטבלת BigLake זמנית, קראו את המאמר שליחת שאילתה לטבלת BigLake זמנית. למידע נוסף על המגבלות והמכסות של BigQuery Omni, קראו את המאמרים מגבלות ומכסות.

כשיוצרים הזמנה באזור של BigQuery Omni, צריך להשתמש במהדורת Enterprise. במאמר יצירת הזמנות מוסבר איך יוצרים הזמנה עם מהדורה.

מריצים שאילתה על טבלת BigLake ב-Amazon S3:

SQL

כדי לשלוח שאילתה לטבלה:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    SELECT * FROM DATASET_NAME.TABLE_NAME;

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

    • ‫DATASET_NAME: השם של מערך הנתונים שיצרתם
    • ‫TABLE_NAME: השם של הטבלה שיצרתם

    • לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

Java

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

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.TableResult;

// Sample to queries an external data source aws s3 using a permanent table
public class QueryExternalTableAws {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String externalTableName = "MY_EXTERNAL_TABLE_NAME";
    // Query to find states starting with 'W'
    String query =
        String.format(
            "SELECT * FROM s%.%s.%s WHERE name LIKE 'W%%'",
            projectId, datasetName, externalTableName);
    queryExternalTableAws(query);
  }

  public static void queryExternalTableAws(String query) throws InterruptedException {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query on aws external permanent table performed successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

הרצת שאילתה על טבלה זמנית

ב-BigQuery נוצרות טבלאות זמניות לאחסון תוצאות של שאילתות. כדי לאחזר תוצאות של שאילתות מטבלאות זמניות, אפשר להשתמש במסוף או ב-BigQuery API. Google Cloud

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

המסוף

כששולחים שאילתה לטבלת BigLake שמפנה לנתוני ענן חיצוניים, אפשר לראות את תוצאות השאילתה במסוף Google Cloud .

API

כדי לשלוח שאילתה לטבלת BigLake באמצעות ה-API:

  1. יוצרים אובייקט Job.
  2. מפעילים את השיטה jobs.insert כדי להריץ את השאילתה באופן אסינכרוני, או את השיטה jobs.query כדי להריץ את השאילתה באופן סינכרוני, ומעבירים את האובייקט Job.
  3. קוראים שורות באמצעות השיטה jobs.getQueryResults על ידי העברת ההפניה הנתונה למשימה, ואת השיטות tabledata.list על ידי העברת ההפניה הנתונה לטבלה של תוצאת השאילתה.

שליחת שאילתה לעמודה המדומה _FILE_NAME

טבלאות שמבוססות על מקורות נתונים חיצוניים מספקות עמודה מדומה בשם _FILE_NAME. העמודה הזו מכילה את הנתיב המלא לקובץ שאליו השורה שייכת. העמודה הזו זמינה רק בטבלאות שמפנות לנתונים חיצוניים שמאוחסנים ב-Cloud Storage, ב-Google Drive, ב-Amazon S3 וב-Azure Blob Storage.

שם העמודה _FILE_NAME שמור, כלומר אי אפשר ליצור עמודה בשם הזה באף אחת מהטבלאות. כדי לבחור את הערך של _FILE_NAME, צריך להשתמש בכינוי. בשאילתה לדוגמה הבאה, בוחרים את _FILE_NAME על ידי הקצאת הכינוי fn לעמודה המדומה.

  bq query \
  --project_id=PROJECT_ID \
  --use_legacy_sql=false \
  'SELECT
     name,
     _FILE_NAME AS fn
   FROM
     `DATASET.TABLE_NAME`
   WHERE
     name contains "Alex"' 

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

  • ‫PROJECT_ID הוא מזהה פרויקט תקין (הדגל הזה לא נדרש אם משתמשים ב-Cloud Shell או אם מגדירים פרויקט ברירת מחדל ב-Google Cloud CLI)
  • ‫DATASET הוא השם של מערך הנתונים שבו מאוחסנת הטבלה החיצונית הקבועה.
  • ‫TABLE_NAME הוא השם של הטבלה החיצונית הקבועה

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

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