如何在不运行SELECT COUNT(*)查询的情况下计算行数?

时间:2017-12-07 00:17:21

标签: google-apps-script google-bigquery

我正在尝试使用Google App Script获取BigQuery表中的行数。这就是我尝试这样做的方式

BigQuery.Tables.get(projectId, datasetId, tableId).numRows

无论我插入的tableId是什么,我总是得到 265 的值。 我至少确定单个表有数亿行。那么为什么我将 265 作为 numRows 属性的值?!

如何在不必运行SELECT COUNT(*) FROM datasetId.tableId查询的情况下获取BigQuery表的总行数,这样我的配额消耗不多?

1 个答案:

答案 0 :(得分:4)

  

如何在不运行SELECT COUNT(*)FROM datasetId.tableId查询的情况下获取BigQuery表的总行数,这样我的配额消耗不多?

1 - 您可能会感到惊讶,但SELECT COUNT(*) FROM datasetId.tableId不会给您带来任何成本,因为BigQuery引擎非常智能,可以从所谓的元表中获取此统计信息。如果要打开验证器(在BigQuery UI上的按钮右侧),您可以看到此类查询的成本消息。消息将为 - This query will process 0 B when run

2 - 此外 - 您可以自己查询元表,如下例所示:

#standardSQL
SELECT table_id,
    DATE(TIMESTAMP_MILLIS(creation_time)) AS creation_date,
    DATE(TIMESTAMP_MILLIS(last_modified_time)) AS last_modified_date,
    row_count,
    size_bytes,
    CASE
        WHEN type = 1 THEN 'table'
        WHEN type = 2 THEN 'view'
        WHEN type = 3 THEN 'external'
        ELSE '?'
    END AS type,
    TIMESTAMP_MILLIS(creation_time) AS creation_time,
    TIMESTAMP_MILLIS(last_modified_time) AS last_modified_time,
    dataset_id,
    project_id
FROM `projectid.datasetid.__TABLES__`