Consulta datos de Cloud Storage

BigQuery admite las consultas de datos de Cloud Storage en los siguientes formatos:

  • Valores separados por comas (CSV)
  • JSON (delimitado por saltos de línea)
  • Archivos Avro
  • Exportaciones de Cloud Datastore
  • Exportaciones de Cloud Firestore

BigQuery admite las consultas de datos de Cloud Storage de estas clases de almacenamiento:

  • Multirregional
  • Regional
  • Nearline
  • Coldline

Para consultar una fuente de datos externa de Cloud Storage, proporciona la ruta de acceso del URI de Cloud Storage a tus datos y crea una tabla que haga referencia a la fuente de datos. La tabla usada para hacer referencia a la fuente de datos de Cloud Storage puede ser una tabla permanente o temporal.

Asegúrate de tener en cuenta la ubicación de tu conjunto de datos y del depósito de Cloud Storage cuando consultas datos almacenados en Cloud Storage.

Recupera el URI de Cloud Storage

Para crear una tabla externa con una fuente de datos de Cloud Storage, debes proporcionar el URI de Cloud Storage.

El URI de Cloud Storage incluye el nombre de tu depósito y tu objeto (nombre de archivo). Por ejemplo, si el depósito de Cloud Storage se llamara mybucket y el archivo de datos se denominara myfile.csv, el URI del depósito sería gs://mybucket/myfile.csv. Si los datos se separan en varios archivos, puedes usar un comodín en el URI. Para obtener más información, consulta los URI de solicitud de Cloud Storage.

BigQuery no admite los URI de origen que incluyen varias barras consecutivas después de la doble barra inicial. Los nombres de los objetos de Cloud Storage pueden contener varios caracteres de barras consecutivas (“/”). Sin embargo, BigQuery convierte varias barras consecutivas en una sola barra. Por ejemplo, el URI de fuente siguiente, a pesar de ser válido en Cloud Storage, no funciona en BigQuery: gs://bucket/my//object//name

Para recuperar el URI de Cloud Storage, sigue estos pasos:

  1. Abre Cloud Storage Console

    Cloud Storage Console

  2. Explora la ubicación del objeto (archivo) que contiene los datos de origen.

  3. En la parte superior de Cloud Storage Console, toma nota de la ruta de acceso al objeto. Para redactar el URI, reemplaza gs://bucket/file por la ruta de acceso adecuada, por ejemplo, gs://mybucket/myfile.json. bucket es el nombre del depósito de Cloud Storage y file es el nombre del objeto (archivo) que contiene los datos.

Tablas externas permanentes y temporales

Puedes consultar una fuente de datos externa en BigQuery; para ello, usa una tabla permanente o una temporal. Una tabla permanente es una tabla que se crea en un conjunto de datos y está vinculada a tu fuente de datos externa. Debido a que la tabla es permanente, puedes usar controles de acceso a nivel de conjunto de datos para compartir la tabla con otras personas que también tengan acceso a la fuente de datos externa subyacente y consultarla en cualquier momento.

Cuando consultas una fuente de datos externa con una tabla temporal, envías un comando que incluye una consulta y crea una tabla no permanente vinculada a la fuente de datos externa. Cuando usas una tabla temporal, no se crea una tabla en uno de tus conjuntos de datos de BigQuery. Debido a que la tabla no se almacena de forma permanente en un conjunto de datos, no puede compartirse con otras personas. Consultar una fuente de datos externa con una tabla temporal es útil para las consultas únicas ad-hoc sobre datos externos o procesos de extracción, transformación y carga (ETL).

Consulta datos de Cloud Storage con tablas externas permanentes

Permisos y alcances obligatorios

Cuando consultas datos externos en Cloud Storage mediante una tabla permanente, necesitas permisos para ejecutar un trabajo de consulta a nivel de proyecto o superior, crear una tabla que apunte a los datos externos y acceder a la tabla. Cuando tus datos externos se almacenan en Cloud Storage, también necesitas permisos para acceder a los datos en el depósito de Cloud Storage.

Permisos de BigQuery

Como mínimo, se requieren los siguientes permisos para crear y consultar una tabla externa en BigQuery.

  • bigquery.tables.create
  • bigquery.tables.getData
  • bigquery.jobs.create

Las siguientes funciones de Cloud IAM predefinidas incluyen los permisos bigquery.tables.create y bigquery.tables.getData:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Las siguientes funciones de Cloud IAM predefinidas incluyen los permisos bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Además, si un usuario tiene permisos bigquery.datasets.create, cuando crea un conjunto de datos, se le otorga el acceso bigquery.dataOwner. El acceso bigquery.dataOwner proporciona al usuario la capacidad de crear tablas externas en el conjunto de datos, pero aún se requieren los permisos bigquery.jobs.create para consultar los datos.

Si deseas obtener más información sobre las funciones de Cloud IAM y los permisos en BigQuery, consulta Control de acceso.

Permisos de Cloud Storage

Para consultar datos externos en un depósito de Cloud Storage, debes tener permisos storage.objects.get. Si usas un comodín de URI, también debes tener permisos storage.objects.list.

Se puede otorgar la función storage.objectViewer de Cloud IAM predefinida para proporcionar permisos storage.objects.get y storage.objects.list.

Alcances para instancias de Compute Engine

Cuando creas una instancia de Compute Engine, puedes especificar una lista de alcances para la instancia. Los alcances controlan el acceso de la instancia a los productos de GCP, incluido Cloud Storage. Las aplicaciones que se ejecutan en la VM usan la cuenta de servicio adjunta a la instancia para llamar a las API de Google Cloud Platform.

Si configuras una instancia de Compute Engine de modo que se ejecute como la cuenta de servicio predeterminada de Compute Engine y que esa cuenta de servicio acceda a una tabla externa vinculada a una fuente de datos de Cloud Storage, la instancia necesita acceso de solo lectura a Cloud Storage. El alcance https://www.googleapis.com/auth/devstorage.read_only se otorga a la cuenta de servicio predeterminada de Compute Engine de manera automática. Si creas tu propia cuenta de servicio, aplica el alcance de solo lectura de Cloud Storage en la instancia.

Para obtener información sobre cómo aplicar alcances a una instancia de Compute Engine, consulta la sección acerca de cómo cambiar la cuenta de servicio y los niveles de acceso de una instancia. Para obtener más información sobre las cuentas de servicio de Compute Engine, consulta la sección sobre las Cuentas de servicio.

Crea y consulta una tabla externa permanente

Puedes crear una tabla permanente vinculada a tu fuente de datos externa mediante las siguientes opciones:

  • Mediante GCP Console o la IU web de BigQuery clásica
  • Mediante el comando mk de la herramienta de línea de comandos
  • Mediante la creación de ExternalDataConfiguration cuando usas el método de API tables.insert
  • Mediante las bibliotecas cliente

Para consultar una fuente de datos externa mediante una tabla permanente, debes crear una tabla en un conjunto de datos de BigQuery vinculado a tu fuente de datos externa. Los datos no se almacenan en la tabla de BigQuery. Debido a que la tabla es permanente, puedes usar controles de acceso a nivel de conjunto de datos para compartir la tabla con otras personas que también tengan acceso a la fuente de datos externa subyacente.

Existen tres maneras de especificar la información del esquema cuando creas una tabla externa permanente en BigQuery:

  • Si usas el método de API tables.insert para crear una tabla externa permanente, debes crear un recurso de tabla que incluya una definición de esquema y ExternalDataConfiguration. Configura el parámetro autodetect como true para habilitar la detección automática de esquema en las fuentes de datos compatibles.
  • Si usas la CLI para crear una tabla externa permanente, puedes usar un archivo de definición de tablas, crear y usar tu propio archivo de esquema o ingresar el esquema de forma intercalada (en la línea de comandos). Cuando creas un archivo de definición de tablas, puedes habilitar la detección automática de esquemas en las fuentes de datos admitidas.
  • Si usas la consola o la IU web clásica de BigQuery para crear una tabla externa permanente, puedes ingresar el esquema de tabla de forma manual o usar la detección automática de esquemas en las fuentes de datos admitidas.

Para crear una tabla externa, sigue estos pasos:

Console

  1. Abre la IU web de BigQuery en GCP Console.
    Ir a GCP Console
  2. En el panel de navegación, en la sección Recursos, expande tu proyecto y selecciona un conjunto de datos.
  3. Haz clic en Crear tabla (Create table) en el lado derecho de la ventana. Crear tabla
  4. En la página Crear tabla (Create table), en la sección Fuente (Source), realiza lo siguiente:

    • En Crear una tabla desde (Create table from), selecciona Cloud Storage.

    • En el campo Seleccionar archivo del depósito de Cloud Storage (Select file from Cloud Storage bucket), busca el archivo o depósito de Cloud Storage, o ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir múltiples URI en GCP Console, pero se admiten comodines. El depósito de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear.

      Seleccionar archivo

    • En Formato de archivo (File format), selecciona el formato de tus datos. Entre los formatos válidos para datos externos de Cloud Storage, se incluyen los siguientes:

      • Valores separados por comas (CSV)
      • JSON (delimitado por saltos de línea)
      • Avro
      • Copia de seguridad de Cloud Datastore (también se usa con Cloud Firestore)
  5. En la página Crear tabla (Create table), en la sección Destino (Destination), realiza lo siguiente:

    • En Nombre del conjunto de datos (Dataset name), selecciona el conjunto de datos correspondiente.

      Seleccionar conjunto de datos

    • Verifica que el Tipo de tabla (Table type) esté configurado como Tabla externa.

    • En el campo Nombre de la tabla, ingresa el nombre de la tabla que quieres crear en BigQuery.

  6. En la sección Esquema, ingresa la definición del esquema.

    • Para los archivos JSON o CSV, puedes marcar la opción Detección automática a fin de habilitar la detección automática de esquemas. La Detección automática no está disponible para exportaciones de Cloud Datastore o Cloud Firestore y archivos Avro. La información del esquema de estos tipos de archivos se recupera de forma automática desde los datos de origen autodescriptivos.
    • Para archivos CSV y JSON, puedes ingresar la información del esquema de forma manual como se indica a continuación:
      • Habilita Editar como texto y, luego, ingresa el esquema de la tabla como un arreglo JSON. Nota: Puedes ver el esquema de una tabla existente en formato JSON si ingresas el siguiente comando en la CLI: bq show --format=prettyjson dataset.table.
      • Usa Agregar campo para ingresar el esquema de forma manual.
  7. Haz clic en Crear tabla.

Después de crear la tabla permanente, puedes ejecutar una consulta en ella como si fuera una tabla de BigQuery nativa. Cuando se completa tu consulta, puedes exportar los resultados como archivos CSV o JSON, guardarlos como una tabla o guardarlos en Hojas de cálculo de Google.

IU clásica

  1. Ve a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. En el panel de navegación, desplázate sobre un conjunto de datos, haz clic en el ícono de flecha hacia abajo imagen del ícono de flecha hacia abajo y, luego, en Crear tabla nueva.

  3. En la página Crear tabla, en la sección Datos fuente, haz lo siguiente:

    • En Ubicación, selecciona Cloud Storage y, en el campo de origen, ingresa el URI de Cloud Storage. Ten en cuenta que se admiten comodines para los URI de Cloud Storage.
    • En Formato de archivo, selecciona el formato de tus datos. Entre los formatos válidos para datos de Cloud Storage, se incluyen los siguientes:
      • Valores separados por comas (CSV)
      • JSON (delimitado por saltos de línea)
      • Avro
      • Copia de seguridad de Cloud Datastore (también se usa con Cloud Firestore)
  4. En la página Crear tabla, en la sección Tabla de destino, realiza lo siguiente:

    • Para el Nombre de tabla, elige el conjunto de datos apropiado y, en el campo de nombre de tabla, ingresa el nombre de la tabla permanente que estás creando en BigQuery.
    • Verifica que el Tipo de tabla esté configurado como Tabla externa.
  5. En la sección Esquema, ingresa la información del esquema.

    • Para los archivos JSON o CSV, puedes marcar la opción de Detección automática a fin de habilitar la detección automática de esquemas. La Detección automática no está disponible para exportaciones de Cloud Datastore o Cloud Firestore y archivos Avro. La información del esquema de estos tipos de archivos se recupera de forma automática desde los datos de origen autodescriptivos.

    • También puedes ingresar información de esquemas CSV o JSON de forma manual como se indica a continuación:

      • Haz clic en Editar como texto y, luego, ingresa el esquema de la tabla en formato JSON.
      • Usa Agregar campo para ingresar de forma manual el esquema.
  6. Selecciona los elementos aplicables en la sección Opciones y haz clic en Crear tabla.

Después de crear la tabla permanente, puedes ejecutar una consulta en ella como si fuera una tabla de BigQuery nativa. Cuando se completa tu consulta, puedes exportar los resultados como archivos CSV o JSON, guardarlos como una tabla o guardarlos en Hojas de cálculo de Google.

CLI

