Xesygao

  • 首页
  • 学习记录
    • Java学习记录
    • Android学习记录
    • 网站相关
  • 玩机手册
  • 贴吧云签到
  1. 首页
  2. 学习记录
  3. 正文

Google BigQuery之获取数据重复问题

2017年11月7日 6307点热度 0人点赞 2条评论

按照官方教程从Google BigQuery中获取数据时遇到了一个问题。当数据量只有2~3w的时候获取的数据量是正常的,但是当数据量足够多的时候,获取到的数据量往往比实际数据量多,当然,其中的数据是有重复的。
这个Google官方的迭代数据的代码


    QueryResult result = response.getResult();
    // Print all pages of the results.
    while (result != null) {
      for (List<FieldValue> row : result.iterateAll()) {
        List titles = row.get(0).getRepeatedValue();
        System.out.println("titles:");

        for (FieldValue titleValue : titles) {
          List titleRecord = titleValue.getRecordValue();
          String title = titleRecord.get(0).getStringValue();
          long uniqueWords = titleRecord.get(1).getLongValue();
          System.out.printf("%s: %d\n", title, uniqueWords);
        }

        long uniqueWords = row.get(1).getLongValue();
        System.out.printf("total unique words: %d\n", uniqueWords);
      }

      result = result.getNextPage();
    }

在这段代码中,result.iterateAll()是迭代全部的记录,迭代一遍后,result.getNextPage()不为空,下个循环得到的依然是全部的记录,直到最后一页。所以当数据量小的时候,小到小于分页大小的时候获得是数据量是正常的,但是当数据量超过分页大小时,数据就会重复了,正确的迭代姿势应该是这样的

    List fields=result.getSchema().getFields();

    // Print all pages of the results.
    Iterator it = result.iterateAll().iterator();
    while (it.hasNext()) {
        List values= it.next();
        Document document=new Document();
        for (int i=0;i<values.size();i++) { if("created_at".equals(fields.get(i).getName())){ document.put(fields.get(i).getName(),new Date(values.get(i).getTimestampValue()/1000)); }else document.put(fields.get(i).getName(),values.get(i).getValue()); } if(!"null".equals(document.get("_id"))) { documents.add(document); count++; } if(count==BATCH_SIZE){ if(documents.size()>0) {
                insertData(documents);
            }
            documents.clear();
            count = 0;
        }
    }

ps:这段代码包含了我项目的逻辑,方法是这样的。

标签: 暂无
最后更新:2018年3月27日

xesygao

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • Pdfstar

    彪牛逼!

    2021年1月26日
    回复
  • jinyang

    加油

    2017年12月13日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    COPYRIGHT © 2025 Xesygao. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang