2016-11-23 3 views
2

Ich möchte eine neue Tabelle generieren und alle Schlüsselwertpaare mit Schlüsseln als Spaltennamen und Werte als ihre jeweiligen Werte mithilfe von BigQuery platzieren.In BigQuery Zeilen in Spalten transponieren (Pivot-Implementierung)

Beispiel:

**Key**     **Value** 
channel_title   Mahendra Guru  
youtube_id    ugEGMG4-MdA 
channel_id    UCiDKcjKocimAO1tV  
examId     72975611-4a5e-11e5 
postId     1189e340-b08f 

channel_title   Ab Live 
youtube_id    3TNbtTwLY0U 
channel_id    UCODeKM_D6JLf8jJt  
examId     72975611-4a5e-11e5 
postId     0c3e6590-afeb 

ich es konvertieren möchten:

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

Wie es zu tun BigQuery mit?

Antwort

4

BigQuery noch nicht unterstützt Funktionen Schwenken
Sie können immer noch das tun in BigQuery unter Ansatz

Aber zuerst müssen Sie eine weitere Säule neben zwei Spalten in die Dateneingabe, die Gruppen von Zeilen angeben würde in Eingang, die in einer Zeile in der Ausgabe

, gehe ich davon aus So

kombiniert werden muss, sieht Ihre Eingabetabelle (Yourtable) wie unten

**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 

Also, zuerst sollten Sie laufen unter Abfrage

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 
) 

Ergebnis obiger Abfrage wird Zeichenfolge sein, dass (wenn zum Format) wie unten

SELECT 
    id, 
    MAX(IF(key = "channel_id", value, NULL)) AS [channel_id], 
    MAX(IF(key = "channel_title", value, NULL)) AS [channel_title], 
    MAX(IF(key = "examId", value, NULL)) AS [examId], 
    MAX(IF(key = "postId", value, NULL)) AS [postId], 
    MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id] 
FROM yourTable 
GROUP BY id 
ORDER BY id 

Sie jetzt oben Ergebnis (Note kopieren aussehen sollten: Sie müssen nicht wirklich formatiert werden müssen es - ich habe es nur für die Darstellung) und als normale Abfrage

Ergebnis führen wird, wie Sie

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 
erwartet hätte

Hinweis: Sie können Schritt 1 überspringen, wenn Sie die richtige Abfrage (wie in Schritt 2) selbst erstellen können und die Anzahl der Felder klein und konstant ist oder wenn es sich um eine einmalige Transaktion handelt. Aber Schritt 1 nur Helfer Schritt, der es für Sie macht, so können Sie es jederzeit schnell erstellen!

Wenn Sie interessiert sind - können Sie mehr über das Pivotieren in meinen anderen Posts sehen.

How to scale Pivoting in BigQuery?
Bitte beachten Sie - es ist eine Beschränkung von 10K Spalten pro Tabelle - so sind Sie mit 10K Organisationen beschränkt.
Sie können im Folgenden auch als vereinfachte Beispiele sehen (wenn oben ist zu komplex/ausführlich):
How to transpose rows to columns with large amount of the data in BigQuery/SQL?
How to create dummy variable columns for thousands of categories in Google BigQuery?
Pivot Repeated fields in BigQuery

+0

, dass der Trick funktioniert. – Prabhjot

Verwandte Themen