Debes usar el comando bq mk para crear una tabla en la herramienta de línea de comandos de BigQuery. Cuando usas la CLI para crear una tabla vinculada a una fuente de datos externa, puedes identificar el esquema de la tabla por medio de las opciones siguientes:

  • Un archivo de definición de tablas (almacenado en tu máquina local)
  • Una definición de esquema intercalado
  • Un archivo de esquema JSON (almacenado en tu máquina local)

Para crear una tabla permanente vinculada a tu fuente de datos de Cloud Storage por medio de un archivo de definición de tablas, ingresa el comando siguiente:

bq mk \
--external_table_definition=definition_file \
dataset.table

En este comando, ocurre lo siguiente:

  • definition_file es la ruta de acceso al archivo de definición de tablas en tu máquina local.
  • dataset es el nombre del conjunto de datos que contiene la tabla.
  • table es el nombre de la tabla que quieres crear.

Por ejemplo, con el comando siguiente, se crea una tabla permanente llamada mytable por medio de un archivo de definición de tablas llamado mytable_def.

bq mk --external_table_definition=/tmp/mytable_def mydataset.mytable

Para crear una tabla permanente vinculada a tu fuente de datos externa por medio de una definición de esquema intercalado, ingresa el comando siguiente.

bq mk \
--external_table_definition=schema@source_format=Cloud Storage URI \
dataset.table

En este comando, ocurre lo siguiente:

  • schema es la definición de esquema en el formato field:data_type,field:data_type.
  • source_format es CSV, NEWLINE_DELIMITED_JSON, AVRO o DATASTORE_BACKUP. (DATASTORE_BACKUP también se usa con Cloud Filestore).
  • Cloud Storage URI es tu URI de Cloud Storage.
  • dataset es el nombre del conjunto de datos que contiene la tabla.
  • table es el nombre de la tabla que quieres crear.

Por ejemplo, con el comando que se muestra a continuación, se crea una tabla permanente llamada sales vinculada a un archivo CSV almacenado en Cloud Storage con la definición de esquema siguiente: Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq mk \
--external_table_definition=Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv \
mydataset.sales

Para crear una tabla permanente vinculada a tu fuente de datos externa por medio de un archivo de esquema JSON, ingresa el comando siguiente.

bq mk \
--external_table_definition=schema@source_format=Cloud Storage URI \
dataset.table

En este comando, ocurre lo siguiente:

  • schema es la ruta de acceso al archivo de esquema JSON en tu máquina local.
  • source_format es CSV, NEWLINE_DELIMITED_JSON, AVRO o DATASTORE_BACKUP. (DATASTORE_BACKUP también se usa con Cloud Firestore).
  • Cloud Storage URI es tu URI de Cloud Storage.
  • dataset es el nombre del conjunto de datos que contiene la tabla.
  • table es el nombre de la tabla que quieres crear.

Por ejemplo, con el comando siguiente, se crea una tabla llamada sales vinculada a un archivo CSV almacenado en Cloud Storage mediante el archivo de esquema /tmp/sales_schema.json.

bq mk \
--external_table_definition=/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv \
mydataset.sales

Después de crear la tabla permanente, puedes ejecutar una consulta en ella como si fuera una tabla de BigQuery nativa. Cuando se completa tu consulta, puedes exportar los resultados como archivos CSV o JSON, guardarlos como una tabla o guardarlos en Hojas de cálculo de Google.

API

Crea una ExternalDataConfiguration cuando uses el método de API tables.insert. Especifica la propiedad schema o configura la propiedad autodetect como true para habilitar la detección automática de esquemas en las fuentes de datos compatibles.

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

