Creare query continue

Questo documento descrive come eseguire una query continua in BigQuery.

Le query continue di BigQuery sono istruzioni SQL eseguite ininterrottamente. Le query continue ti consentono di analizzare i dati in entrata in BigQuery in tempo reale e poi esportare i risultati in Bigtable, Pub/Sub o Spanner oppure scriverli in una tabella BigQuery.

Scegli un tipo di account

Puoi creare ed eseguire un job di query continua utilizzando un account utente oppure puoi creare un job di query continua utilizzando un account utente e poi eseguirlo utilizzando un service account. Devi utilizzare un account di servizio per eseguire una query continua che esporta i risultati in un argomento Pub/Sub.

Quando utilizzi un account utente, una query continua viene eseguita per un massimo di due giorni. Quando utilizzi un account di servizio, una query continua viene eseguita per un massimo di 150 giorni. Per ulteriori informazioni, consulta la sezione Autorizzazione.

Autorizzazioni obbligatorie

Questa sezione descrive le autorizzazioni necessarie per creare ed eseguire una query continua. In alternativa ai ruoli Identity and Access Management (IAM) menzionati, puoi ottenere le autorizzazioni richieste tramite i ruoli personalizzati.

Autorizzazioni quando utilizzi un account utente

Questa sezione fornisce informazioni sui ruoli e sulle autorizzazioni necessari per creare ed eseguire una query continua utilizzando un account utente.

Per creare un job in BigQuery, l'account utente deve disporre dell'autorizzazione IAM bigquery.jobs.create. Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.jobs.create:

Per esportare i dati da una tabella BigQuery, l'account utente deve disporre dell'autorizzazione IAM bigquery.tables.export . Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.tables.export:

Per aggiornare i dati in una tabella BigQuery, l'account utente deve disporre dell'autorizzazione IAM bigquery.tables.updateData. Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.tables.updateData:

Se l'account utente deve abilitare le API richieste per il tuo caso d'uso delle query continue, deve disporre del ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin).

Autorizzazioni quando si utilizza un account di servizio

Questa sezione fornisce informazioni sui ruoli e sulle autorizzazioni richiesti dall'account utente che crea la query continua e dalaccount di serviziot che esegue la query continua.

Autorizzazioni account utente

Per creare un job in BigQuery, l'account utente deve disporre dell'autorizzazione IAM bigquery.jobs.create. Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.jobs.create:

Per inviare un job che viene eseguito utilizzando un account di servizio, l'account utente deve disporre del ruolo Utente service account (roles/iam.serviceAccountUser). Se utilizzi lo stesso account utente per creare il account di servizio, l'account utente deve disporre del ruolo Amministratore service account (roles/iam.serviceAccountAdmin). Per informazioni su come limitare l'accesso di un utente a un singolo account di servizio anziché a tutti gli account di servizio all'interno di un progetto, consulta Concedere un singolo ruolo.

Se l'account utente deve abilitare le API richieste per il tuo caso d'uso delle query continue, deve disporre del ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin).

Autorizzazioni service account

Per esportare i dati da una tabella BigQuery, il account di servizio deve disporre dell'autorizzazione IAM bigquery.tables.export. Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.tables.export:

Per aggiornare i dati in una tabella BigQuery, l'account di servizio deve disporre dell'autorizzazione IAM bigquery.tables.updateData. Ciascuno dei seguenti ruoli IAM concede l'autorizzazione bigquery.tables.updateData:

Prima di iniziare

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

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

Crea una prenotazione

Crea una prenotazione per la versione Enterprise o Enterprise Plus, poi crea un'assegnazione di prenotazione con un tipo di job CONTINUOUS. Questa prenotazione può utilizzare la scalabilità automatica. Esistono limitazioni delle prenotazioni che si applicano alle assegnazioni di prenotazioni per le query continue.

Esporta in Pub/Sub

Per esportare i dati in Pub/Sub sono richieste API, autorizzazioni IAM e risorse aggiuntive. Google Cloud Per saperne di più, consulta Esportare in Pub/Sub.

Incorporare attributi personalizzati come metadati nei messaggi Pub/Sub

