Exporta los resultados de las consultas a Amazon S3

En este documento, se describe cómo exportar el resultado de una consulta que se ejecuta en una tabla de BigLake en el bucket de Amazon Simple Storage Service (Amazon S3).

Para obtener más información sobre cómo fluyen los datos entre BigQuery y Amazon S3, consulta Flujo de datos cuando se exportan datos.

Limitaciones

Para obtener una lista completa de las limitaciones que se aplican a las tablas de BigLake basadas en Amazon S3 y Blob Storage, consulta Limitaciones.

Antes de comenzar

Asegúrate de que tienes los siguientes recursos:

Exportar resultados de consultas

BigQuery Omni escribe en la ubicación de Amazon S3 especificada, sin importar el contenido existente. La consulta de exportación puede reemplazar los datos existentes o combinar el resultado de la consulta con los datos existentes. Recomendamos que exportes el resultado de la consulta a un bucket vacío de Amazon S3.

Para ejecutar una consulta, selecciona una de las siguientes opciones:

SQL

En el campo Editor de consultas, ingresa una consulta de exportación de GoogleSQL. GoogleSQL es la sintaxis predeterminada en la consola de Google Cloud.

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

       EXPORT DATA WITH CONNECTION `CONNECTION_REGION.CONNECTION_NAME`
       OPTIONS(uri="s3://BUCKET_NAME/PATH", format="FORMAT", ...)
       AS QUERY

    Reemplaza lo siguiente:

    • CONNECTION_REGION: la región en la que se creó la conexión.
    • CONNECTION_NAME: el nombre de conexión que creaste con el permiso necesario para escribir en el bucket de Amazon S3.
    • BUCKET_NAME: el bucket de Amazon S3 en el que deseas escribir los datos.
    • PATH: la ruta en la que deseas escribir el archivo exportado. Debe contener exactamente un comodín * en cualquier lugar del directorio hoja de la string de ruta de acceso, por ejemplo, ../aa/*, ../aa/b*c, ../aa/*bc y ../aa/bc*. BigQuery reemplaza * por 0000..N, según la cantidad de archivos exportados. BigQuery determina el recuento y los tamaños de archivos. Si BigQuery decide exportar dos archivos, entonces se reemplaza * en el nombre de archivo del primer archivo por 000000000000 y * en el segundo nombre del archivo, se reemplaza por 000000000001.
    • FORMAT: Los formatos compatibles son JSON, AVRO, CSV y PARQUET.
    • QUERY: la consulta para analizar los datos que se almacenan en una tabla de BigLake.

    • Haz clic en Ejecutar.

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

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to export query results to Amazon S3 bucket
public class ExportQueryResultsToS3 {

  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";
    // connectionName should be in the format of connection_region.connection_name. e.g.
    // aws-us-east-1.s3-write-conn
    String connectionName = "MY_CONNECTION_REGION.MY_CONNECTION_NAME";
    // destinationUri must contain exactly one * anywhere in the leaf directory of the path string
    // e.g. ../aa/*, ../aa/b*c, ../aa/*bc, and ../aa/bc*
    // BigQuery replaces * with 0000..N depending on the number of files exported.
    // BigQuery determines the file count and sizes.
    String destinationUri = "s3://your-bucket-name/*";
    String format = "EXPORT_FORMAT";
    // Export result of query to find states starting with 'W'
    String query =
        String.format(
            "EXPORT DATA WITH CONNECTION `%s` OPTIONS(uri='%s', format='%s') "
              + "AS SELECT * FROM %s.%s.%s WHERE name LIKE 'W%%'",
            connectionName, destinationUri, format, projectId, datasetName, externalTableName);
    exportQueryResultsToS3(query);
  }

  public static void exportQueryResultsToS3(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 results exported to Amazon S3 successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Soluciona problemas

Si obtienes un error relacionado con quota failure, verifica si reservaste capacidad para tus consultas. Para obtener más información sobre las reservas de ranuras, consulta Antes de comenzar en este documento.

¿Qué sigue?