【问题标题】:Google Bigquery java client listTables return numBytes and numRows as nullGoogle Bigquery java 客户端 listTables 将 numBytes 和 numRows 返回为 null
【发布时间】:2021-12-23 07:28:55
【问题描述】:

当我尝试使用 BigQuery java 客户端的 listTables API 查找所有表的大小时,它返回 null。但如果我单独使用 getTable,我会得到正确的数据。这是一个已知问题,还是我做错了什么。以下是为 numBytes 返回 null 值的代码:

Page<Dataset> datasetPage = getAllDatasets("projectId");
        if(datasetPage!=null) {
            for (Dataset dataset : datasetPage.iterateAll()) {
                for(Table table : dataset.list().iterateAll()) {
                    System.out.println(table.getNumBytes());  // Returns Null. **
                }
            }
        }

【问题讨论】:

    标签: google-bigquery google-api-java-client


    【解决方案1】:

    在这个公共问题跟踪器thread 中,已经讨论过使用 listTables 获取 numBytes 和 numRows 的 null 值是预期的行为。 BigQuery API 认为检索 numBytes 和 numRows 是一项昂贵的操作,因此返回 null。所以,listTables 只返回一个表的部分信息。

    作为一种解决方法,使用getTable() 在循环中单独检索表的信息。我测试了下面的代码 sn-p 并且能够获取所有表的表大小(以字节为单位)。

    public static void getAllTableSize(String projectId) {
        try {
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
          Page<Dataset> datasetPage = bigquery.listDatasets(projectId);
            if(datasetPage!=null) {
                for (Dataset datasetTemp : datasetPage.iterateAll()) {
                    for(Table table : datasetTemp.list().iterateAll()) {
                        Table tableTemp = bigquery.getTable(table.getTableId());
                        String tableName = tableTemp.getTableId().getTable();
                        Long tableSize = tableTemp.getNumBytes();
                        System.out.println("Table Name: " + tableName + "  " + "Table Size: " + tableSize);  
                    }
                }
            }
        } catch (BigQueryException e) {
            System.out.println("Error occurred: " + e.toString());
          }
        }
    

    【讨论】:

    • 是的,个人 getTable 会返回我在问题本身中提到的所有信息,但我主要担心的是为什么它不适用于 listTables @Vishal K
    • 我问这个的原因是因为为数千个表单独调用 getTable 非常耗时
    • 嗨@SachinJanani,请查看我更新的答案。与 Google 问题跟踪器中讨论的问题相同。您还可以通过引用此link 来为该问题添加星标以接收自动更新并为其提供牵引力。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2021-04-13
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多