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

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

סקירה כללית

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

  • מודלים של AI מאומנים מראש של Google, כולל Cloud Vision API ו-Document AI.
  • ספריות קוד פתוח כמו Apache Tika.
  • מודלים מותאמים אישית משלכם.

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

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

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

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

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

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

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

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the BigQuery, BigQuery Connection API, Cloud Run functions 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

  4. צריך לוודא שהאדמין של 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 Functions:

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";

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

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