Lavorare con le funzioni da remoto

Una funzione remota di BigQuery consente di implementare la funzione in linguaggi diversi da SQL e JavaScript o con le librerie o i servizi non consentiti nelle funzioni definite dall'utente di BigQuery.

Panoramica

Una funzione remota di BigQuery ti consente di incorporare la funzionalità GoogleSQL con il software esterno a BigQuery tramite un'integrazione diretta con Cloud Functions e Cloud Run. Con le funzioni remote di BigQuery, puoi eseguire il deployment delle funzioni in Cloud Functions o Cloud Run implementate con qualsiasi linguaggio supportato e quindi richiamarle dalle query GoogleSQL.

Flusso di lavoro

  1. Crea l'endpoint HTTP in Cloud Functions o Cloud Run.
  2. Creare una funzione remota in BigQuery.
    1. Crea una connessione di tipo CLOUD_RESOURCE.
    2. Crea una funzione remota.
  3. Utilizza la funzione remota in una query come qualsiasi altra funzione definita dall'utente.

Limitazioni

  • Le funzioni remote supportano solo uno dei seguenti tipi di dati come tipo di argomento o tipo restituito:

    • Booleano
    • Byte
    • Numerico
    • Stringa
    • Data
    • Data/ora
    • Tempo
    • Timestamp
    • JSON

    Le funzioni remote non supportano i tipi ARRAY, STRUCT, INTERVAL o GEOGRAPHY.

  • Non puoi creare funzioni remote temporanee.

  • Non puoi creare funzioni remote con valori di tabella.

  • Non è possibile utilizzare le funzioni remote durante la creazione di viste materializzate.

  • Si presume sempre che il valore restituito di una funzione remota sia non deterministico, quindi il risultato di una query che chiama una funzione remota non viene memorizzato nella cache.

  • Potresti vedere richieste ripetute con gli stessi dati per il tuo endpoint, anche dopo risposte riuscite, a causa di errori di rete temporanei o di errori interni di BigQuery.

  • Quando la valutazione di una funzione remota viene ignorata per alcune righe a causa di un cortocircuito, ad esempio in espressioni condizionali o in un'istruzione MERGE con WHEN [NOT] MATCHED, il raggruppamento non viene utilizzato con la funzione remota. In questo caso, il campo calls nel corpo della richiesta HTTP ha esattamente un elemento.

  • Se il set di dati associato alla funzione remota viene replicato in una regione di destinazione tramite la replica del set di dati tra regioni, è possibile eseguire query sulla funzione remota solo nella regione in cui è stata creata.

Creazione di un endpoint

Per creare una funzione remota in grado di implementare la logica di business, devi creare un endpoint HTTP utilizzando Cloud Functions o Cloud Run. L'endpoint deve essere in grado di elaborare un batch di righe in una singola richiesta POST HTTP e restituire i risultati per il batch sotto forma di risposta HTTP.

Se crei la funzione remota utilizzando BigQuery DataFrames, non devi creare manualmente l'endpoint HTTP perché il servizio lo fa automaticamente.

Consulta il tutorial di Cloud Functions e l'altra documentazione di Cloud Functions su come scrivere, sottoporre a deployment, testare e gestire una Cloud Function.

Consulta la guida rapida di Cloud Run e altra documentazione di Cloud Run su come scrivere, sottoporre a deployment, testare e gestire un servizio Cloud Run.

Ti consigliamo di mantenere l'autenticazione predefinita anziché consentire le chiamate non autenticate della Cloud Function o del servizio Cloud Run.

Formato di input

BigQuery invia richieste POST HTTP con corpo JSON nel seguente formato:

Nome campo Descrizione Tipo di campo
requestId ID della richiesta. Inserisci un numero univoco in più richieste inviate a questo endpoint in una query GoogleSQL. Sempre fornito. Stringa.
chiamante Nome completo della risorsa del job per la query GoogleSQL che chiama la funzione remota. Sempre fornito. Stringa.
sessionUser Email dell'utente che esegue la query GoogleSQL. Sempre fornito. Stringa.
userDefinedContext Il contesto definito dall'utente che è stato utilizzato durante la creazione della funzione remota in BigQuery. Facoltativo. Oggetto JSON con coppie chiave/valore.
chiamate Un batch di dati di input. Sempre fornito. Un array JSON.

