簡體   English   中英

BigQuery:包含多行的 UNNEST 結果

[英]BigQuery: UNNEST result containing multiple rows

我有一個返回多行的 UDF:

CREATE OR REPLACE FUNCTION dataset.multi_row() RETURNS ARRAY<STRUCT<r1 FLOAT64, r2 FLOAT64>> LANGUAGE js AS """
  return [{
    "r1": 10 * Math.random(),
    "r2": 10 * Math.random()
  }, {
    "r1": 100 * Math.random(),
    "r2": 100 * Math.random()
  }]
""";

假設這個 UDF 用於產生多行的查詢,例如

SELECT dataset.multi_row() FROM UNNEST([1,2,3])

Row   f0_.r1              f0_.r2
---   -----------------   -----------------
1     9.328970861925416   9.61853335054045
      20.700051452811017  87.67054242459575
2     4.184274373335275   6.136918172331227
      26.790853709322747  35.848885881352
3     0.32172810017527365 7.416528380222973
      70.21210223299556   57.644422256839746

我想將每一行和數組條目轉換為單獨的行,所以它看起來像這樣:

Row   f0_.r1              f0_.r2
---   -----------------   -----------------
1     9.328970861925416   9.61853335054045
2     20.700051452811017  87.67054242459575
3     4.184274373335275   6.136918172331227
4     26.790853709322747  35.848885881352
5     0.32172810017527365 7.416528380222973
6     70.21210223299556   57.644422256839746

產生此結果的 SQL 查詢是什么樣的?

您可以嘗試在 BQ 臨時表上保存數據,然后按照代碼將數據unnest

WITH data AS (
SELECT
   [9.328970861925416, 20.700051452811017] as col_1,
   [9.61853335054045, 87.67054242459575] as col_2 union all
SELECT
   [4.184274373335275, 26.790853709322747] as col_1,
   [6.136918172331227, 35.848885881352] as col_2 union all
SELECT
   [0.32172810017527365, 70.21210223299556] as col_1,
   [7.416528380222973, 57.644422256839746] as col_2 
) 

SELECT col_1, col_2[OFFSET(off)] as col_2 FROM data ,unnest(col_1) as col_1 WITH OFFSET off

Output 將作為:-

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM