如何列出项目中的所有表格大小

2023-12-04

有没有办法列出 BigQuery 中的所有表大小?

我知道这样的命令:

select 
  table_id,
  sum(size_bytes)/pow(10,9) as size
from
  certain_dataset.__TABLES__
group by 
  1

但我想知道所有数据集中的所有表。

Thanks


随着 2020 年 BigQuery 脚本引入动态 SQL,这个问题变得容易一些。现在,我们可以动态构建查询并通过EXECUTE IMMEDIATE.

对于所有数据集都在的大多数情况,类似的事情会做region-us:

DECLARE dataset_names ARRAY<STRING>;

SET dataset_names = (
    SELECT ARRAY_AGG(SCHEMA_NAME) FROM `region-us.INFORMATION_SCHEMA.SCHEMATA`
);

EXECUTE IMMEDIATE (
    SELECT STRING_AGG(
        (SELECT """
            SELECT project_id, dataset_id, table_id, row_count, size_bytes 
            FROM `""" || s || 
            """.__TABLES__`"""), 
            " UNION ALL ")
    FROM UNNEST(dataset_names) AS s);

如果存在大量数据集,则在尝试同时读取所有元数据时可能会返回速率限制错误。

如果发生这种情况,那么我们可以依靠“批处理”方法,这种方法读取起来有点复杂,速度较慢/效率较低,但仍然可以完成工作:

DECLARE dataset_names ARRAY<STRING>;
DECLARE batch ARRAY<STRING>;
DECLARE batch_size INT64 DEFAULT 25;

CREATE TEMP TABLE results (
    project_id STRING,
    dataset_id STRING,
    table_id STRING,
    row_count INT64,
    size_bytes INT64
);

SET dataset_names = (
        SELECT ARRAY_AGG(SCHEMA_NAME) 
        FROM `region-us.INFORMATION_SCHEMA.SCHEMATA`
    );

LOOP
    IF ARRAY_LENGTH(dataset_names) < 1 THEN 
        LEAVE;
    END IF;

    SET batch = (
        SELECT ARRAY_AGG(d) 
        FROM UNNEST(dataset_names) AS d WITH OFFSET i 
        WHERE i < batch_size);

    EXECUTE IMMEDIATE (
        SELECT """INSERT INTO results """ 
            || STRING_AGG(
                    (SELECT """
                        SELECT project_id, dataset_id, table_id, row_count, size_bytes 
                        FROM `""" || s || """.__TABLES__`"""), 
                " UNION ALL ")
        FROM UNNEST(batch) AS s);

    SET dataset_names = (
        SELECT ARRAY_AGG(d) 
        FROM UNNEST(dataset_names) AS d
        WHERE d NOT IN (SELECT * FROM UNNEST(batch)));
        
END LOOP; 

SELECT * FROM results;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何列出项目中的所有表格大小 的相关文章