Ogni elemento è un array JSON, un elenco di argomenti con codifica JSON di una chiamata di funzione remota.

Esempio di richiesta:

{
 "requestId": "124ab1c",
 "caller": "//bigquery.googleapis.com/projects/myproject/jobs/myproject:US.bquxjob_5b4c112c_17961fafeaf",
 "sessionUser": "test-user@test-company.com",
 "userDefinedContext": {
  "key1": "value1",
  "key2": "v2"
 },
 "calls": [
  [null, 1, "", "abc"],
  ["abc", "9007199254740993", null, null]
 ]
}

Formato di output

BigQuery prevede che l'endpoint restituisca una risposta HTTP nel formato seguente, altrimenti BigQuery non può utilizzarla e non supera la chiamata alla funzione remota.

Nome campo Descrizione Intervallo di valori
risposte Un gruppo di valori restituiti. Obbligatorio per una risposta corretta. Un array JSON.

Ogni elemento corrisponde a un valore restituito codificato JSON della funzione esterna.

Le dimensioni dell'array devono corrispondere a quelle dell'array JSON di calls nella richiesta HTTP. Ad esempio, se l'array JSON in calls ha 4 elementi, anche questo array JSON dovrà avere 4 elementi.

errorMessage Messaggio di errore che viene restituito quando viene restituito un codice di risposta HTTP diverso da 200. In caso di errori non ripetibili, restituiamo il messaggio all'utente nel messaggio di errore del job BigQuery. Facoltativo. Stringa. Le dimensioni devono essere inferiori a 1 kB.

Esempio di risposta positiva:

{
  "replies": [
    1,
    0
  ]
}

Esempio di risposta non riuscita:

{
  "errorMessage": "Received but not expected that the argument 0 be null".
}

Codice di risposta HTTP

L'endpoint dovrebbe restituire il codice di risposta HTTP 200 per una risposta corretta. Quando BigQuery riceve un altro valore, BigQuery considera la risposta come non riuscita e riprova quando il codice di risposta HTTP è 408, 429, 500, 503 o 504 fino a un determinato limite interno.

Codifica JSON del tipo di dati SQL

La codifica JSON nella richiesta/risposta HTTP segue la codifica JSON JSON esistente per la funzione TO_JSON_STRING.

Codice di funzione Cloud Functions di esempio

Il seguente codice Python di esempio implementa l'aggiunta di tutti gli argomenti per i numeri interi della funzione remota. Gestisce una richiesta con gli argomenti delle chiamate in batch e restituisce tutti i risultati in una risposta.

import functions_framework

from flask import jsonify

# Max INT64 value encoded as a number in JSON by TO_JSON_STRING. Larger values are encoded as
# strings.
# See https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions#json_encodings
_MAX_LOSSLESS=9007199254740992

@functions_framework.http
def batch_add(request):
  try:
    return_value = []
    request_json = request.get_json()
    calls = request_json['calls']
    for call in calls:
      return_value.append(sum([int(x) if isinstance(x, str) else x for x in call if x is not None]))
    replies = [str(x) if x > _MAX_LOSSLESS or x < -_MAX_LOSSLESS else x for x in return_value]
    return_json = jsonify( { "replies":  replies } )
    return return_json
  except Exception as e:
    return jsonify( { "errorMessage": str(e) } ), 400

Supponendo che sia stato eseguito il deployment della funzione nel progetto my_gcf_project nella regione us-east1 come nome della funzione remote_add, è possibile accedervi tramite l'endpoint https://us-east1-my_gcf_project.cloudfunctions.net/remote_add.

Codice Cloud Run di esempio

Il codice Python di esempio riportato di seguito implementa un servizio web, che può essere creato e sottoposto a deployment in Cloud Run per la stessa funzionalità.

import os

from flask import Flask, request, jsonify

# Max INT64 value encoded as a number in JSON by TO_JSON_STRING. Larger values are encoded as
# strings.
# See https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions#json_encodings
_MAX_LOSSLESS=9007199254740992