Puoi utilizzare gli attributi Pub/Sub per fornire informazioni aggiuntive sul messaggio, come priorità, origine, destinazione o metadati aggiuntivi. Puoi anche utilizzare gli attributi per filtrare i messaggi nell'abbonamento.

All'interno di un risultato di query continua, se una colonna è denominata _ATTRIBUTES, i relativi valori vengono copiati negli attributi del messaggio Pub/Sub. I campi forniti all'interno di _ATTRIBUTES vengono utilizzati come chiavi degli attributi.

La colonna _ATTRIBUTES deve essere di tipo JSON, nel formato ARRAY<STRUCT<STRING, STRING>> o STRUCT<STRING>.

Per un esempio, consulta Esportare dati in un argomento Pub/Sub.

Esportare in Bigtable

Per esportare i dati in Bigtable sono necessarie API aggiuntive, autorizzazioni IAM e Google Cloud risorse. Per ulteriori informazioni, vedi Esportare in Bigtable.

Esporta in Spanner

Per esportare i dati in Spanner sono richieste API aggiuntive, autorizzazioni IAM e Google Cloud risorse. Per maggiori informazioni, vedi Esportazione in Spanner (ETL inversa).

Scrivere dati in una tabella BigQuery

Puoi scrivere dati in una tabella BigQuery utilizzando un'istruzione INSERT.

Utilizzare le funzioni di AI

Per utilizzare una funzione di AI supportata in una query continua sono necessarie API, autorizzazioni IAM e risorse aggiuntive. Google CloudPer ulteriori informazioni, consulta uno dei seguenti argomenti, in base al tuo caso d'uso:

Quando utilizzi una funzione AI in una query continua, valuta se l'output della query rimarrà entro la quota per la funzione. Se superi la quota, potresti dover gestire separatamente i record che non vengono elaborati.

Specificare un punto di partenza

Devi utilizzare la funzione APPENDS nella clausola FROM di una query continua per specificare i dati meno recenti da elaborare. Ad esempio, APPENDS(TABLE my_table, CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) indica a BigQuery di elaborare i dati aggiunti alla tabella my_table al massimo 10 minuti prima dell'inizio della query continua. I dati aggiunti a my_table vengono elaborati man mano che arrivano. Non è previsto alcun ritardo imposto per l'elaborazione dei dati. Non fornire un argomento end_timestamp alla funzione APPENDS quando la utilizzi in una query continua.

L'esempio seguente mostra come avviare una query continua da un punto specifico nel tempo utilizzando la funzione APPENDS, quando si esegue una query su una tabella BigQuery che riceve informazioni in streaming sulle corse in taxi:

