Невозможно прочитать поле 'user_properties' типа STRUCT как STRING при запросе с _TABLE_SUFFIX - PullRequest
0 голосов
/ 27 октября 2019

Я запрашиваю набор данных BigQuery, который экспортируется из Firebase с использованием стандартного SQL. Я получаю Cannot read field 'user_properties' of type STRUCT as STRING всякий раз, когда использую шаблонный запрос с условным _TABLE_SUFFIX, но работает, когда я не использую шаблонный запрос.

SELECT
  _TABLE_SUFFIX AS suffix,
  user_properties
FROM 
  `analytics_<firebase_id>.events_*`
WHERE 
  _TABLE_SUFFIX = '20191026'
  AND 
  app_info.id = '<my_app_id>'

Получена ошибка Cannot read field 'user_properties' of type STRUCT as STRING

Если я изменю свой запрос на

SELECT
  user_properties
FROM 
  `analytics_<firebase_id>.events_20191026`
WHERE 
  app_info.id = '<my_app_id>'

Возвращает ожидаемые результаты.

И проверка работоспособности

SELECT
  DISTINCT(_TABLE_SUFFIX) AS suffix
FROM 
  `analytics_<firebase_id>.events_*`
WHERE 
  _TABLE_SUFFIX = '20191026'
  AND 
  app_info.id = '<my_app_id>'

Возвращает «20191026», как и ожидалось.

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

(причина, по которой я должен использовать _TABLE_SUFFIX, заключается в том, что мне нужно передать дату в качестве параметра. В моем реальном коде это _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', DATE_SUB(DATE(@run_time), INTERVAL 1 DAY)) для заданий ETL)

1 Ответ

3 голосов
/ 28 октября 2019

Когда Таблицы подстановочных знаков используются - механизм BigQuery сначала идентифицирует самый ранний созданный объект, который соответствует подстановочному знаку, и использует этот объект для идентификации схемы. И только затем - с использованием этой схемы - запрашиваются сопоставленные таблицы.

Итак, я думаю о том, что наиболее вероятно для вас происходит - у вас есть более ранняя таблица или представление, которое соответствует analytics_<firebase_id>.events_*, в котором поле user_properties имеет тип STRING - в то время как в analytics_<firebase_id>.events_20191026 это поле имеет тип STRUCT

Необходимо убедиться, что все объекты, соответствующие вашему шаблону, имеют одинаковую схему, чтобы не было проблем, подобных этой

Чтобы проверить это, просто запустите приведенный ниже пример

SELECT
  _TABLE_SUFFIX AS suffix,
  user_properties
FROM 
  `analytics_<firebase_id>.events_201910*`
WHERE 
  _TABLE_SUFFIX = '26'
  AND 
  app_info.id = '<my_app_id>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...