app = Flask(__name__)

@app.route("/", methods=['POST'])
def batch_add():
  try:
    return_value = []
    request_json = request.get_json()
    calls = request_json['calls']
    for call in calls:
      return_value.append(sum([int(x) if isinstance(x, str) else x for x in call if x is not None]))
    replies = [str(x) if x > _MAX_LOSSLESS or x < -_MAX_LOSSLESS else x for x in return_value]
    return jsonify( { "replies" :  replies } )
  except Exception as e:
    return jsonify( { "errorMessage": str(e) } ), 400

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

Consulta la guida su come creare ed eseguire il deployment del codice.

Supponendo che il deployment del servizio Cloud Run sia stato eseguito nel progetto my_gcf_project nella regione us-east1 come nome servizio remote_add, è possibile accedervi tramite l'endpoint https://remote_add-<project_id_hash>-ue.a.run.app.

Crea una funzione remota

BigQuery utilizza una connessione CLOUD_RESOURCE per interagire con la tua Cloud Function. Per creare una funzione remota, devi creare una connessione CLOUD_RESOURCE. Se crei la funzione remota utilizzando BigQuery DataFrames e ti è stato concesso il ruolo Amministratore progetto IAM (roles/resourcemanager.projectIamAdmin), non devi creare manualmente la connessione e concedere l'accesso perché il servizio lo fa automaticamente per te.

Creazione di una connessione

Devi avere una connessione alle risorse Cloud per connetterti alla Cloud Function e a Cloud Run.

Seleziona una delle seguenti opzioni:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Per creare una connessione, fai clic su Aggiungi e poi su Connessioni a origini dati esterne.

  3. Nell'elenco Tipo di connessione, seleziona Modelli remoti Vertex AI, funzioni remote e BigLake (risorsa Cloud).

  4. Nel campo ID connessione, inserisci un nome per la connessione.

  5. Fai clic su Crea connessione.

  6. Fai clic su Vai alla connessione.

  7. Nel riquadro Informazioni sulla connessione, copia l'ID account di servizio da utilizzare in un passaggio successivo.

bq

  1. In un ambiente a riga di comando, crea una connessione:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    Il parametro --project_id sostituisce il progetto predefinito.

    Sostituisci quanto segue:

    • REGION: la tua regione di connessione
    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • CONNECTION_ID: un ID per la tua connessione

    Quando crei una risorsa di connessione, BigQuery crea un account di servizio di sistema univoco e lo associa alla connessione.

    Risoluzione dei problemi: se visualizzi il seguente errore di connessione, aggiorna Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupera e copia l'ID account di servizio per utilizzarlo in un passaggio successivo:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    L'output è simile al seguente:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Aggiungi la sezione seguente al file main.tf.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Sostituisci quanto segue:

  • CONNECTION_ID: un ID per la tua connessione
  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • REGION: la tua regione di connessione

Configura l'accesso

Devi concedere alla nuova connessione l'accesso di sola lettura alla tua Cloud Function o al servizio Cloud Run. Non è consigliabile consentire chiamate non autenticate per la Cloud Function o il servizio Cloud Run.

Per concedere i ruoli, segui questi passaggi:

  1. Vai alla pagina IAM e amministrazione.

    Vai a IAM e amministrazione

  2. Fai clic su Aggiungi.

    Viene visualizzata la finestra di dialogo Aggiungi entità.

  3. Nel campo Nuove entità, inserisci l'ID account di servizio che hai copiato in precedenza.

  4. Nel campo Seleziona un ruolo, scegli una delle seguenti opzioni:

    • Se utilizzi una Cloud Function di 1a generazione, scegli funzione Cloud Functions Functions, quindi seleziona Ruolo Invoker funzioni Cloud.
    • Se utilizzi una Cloud Function di seconda generazione, scegli Cloud Run, quindi seleziona Ruolo Invoker di Cloud Run.
    • Se utilizzi un servizio Cloud Run, scegli Cloud Run, quindi seleziona Ruolo Invoker di Cloud Run.
  5. Fai clic su Salva.

Crea una funzione remota

Per creare una funzione remota:

