I queried a federated table with data in Google spreadsheet. Following recommendations in issue 720 https://code.google.com/p/google-bigquery/issues/detail?id=720 I've created following code:
Set<String> scopes = new HashSet<>();
scopes.add(BigqueryScopes.BIGQUERY);
scopes.add("https://www.googleapis.com/auth/drive");
scopes.add("https://www.googleapis.com/auth/spreadsheets");
final HttpTransport transport= new NetHttpTransport();
final JsonFactory jsonFactory= new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(transport).setJsonFactory(jsonFactory)
.setServiceAccountId(GC_CREDENTIALS_ACCOUNT_EMAIL)
.setServiceAccountScopes(scopes)
.setServiceAccountPrivateKey(getPrivateKey())
.build();
String omgsql = "SELECT * FROM [<myproject>:<mydataset>.failures] LIMIT 1000";
JobReference jobIdomg = startQuery(bigquery, "<myproject>", omgsql);
// Poll for Query Results, return result output
Job completedJobomg = checkQueryResults(bigquery, "<myproject>", jobIdomg);
GetQueryResultsResponse queryResultomg = bigquery.jobs()
.getQueryResults(
"<myproject>", completedJobomg
.getJobReference()
.getJobId()
).execute();
List<TableRow> rowsomg = queryResultomg.getRows();
Without https://www.googleapis.com/auth/drive scope job fails immediately after inserting, with it - fails on completion.
Inserting Query Job: SELECT * FROM [<myproject>:<mydataset>.failures] LIMIT 1000
Job ID of Query Job is: job_S3-fY5jrb4P3UhVgNGeRkDYQofg
Job status (194ms) job_S3-fY5jrb4P3UhVgNGeRkDYQofg: RUNNING
Job status (1493ms) job_S3-fY5jrb4P3UhVgNGeRkDYQofg: RUNNING
Job status (2686ms) job_S3-fY5jrb4P3UhVgNGeRkDYQofg: RUNNING
...
Job status (29881ms) job_S3-fY5jrb4P3UhVgNGeRkDYQofg: DONE
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"location" : "/gdrive/id/1T4qNgi9vFJF4blK4jddYf8XlfT6uDiqNpTExWf1NMyY",
"locationType" : "other",
"message" : "Encountered an error while globbing file pattern.",
"reason" : "invalid"
} ],
"message" : "Encountered an error while globbing file pattern."
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
So the question here - what else am I missing? Or is it just a bigquery bug?
Ok, after a day of experiments - the account you are using to obtain Google Credential should have access to the file(s) on which external table is created. Hope this will help someone.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With