관계는 분석을 위해 여러 테이블에서 데이터를 결합하는 동적이고 유연한 방법입니다. 관계의 조인 유형을 정의하지 않으므로 관계를 만들 때 벤 다이어그램이 표시되지 않습니다. Show
관계를 두 테이블 간의 계약으로 간주할 수 있습니다. 이러한 테이블의 필드를 사용하여 비주얼리제이션을 작성하는 경우 Tableau는 해당 계약에 따라 이러한 테이블의 데이터를 가져와 적절한 조인으로 쿼리를 작성합니다.
자세한 내용은 데이터 연관(링크가 새 창에서 열림) 및 관계에 대한 두려움 극복(링크가 새 창에서 열림)을 참조하십시오. 여전히 조인도 데이터를 결합하는 옵션으로 사용할 수 있습니다. 논리적 테이블을 두 번 클릭하여 조인 캔버스로 이동합니다. 자세한 내용은 조인은 어떻게 되었습니까?를 참조하십시오. 관계 및 조인의 특성관계는 분석을 위해 여러 테이블에서 데이터를 결합하는 동적이고 유연한 방법입니다. 관계를 사용하면 데이터 준비 및 분석이 더 쉬워지고 보다 직관적이 되므로 데이터를 결합할 때 처음에 관계를 사용하는 것이 좋습니다. 조인은 꼭 필요한 경우에만 사용하십시오(링크가 새 창에서 열림). 다음은 관계를 사용하여 테이블을 결합하는 경우의 몇 가지 이점입니다.
관계
조인조인은 데이터를 결합하는 보다 정적인 방식입니다. 조인은 분석 전에 미리 물리적 테이블 간에서 정의되어야 하며 해당 데이터 원본을 사용하는 모든 시트에 영향을 주지 않고 변경할 수 없습니다. 조인된 테이블은 항상 단일 테이블로 병합됩니다. 결과적으로 조인된 데이터에서 일치하지 않는 값이 누락되거나 집계된 값이 중복될 수 있습니다.
관계 사용을 위한 요구 사항
관련 테이블의 이점을 제한하는 요소
조인은 어떻게 되었습니까?여전히 데이터 원본의 물리적 계층에서 테이블 간에 조인을 지정할 수 있습니다. 논리적 테이블을 두 번 클릭하여 물리적 계층의 조인/유니온 캔버스로 이동하고 조인 또는 유니온을 추가합니다. 각 최상위 수준 논리적 테이블은 하나 이상의 물리적 테이블을 포함합니다. 논리적 테이블을 열어 해당 물리적 테이블 간의 조인을 보거나, 편집하거나, 만드십시오. 논리적 테이블을 마우스 오른쪽 단추로 클릭한 다음 열기를 클릭합니다. 또는 테이블을 두 번 클릭하여 엽니다.
데이터 원본을 만들면 두 계층이 존재합니다. 최상위 수준 계층은 데이터 원본의 논리적 계층입니다. 논리적 계층에서 관계를 사용하여 테이블 간의 데이터를 결합합니다. 다음 계층은 데이터 원본의 물리적 계층입니다. 물리적 계층에서 조인을 사용하여 테이블 간의 데이터를 결합합니다. 자세한 내용은 데이터 모델의 논리적 테이블 및 물리적 테이블(링크가 새 창에서 열림)을 참조하십시오.
쿼리 실행 계획에 설명된 대로 SQL 컴파일러는 SQL 문을 쿼리 실행 계획으로 변환하며, 이 실행 계획은 쿼리 결과를 가져오는 데 사용됩니다. 이 페이지는 Spanner가 효율적인 실행 계획을 찾을 수 있도록 SQL 문을 구성하는 권장사항을 설명합니다. 이 페이지에 나온 SQL 문 예시에서는 다음과 같은 샘플 스키마를 사용합니다. 전체 SQL 참조는
문 구문, 함수 및 연산자, 어휘 구조 및 구문을 참조하세요. 자세한 내용은
Cloud Spanner의 PostgreSQL 언어를 참조하세요. 쿼리 매개변수를 사용하여 자주 실행되는 쿼리 속도 향상매개변수화된 쿼리는 쿼리 문자열을 쿼리 매개변수 값과 구분하는 쿼리 실행 기술입니다. 예를 들어 애플리케이션이 특정 연도에 특정 제목의 앨범을 발표한 가수를 검색해야 한다고 가정합니다. 다음 예와 같은 SQL 문을 작성하여 2017년 이후 출시된 'Love'라는 제목의 모든 앨범을 검색할 수 있습니다.
또 다른 쿼리에서는 앨범 제목의 값을 'Peace'로 변경할 수 있습니다.
애플리케이션에서 다음과 유사한 수많은 쿼리를 실행해야 하는 경우, 이후 쿼리에서는 리터럴 값만 변경되므로 해당 값에 대한 매개변수 자리표시자를 사용합니다. 매개변수화된 결과 쿼리를 캐싱하고 다시 사용할 수 있으므로, 컴파일 비용이 절감됩니다. 예를 들어 다음과 같이 다시 작성된 쿼리는 쿼리의 매개변수 참조는 쿼리의 매개변수 참조는 매개변수는 리터럴 값이 필요한 모든 위치에 나타날 수 있습니다. 동일한 매개변수 이름은 단일 SQL 문에서 두 번 이상 사용될 수 있습니다. 요약하면 쿼리 매개변수는 다음과 같이 쿼리 실행을 지원합니다.
Spanner의 쿼리 실행 방법 이해Spanner를 사용하면 검색할 데이터를 지정하는 선언적 SQL 구문을 사용하여 데이터베이스를 쿼리할 수 있습니다. 또한 Spanner가 결과를 얻는 방법을 이해하려면 쿼리 실행 계획을 사용합니다. 쿼리 실행 계획은 쿼리의 각 단계와 관련된 비용을 표시합니다. 이러한 비용을 통해 쿼리 성능 문제를 디버깅하고 쿼리를 최적화할 수 있습니다. Google Cloud 콘솔 또는 클라이언트 라이브러리를 통해 쿼리 실행 계획을 검색할 수 있습니다. Google Cloud 콘솔을 사용하여 쿼리 계획을 가져오려면 다음을 수행합니다.
시각적 계획에 대한 자세한 내용은 쿼리 계획 시각화 도구를 사용하여 쿼리 미세 조정을 참조하세요. 전체 쿼리 계획 참조는 쿼리 실행 계획을 확인하세요. 보조 색인을 사용하여 일반적인 쿼리 속도 향상다른 관계형 데이터베이스와 마찬가지로 Spanner는 SQL 구문이나 Spanner의 읽기 인터페이스를 사용하여 데이터를 검색하는 데 사용할 수 있는 보조 색인을 제공합니다. 색인에서 데이터를 가져오는 보다 일반적인 방법은 SQL 쿼리 인터페이스를 사용하는 것입니다. SQL 쿼리에서 보조 색인을 사용하여 Spanner에서 결과를 얻는 방법을 지정할 수 있습니다. 보조 색인을 지정하면 쿼리 실행 속도가 빨라질 수 있습니다. 예를 들어 특정 성을 가진 모든 가수의 ID를 가져오려 한다고 가정해보겠습니다. 이러한 SQL 쿼리를 작성하는 한 가지 방법은 다음과 같습니다.
이 쿼리는 예상한 결과를 반환하지만 결과를 반환하는 데 시간이 오래 걸릴 수 있습니다. 소요 시간은 성 열에 보조 색인을 정의하여 이 쿼리의 성능을 향상시킬 수 있습니다.
보조 색인 이 시나리오에서는 쿼리를 실행할 때 Spanner에서 보조 색인
이제 가수의 ID와 이름도 가져오려고 한다고 가정해 보겠습니다.
쿼리 계획 실행 시 Spanner가 전체 테이블 스캔을 수행할 필요가 없으므로, 여전히 색인 사용을 통한 성능상의 이점을 얻을 수 있습니다. 대신,
Spanner가 기본 테이블에서 행을 전혀 가져오지 않도록 하려면
이와 같이
이전의 예시에서는 보조 색인을 사용하여 쿼리의 보조 색인이 성능 이점을 제공할 수 있는 또 다른 상황은 정렬된 결과를 반환하는 특정 쿼리의 경우입니다. 예를 들어, 모든 앨범 제목과 해당 출시 날짜를 출시 날짜의 오름차순으로 또는 앨범 제목의 내림차순으로 가져오려고 한다고 가정합니다. 다음과 같은 SQL 쿼리를 작성할 수 있습니다.
보조 색인이 없으면 이 쿼리는 실행 계획에서 비싼 정렬 단계를 거쳐야 할 수 있습니다. 이 보조 색인을 정의하여 쿼리 실행 속도를 높일 수 있습니다.
그런 다음 보조 색인을 사용하도록 쿼리를 다시 작성합니다.
이 쿼리와 색인 정의는 다음 기준을 모두 충족합니다.
이러한 조건이 모두 충족되므로, 결과 쿼리 계획은 정렬 단계를 제거하고 보다 빠르게 실행됩니다. 보조 색인은 일반적인 쿼리 속도를 높일 수 있지만 보조 색인을 추가하면 커밋 작업에 지연 시간이 추가될 수 있습니다. 이는 일반적으로 각 보조 색인은 각 커밋에서 노드를 추가해야 하기 때문입니다. 대부분의 워크로드에서 보조 색인이 몇 개 있는 정도는 문제되지 않습니다. 그러나 읽기 또는 쓰기 지연 시간에 더 신경을 써야 하는지, 그리고 워크로드에 가장 중요한 작업이 무엇인지 고려해야 합니다. 워크로드를 벤치마킹하여 예상대로 수행되는지 확인합니다. 보조 색인에 대한 자세한 참고 자료는 보조 색인을 참조하세요. 범위 키 찾기를 위한 효율적인 쿼리 작성SQL 쿼리의 일반적인 용도는 알려진 키 목록을 기반으로 Spanner에서 여러 행을 읽기 위함입니다. 다음 권장사항은 키 범위를 기준으로 데이터를 가져올 때 효율적인 쿼리를 작성하는 데 유용합니다.
조인에 대한 효율적 쿼리 작성조인 작업은 쿼리가 스캔해야 하는 행 수를 크게 늘려 쿼리가 더 느려질 수 있으므로 비용이 많이 들 수 있습니다. 다른 관계형 데이터베이스에서 조인 쿼리를 최적화하기 위해 사용하는 익숙한 기술 외에도 Spanner SQL 사용 시 보다 효율적인 JOIN에 유용한 몇 가지 권장사항이 있습니다.
읽기-쓰기 트랜잭션 내에서 큰 읽기 방지읽기-쓰기 트랜잭션은 0개 이상의 읽기 또는 SQL 쿼리의 시퀀스를 허용하며 커밋할 호출 전에 일련의 변형을 포함할 수 있습니다. 데이터 일관성이 유지되도록 Spanner는 테이블과 색인에서 행을 읽고 쓸 때 잠금을 획득합니다. 잠금에 대한 자세한 내용은 읽기 및 쓰기 수명을 참조하세요. Spanner에서 잠금이 작동하는 방식으로 인해 많은 수의 행(예: 또한
트랜잭션이 많은 수의 행을 처리하므로 훨씬 작은 행 범위를 읽는 트랜잭션(예: 따라서 낮은 쓰기 처리량을 수용하려는 경우가 아니라면 트랜잭션에서 대량의 읽기(예: 전체 테이블 스캔 또는 대량 조인 작업)를 가능한 한 방지합니다. 경우에 따라 다음 패턴을 사용하면 더 나은 결과를 얻을 수 있습니다.
읽기-쓰기 트랜잭션에서 대량 읽기를 방지하는 한 가지 방법은 쿼리에서 생성되는 실행 계획을 살펴보는 것입니다. ORDER BY를 사용하여 SQL 결과 순서 보장
Spanner는
Spanner는 이 쿼리 결과가 기본 키 순서라고 보장하지 않습니다. 또한 결과 순서는 언제든지 변경될 수 있으며 호출마다 일관성이 보장되지는 않습니다. LIKE 대신 STARTS_WITH를 사용하여 매개변수화된 SQL 쿼리 증속Spanner는 매개변수화된
다음은 권장하지 않습니다.
권장:
커밋 타임스탬프를 사용하여 최근 데이터 쿼리애플리케이션이 특정 시간 이후에 작성된 데이터를 쿼리해야 하는 경우 관련 테이블에 커밋 타임스탬프 열을 추가합니다. 커밋 타임스탬프를 사용 설정하면 Google 표준 SQL 언어 데이터베이스 또는 PostgreSQL 언어 데이터베이스를 사용하여 이 최적화에 대해 자세히 알아봅니다. |