SQL

Esegui la seguente istruzione CREATE FUNCTION in BigQuery:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'Editor query, inserisci la seguente istruzione:

    CREATE FUNCTION PROJECT_ID.DATASET_ID.remote_add(x INT64, y INT64) RETURNS INT64
    REMOTE WITH CONNECTION PROJECT_ID.LOCATION.CONNECTION_NAME
    OPTIONS (
      endpoint = 'ENDPOINT_URL'
    )
    

    Sostituisci quanto segue:

    • DATASET_ID: l'ID del tuo set di dati BigQuery.
    • ENDPOINT_URL: l'URL della Cloud Function o dell'endpoint della funzione remota di Cloud Run.

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, consulta Eseguire una query interattiva.

DataFrame BigQuery

BigQuery DataFrames è in anteprima.

  1. Abilita le API richieste e assicurati che ti siano stati concessi i ruoli richiesti, come descritto nella sezione Requisiti di Funzioni remote.
  2. Usa il decoratore remote_function:

    import bigframes.pandas as bpd
    
    # Set BigQuery DataFrames options
    bpd.options.bigquery.project = your_gcp_project_id
    bpd.options.bigquery.location = "us"
    
    # BigQuery DataFrames gives you the ability to turn your custom scalar
    # functions into a BigQuery remote function. It requires the GCP project to
    # be set up appropriately and the user having sufficient privileges to use
    # them. One can find more details about the usage and the requirements via
    # `help` command.
    help(bpd.remote_function)
    
    # Read a table and inspect the column of interest.
    df = bpd.read_gbq("bigquery-public-data.ml_datasets.penguins")
    df["body_mass_g"].head(10)
    
    # Define a custom function, and specify the intent to turn it into a remote
    # function. It requires a BigQuery connection. If the connection is not
    # already created, BigQuery DataFrames will attempt to create one assuming
    # the necessary APIs and IAM permissions are setup in the project. In our
    # examples we would be using a pre-created connection named
    # `bigframes-rf-conn`. We will also set `reuse=False` to make sure we don't
    # step over someone else creating remote function in the same project from
    # the exact same source code at the same time. Let's try a `pandas`-like use
    # case in which we want to apply a user defined scalar function to every
    # value in a `Series`, more specifically bucketize the `body_mass_g` value
    # of the penguins, which is a real number, into a category, which is a
    # string.
    @bpd.remote_function(
        [float],
        str,
        bigquery_connection="bigframes-rf-conn",
        reuse=False,
    )
    def get_bucket(num):
        if not num:
            return "NA"
        boundary = 4000
        return "at_or_above_4000" if num >= boundary else "below_4000"
    
    # Then we can apply the remote function on the `Series`` of interest via
    # `apply` API and store the result in a new column in the DataFrame.
    df = df.assign(body_mass_bucket=df["body_mass_g"].apply(get_bucket))
    
    # This will add a new column `body_mass_bucket` in the DataFrame. You can
    # preview the original value and the bucketized value side by side.
    df[["body_mass_g", "body_mass_bucket"]].head(10)
    
    # The above operation was possible by doing all the computation on the
    # cloud. For that, there is a google cloud function deployed by serializing
    # the user code, and a BigQuery remote function created to call the cloud
    # function via the latter's http endpoint on the data in the DataFrame.
    
    # The BigQuery remote function created to support the BigQuery DataFrames
    # remote function can be located via a property `bigframes_remote_function`
    # set in the remote function object.
    print(f"Created BQ remote function: {get_bucket.bigframes_remote_function}")
    
    # The cloud function can be located via another property
    # `bigframes_cloud_function` set in the remote function object.
    print(f"Created cloud function: {get_bucket.bigframes_cloud_function}")
    
    # Warning: The deployed cloud function may be visible to other users with
    # sufficient privilege in the project, so the user should be careful about
    # having any sensitive data in the code that will be deployed as a remote
    # function.
    
    # Let's continue trying other potential use cases of remote functions. Let's
    # say we consider the `species`, `island` and `sex` of the penguins
    # sensitive information and want to redact that by replacing with their hash
    # code instead. Let's define another scalar custom function and decorate it
    # as a remote function
    @bpd.remote_function(
        [str], str, bigquery_connection="bigframes-rf-conn", reuse=False
    )
    def get_hash(input):
        import hashlib
    
        # handle missing value
        if input is None:
            input = ""
        encoded_input = input.encode()
        hash = hashlib.md5(encoded_input)
        return hash.hexdigest()
    
    # We can use this remote function in another `pandas`-like API `map` that
    # can be applied on a DataFrame
    df_redacted = df[["species", "island", "sex"]].map(get_hash)
    df_redacted.head(10)
    
    

