【问题标题】:BigQuery get table schema via queryBigQuery 通过查询获取表架构
【发布时间】:2018-04-07 00:09:50
【问题描述】:

是否可以通过查询获取 BigQuery 表架构信息? (类似于 TABLES 但用于模式)。对 cli 方法不感兴趣。

我想要实现的是在 2 个 BQ 表(比如说暂存和生产)之间执行“增量”更新,该更新具有基于 1 个“键”列的相同结构,但使用自动创建方式基于所有其他列的键和哈希的其余部分。

在 MySQL/mariadb 中是这样的。从 information_schema.columns 获取特定表的列和字符串 agg 所有基于 COLUMN_TYPE = "PRI" 的列并保留为键,然后也使用字符串 agg 获取所有其他列。这将自动生成一个 SQL 查询以完成其余的工作。

所以开始的问题是是否有与 MySQL 的 information_schema.COLUMNS 相关的东西

【问题讨论】:

标签: google-bigquery


【解决方案1】:

2021 年更新

现在可以了:

SELECT 
 TO_JSON_STRING(
    ARRAY_AGG(STRUCT( 
      IF(is_nullable = 'YES', 'NULLABLE', 'REQUIRED') AS mode,
      column_name AS name,
      data_type AS type)
    ORDER BY ordinal_position), TRUE) AS schema
FROM
  <YOUR_DATASET>.INFORMATION_SCHEMA.COLUMNS
WHERE
  table_name = <YOUR_TABLE>

【讨论】:

    【解决方案2】:

    查看Getting table metadata using INFORMATION_SCHEMA 上的 Google 文档。 INFORMATION_SCHEMA 提供有关您的 BigQuery 数据集的元数据。

    我相信您想要以下内容:

    SELECT * 
    FROM `project-id.dataset_name.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS`
    

    【讨论】:

      【解决方案3】:

      我可以看到几种方法,尽管它们与 MYSQL 方法不同 -

      1. 如果您必须使用query,只需创建一个装饰器来包装带有limit 1 子句的查询。虽然您需要支付与运行全表扫描相同的费用,但它会为您提供响应中的架构(请参阅查询作业的documentation)。由于可能会产生费用,因此这不是最佳方法。
      2. 如果您没有绑定到query 工作,为什么不使用tables get 方法?它returns 包含架构的表资源对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-25
        • 2012-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多