BigQuery - 可以查询列数据类型

Ste*_*t_R 9 google-bigquery

是否有一个函数可以让我们查询 BigQuery 中列的数据类型?

我想找到这样的东西:

WITH basket AS
    (SELECT "apple" AS fruit, 10 AS qty
    UNION ALL SELECT "pear" AS fruit, 7 AS qty
    UNION ALL SELECT "banana" AS fruit, 9 AS qty)

-- !!this doesn't work!!:
SELECT
    fruit,
    qty,
    DATA_TYPE(fruit) AS type1, 
    DATA_TYPE(qty) AS type2 
FROM basket
Run Code Online (Sandbox Code Playgroud)

为了返回这样的东西:

+--------+-----+--------+-------+
| fruit  | qty | type1  | type2 |
+--------+-----+--------+-------+
| apple  |  10 | STRING | INT64 |
| pear   |   7 | STRING | INT64 |
| banana |   9 | STRING | INT64 |
+--------+-----+--------+-------+
Run Code Online (Sandbox Code Playgroud)

当然,我的函数不存在,我在文档DATA_TYPE()中找不到任何类似的东西

这个功能是否存在于我所缺少的地方?

Tom*_*ský 13

您可以定义basket为BQ视图,然后使用SQL查询

select column_name, data_type
from `your_project.your_dataset.INFORMATION_SCHEMA.COLUMNS`
where table_name = 'basket'
order by ordinal_position
Run Code Online (Sandbox Code Playgroud)

您在列中获得请求的类型data_type

我没有找到任何方法如何直接从 BQ 查询(类似于 Java ResultSet.getMetaData().getColumnTypeName())获取 SQL 元数据,据我所知这是不可能的。

理论上,调用 BQ 查询的 BQ 客户端可能会更改为通过 API 调用创建视图、获取元数据、获取数据和删除视图,但它在很多方面都容易出错(需要更强的权限、竞争条件、计费问题) 。我没有尝试这种方式。但是,如果您设法收集需要获取永久视图类型的所有列,那么它可能是您的情况的解决方案。