# Configure the external data source
dataset_ref = client.dataset(dataset_id)
table_id = 'us_states'
schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
table = bigquery.Table(dataset_ref.table(table_id), schema=schema)
external_config = bigquery.ExternalConfig('CSV')
external_config.source_uris = [
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table.external_data_configuration = external_config

# Create a permanent table linked to the GCS file
table = client.create_table(table)  # API request

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}.{}` WHERE name LIKE "W%"'.format(
    dataset_id, table_id)

query_job = client.query(sql)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

Consulta datos de Cloud Storage con tablas temporales

Si quieres realizar una consulta sobre una fuente de datos externa sin crear una tabla permanente, debes ejecutar un comando que combine lo siguiente:

  • Un archivo de definición de tablas con una consulta
  • Una definición de esquema intercalado con una consulta
  • Un archivo de definición de esquema JSON con una consulta

Se emplea el archivo de definición de esquema o el esquema proporcionado para crear la tabla externa temporal y se ejecuta la consulta en la tabla externa temporal. La CLI y la API de BigQuery admiten las consultas de fuentes de datos externas con una tabla temporal.

Cuando usas una tabla externa temporal, no se crea una tabla en uno de los conjuntos de datos de BigQuery. Debido a que la tabla no se almacena de forma permanente en un conjunto de datos, no puede compartirse con otras personas. Consultar una fuente de datos externa con una tabla temporal es útil para las consultas únicas ad-hoc sobre datos externos o procesos de extracción, transformación y carga (ETL).

Permisos necesarios

Cuando consultas datos externos en Cloud Storage con una tabla temporal, necesitas permisos para ejecutar trabajos de consulta a nivel de proyecto o superior, además de acceso al conjunto de datos que contiene la tabla que apunta a los datos externos. Cuando consultas datos en Cloud Storage, también necesitas permisos para acceder al depósito que los contiene.

Permisos de BigQuery

Como mínimo, se requieren los siguientes permisos para consultar una tabla externa en BigQuery mediante una tabla temporal.

  • bigquery.tables.getData
  • bigquery.jobs.create

Las siguientes funciones predefinidas de Cloud IAM incluyen los permisos bigquery.tables.getData:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Las siguientes funciones de Cloud IAM predefinidas incluyen los permisos bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Además, si un usuario tiene permisos bigquery.datasets.create, cuando crea un conjunto de datos, se le otorga el acceso bigquery.dataOwner. El acceso bigquery.dataOwner permite al usuario crear y acceder a tablas externas en el conjunto de datos, pero aún se requieren los permisos bigquery.jobs.create para consultar los datos.

Si deseas obtener más información sobre las funciones de Cloud IAM y los permisos en BigQuery, consulta Control de acceso.

Permisos de Cloud Storage

Para consultar datos externos en un depósito de Cloud Storage, debes tener permisos storage.objects.get. Si usas un comodín de URI, también debes tener permisos storage.objects.list.

Se puede otorgar la función storage.objectViewer de Cloud IAM predefinida para proporcionar permisos storage.objects.get y storage.objects.list.

Crea y consulta una tabla temporal

Puedes crear y consultar una tabla temporal vinculada a una fuente de datos externa mediante la CLI, la API o las bibliotecas cliente.

CLI

Usa el comando bq query con la marca --external_table_definition para consultar una tabla temporal vinculada a una fuente de datos externa. Cuando usas la CLI para consultar una tabla temporal vinculada a una fuente de datos externa, puedes identificar el esquema de la tabla por medio de las siguientes opciones:

  • Un archivo de definición de tablas (almacenado en tu máquina local)
  • Una definición de esquema intercalado
  • Un archivo de esquema JSON (almacenado en tu máquina local)

Proporciona la marca --location y configura el valor como tu ubicación (opcional).

Para realizar una consulta en una tabla temporal vinculada a tu fuente de datos externa mediante un archivo de definición de tablas, ingresa el comando siguiente.

bq --location=location query \
--external_table_definition=table::definition_file \
'query'

En este comando, ocurre lo siguiente:

  • location es el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • table es el nombre de la tabla temporal que quieres crear.
  • definition_file es la ruta de acceso al archivo de definición de tablas en tu máquina local.
  • query es la consulta que quieres enviar a la tabla temporal.

Por ejemplo, con el comando siguiente se crea y consulta una tabla temporal denominada sales por medio de un archivo de definición de tablas llamado sales_def.

bq query \
--external_table_definition=sales::sales_def \
'SELECT
  Region,
  Total_sales
FROM
  sales'

Para realizar una consulta en una tabla temporal vinculada a tu fuente de datos externa por medio de una definición de esquema intercalado, ingresa el comando siguiente.

bq --location=location query \
--external_table_definition=table::schema@source_format=Cloud Storage URI \
'query'

En este comando, ocurre lo siguiente:

  • location es el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • table es el nombre de la tabla temporal que quieres crear.
  • schema es la definición del esquema intercalado en el formato field:data_type,field:data_type.
  • source_format es CSV, NEWLINE_DELIMITED_JSON, AVRO o DATASTORE_BACKUP. (DATASTORE_BACKUP también se usa con Cloud Firestore).
  • Cloud Storage URI es tu URI de Cloud Storage.
  • query es la consulta que quieres enviar a la tabla temporal.

Por ejemplo, con el comando que se muestra a continuación, se crea y se consulta una tabla temporal llamada sales vinculada a un archivo CSV almacenado en Cloud Storage con la definición de esquema siguiente: Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv \
'SELECT
  Region,
  Total_sales
FROM
  sales'

Para realizar una consulta en una tabla temporal vinculada a tu fuente de datos externa por medio de un archivo de esquema JSON, ingresa el siguiente comando:

bq --location=location query \
--external_table_definition=schema_file@source_format=Cloud Storage URI \
'query'

En este comando, ocurre lo siguiente:

  • location es el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • schema_file es la ruta de acceso al archivo de esquema JSON en tu máquina local.
  • source_format es CSV, NEWLINE_DELIMITED_JSON, AVRO o DATASTORE_BACKUP. (DATASTORE_BACKUP también se usa con Cloud Firestore).
  • Cloud Storage URI es tu URI de Cloud Storage.
  • query es la consulta que quieres enviar a la tabla temporal.

Por ejemplo, con el comando siguiente, se crea y se consulta una tabla temporal llamada sales vinculada a un archivo CSV almacenado en Cloud Storage mediante el archivo de esquema /tmp/sales_schema.json.

bq query
--external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv
'SELECT Region, Total_sales FROM sales'

API

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la Documentación de referencia de la API de Python de BigQuery.

# from google.cloud import bigquery
# client = bigquery.Client()

# Configure the external data source and query job
external_config = bigquery.ExternalConfig('CSV')
external_config.source_uris = [
    'gs://cloud-samples-data/bigquery/us-states/us-states.csv',
]
external_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING')
]
external_config.options.skip_leading_rows = 1  # optionally skip header row
table_id = 'us_states'
job_config = bigquery.QueryJobConfig()
job_config.table_definitions = {table_id: external_config}

# Example query to find states starting with 'W'
sql = 'SELECT * FROM `{}` WHERE name LIKE "W%"'.format(table_id)

query_job = client.query(sql, job_config=job_config)  # API request

w_states = list(query_job)  # Waits for query to finish
print('There are {} states with names starting with W.'.format(
    len(w_states)))

Compatibilidad con comodines para los URI de Cloud Storage

Si los datos de Cloud Storage están separados en varios archivos que comparten un nombre base común, puedes usar un comodín en el URI en el archivo de definición de tablas. También puedes usar un comodín cuando creas una tabla externa sin usar un archivo de definición de tablas.

Para agregar un comodín al URI de Cloud Storage, debes agregar un asterisco (*) al nombre base. Por ejemplo, si tuvieras dos archivos con nombre fed-sample000001.csv y fed-sample000002.csv, el URI del depósito sería gs://mybucket/fed-sample*. Este URI de comodín se puede usar en la consola, la IU web clásica, la CLI, la API o las bibliotecas cliente.

Solo puedes usar un comodín para los objetos (nombres de archivos) dentro de tu depósito. El comodín puede aparecer dentro o al final del nombre del objeto. No se admite la adición de un comodín al nombre del depósito.

Para las exportaciones de Google Cloud Datastore, solo se puede especificar un URI, que debe terminar con .backup_info o .export_metadata.

El carácter comodín * no está permitido en las siguientes situaciones:

  • Cuando creas tablas externas vinculadas a las exportaciones de Cloud Datastore o Cloud Firestore.
  • Cuando cargas datos de exportación de Cloud Datastore o Cloud Firestore desde Cloud Storage.

Pseudocolumna _FILE_NAME

Las tablas basadas en fuentes de datos externas proporcionan una pseudocolumna llamada _FILE_NAME. Esta columna contiene la ruta de acceso calificada por completo al archivo al que pertenece la fila. Esta columna solo está disponible para tablas que hagan referencia a datos externos almacenados en Cloud Storage y Google Drive.

El nombre de columna _FILE_NAME está reservado, lo que significa que no puedes crear una columna con ese nombre en ninguna de tus tablas. Para seleccionar el valor de _FILE_NAME, debes usar un alias. La consulta de ejemplo siguiente muestra la selección de _FILE_NAME mediante la asignación del alias fn a la pseudocolumna.

bq query \
--project_id=project_id \
--use_legacy_sql=false \
'SELECT
   name,
   _FILE_NAME AS fn
 FROM
   `dataset.table_name`
 WHERE
   name contains "Alex"' 

En este comando, ocurre lo siguiente:

  • project_id es un ID de proyecto válido (esta marca no es necesaria si usas Cloud Shell o si configuras un proyecto predeterminado en el SDK de Cloud)
  • dataset es el nombre del conjunto de datos que almacena la tabla externa permanente
  • table_name es el nombre de la tabla externa permanente
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.