BigQuery 通过查询获取表架构

Ale*_*lou 15 google-bigquery

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

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

在 MySQL/mariadb 中会是这样的。从 information_schema.columns 获取特定表的列,并以 COLUMN_TYPE = "PRI" 为基础对所有列进行字符串聚合,并将其保留为键,然后也使用字符串聚合获取所有其他列。这将自动生成一个 SQL 查询来完成剩下的事情。

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

小智 15

查看有关使用 INFORMATION_SCHEMA 获取表元数据的 Google 文档。INFORMATION_SCHEMA 提供有关 BigQuery 数据集的元数据。

我相信您想要以下内容:

SELECT * 
FROM `project-id.dataset_name.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS`
Run Code Online (Sandbox Code Playgroud)


小智 15

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>
Run Code Online (Sandbox Code Playgroud)


Gil*_*rim 2

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

  1. 如果必须使用 a query,只需创建一个装饰器来用子句包装查询limit 1。虽然您需要支付与运行全表扫描相同的费用,但它在响应中为您提供架构(请参阅查询作业的文档)。由于可能产生费用,这不是最好的方法。
  2. 如果您与工作无关query,为什么不使用table get方法呢?它返回一个包含架构的表资源对象