Выбор столбцов из таблицы на основе предыдущего запроса - PullRequest
0 голосов
/ 08 февраля 2019

Я бы хотел использовать новую таблицу метаданных 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`

Этоне работает, но, надеюсь, у меня есть желание: я хочу выбрать столбцы из таблицы на основе результата другого запроса.Я мог бы сделать это легко с несколькими запросами, но я хочу сохранить это как представление.

1 Ответ

0 голосов
/ 09 февраля 2019

Ниже (для BigQuery Standard 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 параметр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...