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

Sur*_*M N 4 google-bigquery

我在我的 google bigquery 中有一个如下截图的列

在此处输入图片说明

我需要将该列转换为 Bigquery 中的行,如下所示:

70042 70055 70044 70046 70042 70055 70044 70046

请建议我如何获得上述行。

Mik*_*ant 9


如果您的列是字符串数组,则BigQuery Standard SQL First 的以下示例适用,如果它是看起来像数组的字符串,则第二个适用: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   
Run Code Online (Sandbox Code Playgroud)

两者都产生以下结果

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      
Run Code Online (Sandbox Code Playgroud)

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

WITH `project.dataset.table` AS (
  ..............
)
Run Code Online (Sandbox Code Playgroud)

下次您在 SO 上提问时,请提供有关您的案例的更多详细信息,并展示您尝试过的内容,即使它对您不起作用 - 这通常有助于我们更好地了解您的案例,从而更好地帮助您

更新

所以,例如,如果你的桌子是veuhub-185502.AdtechAnalytics.tag_request你应该在下面使用

#standardSQL
SELECT id, dspid
FROM `veuhub-185502.AdtechAnalytics.tag_request`,
UNNEST(dspid) dspid 
Run Code Online (Sandbox Code Playgroud)

或以下(根据您的评论)

#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
Run Code Online (Sandbox Code Playgroud)