Skip to content

Invalid Statistics type for Load job #2357

Closed

Description

@Syed-SnapLogic

Hi,
I have following code snippet in my project.

Credentials c = new ServiceAccountCredentials();  /* hiding credentials here*/
 BigQueryOptions options = BigQueryOptions.newBuilder().setCredentials(c).setProjectId('id').build();
 BigQuery bq = options.getService();
 TableId id = TableId.of('project id', 'dataset id', 'table id');
 Table t = bq.getTable(id);
 t.load(FormatOptions.csv(), "gs://bucket/file1.csv");
 System.out.println(loadJob.getStatistics());

I was expecting the statistics to be of 'Load' type but its of 'Copy' type.

Can anyone tell me where am I doing wrong? Indeed, data is getting inserted into table but I am missing the output statistics (no of rows, no of bytes, etc) due to wrong type being returned.

Activity

  1. vam-google commented on Aug 28, 2017

    @vam-google
    Contributor

    Hi @Syed-SnapLogic, I don't think you are doing anything wrong. I tried to reproduce your issue and I have exactly same result: insert a load job, but receive CopyStatistics.

    What happens here is the following: on the moment when the job statistics object should be created, there is statistics type info missing (either it is not returned from the server or is lost somewhere in between), and when there is no statistics type present, the google-cloud-java bigquery client defaults to CopyStatistics (check JobStatistics.fromPb() method for details). When that code is executed the actual statisticsPb object has only 2 fields: creationTime, startTime (i.e. no type info at all).

    I need to investigate more why that happens, but there is a good chance that it is either bug on the client or the server side.

  2. added
    type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.
    priority: p1Important issue which blocks shipping the next release. Will be fixed prior to next release.
    on Aug 28, 2017
  3. self-assigned this
    on Aug 28, 2017
  4. Syed-SnapLogic commented on Aug 30, 2017

    @Syed-SnapLogic
    Author

    Hi @vam-google, I found the resolution. You can still keep your hunt if you wish.
    If I say,

    Job loadJob = table.load(...);
    System.out.println(loadJob.getStatistics());
    

    then certainly it would give copy statistics. However, doing

    Job loadJob = table.load(...);
     loadJob = loadJob.waitFor();
    System.out.println(loadJob.getStatistics());
    

    is giving load statistics.

  5. vam-google commented on Aug 30, 2017

    @vam-google
    Contributor

    Thanks for the update! It is good that it works for you now, but in that case you are dealing with an already completed job. In other words if the job is completed, it returns the proper statistics type, if it is in progress it returns a wrong one. This is still not good.

  6. removed
    type: questionRequest for information or clarification. Not an issue.
    on Nov 9, 2017
  7. added a commit that references this issue on Jan 5, 2018
    809da40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

api: bigqueryIssues related to the BigQuery API.priority: p1Important issue which blocks shipping the next release. Will be fixed prior to next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions