我只使用了两个临时内联表来计算表大小和Google BigQuery的总数据集大小.这里的数据集称为测试.

一旦创建了这两个临时表(分别称为TABLE_SIZES和DATASET_SIZE),我进行了笛卡尔连接,这应该是可以的,因为DATSET_SIZE只有一列,即DB_SIZE.

WITH table_sizes AS ( 
 SELECT
    table_id
  , row_count
  , ROUND(SUM(size_bytes) / (1024*1024), 2) AS size_in_mb
FROM test.__TABLES__
GROUP BY
  table_id,
  row_count
), dataset_size AS
(
SELECT
ROUND(SUM(size_bytes)/1024/1024, 2) AS DB_size
FROM test.__TABLES__
)
SELECT
    t.table_id
  , t.row_count
  , t.size_in_mb
  , ROUND(t.size_in_mb*100/d.DB_size,1) AS percent
  FROM
  table_sizes t,
  dataset_size d
  ORDER BY 
  t.size_in_mb DESC
  LIMIT 5
  ;

它会产生以下输出

[{
  "table_id": "randomdata",
  "row_count": "11100330",
  "size_in_mb": "1651.42",
  "percent": "97.6"
}, {
  "table_id": "ocod_full",
  "row_count": "95535",
  "size_in_mb": "39.98",
  "percent": "2.4"
}, {
  "table_id": "DUMMY",
  "row_count": "10000",
  "size_in_mb": "0.99",
  "percent": "0.1"
}, {
  "table_id": "abcd",
  "row_count": "2",
  "size_in_mb": "0.0",
  "percent": "0.0"
}, {
  "table_id": "json",
  "row_count": "0",
  "size_in_mb": "0.0",
  "percent": "0.0"
}]

如果任何人有更好的建议,请添加

推荐答案

当您的第二个查询返回标量值时,您可以try .

 SELECT
    table_id
  , row_count
  , ROUND(SUM(size_bytes) / (1024*1024), 2) AS size_in_mb
,ROUND(SUM(size_bytes) / (1024*1024), 2) / (
  SELECT
     ROUND(SUM(size_bytes)/1024/1024, 2) 
  FROM test.__TABLES__
  ) AS precent
FROM test.__TABLES__

GROUP BY
  table_id,
  row_count

Sql相关问答推荐

PostgreSQL:获取每家店铺收入最高的员工

如何在PostgreSQL中同时为id s列表执行多个update语句?'

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

BigQuery`喜欢ANY‘和`不喜欢ANY’

如何在不更改S代码的情况下,判断存储过程调用了多少次clr函数?

编写一个SQL查询来返回收视率较高的类型,并取这些收视率的平均值,我该如何做呢?

在Oracle SQL中将列值转换为行

SQL子查询返回多个值错误

获得第三名或最老的记录

如何实现同一列的递归计算?

我如何才能在付款人单列中拉出只有9个付款人单的人?

统计PostgreSQL中前10个最大大小表的行数

Select 组中的第一行,但在并发环境中

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

如何从postgresql中的项目映射(关联数组)设置值?

SQL 多个不满足的条件失败

MIN MAX 值与条件绑定

PlSql 陷入死循环

SQL 查询以填充单个列中的所有值

按 15 分钟递增计数分组,包括 0 计数