Devi disporre dell'autorizzazione bigquery.routines.create nel set di dati in cui crei la funzione remota e dell'autorizzazione bigquery.connections.delegate (disponibile dal ruolo Amministratore connessioni BigQuery) per la connessione utilizzata dalla funzione remota.

Fornire un contesto definito dall'utente

Puoi specificare user_defined_context in OPTIONS come una forma di coppie chiave-valore, che faranno parte di ogni richiesta HTTP all'endpoint. Con il contesto definito dall'utente, puoi creare più funzioni remote, ma riutilizzare un singolo endpoint, che fornisce comportamenti diversi in base al contesto trasmesso.

I seguenti esempi creano due funzioni remote per criptare e decriptare i dati di BYTES utilizzando lo stesso endpoint.

CREATE FUNCTION `PROJECT_ID.DATASET_ID`.encrypt(x BYTES)
RETURNS BYTES
REMOTE WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_NAME`
OPTIONS (
  endpoint = 'ENDPOINT_URL',
  user_defined_context = [("mode", "encryption")]
)

CREATE FUNCTION `PROJECT_ID.DATASET_ID`.decrypt(x BYTES)
RETURNS BYTES
REMOTE WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_NAME`
OPTIONS (
  endpoint = 'ENDPOINT_URL',
  user_defined_context = [("mode", "decryption")]
)

Limitazione del numero di righe in una richiesta batch

Puoi specificare max_batching_rows in OPTIONS come numero massimo di righe in ogni richiesta HTTP, per evitare il timeout di Cloud Functions. Se non specificato, BigQuery deciderà quante righe sono incluse in un batch.

Utilizzare una funzione remota in una query

Assicurati di aver concesso l'autorizzazione per la funzione Cloud Functions, in modo che sia accessibile all'account di servizio BigQuery associato alla connessione della funzione remota.

Devi inoltre disporre dell'autorizzazione bigquery.routines.get nel set di dati in cui si trova la funzione remota e dell'autorizzazione bigquery.connections.use, che puoi ottenere tramite il ruolo BigQuery Connection User, sulla connessione utilizzata dalla funzione remota.

Puoi utilizzare una funzione remota in una query proprio come una funzione definita dall'utente.

Ad esempio, puoi utilizzare la funzione remote_add nella query di esempio:

SELECT
  val,
  `PROJECT_ID.DATASET_ID`.remote_add(val, 2)
FROM
  UNNEST([NULL,2,3,5,8]) AS val;

Questo esempio produce il seguente output:

+------+-----+
|  val | f0_ |
+------+-----+
| NULL |   2 |
|    2 |   4 |
|    3 |   5 |
|    5 |   7 |
|    8 |  10 |
+------+-----+

Aree geografiche supportate

In BigQuery esistono due tipi di località:

  • Una regione è un luogo geografico ben preciso, come Londra.

  • Per più regioni si intende una grande area geografica, come gli Stati Uniti, che contiene due o più luoghi geografici.

Regioni singole

In un set di dati BigQuery a regione singola, puoi creare solo una funzione remota che utilizza una Cloud Function di cui è stato eseguito il deployment nella stessa regione. Ad esempio:

  • Una funzione remota in BigQuery a regione singola us-east4 può utilizzare solo una Cloud Function in us-east4.

Pertanto, per le singole regioni, le funzioni remote sono supportate solo nelle regioni che supportano sia Cloud Functions sia BigQuery.

Più regioni

