Consultar datos de Amazon S3

En este documento se describe cómo consultar los datos almacenados en una tabla de BigLake de Amazon Simple Storage Service (Amazon S3).

Antes de empezar

Asegúrate de tener una tabla de BigLake de Amazon S3.

Roles obligatorios

Para consultar tablas de BigLake de Amazon S3, asegúrese de que el llamador de la API de BigQuery tenga los siguientes roles:

  • Usuario de conexión de BigQuery (roles/bigquery.connectionUser)
  • Lector de datos de BigQuery (roles/bigquery.dataViewer)
  • Usuario de BigQuery (roles/bigquery.user)

La persona que llama puede ser tu cuenta o una cuenta de servicio de conexión de Amazon S3. En función de tus permisos, puedes asignarte estos roles o pedirle a tu administrador que te los asigne. Para obtener más información sobre cómo conceder roles, consulta el artículo Ver los roles que se pueden conceder en los recursos.

Para ver los permisos exactos que se necesitan para consultar tablas BigLake de Amazon S3, despliega la sección Permisos necesarios:

Permisos obligatorios

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Consultar tablas de BigLake de Amazon S3

Después de crear una tabla de BigLake de Amazon S3, puedes consultarla con la sintaxis de GoogleSQL, como si fuera una tabla estándar de BigQuery.

Los resultados de las consultas almacenados en caché se guardan en una tabla temporal de BigQuery. Para consultar una tabla de BigLake temporal, consulta Consultar una tabla de BigLake temporal. Para obtener más información sobre las limitaciones y cuotas de BigQuery Omni, consulta las limitaciones y las cuotas.

Cuando crees una reserva en una región de BigQuery Omni, usa la edición Enterprise. Para saber cómo crear una reserva con una edición, consulta Crear reservas.

Ejecuta una consulta en una tabla de BigLake de Amazon S3:

SQL

Para consultar la tabla, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    SELECT * FROM DATASET_NAME.TABLE_NAME;

    Haz los cambios siguientes:

    • DATASET_NAME: el nombre del conjunto de datos que has creado
    • TABLE_NAME: el nombre de la tabla que ha creado

    • Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.TableResult;

// Sample to queries an external data source aws s3 using a permanent table
public class QueryExternalTableAws {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String externalTableName = "MY_EXTERNAL_TABLE_NAME";
    // Query to find states starting with 'W'
    String query =
        String.format(
            "SELECT * FROM s%.%s.%s WHERE name LIKE 'W%%'",
            projectId, datasetName, externalTableName);
    queryExternalTableAws(query);
  }

  public static void queryExternalTableAws(String query) throws InterruptedException {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query on aws external permanent table performed successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Consultar una tabla temporal

BigQuery crea tablas temporales para almacenar los resultados de las consultas. Para obtener los resultados de las consultas de tablas temporales, puedes usar la consola Google Cloud o la API de BigQuery.

Selecciona una de las opciones siguientes:

Consola

Cuando consultas una tabla de BigLake que hace referencia a datos externos en la nube, puedes ver los resultados de la consulta en la Google Cloud consola.

API

Para consultar una tabla de BigLake mediante la API, sigue estos pasos:

  1. Crea un objeto Job.
  2. Llama al método jobs.insert para ejecutar la consulta de forma asíncrona o al método jobs.query para ejecutarla de forma síncrona. En ambos casos, debes pasar el objeto Job.
  3. Lee las filas con jobs.getQueryResults pasando la referencia de tarea dada y los métodos tabledata.list pasando la referencia de tabla dada del resultado de la consulta.

Consultar la pseudocolumna _FILE_NAME

Las tablas basadas en fuentes de datos externas proporcionan una pseudocolumna llamada _FILE_NAME. Esta columna contiene la ruta completa del archivo al que pertenece la fila. Esta columna solo está disponible en las tablas que hacen referencia a datos externos almacenados en Cloud Storage, Google Drive, Amazon S3 y Azure Blob Storage.

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, debe usar un alias. En la siguiente consulta de ejemplo se muestra cómo seleccionar _FILE_NAME asignando el 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"' 

Haz los cambios siguientes:

  • PROJECT_ID es un ID de proyecto válido (esta marca no es obligatoria si usas Cloud Shell o si has definido un proyecto predeterminado en Google Cloud CLI).
  • DATASET es el nombre del conjunto de datos que almacena la tabla externa permanente.
  • TABLE_NAME es el nombre de la tabla externa permanente

Cuando la consulta tiene un predicado de filtro en la pseudocolumna _FILE_NAME, BigQuery intenta omitir la lectura de los archivos que no cumplen el filtro. Las recomendaciones similares a las de consultar tablas con particiones por hora de ingestión mediante pseudocolumnas se aplican al crear predicados de consulta con la pseudocolumna _FILE_NAME.

Siguientes pasos