这里是代码段
`GoogleCredential凭证=新的GoogleCredential(); credential.setAccessToken(tv.trim()); GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( TRANSPORT,JSON_FACTORY,CLIENT_ID,CLIENT_SECRET,Arrays.asList(BigqueryScopes.BIGQUERY)) .build();
Credential c = flow.createAndStoreCredential(oauth2callback.tokens, null);
bigquery = new Bigquery(TRANSPORT, JSON_FACTORY, c);
Datasets.List datasetRequest = bigquery.datasets().list("real-time-insight");
DatasetList datasetList = datasetRequest.execute();
if (datasetList.getDatasets() != null) {
List<DatasetList.Datasets> datasets = datasetList.getDatasets();
System.out.println(" ");
System.out.println("Available datasets\n----------------");
System.out.println(" "+datasets.toString()+" ");
System.out.println(" ");
for (DatasetList.Datasets dataset : datasets) {
System.out.format("%s\n", dataset.getDatasetReference().getDatasetId());
System.out.println(" ");
}
}
/* DatasetList list = bigquery.datasets().list("real-time-insight").execute();
out.println(list);
System.out.println("lists are :: "+list);*/
String query = "select * from [ajay.export] where From_State like '%Alabama%' LIMIT 1";
// QueryResponse response=null;
Job job = new Job();
JobConfiguration config = new JobConfiguration();
JobConfigurationQuery queryConfig = new JobConfigurationQuery();
config.setQuery(queryConfig);
job.setConfiguration(config);
queryConfig.setQuery(query);
Insert insert = bigquery.jobs().insert("real-time-insight", job);
insert.setProjectId("real-time-insight");
JobReference jobId = insert.execute().getJobReference();
System.out.println(" ");
System.out.println("job id : " +jobId);
System.out.println(" ");
Job pollJob = bigquery.jobs().get("real-time-insight", jobId.getJobId()).execute();
if (pollJob.getStatus().getState().equals("DONE"))
{
System.out.println(" ");
System.out.format("Job status %s: %s\n",
jobId.getJobId(), pollJob.getStatus().getState());
System.out.println(" ");
}
else
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("1. here");
System.out.println(" ");
System.out.println("poll job id is :: "+pollJob.getJobReference().getJobId());
String pageToken=null;
System.out.println(" ");
System.out.println("1. here " );
System.out.println(" ");
GetQueryResultsResponse queryResult = bigquery.jobs()
.getQueryResults(
"real-time-insight", pollJob.getJobReference().getJobId())
.setPageToken(pageToken).execute();
if (queryResult.getJobComplete()) {
List<TableRow> rows = queryResult.getRows();
System.out.print("\nQuery Results:\n------------\n");
for (TableRow row : rows) {
for (TableCell field : row.getF()) {
System.out.printf("%-50s", field.getV());
}
System.out.println();
}
pageToken = queryResult.getPageToken();
if (null == pageToken) {
return;
}
}
System.out.println("12345. here");
/* List<TableRow> rows = queryResult.getRows();
System.out.print("\nQuery Results:\n------------\n");
for (TableRow row : rows) {
for (TableCell field : row.getF()) {
System.out.printf("%-50s", field.getV());
}
System.out.println();
}`
堆栈跟踪
java.lang.IllegalArgumentException:[key totalRows,field private com.google.common.primitives.UnsignedLong com.google.api.services.bigquery.model.QueryResponse.totalRows] 在com.google.api.client.json.JsonParser.parseValue(JsonParser.java:630) 在com.google.api.client.json.JsonParser.parse(JsonParser.java:342) 在com.google.api.client.json.JsonParser.parseValue(JsonParser.java:578) 在com.google.api.client.json.JsonParser.parse(JsonParser.java:281) 在com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87) 在com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81) 在com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459) 在com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:470) 在com.ajay.oauth.BigQueryHandler1.doGet(BigQueryHandler1.java:61) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166) 在com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) 在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) 在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) 在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) 在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:490) 在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在org.mortbay.jetty.Server.handle(Server.java:326) 在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923) 在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) 在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582) 引起:java.lang.IllegalArgumentException:期望的原始类,但得到:class com.google.common.primitives.UnsignedLong 在com.google.api.client.util.Data.parsePrimitiveValue(Data.java:453) 在com.google.api.client.json.JsonParser.parseValue(JsonParser.java:628)
答案 0 :(得分:0)
免责声明:我没有BigQuery
的第一手经验,以下是一般编程推理:
根据Guava docs,UnsignedLong
是无符号长值的包装类。另外,根据文档,它有一个longValue()
方法,正如您所料,它以long
形式返回值。
在某处(确切地说,您发布的代码中没有立即显示),您有一个(可能是间接地)调用com.google.api.client.util.Data.parsePrimitiveValue(Data.java:453)
的方法,它看起来像这样(source):
public static Object parsePrimitiveValue(Type type, String stringValue) {
Class<?> primitiveClass = type instanceof Class<?> ? (Class<?>) type : null;
...
if (primitiveClass == Character.class || primitiveClass == char.class) {....}
if (primitiveClass == Boolean.class || primitiveClass == boolean.class) {... }
//checks for each primitive class to see if it matches the type passed in
//if no primitive type is matched:
throw new IllegalArgumentException("expected primitive class, but got: " + type);
}
显然,这个方法是使用类型参数UnsignedLong
调用的。你需要找出发生的位置(提示:遵循堆栈跟踪),然后找出传递给它的参数的来源(提示:进一步跟踪堆栈跟踪)。我打赌你会找到一种方法来解决这个问题:
someMethod(){
UnsignedLong val;
...
parsePrimitiveValue(val.getClass().getName(), val.toString());
...
}
因此,弄清楚如何将对某事的调用改为
parsePrimitiveValue(Long.class.getName(), val.longValue().toString())