Не удается получить доступ к разрешению поля для значения с типом ARRAY‹STRUCT‹resource STRING, разрешение STRING, предоставлено BOOL

Попытка запустить этот запрос (mytable не настоящее имя таблицы):

введите здесь описание изображения

Получение этой ошибки: Cannot access field permission on a value with type ARRAY<STRUCT<resource STRING, permission STRING, granted BOOL, ...>> at [2:41]

В схеме написано, что это просто строка: введите здесь описание изображения

Когда я просматриваю таблицу, она выглядит так:

введите здесь описание изображения


person red888    schedule 07.02.2019    source источник


Ответы (1)


Как вы можете видеть из схемы ниже - protopayload_auditlog.authorizationInfo это массив

введите здесь описание изображения

Итак, чтобы вы могли получить доступ к элементу массива, вы должны сначала разложить его, как в примере ниже.

#standardSQL
SELECT DISTINCT x.permission
FROM `your_table`,
UNNEST(protopayload_auditlog.authorizationInfo) x
LIMIT 10

с результатом как

введите здесь описание изображения

Примечание: сокращенная версия UNNEST в приведенном выше запросе

#standardSQL
SELECT DISTINCT x.permission
FROM `your_table` t,
t.protopayload_auditlog.authorizationInfo x
LIMIT 10

Обновление для how do I concat it to a comma separated string?

#standardSQL
SELECT ARRAY_TO_STRING(ARRAY(SELECT permission FROM t.protopayload_auditlog.authorizationInfo), ',') permissions
FROM `your_table` t
LIMIT 10
person Mikhail Berlyant    schedule 07.02.2019
comment
как мне объединить его в строку, разделенную запятыми? Я хочу получить это как одно поле и вернуть другие поля (например, имя ведра) - person red888; 07.02.2019
comment
на самом деле это новый вопрос; о), если у вас будет больше - пожалуйста, напишите новый вопрос, и я (или кто-то другой на SO) буду рад ответить. Тем временем - смотрите обновление в моем ответе и рассмотрите возможность голосования и принятия; o) - person Mikhail Berlyant; 07.02.2019
comment
хорошо, а где я могу увидеть правильную схему, как на скриншоте? Это видно только в старом интерфейсе? Почему новый интерфейс этого не показывает? - person red888; 07.02.2019
comment
хороший вопрос! схема, представленная в моем ответе, недоступна в веб-интерфейсе Google - ни в классической, ни в новой. Я использую Goliath для BigQuery, так что скриншот оттуда. Вы можете попробовать его бесплатно — проверьте его на Google Cloud Marketplace — Potens. io — Также вы можете прочитать об особенностях инструментов здесь. Раскрытие информации — см. мой значок — я автор и архитектор Potens.io — набора веб-инструментов для повышения производительности, таких как Magus и Goliath. А также расширение для Chrome BigQuery Mate. - person Mikhail Berlyant; 07.02.2019
comment
Я мог бы задать другой вопрос по этому поводу, но как вы получаете это? Я пытаюсь использовать тот же array_to_string, но он не работает. Это потому, что предоставлено логическое значение? - person red888; 07.02.2019
comment
вам действительно следует задать новый вопрос, объясняющий ваш конкретный случай со всеми примерами и логикой, которые вам нужно достичь - комментарии не подходят для вопросов и ответов. Пожалуйста, опубликуйте новый вопрос - и вы обязательно получите ответ! Очевидно, постарайтесь задать свой вопрос так, чтобы вам не нужно было переспрашивать каждое маленькое дополнение :o) - person Mikhail Berlyant; 07.02.2019