Siéntete libre de compartir nuestro espacio y códigos en tus redes, necesitamos tu ayuda para hacer crecer esta comunidad.
Solución:
Debe usar Google Cloud Storage para su trabajo de exportación. Aquí se explica la exportación de datos de BigQuery; consulte también las variantes para diferentes sintaxis de ruta.
Luego puede descargar los archivos de GCS a su almacenamiento local.
La herramienta Gsutil puede ayudarlo a descargar el archivo de GCS a la máquina local.
No puede descargar con un solo movimiento localmente, primero debe exportar a GCS, luego transferir a la máquina local.
Puede descargar todos los datos directamente (sin enrutarlos a través de Google Cloud Storage) mediante el mecanismo de paginación. Básicamente, debe generar un token de página para cada página, descargar los datos en la página e iterarlo hasta que se hayan descargado todos los datos, es decir, no haya más tokens disponibles. Aquí hay un código de ejemplo en Java, que con suerte aclara la idea:
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.bigquery.Bigquery;
import com.google.api.services.bigquery.BigqueryScopes;
import com.google.api.client.util.Data;
import com.google.api.services.bigquery.model.*;
/* your class starts here */
private String projectId = ""; /* fill in the project id here */
private String query = ""; /* enter your query here */
private Bigquery bigQuery;
private Job insert;
private TableDataList tableDataList;
private Iterator rowsIterator;
private List rows;
private long maxResults = 100000L; /* max number of rows in a page */
/* run query */
public void open() throws Exception
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory);
if (credential.createScopedRequired())
credential = credential.createScoped(BigqueryScopes.all());
bigQuery = new Bigquery.Builder(transport, jsonFactory, credential).setApplicationName("my app").build();
JobConfigurationQuery queryConfig = new JobConfigurationQuery().setQuery(query);
JobConfiguration jobConfig = new JobConfiguration().setQuery(queryConfig);
Job job = new Job().setConfiguration(jobConfig);
insert = bigQuery.jobs().insert(projectId, job).execute();
JobReference jobReference = insert.getJobReference();
while (true)
Job poll = bigQuery.jobs().get(projectId, jobReference.getJobId()).execute();
String state = poll.getStatus().getState();
if ("DONE".equals(state))
ErrorProto errorResult = poll.getStatus().getErrorResult();
if (errorResult != null)
throw new Exception("Error running job: " + poll.getStatus().getErrors().get(0));
break;
Thread.sleep(10000);
tableDataList = getPage();
rows = tableDataList.getRows();
rowsIterator = rows != null ? rows.iterator() : null;
/* read data row by row */
public /* your data object here */ read() throws Exception
if (rowsIterator == null) return null;
if (!rowsIterator.hasNext())
String pageToken = tableDataList.getPageToken();
if (pageToken == null) return null;
tableDataList = getPage(pageToken);
rows = tableDataList.getRows();
if (rows == null) return null;
rowsIterator = rows.iterator();
TableRow row = rowsIterator.next();
for (TableCell cell : row.getF())
Object value = cell.getV();
/* extract the data here */
/* return the data */
private TableDataList getPage() throws IOException
return getPage(null);
private TableDataList getPage(String pageToken) throws IOException
TableReference sourceTable = insert
.getConfiguration()
.getQuery()
.getDestinationTable();
if (sourceTable == null)
throw new IllegalArgumentException("Source table not available. Please check the query syntax.");
return bigQuery.tabledata()
.list(projectId, sourceTable.getDatasetId(), sourceTable.getTableId())
.setPageToken(pageToken)
.setMaxResults(maxResults)
.execute();
Puede ejecutar una operación tabledata.list() en esa tabla y establecer “alt=csv”, que devolverá el comienzo de la tabla como CSV.
Te mostramos las reseñas y valoraciones de los lectores
Si guardas algún recelo o capacidad de refinar nuestro ensayo eres capaz de añadir un paráfrasis y con mucho placer lo observaremos.