Analyser des tables d'objets à l'aide de fonctions distantes

Ce document explique comment analyser des données non structurées dans des tables d'objets à l'aide de fonctions distantes.

Présentation

Vous pouvez analyser les données non structurées représentées par une table d'objets à l'aide d'une fonction distante. Une fonction distante vous permet d'appeler une fonction exécutée sur Cloud Functions ou Cloud Run, que vous pouvez programmer pour accéder à des ressources telles que:

  • Modèles d'IA pré-entraînés de Google, y compris l'API Cloud Vision et Document AI
  • Des bibliothèques Open Source comme Apache Tika
  • Vos propres modèles personnalisés.

Pour analyser les données d'une table d'objets à l'aide d'une fonction distante, vous devez générer et transmettre des URL signées pour les objets de la table lorsque vous appelez la fonction distante. Ces URL signées permettent à la fonction distante d'accéder aux objets.

Autorisations requises

  • Pour créer la ressource de connexion utilisée par la fonction distante, vous devez disposer des autorisations suivantes:

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete
  • Pour créer une fonction distante, vous devez disposer des autorisations associées aux rôles Développeur Cloud Functions ou Développeur Cloud Run.

  • Pour appeler une fonction distante, vous devez disposer des autorisations décrites dans la section Fonctions distantes.

  • Pour analyser une table d'objets avec une fonction distante, vous devez disposer de l'autorisation bigquery.tables.getData sur la table d'objets.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection API, Cloud Functions APIs.

    Enable the APIs

  8. Assurez-vous que votre administrateur BigQuery a créé une connexion et configuré l'accès à Cloud Storage.

Créer une fonction distante

Pour obtenir des instructions générales sur la création d'une fonction à distance, consultez la section Utiliser des fonctions distantes.

Lorsque vous créez une fonction distante pour analyser les données d'une table d'objets, vous devez transmettre les URL signées générées pour les objets de la table. Pour ce faire, vous pouvez utiliser un paramètre d'entrée avec un type de données STRING. Les URL signées sont mises à la disposition de la fonction distante en tant que données d'entrée dans le champ calls de la requête HTTP POST. Voici un exemple de requête:

{
  // 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"]
  ]
}

Vous pouvez lire un objet dans votre fonction distante à l'aide d'une méthode qui envoie une requête HTTP GET à l'URL signée. La fonction distante peut accéder à l'objet, car l'URL signée contient des informations d'authentification dans sa chaîne de requête.

Lorsque vous spécifiez l'instruction CREATE FUNCTION pour la fonction distante, nous vous recommandons de définir l'option max_batching_rows sur 1 afin d'éviter les délais avant expiration dans Cloud Functions et pour augmenter le parallélisme du traitement.

Exemple

L'exemple de code Python Cloud Functions suivant lit les objets de stockage et renvoie leur longueur de contenu à 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})

Déployée, cette fonction aurait un point de terminaison semblable à https://us-central1-myproject.cloudfunctions.net/object_length.

L'exemple suivant montre comment créer une fonction distante BigQuery basée sur cette fonction Cloud 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
);

Pour obtenir des conseils détaillés, consultez le tutoriel: Analyser une table d'objets avec une fonction distante.

Appeler une fonction distante

Pour appeler une fonction distante sur les données de table d'objets, référencez la fonction distante dans la select_list de la requête, puis appelez la fonction EXTERNAL_OBJECT_TRANSFORM dans la clause FROM pour générer les URL signées des objets.

L'exemple suivant montre une syntaxe d'instruction classique:

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

L'exemple suivant montre comment traiter uniquement un sous-ensemble du contenu de la table d'objets avec une fonction distante:

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

Étapes suivantes

Découvrez comment exécuter l'inférence sur les tables d'objets image.