Google bigquery 基于上一个查询从表中选择列

Google bigquery 基于上一个查询从表中选择列,google-bigquery,Google Bigquery,我想利用新的元数据表动态地构建查询,类似于进行反射。我想做的是过滤掉与列描述中某个关键字匹配的列 以下是我试图做的一个尝试: 具有 非信任_mytable_列作为 选择 列名 从…起 `mydataset.INFORMATION\u SCHEMA.COLUMN\u FIELD\u路径` 哪里 table_name=mytable 和说明不象%机密% 选择 选择 * 从…起 非信任_mytable_列 从…起 `mydataset.mytable` 这不是功能性的,但希望能达到目的:我希望根据另一

我想利用新的元数据表动态地构建查询,类似于进行反射。我想做的是过滤掉与列描述中某个关键字匹配的列

以下是我试图做的一个尝试:

具有 非信任_mytable_列作为 选择 列名 从…起 `mydataset.INFORMATION\u SCHEMA.COLUMN\u FIELD\u路径` 哪里 table_name=mytable 和说明不象%机密% 选择 选择 * 从…起 非信任_mytable_列 从…起 `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   
我认为,这已经足够接近了——但仍然不完全符合您的要求——因为仍然所有列名都是公开的,但是机密列的值现在都是空的。而且-您需要明确列出所有列,而不是使用*


无论如何-现在您可以将上面的内容另存为视图,但重要的是不要将其保存在与mydataset相同的数据集中,而是要将其保存在数据集中,比如说用户可以免费使用的数据集,然后通过授权视图选项与视图共享mydataset,例如,一个调用bigquery并创建新视图的云函数。在information_schema中没有名为“description”的列…@kenean,请仔细查看,如果您从“dataset.information_schema.column_FIELD_PATHS”中选择sql*,您将看到有一个description列。它也显示在我链接到的文档中。