簡體   English   中英

如何在Big Query中正確取消嵌套此數組?

[英]How to correctly UNNEST this array in Big Query?

我正在嘗試創建一個如下表:

| year | week_number | first_week_day | last_week_day |
-------------------------------------------------------
| 2019 |     1       |   2019-01-01   | 2019-01-07    |
.......................................................

我已經搜索了方法,並決定使用EXTRACT和GENERATE_DATE。 如果有更好的方法,請告訴我。

這是我到目前為止的內容:

#StandardSQL
WITH

  dates_2018 AS
(SELECT GENERATE_DATE_ARRAY("2018-01-01", "2018-12-31") AS d_2018)

 ,dates_2019 AS
(SELECT GENERATE_DATE_ARRAY("2019-01-01", "2019-12-31") AS d_2019)


SELECT un

FROM dates_2018, UNNEST(d_2018) AS un
--  ,timestamps_2018 AS
-- (SELECT TIMESTAMP(dates_2018) AS timestamps_2018
-- FROM UNNEST(dates_2018))

--  ,d_2018 AS
-- (SELECT EXTRACT(year from timestamps_2018) AS year
--       ,EXTRACT(week from timestamps_2018) AS week
--       ,EXTRACT(day from timestamps_2018) AS day
-- FROM timestamps_2018)

-- SELECT *

-- FROM timestamps_2018

現在,我的問題在於我無法糾正UNNEST數組d_2018的事實,因此我可以將所有元素強制轉換為時間戳,以便以后可以從中提取內容。

當我取消嵌套時,它僅返回第一行。

主要是我正在尋找這個毫不費力的修復程序,但是如果有人可以提供更多建議,我們將非常歡迎。

我不確定您為什么要每年分解數據。 根據您的描述:

WITH dates AS (
      SELECT GENERATE_DATE_ARRAY('2018-01-01', '2019-12-31') as date_array
     )
select extract(year from d) as year, d,
       EXTRACT(week from d) as week,
       date_trunc(d, week) as first_week_day,
       date_add(date_trunc(d, week), interval 6 day) as last_week_day
from dates cross join
     unnest(date_array) d
ORDER BY d;

UNNEST將數組條目轉換為表行,以便您可以在它們上運行SQL。 我不確定您要做什么,但是您完全可以做類似的事情

SELECT 
 d,
 extract(WEEK from d) CW,
 extract(DAY from d) day,
 extract(YEAR from d) year
FROM UNNEST(GENERATE_DATE_ARRAY("2018-01-01", "2019-12-31")) AS d

您將來自generate_date_array()的數組輸入unnest()

以下是BigQuery標准SQL

#standardSQL
SELECT DISTINCT
  EXTRACT(YEAR FROM day) AS year,
  EXTRACT(WEEK FROM day) + 1 AS week_number,
  DATE_TRUNC(day, WEEK) AS first_week_day,
  DATE_ADD(DATE_TRUNC(day, week), INTERVAL 6 DAY) AS last_week_day
FROM UNNEST(GENERATE_DATE_ARRAY('2018-01-01', '2019-12-31')) AS day

暫無
暫無

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

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