行を列に転置する (ピボットとも呼ばれる) と、キーと値のペアを新しいテーブルに変換できます。ここで、キーは列名になり、値は対応するセルに配置されます。 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 )
ステップ 1 の結果をコピーし、通常のクエリとして実行します。これにより、転置されたデータを含むテーブルが生成されます。
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
結果のテーブルは次の構造になります。
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 |
テーブルのサイズが大きい場合は、列の数が少ない場合は、転置クエリを手動で作成することでステップ 1 をスキップできます。ただし、ステップ 1 では、クエリを動的に生成するための迅速かつ便利な方法が提供されます。
以上がBigQuery で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。