EXPORT DATA
  OPTIONS (format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides') AS (
  SELECT
    TO_JSON_STRING(STRUCT(ride_id,
        timestamp,
        latitude,
        longitude)) AS message
  FROM
    APPENDS(TABLE `myproject.real_time_taxi_streaming.taxirides`,
      -- Configure the APPENDS TVF start_timestamp to specify when you want to
      -- start processing data using your continuous query.
      -- This example starts processing at 10 minutes before the current time.
      CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
  WHERE
    ride_status = 'enroute');

Specifica un punto di partenza precedente all'ora attuale

Se vuoi elaborare i dati precedenti al momento attuale, puoi utilizzare la funzione APPENDS per specificare un punto di partenza precedente per la query. Il punto di partenza che specifichi deve rientrare nella finestra di spostamento cronologico per la tabella da cui stai selezionando i dati. Per impostazione predefinita, la finestra di spostamento cronologico copre gli ultimi sette giorni.

Per includere i dati al di fuori della finestra di Time Travel, utilizza una query standard per inserire o esportare i dati fino a un determinato momento, quindi avvia una query continua da quel momento in poi.

Esempio

L'esempio seguente mostra come caricare i dati precedenti da una tabella BigQuery che riceve informazioni in streaming sulle corse in taxi fino a un determinato momento in una tabella, quindi avviare una query continua dal punto di interruzione per i dati precedenti.

  1. Esegui una query standard per eseguire il backfill dei dati fino a un determinato momento:

    INSERT INTO `myproject.real_time_taxi_streaming.transformed_taxirides`
    SELECT
      timestamp,
      meter_reading,
      ride_status,
      passenger_count,
      ST_Distance(
        ST_GeogPoint(pickup_longitude, pickup_latitude),
        ST_GeogPoint(dropoff_longitude, dropoff_latitude)) AS euclidean_trip_distance,
        SAFE_DIVIDE(meter_reading, passenger_count) AS cost_per_passenger
    FROM `myproject.real_time_taxi_streaming.taxirides`
      -- Include all data inserted into the table up to this point in time.
      -- This timestamp must be within the time travel window.
      FOR SYSTEM_TIME AS OF '2025-01-01 00:00:00 UTC'
    WHERE
      ride_status = 'dropoff';
  2. Esegui una query continua dal momento in cui la query si è interrotta:

    INSERT INTO `myproject.real_time_taxi_streaming.transformed_taxirides`
    SELECT
      timestamp,
      meter_reading,
      ride_status,
      passenger_count,
      ST_Distance(
        ST_GeogPoint(pickup_longitude, pickup_latitude),
        ST_GeogPoint(dropoff_longitude, dropoff_latitude)) AS euclidean_trip_distance,
        SAFE_DIVIDE(meter_reading, passenger_count) AS cost_per_passenger
    FROM
      APPENDS(TABLE `myproject.real_time_taxi_streaming.taxirides`,
        -- Configure the APPENDS TVF start_timestamp to start processing
        -- data right where the batch query left off.
        -- This timestamp must be within the time travel window.
        TIMESTAMP '2025-01-01 00:00:00 UTC' + INTERVAL 1 MICROSECOND)
    WHERE
      ride_status = 'dropoff';

Esegui una query continua utilizzando un account utente

Questa sezione descrive come eseguire una query continua utilizzando un account utente. Una volta eseguita la query continua, puoi chiudere la console Google Cloud , la finestra del terminale o l'applicazione senza interrompere l'esecuzione della query. Una query continua eseguita da un account utente viene eseguita per un massimo di due giorni e poi si interrompe automaticamente. Per continuare a elaborare i nuovi dati in arrivo, avvia una nuova query continua e specifica un punto di partenza. Per automatizzare questo processo, vedi Riprovare le query non riuscite.

Per eseguire una query continua:

Console

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

    Vai a BigQuery

  2. Nell'editor di query, fai clic su Altro.

    1. Nella sezione Scegli la modalità di query, seleziona Query continua.
    2. Fai clic su Conferma.
    3. (Facoltativo) Per controllare la durata di esecuzione della query, fai clic su Impostazioni query e imposta il Timeout job in millisecondi.
  3. Nell'editor di query, digita l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operazioni supportate.

  4. Fai clic su Esegui.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. In Cloud Shell, esegui la query continua utilizzando il comando bq query con il flag --continuous:

    bq query --use_legacy_sql=false --continuous=true
    'QUERY'

    Sostituisci QUERY con l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operazioni supportate. Puoi controllare la durata di esecuzione della query utilizzando il flag --job_timeout_ms.

  3. API

    Esegui la query continua chiamando il metodo jobs.insert. Devi impostare il campo continuous su true in JobConfigurationQuery della risorsa Job che trasmetti. Se vuoi, puoi controllare la durata di esecuzione della query impostando il campo jobTimeoutMs.

    curl --request POST \
      "https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json; charset=utf-8" \
      --data '{"configuration":{"query":{"query":"QUERY","useLegacySql":false,"continuous":true}}}' \
      --compressed

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • QUERY: l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operazioni supportate.

Esegui una query continua utilizzando un account di servizio

Questa sezione descrive come eseguire una query continua utilizzando un account di servizio. Una volta eseguita la query continua, puoi chiudere la console Google Cloud , la finestra del terminale o l'applicazione senza interrompere l'esecuzione della query. Una query continua eseguita utilizzando un account di servizio può essere eseguita per un massimo di 150 giorni e poi si interrompe automaticamente. Per continuare a elaborare i nuovi dati in arrivo, avvia una nuova query continua e specifica un punto di partenza. Per automatizzare questo processo, vedi Riprovare le query non riuscite.

Segui questi passaggi per utilizzare un account di servizio per eseguire una query continua:

Console

  1. Crea un account di servizio.
  2. Concedi le autorizzazioni richieste al account di servizio.
  3. Nella console Google Cloud , vai alla pagina BigQuery.

    Vai a BigQuery

  4. Nell'editor di query, fai clic su Altro.

  5. Nella sezione Scegli la modalità di query, seleziona Query continua.

  6. Fai clic su Conferma.

  7. Nell'editor delle query, fai clic su Altro > Impostazioni query.

  8. Nella sezione Query continua, utilizza la casella Service account per selezionare il account di servizio che hai creato.

  9. (Facoltativo) Per controllare la durata di esecuzione della query, imposta il timeout del job in millisecondi.

  10. Fai clic su Salva.

  11. Nell'editor di query, digita l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operazioni supportate.

  12. Fai clic su Esegui.

bq

  1. Crea un account di servizio.
  2. Concedi le autorizzazioni richieste al account di servizio.
  3. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  4. Nella riga di comando, esegui la query continua utilizzando il comando bq query con i seguenti flag:

    • Imposta il flag --continuous su true per rendere continua la query.
    • Utilizza il flag --connection_property per specificare un account di servizio da utilizzare.
    • (Facoltativo) Imposta il flag --job_timeout_ms per limitare la durata di esecuzione della query.
    bq query --project_id=PROJECT_ID --use_legacy_sql=false \
    --continuous=true --connection_property=service_account=SERVICE_ACCOUNT_EMAIL \
    'QUERY'

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • SERVICE_ACCOUNT_EMAIL: l'email del service account. Puoi ottenere l'email del account di servizio dalla pagina Service account della console Google Cloud .
    • QUERY: l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operazioni supportate.
  5. API

    1. Crea un account di servizio.
    2. Concedi le autorizzazioni richieste al account di servizio.
    3. Esegui la query continua chiamando il metodo jobs.insert. Imposta i seguenti campi nella risorsa JobConfigurationQuery della risorsa Job che trasmetti:

      • Imposta il campo continuous su true per rendere continua la query.
      • Utilizza il campo connectionProperties per specificare un account di servizio da utilizzare.

      Se vuoi, puoi controllare la durata di esecuzione della query impostando il campo jobTimeoutMs nella risorsa JobConfiguration.

      curl --request POST \
        "https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs" \
        --header "Authorization: Bearer $(gcloud auth print-access-token)" \
        --header "Content-Type: application/json; charset=utf-8" \
        --data '{"configuration":{"query":{"query":"QUERY","useLegacySql":false,"continuous":true,"connectionProperties":[{"key":"service_account","value":"SERVICE_ACCOUNT_EMAIL"}]}}}' \
        --compressed

      Sostituisci quanto segue:

      • PROJECT_ID: il tuo ID progetto.
      • QUERY: l'istruzione SQL per la query continua. L'istruzione SQL deve contenere solo operazioni supportate.
      • SERVICE_ACCOUNT_EMAIL: l'email del service account. Puoi ottenere l'email del account di servizio nella pagina Service account della Google Cloud console.

Creare un ID job personalizzato

A ogni job di query viene assegnato un ID job che puoi utilizzare per cercare e gestire il job. Per impostazione predefinita, gli ID job vengono generati in modo casuale. Per semplificare la ricerca dell'ID job di una query continua utilizzando la cronologia dei job o l'explorer dei job, puoi assegnare un prefisso ID job personalizzato:

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

    Vai a BigQuery

  2. Nell'editor di query, fai clic su Altro.

  3. Nella sezione Scegli la modalità di query, seleziona Query continua.

  4. Fai clic su Conferma.

  5. Nell'editor delle query, fai clic su Altro > Impostazioni query.

  6. Nella sezione Prefisso ID job personalizzato, inserisci un prefisso per il nome personalizzato.

  7. Fai clic su Salva.

Esempi

Gli esempi SQL seguenti mostrano casi d'uso comuni per le query continue.

Esportare dati in un argomento Pub/Sub

L'esempio seguente mostra una query continua che filtra i dati da una tabella BigQuery che riceve informazioni sulle corse in taxi in streaming e pubblica i dati in un argomento Pub/Sub in tempo reale con attributi del messaggio:

EXPORT DATA
  OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides')
AS (
  SELECT
    TO_JSON_STRING(
      STRUCT(
        ride_id,
        timestamp,
        latitude,
        longitude)) AS message,
    TO_JSON(
      STRUCT(
        CAST(passenger_count AS STRING) AS passenger_count)) AS _ATTRIBUTES
  FROM
    APPENDS(TABLE `myproject.real_time_taxi_streaming.taxi_rides`,
      -- Configure the APPENDS TVF start_timestamp to specify when you want to
      -- start processing data using your continuous query.
      -- This example starts processing at 10 minutes before the current time.
      CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
  WHERE ride_status = 'enroute'
);

Esportare i dati in una tabella Bigtable

L'esempio seguente mostra una query continua che filtra i dati da una tabella BigQuery che riceve informazioni sulle corse in taxi in streaming ed esporta i dati in una tabella Bigtable in tempo reale:

EXPORT DATA
  OPTIONS (
    format = 'CLOUD_BIGTABLE',
    truncate = TRUE,
    overwrite = TRUE,
    uri = 'https://bigtable.googleapis.com/projects/myproject/instances/mybigtableinstance/tables/taxi-real-time-rides')
AS (
  SELECT
    CAST(CONCAT(ride_id, timestamp, latitude, longitude) AS STRING) AS rowkey,
    STRUCT(
      timestamp,
      latitude,
      longitude,
      meter_reading,
      ride_status,
      passenger_count) AS features
  FROM
    APPENDS(TABLE `myproject.real_time_taxi_streaming.taxirides`,
      -- Configure the APPENDS TVF start_timestamp to specify when you want to
      -- start processing data using your continuous query.
      -- This example starts processing at 10 minutes before the current time.
      CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
  WHERE ride_status = 'enroute'
);

Esportare i dati in una tabella Spanner

L'esempio seguente mostra una query continua che filtra i dati da una tabella BigQuery che riceve informazioni sulle corse in taxi in streaming, e poi esporta i dati in una tabella Spanner in tempo reale:

EXPORT DATA
 OPTIONS (
   format = 'CLOUD_SPANNER',
   uri = 'https://spanner.googleapis.com/projects/myproject/instances/myspannerinstance/databases/taxi-real-time-rides',
   spanner_options ="""{
      "table": "rides",
      -- To ensure data is written to Spanner in the correct sequence
      -- during a continuous export, use the change_timestamp_column
      -- option. This should be mapped to a timestamp column from your
      -- BigQuery data. If your source data lacks a timestamp, the 
      -- _CHANGE_TIMESTAMP pseudocolumn provided by the APPENDS function 
      -- will be automatically mapped to the "change_timestamp" column.
      "change_timestamp_column": "change_timestamp"
   }"""
  )
  AS (
  SELECT
    ride_id,
    latitude,
    longitude,
    meter_reading,
    ride_status,
    passenger_count
  FROM APPENDS(
        TABLE `myproject.real_time_taxi_streaming.taxirides`,
        -- Configure the APPENDS TVF start_timestamp to specify when you want to
        -- start processing data using your continuous query.
        -- This example starts processing at 10 minutes before the current time.
        CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
  WHERE ride_status = 'enroute'
  );

Scrivere dati in una tabella BigQuery

Il seguente esempio mostra una query continua che filtra e trasforma i dati da una tabella BigQuery che riceve informazioni sulle corse in taxi in streaming e poi scrive i dati in un'altra tabella BigQuery in tempo reale. In questo modo, i dati sono disponibili per ulteriori analisi downstream.

INSERT INTO `myproject.real_time_taxi_streaming.transformed_taxirides`
SELECT
  timestamp,
  meter_reading,
  ride_status,
  passenger_count,
  ST_Distance(
    ST_GeogPoint(pickup_longitude, pickup_latitude),
    ST_GeogPoint(dropoff_longitude, dropoff_latitude)) AS euclidean_trip_distance,
    SAFE_DIVIDE(meter_reading, passenger_count) AS cost_per_passenger
FROM
  APPENDS(TABLE `myproject.real_time_taxi_streaming.taxirides`,
    -- Configure the APPENDS TVF start_timestamp to specify when you want to
    -- start processing data using your continuous query.
    -- This example starts processing at 10 minutes before the current time.
    CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
WHERE
  ride_status = 'dropoff';

Elabora i dati utilizzando un modello Vertex AI

L'esempio seguente mostra una query continua che utilizza un modello Vertex AI per generare un annuncio per i passeggeri di taxi in base alla loro latitudine e longitudine attuali, quindi esporta i risultati in un argomento Pub/Sub in tempo reale:

EXPORT DATA
  OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides')
AS (
  SELECT
    TO_JSON_STRING(
      STRUCT(
        ride_id,
        timestamp,
        latitude,
        longitude,
        prompt,
        ml_generate_text_llm_result)) AS message
  FROM
    ML.GENERATE_TEXT(
      MODEL `myproject.real_time_taxi_streaming.taxi_ml_generate_model`,
      (
        SELECT
          timestamp,
          ride_id,
          latitude,
          longitude,
          CONCAT(
            'Generate an ad based on the current latitude of ',
            latitude,
            ' and longitude of ',
            longitude) AS prompt
        FROM
          APPENDS(TABLE `myproject.real_time_taxi_streaming.taxirides`,
            -- Configure the APPENDS TVF start_timestamp to specify when you
            -- want to start processing data using your continuous query.
            -- This example starts processing at 10 minutes before the current time.
            CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
        WHERE ride_status = 'enroute'
      ),
      STRUCT(
        50 AS max_output_tokens,
        1.0 AS temperature,
        40 AS top_k,
        1.0 AS top_p,
        TRUE AS flatten_json_output))
      AS ml_output
);

Modificare l'SQL di una query continua

Non puoi aggiornare l'SQL utilizzato in una query continua mentre è in esecuzione il relativo job. Devi annullare il job di query continua, modificare l'SQL e poi avviare un nuovo job di query continua dal punto in cui hai interrotto il job di query continua originale.

Per modificare l'SQL utilizzato in una query continua:

  1. Visualizza i dettagli del job per il job di query continua che vuoi aggiornare e annota l'ID job.
  2. Se possibile, metti in pausa la raccolta dei dati upstream. Se non riesci a farlo, potresti riscontrare una duplicazione dei dati al riavvio della query continua.
  3. Annulla la query continua che vuoi modificare.
  4. Ottieni il valore di end_time per il job di query continua originale utilizzando la vista INFORMATION_SCHEMA JOBS:

    SELECT end_time
    FROM `PROJECT_ID.region-REGION`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE
      EXTRACT(DATE FROM creation_time) = current_date()
    AND error_result.reason = 'stopped'
    AND job_id = 'JOB_ID';

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • REGION: la regione utilizzata dal progetto.
    • JOB_ID: l'ID job di query continua che hai identificato nel passaggio 1.
  5. Modifica l'istruzione SQL della query continua per avviare la query continua da un momento specifico, utilizzando il valore end_time recuperato nel passaggio 5 come punto di partenza.

  6. Modifica l'istruzione SQL della query continua per riflettere le modifiche necessarie.

  7. Esegui la query continua modificata.

Annullare una query continua

Puoi annullare un job di query continua come qualsiasi altro job. Potrebbe essere necessario fino a un minuto prima che la query interrompa l'esecuzione dopo l'annullamento del job.

Se annulli e riavvii una query, la query riavviata si comporta come una nuova query indipendente. La query riavviata non inizia a elaborare i dati dal punto in cui si è interrotto il job precedente e non può fare riferimento ai risultati della query precedente. Consulta Avviare una query continua da un momento specifico.

Monitorare le query e gestire gli errori

Una query continua potrebbe essere interrotta a causa di fattori quali incoerenze dei dati, modifiche dello schema, interruzioni temporanee del servizio o manutenzione. Sebbene BigQuery gestisca alcuni errori temporanei, le best practice per migliorare la resilienza dei job includono quanto segue:

Passaggi successivi