Visualizzazione PARTITIONS

La visualizzazione INFORMATION_SCHEMA.PARTITIONS contiene una riga per ogni partizione.

Le query alla vista INFORMATION_SCHEMA.PARTITIONS sono limitate a 1000 tabelle. Per ottenere i dati sulle partizioni a livello di progetto, puoi suddividere la query in più query e poi unire i risultati. Se superi il limite, puoi visualizzare un errore simile al seguente:

INFORMATION_SCHEMA.PARTITIONS query attempted to read too many tables. Please add more restrictive filters.

Autorizzazioni obbligatorie

Per eseguire query sulla visualizzazione INFORMATION_SCHEMA.PARTITIONS, devi disporre delle seguenti autorizzazioni IAM (Identity and Access Management):

  • bigquery.tables.get
  • bigquery.tables.getData
  • bigquery.tables.list

Ciascuno dei seguenti ruoli IAM predefiniti include le autorizzazioni precedenti:

  • roles/bigquery.admin
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer

Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.

Schema

Quando esegui una query sulla visualizzazione INFORMATION_SCHEMA.PARTITIONS, i risultati della query solitamente contengono una riga per ogni partizione. L'eccezione si verifica quando nella partizione __UNPARTITIONED__ è presente una combinazione di dati dei livelli di archiviazione a lungo termine e attivi. In questo caso, la visualizzazione restituisce due righe per la partizione __UNPARTITIONED__, una per ogni livello di archiviazione.

La vista INFORMATION_SCHEMA.PARTITIONS ha lo schema seguente:

Nome colonna Tipo di dati Valore
TABLE_CATALOG STRING L'ID del progetto contenente la tabella
TABLE_SCHEMA STRING Il nome del set di dati contenente la tabella, chiamato anche il datasetId
TABLE_NAME STRING Il nome della tabella, noto anche come tableId
PARTITION_ID STRING L'ID di una singola partizione. Per le tabelle non partizionate, il valore è NULL. Per le tabelle partizionate che contengono righe con valori NULL nella colonna di partizione, il valore è __NULL__.
TOTAL_ROWS INTEGER Il numero totale di righe nella partizione
TOTAL_LOGICAL_BYTES INTEGER Il numero totale di byte logici nella partizione
LAST_MODIFIED_TIME TIMESTAMP L'ora in cui i dati sono stati scritti più di recente nella partizione
STORAGE_TIER STRING Il livello di archiviazione della partizione:

Ambito e sintassi

Le query su questa vista devono includere un qualificatore del set di dati. Per le query con un qualificatore del set di dati, devi disporre delle autorizzazioni per il set di dati. Per ulteriori informazioni, consulta la sezione Sintassi. La tabella seguente illustra gli ambiti della regione e delle risorse per questa visualizzazione:

Nome vista Ambito risorsa Ambito regione
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS A livello di set di dati Posizione del set di dati
Sostituisci quanto segue:

  • Facoltativo: PROJECT_ID: l'ID del tuo progetto Google Cloud. Se non viene specificato, viene utilizzato il progetto predefinito.

    Esempi

    Esempio 1

    L'esempio seguente calcola il numero di byte logici utilizzati da ogni livello di archiviazione in tutte le tabelle di un set di dati denominato mydataset:

    SELECT
      storage_tier,
      SUM(total_logical_bytes) AS logical_bytes
    FROM
      `mydataset.INFORMATION_SCHEMA.PARTITIONS`
    GROUP BY
      storage_tier;

    I risultati sono simili ai seguenti:

    +--------------+----------------+
    | storage_tier | logical_bytes  |
    +--------------+----------------+
    | LONG_TERM    |  1311495144879 |
    | ACTIVE       |    66757629240 |
    +--------------+----------------+
    

    Esempio 2

    Il seguente esempio crea una colonna che estrae il tipo di partizione dal campo partition_id e aggrega le informazioni sulle partizioni a livello di tabella per il set di dati pubblico bigquery-public-data.covid19_usafacts:

    SELECT
      table_name,
      CASE
        WHEN regexp_contains(partition_id, '^[0-9]{4}$') THEN 'YEAR'
        WHEN regexp_contains(partition_id, '^[0-9]{6}$') THEN 'MONTH'
        WHEN regexp_contains(partition_id, '^[0-9]{8}$') THEN 'DAY'
        WHEN regexp_contains(partition_id, '^[0-9]{10}$') THEN 'HOUR'
        END AS partition_type,
      min(partition_id) AS earliest_partition,
      max(partition_id) AS latest_partition_id,
      COUNT(partition_id) AS partition_count,
      sum(total_logical_bytes) AS sum_total_logical_bytes,
      max(last_modified_time) AS max_last_updated_time
    FROM `bigquery-public-data.covid19_usafacts.INFORMATION_SCHEMA.PARTITIONS`
    GROUP BY 1, 2;

    I risultati sono simili ai seguenti:

    +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
    | table_name      | partition_type | earliest_partition | latest_partition_id | partition_count | sum_total_logical_bytes | max_last_updated_time          |
    +--------------+-------------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
    | confirmed_cases | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:25.604000 UTC |
    | deaths          | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:24.709000 UTC |
    | summary         | DAY            | 20221204           | 20221213            | 10              | 241285338               | 2022-12-13 00:09:27.496000 UTC |
    +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+