Запросы REPEATED записей в Bigquery и облачных данных - PullRequest
0 голосов
/ 04 мая 2018

У меня есть таблица EMP, в которой в качестве общих полей указаны Empno, Name, Age.

EMP.Salary как RECORD с повторным типом с двумя полями Month & Amt

EmpNo: 1
Age : 25
Name : Alex

Salary.Month : Jan
Salary.Amt : 2000

Salary.Month : Feb
Salary.Amt : 3000

Salary.Month : Mar
Salary.Amt : 3500

Emp No: 2
Age : 26
Name : Teresa

Salary.Month : Jan
Salary.Amt : 1000

Salary.Month : Feb
Salary.Amt : 2000

Salary.Month : Mar
Salary.Amt : 3000

Как я могу использовать стандартный sql в Bigquery для извлечения этих повторяющихся предметов?

С уважением, Шива

1 Ответ

0 голосов
/ 04 мая 2018

Мне нужен biqQuery для следующего вывода. EmpNo Имя Месяц Зарплата 1 Алекс Ян 2000 г. 1 Алекс Фев 3000 1 Алекс Мар 3500 2 Тереза ​​Ян 1000 г. 2 Тереза ​​Фев 2000 2 Тереза ​​Фев 3000

Ниже для BigQuery Standard SQL

#standardSQL
SELECT EmpNo, Age, Name, s.*
FROM `project.dataset.your_table` t, UNNEST(Salary) s

Вы можете протестировать / поиграть с ним, используя фиктивные данные из вашего вопроса, как показано ниже

#standardSQL
WITH `project.dataset.your_table` AS (
  SELECT 1 EmpNo, 25 Age, 'Alex' Name, 
    [STRUCT<Month STRING, Amt INT64>('Jan', 2000), ('Feb', 3000), ('Mar', 3500)] Salary UNION ALL
  SELECT 2, 26, 'Teresa',
    [STRUCT<Month STRING, Amt INT64>('Jan', 1000), ('Feb', 2000), ('Mar', 3000)] 
)
SELECT EmpNo, Age, Name, s.*
FROM `project.dataset.your_table` t, UNNEST(Salary) s

и результат

Row EmpNo   Age Name    Month   Amt  
1   1       25  Alex    Jan     2000     
2   1       25  Alex    Feb     3000     
3   1       25  Alex    Mar     3500     
4   2       26  Teresa  Jan     1000     
5   2       26  Teresa  Feb     2000     
6   2       26  Teresa  Mar     3000     

Мне нужны детали empno, имя и сумма зарплаты

Если вам нужна сумма зарплаты, вы можете использовать приведенный ниже пример

#standardSQL
WITH `project.dataset.your_table` AS (
  SELECT 1 EmpNo, 25 Age, 'Alex' Name, 
    [STRUCT<Month STRING, Amt INT64>('Jan', 2000), ('Feb', 3000), ('Mar', 3500)] Salary UNION ALL
  SELECT 2, 26, 'Teresa',
    [STRUCT<Month STRING, Amt INT64>('Jan', 1000), ('Feb', 2000), ('Mar', 3000)] 
)
SELECT EmpNo, Age, Name, 
  (SELECT SUM(Amt) FROM UNNEST(Salary)) Total
FROM `project.dataset.your_table`

и результат

Row EmpNo   Age Name    Total    
1   1       25  Alex    8500     
2   2       26  Teresa  6000     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...