随机推荐

  • 如何使用 Tesseract 对图像进行 OCR

    我开始学习 OpenCV 和 Tesseract 并且在一个看似非常简单的示例上遇到了麻烦 这是我尝试 OCR 的图像 内容为 171 m 我做了一些预处理 由于蓝色是文本的主色 因此我提取蓝色通道并应用简单的阈值处理 img cv2 im
  • 执行Excel4Macro从关闭的工作簿中获取范围/图表

    我使用这些行从关闭的工作簿中获取值 Arg Path File Sheet R4C4 Arg CStr Arg GetValue ExecuteExcel4Macro Arg 除了循环之外还有其他方法从范围中获取值吗 循环解决方案正在工作
  • JavaScript 原型不工作

    嗨 我不知道这是否是我理解 Javascript 原型对象的错误 需要明确的是 我对 Javascript 单例概念很陌生 并且缺乏明确的知识 但是通过一些推荐网站 我为我的系统制作了示例代码 但它给出了一些错误 我找不到原因 所以我 我请
  • Android 创建位图时出现 OutOfMemory 错误

    我收到错误java lang OutOfMemoryError bitmap size exceeds VM budget 当为了手动绘制折线图而创建位图时会发生这种情况 width display getWidth 10 height w
  • Jenkins 日志变得巨大并填满了整个磁盘空间

    每周我都会惊讶地发现我的 Jenkins 服务器达到了 Jenkins 日志使用的 100 磁盘 所以我删除了该文件 然后我的磁盘再次获得大量可用空间 ec2 user ip xxx xxx xxx xxx df h Filesystem
  • 如何将环境设置导入到我的 Perl 程序中?

    我有一个脚本 其内容只是导出 Linux 中的一个变量 export LD LIBRARY PATH 我想在我的 Perl 脚本中运行这个脚本 这样无论是谁运行我的 Perl 脚本都会有他们的LD LIBRARY PATH放 我可以在 Pe
  • 初级ILNumerics:VS2012下安装

    我对 ILNUmerics 非常感兴趣 想尝试免费版本 但我遇到了麻烦 我已经从控制台应用程序开始 并尝试运行 hello ilnumerics 控制台应用程序 但我注意到 VS 无法找到 MKL 库 我在 Windwos 8 下使用 VS
  • Azure函数应用程序使用slf4j登录App Insights

    使用 Spring Cloud Functions 实现了 Azure Function App 在应用程序设置 APPINSIGHTS INSTRUMENTATIONKEY 中配置的 App Insights 检测密钥 我使用 lombo
  • react-native fetch - 请求正文 - 意外的 EOF

    在我的反应本机应用程序中 我尝试使用以下命令发出获取请求body 但是 我收到错误消息unexpected EOF 实际上 请求已发出 我的意思是我可以通过后端日志看到请求已发送 而在请求之后 它立即显示错误消息 这是我的fetch met
  • python: += s, 中的逗号有什么作用?

    我正在做一个问题 输入是字符串 abc bcd acef xyz az ba a z 代码如下所示 def groupStrings self strings groups collections defaultdict list for
  • 如何获取res文件夹的Uri?

    我正在尝试获取可绘制文件夹中图像的 Uri 我尝试了很多可能的方法 但似乎没有任何效果 谁能建议我如何获取 res 文件夹的 Uri 任何帮助深表感谢 嗯 实际上很容易 包中资源的基本 URI 类似于以下可能性 android resour
  • 如何为 iphone 5 设置 apple-touch-startup-image?

    I tried 但这没有用 苹果的界面指南还没有针对 iPhone 5 进行更新 有谁知道吗 谢谢 1 视口不要使用 width device width 使用以下代码
  • SSO - 未找到 OpenID 端点

    我正在尝试让 SSO openid 与 dotnetopenauth 一起使用 我有两个单独的项目 分别进行调试 都在本地主机上 但有两个不同的端口 一个充当提供者 一个充当依赖方 依赖方正在运行localhost 1903 提供者正在运行
  • 无效的 Git RSA 密钥指纹

    我开始收到这个错误 Received disconnect from 192 30 253 112 port 22 2 Connection blocked because server only allows public key aut
  • 如何在 Visual Studio 或其他构建工具的一个 C# 项目中生成 dll 和 exe 的混合?

    如何在 Visual Studio 或其他构建工具的一个 C 项目中生成 dll 和 exe 的混合 技术上可行吗 是的 我知道它可以在 2 个或更多项目中完成 我不确定你的问题的动机是什么 因为你可以引用 Net 可执行文件 就好像它是
  • 从 MySQL 中的同一(随机)记录中选择 2 列的最快方法是什么?

    我希望从同一条记录中随机检索一对列 不过 我听说 Rand 效率很低 所以我想使用不同的方式 很多文章都这么说 包括http akinas com pages en blog mysql random row 是的 我的标题几乎说明了一切
  • Haskell do 块中如何允许表达式

    在以下代码的第 4 行中 我在 do 块中的两个 IO 操作之间夹有一个表达式 1 doubleX Show x Num x gt x gt IO 2 doubleX x do
  • 我需要从 tomcat 读取带有日志的远程文件

    我需要从 tomcat 读取带有日志的远程文件 如果我可以通过 ssh 访问日志文件夹 最方便的方法是什么 日志查看器可以从远程服务器读取日志 它支持SFTP FTP和Samba 它还提供远程文件系统浏览器 免责声明 我是 OtrosLog
  • 如何用swift 2.0播放背景音乐?

    嗨 我是 swift 和 ios 开发的新手 我的代码一直在工作 直到我更新到 Swift 2 0 我使用了 swift 迁移工具 但我仍然不知道如何排序和修复我的代码 请帮忙 import AVFoundation var backgro
  • 如何列出项目中的所有表格大小

    有没有办法列出 BigQuery 中的所有表大小 我知道这样的命令 select table id sum size bytes pow 10 9 as size from certain dataset TABLES group by 1