BigQuery에서 행을 열로 바꾸기(피벗 구현)
이 BigQuery 튜토리얼에서는 데이터 변환에 대한 일반적인 요구 사항을 해결하는 것을 목표로 합니다. 키-값 쌍을 유지하면서 행을 열로 변환합니다. 피보팅(pivoting)이라고 알려진 이 기술은 데이터 분석 및 보고에 널리 사용됩니다. 그러나 기본적으로 피벗 작업을 지원하는 기존 데이터베이스 시스템과 달리 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!