google-bigquery - 根据先前的查询从表中选择列
问题描述
我想利用新的INFORMATION_SCHEMA元数据表动态地构建查询,类似于进行反射。我想要做的是过滤掉与列描述中的某个关键字匹配的列。
这是我正在尝试做的事情:
WITH
nonconfidential_mytable_columns AS (
SELECT
column_name
FROM
`mydataset.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS`
WHERE
table_name = "mytable"
AND description NOT LIKE "%CONFIDENTIAL%")
SELECT
(
SELECT
*
FROM
nonconfidential_mytable_columns)
FROM
`mydataset.mytable`
这不起作用,但希望能得到满足:我想根据另一个查询的结果从表中选择列。我可以通过多个查询轻松完成此操作,但我想将其保存为视图。
解决方案
下面(对于 BigQuery 标准 SQL)是我遇到的最接近您的案例
#standardSQL
WITH nonconfidential_mytable_columns AS (
SELECT ARRAY_AGG(column_name) cols
FROM `mydataset.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS`
WHERE table_name = 'mytable'
AND description NOT LIKE "%CONFIDENTIAL%"
)
SELECT
IF('col1' IN UNNEST(cols), col1, NULL) col1,
IF('col2' IN UNNEST(cols), col2, NULL) col2,
IF('col3' IN UNNEST(cols), col3, NULL) col3
FROM `mydataset.mytable`, nonconfidential_mytable_columns
我认为,它已经足够接近了——但仍然不完全是你的“要求”——因为仍然暴露了所有列名,但“机密”列的值现在都是 NULL。而且 - 您需要明确列出所有列与使用*
无论如何-现在您可以将上面另存为视图,但重要的是不要将其保存在与用户相同的数据集中,mydataset
而是将其保存在users_dataset
用户可以免费使用的数据集中(比方说),然后mydataset
通过以下方式与视图共享Authorized View
选项
推荐阅读
- swift - 与另一个选项卡交互时,如何使 SwiftUI 选项卡视图重新加载?
- python - 如何改进 Python 类的迭代
- python - 如何在 Python 中异或两个字节数组
- node.js - TypeError:this.state.propertydetails.map 不是函数
- android - Quickblox 语音通话/视频通话
- javascript - 如何在数据更改的反应表中维护 css 转换
- java - Eclipse 可以与 Z 垃圾收集器一起运行吗?
- c# - 无法在 Visual Studio 中创建 xml 文件
- macos - 升级 brew 不适用于任何密码 - 如何获得适当的权限?- 我应该如何正确管理冲泡?
- google-chrome-extension - 如何使 HTML 文件出现在我的扩展页面上?