首頁 >資料庫 >mysql教程 >如何在沒有本機透視功能的情況下將 BigQuery 中的行透視為列?

如何在沒有本機透視功能的情況下將 BigQuery 中的行透視為列?

Barbara Streisand
Barbara Streisand原創
2025-01-03 14:34:40776瀏覽

How to Pivot Rows into Columns in BigQuery Without Native Pivot Functionality?

在BigQuery 中將行轉置為列(資料透視實作)

在本BigQuery 教學課程中,我們旨在解決資料轉換的普遍需求:將行轉換為列,同時保留鍵值對。這種技術稱為數據透視,廣泛用於數據分析和報告。然而,與原生支援透視操作的傳統資料庫系統不同,BigQuery 目前缺乏此功能。

使用附加分組列進行透視

為了克服此限制,我們提出了解決方案涉及輸入資料中的附加列,該列用於對應合併到輸出中的單行中的行進行分組。此方法的工作原理如下:

第 1 步:建立資料透視查詢

我們首先建立一個將產生實際資料透視查詢的查詢。此查詢動態建構基於輸入資料集執行旋轉操作所需的程式碼。

SELECT 'SELECT id, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(key = "' + key + '", value, NULL)) as [' + key + ']'
   ) 
   + ' FROM yourTable GROUP BY id ORDER BY id'
FROM (
  SELECT key 
  FROM yourTable
  GROUP BY key
  ORDER BY key
) 

此查詢標識輸入資料中的所有唯一鍵值,並產生一個字串,當作為單獨的查詢執行時該字串,將執行旋轉操作。

第 2 步:執行產生的透視查詢

第一個查詢的結果是定義實際資料透視查詢的字串。我們只需複製該字串並將其作為常規 BigQuery 查詢運行即可。結果將是一個轉置資料集,其中鍵作為列名稱,值作為列值。

輸入和輸出範例

考慮以下輸入表:

id Key Value
1 channel_title Mahendra Guru
1 youtube_id ugEGMG4-MdA
1 channel_id UCiDKcjKocimAO1tV
1 examId 72975611-4a5e-11e5
1 postId 1189e340-b08f
2 channel_title Ab Live
2 youtube_id 3TNbtTwLY0U
2 channel_id UCODeKM_D6JLf8jJt
2 examId 72975611-4a5e-11e5
2 postId 0c3e6590-afeb

產生的資料透視資料集將如下所示:

id channel_id channel_title examId postId youtube_id
1 UCiDKcjKocimAO1tV Mahendra Guru 72975611-4a5e-11e5 1189e340-b08f ugEGMG4-MdA
2 UCODeKM_D6JLf8jJt Ab Live 72975611-4a5e-11e5 0c3e6590-afeb 3TNbtTwLY0U

限制和替代方案

雖然這種方法有效地模仿了旋轉行為,但它也有局限性。最值得注意的是,BigQuery 對每個表施加 10,000 列的限制,這可能會阻礙具有大量唯一鍵的大型資料集的旋轉。在這種情況下,請考慮探索替代解決方案,例如使用 Python 或 R 進行外部資料透視,或使用聯合查詢方法和本地支援資料透視的資料庫系統。

以上是如何在沒有本機透視功能的情況下將 BigQuery 中的行透視為列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn