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