是否有一个函数可以让我们在 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
为了返回这样的东西:
+--------+-----+--------+-------+
| fruit | qty | type1 | type2 |
+--------+-----+--------+-------+
| apple | 10 | STRING | INT64 |
| pear | 7 | STRING | INT64 |
| banana | 9 | STRING | INT64 |
+--------+-----+--------+-------+
当然,我的
DATA_TYPE()
函数不存在,我在 the docs 中找不到任何可比的东西这个功能是否存在我遗漏的地方?
最佳答案
您可以将 basket
定义为 BQ View ,然后使用 SQL 查询
select column_name, data_type
from `your_project.your_dataset.INFORMATION_SCHEMA.COLUMNS`
where table_name = 'basket'
order by ordinal_position
您在
data_type
列中获取请求的类型。我没有找到任何如何直接从 BQ 查询(类似于 Java
ResultSet.getMetaData().getColumnTypeName()
)获取 SQL 元数据的方法,AFAIK 是不可能的。从理论上讲,调用BQ查询的BQ客户端可能会被更改为通过API调用创建 View 、获取元数据、获取数据和删除 View ,但在很多方面都容易出错(需要更强的权限、竞争条件、计费问题) .我没有尝试这种方式。但是,如果您设法收集需要永久查看其类型的所有列,则它可能是您的情况的解决方案。
关于google-bigquery - BigQuery - 可以查询列数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262224/