google-bigquery - BigQuery - 可以查询列数据类型

标签 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

为了返回这样的东西:
+--------+-----+--------+-------+
| 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/

相关文章:

每组 SQL 不同值 - 如何 "group by"并获取每组不同值的列表?

sql - 将表上传到 BigQuery 时遇到问题

sql - 谷歌 bigquery 中的 ST_BUFFER?

java - 尝试运行 Google 语音识别 java 示例时出现 "need path to queries.json"错误

sql - 如何在 BigQuery 中进行分区外连接

python - 如何检查 BigQuery 查询结果何时返回零记录?

google-bigquery - 如何在解析 BigQuery 的导入 csv 时发现问题

python - 使用 Dataflow 和 Apache Beam (Python) 将数据从 Pub/Sub 流式传输到 BigQuery 时出现问题

google-bigquery - BigQuery 中的列数限制?