【问题标题】:BigQuery check if table exists or notBigQuery 检查表是否存在
【发布时间】:2017-08-09 03:13:59
【问题描述】:

我正在使用 C# 根据来自 bigquery api 表端点的响应动态构建查询。我正在尝试计算有效的活跃用户,但前提是我使用.* 选择每个表。我的问题真的很简单,有没有办法检查 BigQuery SQL 中是否存在表?

【问题讨论】:

    标签: sql google-bigquery google-cloud-storage google-cloud-platform


    【解决方案1】:
    #standardSQL
    SELECT COUNT(1) AS cnt
    FROM `project.dataset.__TABLES_SUMMARY__`
    WHERE table_id = 'mytable'
    

    【讨论】:

    • 作为后续,是否可以检查是否已将新表添加到分片表中?
    • 你对new table的定义是什么?
    • 例如:我有一个数据集,其中包含名为“AB_timestamp”的表。所以每周都应该添加一个带有适当时间戳的新表。我可以检查一下吗?我知道我可以手动检查它,但我正在尝试自动化它。
    • 那么,你想(比方说)检查是否已经添加了本周的表格?
    • 当然可以。 cmets 格式不允许正确呈现/格式化答案 - 请发布您的问题,我会在我的电脑前立即回答:o)
    【解决方案2】:

    有称为__TABLES____TABLES_SUMMARY__ 的元表

    您可以运行如下查询:

    SELECT size_bytes FROM <dataset>.__TABLES__ WHERE table_id='mytablename'
    

    该查询的__TABLES__ 部分可能看起来不熟悉。 __TABLES_SUMMARY__ 是一个元表,其中包含有关数据集中表的信息。您可以自己使用此元表。例如,查询SELECT * FROM publicdata:samples.__TABLES_SUMMARY__ 将返回有关publicdata:samples 数据集中表的元数据。你也可以SELECT * FROM publicdata:samples.__TABLES__

    可用字段:

    __TABLES_SUMMARY__ 元表的字段(在 TABLE_QUERY 查询中都可用)包括:

    • table_id:表名。
    • creation_time:自 1970 年 1 月 1 日 UTC 以来的时间,以毫秒为单位,创建表。这与表格中的creation_time 字段相同。
    • type:无论是视图(2)还是常规表(1)。

    以下字段在TABLE_QUERY()可用,因为它们是__TABLES__ 但不是__TABLES_SUMMARY__ 的成员。出于历史兴趣和部分记录__TABLES__ 元表,将它们保留在这里:

    • last_modified_time:自 1970 年 1 月 1 日 UTC 以来的时间(以毫秒为单位),表已更新(元数据或表内容)。请注意,如果您使用 tabledata.insertAll() 将记录流式传输到您的表,这可能会过时几分钟。
    • row_count:表中的行数。
    • size_bytes:表的总大小(以字节为单位)。

    【讨论】:

    • 我尝试使用 BigQueryOperator 对 Airflow 进行上述查询,但它不起作用。那么 BigQueryOperator 有什么实现方式吗?所以我们可以检查 if_table_exist 与否。
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2015-10-18
    相关资源
    最近更新 更多