ניתוח טבלאות אובייקטים באמצעות פונקציות מרוחקות

אתם יכולים לנתח טבלאות אובייקטים באמצעות פונקציות מרוחקות כדי לחלץ תובנות מנתונים לא מובְנים באמצעות כלים וספריות חיצוניים. שילוב השאילתות עם Cloud Run או עם פונקציות Cloud Run מאפשר להחיל מודלים של AI שאומנו מראש על ידי Google, ספריות בקוד פתוח או מודלים בהתאמה אישית ישירות על הנתונים ב-BigQuery.

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

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

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

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete
  • כדי ליצור פונקציה מרוחקת, צריך את ההרשאות שמשויכות לתפקידים מפתח Cloud Functions או מפתח Cloud Run.

  • כדי להפעיל פונקציה מרוחקת, צריך את ההרשאות שמתוארות במאמר פונקציות מרוחקות.

  • כדי לנתח טבלת אובייקטים באמצעות פונקציה מרוחקת, צריך את ההרשאה bigquery.tables.getData בטבלת האובייקטים.

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

  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, BigQuery Connection API, Cloud Run functions APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, BigQuery Connection API, Cloud Run functions APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  8. מוודאים שהאדמין ב-BigQuery יצר חיבור והגדיר גישה ל-Cloud Storage.

יצירת פונקציה מרוחקת

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

כשיוצרים פונקציה מרוחקת כדי לנתח נתונים של טבלת אובייקטים, צריך להעביר כתובות URL חתומות שנוצרו בשביל האובייקטים בטבלת האובייקטים. כדי לעשות את זה, אפשר להשתמש בפרמטר קלט עם סוג נתונים STRING. כתובות ה-URL החתומות זמינות לפונקציה המרוחקת כנתוני קלט בשדה calls של בקשת ה-HTTP‏ POST. דוגמה לבקשה:

{
  // Other fields omitted.
  "calls": [
    ["https://storage.googleapis.com/mybucket/1.pdf?X-Goog-SignedHeaders=abcd"],
    ["https://storage.googleapis.com/mybucket/2.pdf?X-Goog-SignedHeaders=wxyz"]
  ]
}

כדי לקרוא אובייקט בפונקציה המרוחקת, משתמשים בשיטה ששולחת בקשת HTTP GET לכתובת ה-URL החתומה. הפונקציה המרוחקת יכולה לגשת לאובייקט כי כתובת ה-URL החתומה מכילה פרטי אימות במחרוזת השאילתה שלה.

כשמציינים את ההצהרה CREATE FUNCTION לפונקציה המרוחקת, מומלץ להגדיר את האפשרות max_batching_rows ל-1 כדי למנוע זמן קצוב לתפוגה של פונקציות Cloud Run ולהגביר את העיבוד המקביל.

דוגמה

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

import functions_framework
import json
import urllib.request

@functions_framework.http
def object_length(request):
  calls = request.get_json()['calls']
  replies = []
  for call in calls:
    object_content = urllib.request.urlopen(call[0]).read()
    replies.append(len(object_content))
  return json.dumps({'replies': replies})

אחרי הפריסה, לפונקציה הזו תהיה נקודת קצה דומה ל-https://us-central1-myproject.cloudfunctions.net/object_length.

בדוגמה הבאה מוסבר איך ליצור פונקציה מרוחקת ב-BigQuery שמבוססת על פונקציית Cloud Run זו:

CREATE FUNCTION mydataset.object_length(signed_url STRING) RETURNS INT64
REMOTE WITH CONNECTION `us.myconnection`
OPTIONS(
  endpoint = "https://us-central1-myproject.cloudfunctions.net/object_length",
  max_batching_rows = 1
);

הוראות מפורטות מופיעות במדריך ניתוח טבלת אובייקטים באמצעות פונקציה מרוחקת.

קריאה לפונקציה מרוחקת

כדי להפעיל פונקציה מרוחקת על נתונים של טבלת אובייקטים, צריך להפנות לפונקציה המרוחקת ב-select_list של השאילתה, ואז להפעיל את הפונקציה EXTERNAL_OBJECT_TRANSFORM בסעיף FROM כדי ליצור את כתובות ה-URL החתומות של האובייקטים.

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

SELECT uri, function_name(signed_url) AS function_output
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"])
LIMIT 10000;

בדוגמה הבאה מוסבר איך לעבד רק קבוצת משנה של התוכן בטבלת האובייקטים באמצעות פונקציה מרוחקת:

SELECT uri, function_name(signed_url) AS function_output
FROM EXTERNAL_OBJECT_TRANSFORM(TABLE my_dataset.object_table, ["SIGNED_URL"])
WHERE content_type = "application/pdf";

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

איך מריצים הסקה על טבלאות אובייקטים של תמונות