Google BigQuery SQL: работа с массивом? - PullRequest
0 голосов
/ 20 марта 2020

Я новичок ie в SQL и Google BigQuery. Я пытаюсь выполнить следующий запрос, чтобы получить список имен и счетчиков, однако я вижу, что получаю ошибку массива и не знаю, как ее исправить. Любая помощь приветствуется.

СООБЩЕНИЕ ОБ ОШИБКЕ:

Невозможно получить доступ к полю, гармонизированному для значения с типом ARRAY в [5:27]

#standardSQL
-- Applications_Per_Assignee
SELECT assignee_harmonized.name AS Assignee_Name, COUNT(*) AS Number_of_Patent_Apps
FROM (
SELECT ANY_VALUE(assignee.harmonized.name) AS Assignee_Name
FROM `patents-public-data.patents.publications` AS patentsdb
GROUP BY Number_of_Patent_Apps
)
GROUP BY assignee_harmonized.name
ORDER BY Number_of_Patent_Apps DESC;

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  ah.name AS Assignee_Name, 
  COUNT(*) AS Number_of_Patent_Apps
FROM `patents-public-data.patents.publications`,
UNNEST(assignee_harmonized) ah
GROUP BY Assignee_Name
HAVING Number_of_Patent_Apps < 1000
ORDER BY Number_of_Patent_Apps DESC
-- LIMIT 10

с выводом

Row Assignee_Name                   Number_of_Patent_Apps    
1   SAMSUNG ELECTRONICS CO LTD      600678   
2   CANON KK                        579731   
3   MATSUSHITA ELECTRIC IND CO LTD  560644   
4   HITACHI LTD                     531286   
5   SIEMENS AG                      486276   
6   MITSUBISHI ELECTRIC CORP        461673   
7   IBM                             438822   
8   SONY CORP                       438039   
9   FUJITSU LTD                     384270   
10  NEC CORP                        357193  
0 голосов
/ 20 марта 2020

Похоже, что с вашим запросом что-то не так.

  • assignee - это строка, я думаю, вы хотите взглянуть на assignee_harmonized.name
  • Вы захотите на UNNEST() assignee_harmonized
  • ANY_VALUE() только выбирает случайное значение, которое не похоже на то, что вы хотите
  • У вас есть GROUP BY в вашем внутреннем выборе, который не будет дать вам результаты, которые вы хотите
  • Вам не нужно подзапрос для этого типа запроса.
#standardSQL
SELECT ah.name AS Assignee_Name, COUNT(*) AS Number_of_Patent_Apps
FROM `patents-public-data.patents.publications` AS patentsdb
LEFT JOIN UNNEST(assignee_harmonized) ah
GROUP BY 1
ORDER BY 2 DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...