在Bigquery和云datalab中查询REPEATED记录

时间:2018-05-04 06:06:53

标签: google-bigquery

我有一张表EMP,其中包含Empno,Name,Age作为一般字段。

EMP.Salary as RECORD with Repeated type with two fields 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

如何在Bigquery中使用标准sql来获取这些重复项?

问候,西瓦

2 个答案:

答案 0 :(得分:1)

  

我需要biqQuery来跟随输出。 EmpNo名称月工资1 Alex Jan 2000 1 Alex Feb 3000 1 Alex Mar 3500 2 Teresa Jan 1000 2 Teresa Feb 2000 2 Teresa Feb 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     

答案 1 :(得分:1)

SELECT EmpNo, Age, Name, 
  (SELECT SUM(Amt) FROM UNNEST(Salary)) Total
FROM `project.dataset.your_table`

效果很好。