2017-12-27 122 views
2

我有表A中,其中列中的一個是像轉換重複記錄到重複的字符串數組

   +- children: record (repeated) 
       | |- name: string 
       | |- gender: string 
       | |- age: integer 

我有一個表B,其中所述柱中的一個是STRING一個重複RECORD(重複)

   +- names : string (repeated) 

尋找選項將名稱列表從RECORD中的表A移動到表B的字符串數組。

任何建議都會有很大的幫助

回答

2

可以使用ARRAY功能。試試這個:

#standardSQL 
SELECT 
    ARRAY_TO_STRING(
    ARRAY(SELECT name FROM UNNEST(children)) 
) AS names 
FROM `dataset.table` 

它創建正好從結構內的name領域的新陣列,然後將數組轉換爲字符串。

0

下面是BigQuery的標準SQL

如果你希望得到陣列您可以使用下面

#standardSQL 
SELECT ARRAY(SELECT name FROM UNNEST(children)) AS names 
FROM `yourproject.yourdataset.yourtable` 

您可以測試/使用虛擬數據作爲

#standardSQL 
WITH `yourproject.yourdataset.yourtable` AS (
    SELECT [STRUCT<name STRING, gender STRING, age INT64>('abc1','m',12),('xyz1','m',13),('uvw1','f',14)] children UNION ALL 
    SELECT [STRUCT<name STRING, gender STRING, age INT64>('abc2','f',12),('xyz2','m',13),('uvw2','f',14)] 
) 
SELECT ARRAY(SELECT name FROM UNNEST(children)) AS names 
FROM `yourproject.yourdataset.yourtable` 
它玩

輸出爲

Row names  
1 abc1  
    xyz1  
    uvw1  
2 abc2  
    xyz2  
    uvw2  

在情況下,如果你期望的字符串

#standardSQL 
SELECT (SELECT STRING_AGG(name) FROM UNNEST(children)) AS names 
FROM `yourproject.yourdataset.yourtable` 

您可以測試/使用相同的虛擬數據

#standardSQL 
WITH `yourproject.yourdataset.yourtable` AS (
    SELECT [STRUCT<name STRING, gender STRING, age INT64>('abc1','m',12),('xyz1','m',13),('uvw1','f',14)] children UNION ALL 
    SELECT [STRUCT<name STRING, gender STRING, age INT64>('abc2','f',12),('xyz2','m',13),('uvw2','f',14)] 
) 
SELECT (SELECT STRING_AGG(name) FROM UNNEST(children)) AS names 
FROM `yourproject.yourdataset.yourtable` 

和輸出現在是

Row names  
1 abc1,xyz1,uvw1 
2 abc2,xyz2,uvw2 
它玩