基于以前的查询表中选择列

问题描述 投票:0回答:1

我想利用新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`

这不是功能,但希望得到跨越的愿望:我想从基于另一个查询结果的表中选择列。我可以用多个查询做到这一点很容易,但我想它保存为一个视图。

google-bigquery
1个回答
1
投票

下面(的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而是将其保存在数据集(假设users_dataset)是免费提供给用户,然后一起分享mydataset经由Authorized View选项视图

© www.soinside.com 2019 - 2024. All rights reserved.