In un set di dati BigQuery multiregionale (US, EU), puoi creare solo una funzione remota che utilizza una Cloud Function di cui è stato eseguito il deployment in un'area geografica all'interno della stessa area geografica di grandi dimensioni (US, EU). Ad esempio:

  • Una funzione remota in BigQuery US multiregionale può utilizzare solo una funzione Cloud Function di cui è stato eseguito il deployment in qualsiasi singola regione dell'area geografica degli Stati Uniti, come us-central1, us-east4, us-west2 e così via.
  • Una funzione remota in BigQuery EU multiregionale può utilizzare solo una Cloud Function di cui è stato eseguito il deployment in qualsiasi singola regione negli stati membri dell'Unione Europea, ad esempio europe-north1, europe-west3 e così via.

Per ulteriori informazioni sulle regioni e sulle località multiple di BigQuery, consulta la pagina Località dei set di dati. Per ulteriori informazioni sulle regioni di Cloud Functions, consulta la pagina Località di Cloud Functions.

Connessioni

Per una località a una o più regioni, puoi creare una funzione remota solo nella stessa località della connessione che utilizzi. Ad esempio, per creare una funzione remota nella località multiregionale US, utilizza una connessione che si trova nella località multiregionale US.

Prezzi

Utilizzo dei Controlli di servizio VPC

Controlli di servizio VPC è una funzionalità di Google Cloud che ti consente di configurare un perimetro sicuro per evitare l'esfiltrazione di dati. Per utilizzare Controlli di servizio VPC con funzioni remote per una maggiore sicurezza o per usare endpoint con internal traffic impostazioni in entrata, segui la guida ai Controlli di servizio VPC per:

  1. Crea un perimetro di servizio.

  2. Aggiungi il progetto BigQuery della query utilizzando la funzione remota nel perimetro.

  3. Aggiungi il progetto dell'endpoint nel perimetro e imposta Cloud Functions API o Cloud Run API nei servizi con limitazioni in base al tipo di endpoint. Per maggiori dettagli, consulta Controlli di servizio VPC di Cloud Functions e Controlli di servizio VPC di Cloud Run.

Best practice per le funzioni da remoto

  • Prefiltra l'input: se l'input può essere facilmente filtrato prima di essere trasmesso a una funzione remota, la query sarà probabilmente più veloce ed economica.

  • Mantieni scalabile la tua Cloud Function. La scalabilità è una funzione della minima di istanze, del numero massimo di istanze e della contemporaneità.

    • Se possibile, utilizza il valore predefinito per il numero massimo di istanze della funzione Cloud Function.
    • Tieni presente che non esiste un limite predefinito per le funzioni Cloud Functions HTTP di 1ª generazione. Per evitare di scalare eventi illimitati con le funzioni Cloud Functions HTTP di 1ª generazione durante i test o in produzione, ti consigliamo di impostare un limite, ad esempio 3000.
  • Segui altri suggerimenti sulle funzioni Cloud Functions per migliorare le prestazioni. Le query della funzione remota che interagiscono con una Cloud Function ad alta latenza potrebbero non riuscire a causa di un timeout.

  • Implementa l'endpoint per restituire un codice di risposta HTTP corretto e un payload in caso di risposta non riuscita.

    • Per ridurre al minimo i tentativi da parte di BigQuery, utilizza codici di risposta HTTP diversi da 408, 429, 500, 503 e 504 per una risposta non riuscita e assicurati di recuperare tutte le eccezioni nel codice della funzione. In caso contrario, il framework di servizio HTTP potrebbe restituire automaticamente 500 per eventuali eccezioni non rilevate. Potresti comunque visualizzare richieste HTTP sottoposte a un nuovo tentativo quando BigQuery esegue un nuovo tentativo per una partizione o una query di dati non riuscita.

    • L'endpoint dovrebbe restituire un payload JSON nel formato definito per una risposta non riuscita. Anche se non è strettamente necessario, aiuta BigQuery a distinguere se la risposta non riuscita proviene dall'implementazione della funzione o dall'infrastruttura di Cloud Functions/Cloud Run. Per quest'ultimo, BigQuery potrebbe riprovare con un limite interno diverso.

Quote

Per informazioni sulle quote per le funzioni remote, consulta Quote e limiti.