如何在Bigquery中将列数组转换为行

时间:2018-08-29 04:16:42

标签: google-bigquery

我在Google bigquery中有下面的截图列

enter image description here

我需要将该列转换为以下Bigquery中的行:

70042 70055 70044 70046 70042 70055 70044 70046

请建议我如何获取上面的行。

1 个答案:

答案 0 :(得分:4)

以下BigQuery标准SQL示例
如果列是字符串数组,则第一个适用;如果它是看起来像array:o)

的字符串,则第二个适用
#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, ['70042', '70055', '70044', '70046'] dspid UNION ALL
  SELECT 2 id, ['70042', '70055', '70044', '70046'] dspid 
)
SELECT id, dspid
FROM `project.dataset.table`,
UNNEST(dspid) dspid   


#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, '["70042","70055","70044","70046"]' dspid UNION ALL
  SELECT 2 id, '["70042","70055","70044","70046"]' dspid 
)
SELECT id, dspid
FROM `project.dataset.table`,
UNNEST(SPLIT(REGEXP_REPLACE(dspid, r'[\[\]"]', ''))) dspid   

两者均产生低于结果

Row id  dspid    
1   1   70042    
2   1   70055    
3   1   70044    
4   1   70046    
5   2   70042    
6   2   70055    
7   2   70044    
8   2   70046      

注意:下面的片段仅用于模仿您的真实数据/表,仅供您测试/使用。实际上,您可以删除它并使用特定的project.dataset.table

WITH `project.dataset.table` AS (
  ..............
)

下次您对SO提出问题时,请提供有关您的案件的更多详细信息,并显示即使您的案子对您没有帮助,您仍然尝试过的做法-这通常有助于我们更好地了解您的案件,从而更好地为您提供帮助

  

更新

例如,如果您的表是veuhub-185502.AdtechAnalytics.tag_request,则应在

下使用
#standardSQL
SELECT id, dspid
FROM `veuhub-185502.AdtechAnalytics.tag_request`,
UNNEST(dspid) dspid 

或以下(根据您的评论)

#standardSQL
SELECT 
  DSPID, 
  adtype, 
  adtypeWithDevice, 
  EXTRACT(year FROM request_timestamp) AS year, 
  EXTRACT(month FROM request_timestamp) AS month, 
  EXTRACT(day FROM request_timestamp) AS day, 
  EXTRACT(hour FROM request_timestamp) AS hour, 
  SUM(1) AS requestcount 
FROM `veuhub-185502.AdtechAnalytics.tag_request`, 
UNNEST(dspid) dspid 
GROUP BY adtype,adTypeWithDevice,DSPID,year,month,day,hour