사용자 지정 SQL 쿼리에 연결
참고: 사용자 지정 SQL을 사용하면 통합 문서 성능에 영향을 미칠 수 있습니다. DBA와 협력하면 최상의 사용자 지정 SQL 쿼리를 얻을 수 있습니다. Tableau Desktop에서 뷰를 작성하는 데 필요한 작업을 수행하려면 Tableau가 WHERE, GROUP BY 및 기타 SQL 절을 제어할 수 있어야 합니다. 사용자 지정 SQL 쿼리에는 이러한 요소가 포함될 수 있으며 Tableau는 이러한 요소를 기존 SQL에 삽입할 수 없기 때문에 Tableau는 사용자 지정 SQL 문을 select 문 안에 래핑해야 합니다. 사용자 지정 SQL 연결이 느려지거나 오류가 발생하는 경우 이는 Tableau Desktop이 수행하는 사용자 지정 SQL 래핑의 결과인 경우가 많습니다.
대부분의 데이터베이스에서 전체 데이터 집합이 아니라 특정 쿼리에 연결할 수 있습니다. 데이터베이스마다 SQL 구문이 조금씩 다르기 때문에 데이터베이스에 연결하기 위해 사용하는 사용자 지정 SQL은 데이터베이스마다 다를 수 있습니다. 하지만 필요한 정보를 정확하게 알고 있고 SQL 쿼리 작성 방법을 이해한다면 사용자 지정 SQL을 사용하는 것이 유용할 수 있습니다.
사용자 지정 SQL을 사용하는 일반적인 몇 가지 이유가 있지만 그 중에서도 테이블 간의 데이터를 Union으로 통합하고, 필드의 다시 캐스팅하여 교차 데이터베이스 조인을 수행하고, 분석을 위해 데이터의 크기를 조정하거나 줄이는 용도로 사용자 지정 SQL을 사용할 수 있습니다.
Excel 및 텍스트 파일 데이터 원본의 경우 Tableau Desktop 8.2 이전 버전에서 만든 통합 문서나 Windows에서 레거시 연결을 사용하는 Tableau Desktop에서만 이 옵션을 사용할 수 있습니다. 레거시 연결을 사용하여 Excel 또는 텍스트 파일에 연결하려면 파일에 연결하고 열기 대화 상자에서 열기 드롭다운 메뉴를 클릭한 다음 레거시 연결로 열기를 선택합니다.
참고: Tableau 2020.2부터 레거시 Excel 및 텍스트 연결은 더 이상 지원되지 않습니다. 레거시 연결 사용을 위한 대체 방법은 Tableau 커뮤니티에서 레거시 연결 대안(영문) 문서를 참조하십시오.
사용자 지정 SQL 쿼리에 연결
데이터에 연결한 후 데이터 원본 페이지에서 새 사용자 지정 SQL 옵션을 두 번 클릭합니다.
텍스트 상자에 쿼리를 입력하거나 붙여 넣습니다. 쿼리는 단일 SELECT* 문이어야 합니다.
작업을 마쳤으면 확인을 클릭합니다.
확인을 클릭하면 쿼리가 실행되고 사용자 지정 SQL 쿼리 테이블이 캔버스의 논리적 계층에 나타납니다. 데이터 원본 페이지의 데이터 그리드에 사용자 지정 SQL 쿼리의 관련 필드만 표시됩니다.
캔버스의 논리적 계층 및 물리적 계층에 대한 자세한 내용은 Tableau 데이터 모델을 참조하십시오.
사용자 지정 SQL 쿼리 예
세로로 테이블 결합(Union)
데이터를 서로 추가해야 하는 경우 Tableau에서 캔버스의 물리적 계층에 있는 유니온 옵션을 사용할 수 있습니다. 데이터베이스가 이 옵션을 지원하지 않는 경우 대신 사용자 지정 SQL을 사용할 수 있습니다.
예를 들어 두 테이블 November 및 December가 있다고 가정합니다.
November | December |
---|---|
다음과 같은 사용자 지정 SQL 쿼리를 사용하여 두 번째 테이블인 December를 첫 번째 테이블인 November에 추가할 수 있습니다.
SELECT * FROM November UNION ALL SELECT * FROM December
쿼리 결과는 데이터 그리드에서 다음과 같습니다.
Union 옵션에 대한 자세한 내용은 데이터 유니온을 참조하십시오.
교차 데이터베이스 조인을 수행하기 위해 필드의 데이터 유형 변경
캔버스의 물리적 계층에 있는 두 테이블 간에서 조인을 수행하려는 경우 조인하려는 필드의 데이터 유형이 같아야 합니다. 필드의 데이터 유형이 같지 않은 경우 조인을 수행하기 전에 사용자 지정 SQL을 사용하여 필드의 데이터 유형을 변경(캐스팅)할 수 있습니다.
예를 들어 두 테이블 Main 및 Sub를 각각 Root 필드와 ID 필드를 사용하여 조인한다고 가정합니다. Root 필드는 숫자 유형이고 ID 필드는 문자열 유형입니다. 다음과 같은 사용자 지정 SQL 쿼리를 사용하여 Root의 데이터 유형을 숫자에서 문자열로 변경하면 Root 및 ID 필드를 사용하여 Main 및 Sub 테이블을 조인할 수 있습니다.
SELECT
[Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]
이 쿼리의 결과는 원래 Root 필드와 문자열로 캐스팅한 Root 필드를 보여 줍니다.
조인 및 교차 데이터베이스 조인에 대한 자세한 내용은 데이터 조인을 참조하십시오.
데이터 크기 줄이기
매우 큰 데이터 집합으로 작업할 때 먼저 데이터 집합의 크기를 줄이면 데이터 작업 시간을 단축할 수 있습니다.
예를 들어 FischerIris라는 큰 테이블이 있다고 가정합니다. 다음과 같은 사용자 지정 SQL 쿼리를 사용하여 지정된 열 및 레코드를 검색하면 Tableau에서 연결하는 데이터 집합의 크기가 줄어듭니다.
SELECT
[FischerIris].[Species] AS [Species],
[FischerIris].[Width] AS [Petal Width],
COUNT([FischerIris].[ID]) AS [Num of Species]
FROM [FischerIris]
WHERE [FischerIris].[Organ] = 'Petal'
AND [FischerIris].[Width] > 15.0000
GROUP BY [FischerIris].[Species], [FischerIris].[Width]
데이터 재구성(피벗)
분석하기 전에 재구성해야 하는 테이블로 작업하는 경우가 있습니다. 이러한 유형의 작업은 피벗과 같은 옵션을 사용하여 Tableau 캔버스의 물리적 계층에서 수행할 수 있지만 데이터베이스가 해당 옵션을 지원하지 않을 수 있습니다. 이 경우 사용자 지정 SQL을 대신 사용할 수 있습니다.
예를 들어 다음과 같은 테이블이 있다고 가정합니다.
테이블의 구조를 변경하고 Tableau에서 분석할 수 있도록 데이터를 최적화하려면 다음과 같은 사용자 지정 SQL 쿼리를 사용할 수 있습니다.
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Don't like AS [Quantity],
"Don't Like" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table.Items - Defective AS [Quantity],
"Defective" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Too big AS [Quantity],
"Too Big" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS Season ID,
Table1.Items - Too small AS [Quantity]
"Too Small" AS [Reason]
FROM Table1
쿼리 결과는 데이터 그리드에서 다음과 같습니다.
피벗 옵션에 대한 자세한 내용은 데이터 피벗(열을 행으로)을 참조하십시오.
데이터 결합(조인) 및 집계
테이블을 결합하고 데이터를 집계해야 하는 경우 Tableau 캔버스의 물리적 계층에서 조인 및 기본 집계 유형 옵션을 사용할 수 있습니다. 하지만 사용자 지정 SQL을 대신 사용해야 할 경우가 있습니다.
예를 들어 두 테이블 Orders 및 Vendors가 있다고 가정합니다.
Orders | Vendors |
---|---|
다음과 같은 사용자 지정 SQL 쿼리를 사용하여 주문 수에 대한 카운트를 구하고 Orders 및 Vendors 테이블에서 왼쪽 조인을 수행할 수 있습니다.
SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;
쿼리 결과는 다음과 같습니다.
조인에 대한 자세한 내용은 데이터 조인을 참조하십시오.
중복 열을 참조하는 경우 오류 발생
사용자 지정 SQL 쿼리가 중복 열을 참조하는 경우 Tableau의 분석에서 열 중 하나를 사용할 때 오류가 발생할 수 있습니다. 이 오류는 쿼리가 유효한 경우에도 발생합니다. 예를 들어 다음 쿼리를 살펴보겠습니다.
SELECT * FROM
authors, titleauthor WHERE authors.au_id = titleauthor.au_id
이 경우 쿼리는 유효하지만 au_id 필드가 "authors" 테이블과 "titleauthor" 테이블에 둘 다 있기 때문에 모호합니다. Tableau에서 쿼리에 연결되지만 au_id 필드를 사용할 때마다 오류가 발생합니다. 이는 Tableau에서 참조되는 테이블을 확인할 수 없기 때문입니다.
참고: 가능한 경우 항상 사용자 지정 SQL 쿼리에서 AS 절로 열 별칭을 정의하는 것이 가장 좋은 모범 사례입니다. 이는, 별칭을 사용하지 않으면 열 이름이 자동으로 생성될 때 각 데이터베이스가 고유한 규칙을 사용하기 때문입니다.
사용자 지정 SQL 쿼리 편집
사용자 지정 SQL 쿼리를 편집하려면
- 데이터 원본 페이지의 캔버스에서 논리적 계층의 사용자 지정 SQL 쿼리를 두 번 클릭합니다.
- 화살표가 표시될 때까지 물리적 계층의 사용자 지정 SQL 테이블을 마우스오버합니다.
- 화살표를 클릭한 다음 사용자 지정 SQL 쿼리 편집을 선택합니다.
- 대화 상자에서 사용자 지정 SQL 쿼리를 편집합니다.
사용자 지정 SQL 쿼리 이름을 변경하려면
사용자 지정 SQL 쿼리를 캔버스의 논리적 계층으로 끌어오면 사용자 지정 SQL 쿼리, 사용자 지정 SQL 쿼리1 등과 같은 기본 이름이 지정됩니다. 이러한 기본 이름을 보다 의미 있는 이름으로 변경할 수 있습니다.
- 데이터 원본 페이지에서 캔버스의 논리적 계층에서 사용자 지정 SQL 쿼리 테이블의 드롭다운 화살표를 선택하고 이름 바꾸기를 선택합니다.
- 사용자 지정 SQL 쿼리에 사용할 이름을 입력합니다.
사용자 지정 SQL 쿼리에 매개 변수 사용
사용자 지정 SQL 쿼리 문에 매개 변수를 사용하여 상수 값을 동적 값으로 바꿀 수 있습니다. 그런 다음 통합 문서에서 매개 변수를 업데이트하여 연결을 수정할 수 있습니다. 예를 들어 pageID로 지정된 특정 페이지에 대한 웹 트래픽 데이터를 제공하는 사용자 지정 SQL 쿼리에 연결할 수 있습니다. SQL 쿼리에서 pageID 값에 대해 상수 값을 사용하는 대신 매개 변수를 삽입할 수 있습니다. 그리고 연결을 완료한 다음 통합 문서에 매개 변수 컨트롤을 표시할 수 있습니다. 매개 변수 컨트롤을 사용하면 연결을 편집하거나 복제할 필요 없이 관심 있는 각 페이지에 대해 pageID를 외부 전환하고 데이터를 가져올 수 있습니다.
Tableau Desktop에서 사용자 지정 SQL 대화 상자에서 직접 매개 변수를 만들거나 통합 문서에 포함된 임의의 매개 변수를 사용할 수 있습니다. 새 매개 변수를 만드는 경우 해당 매개 변수를 다른 모든 매개 변수와 마찬가지로 통합 문서에서 사용할 수 있습니다. 자세한 내용은 매개 변수 만들기를 참조하십시오.
웹 작성(Tableau Cloud 또는 Tableau Server에서)의 경우 Tableau Desktop에서 게시한 기존 매개 변수를 사용할 수 있습니다. 웹 작성에서 새 매개 변수를 만들 수는 없습니다.
사용자 지정 SQL 쿼리에 매개 변수를 추가하려면
- 데이터 원본 페이지의 캔버스에서 편집 아이콘이 나타날 때까지 테이블을 마우스오버한 다음 편집 단추를 클릭합니다.
- 대화 상자의 아래쪽에 있는 매개 변수 삽입을 클릭합니다.
- SQL 문에서 상수 값을 선택한 다음 매개 변수 삽입 드롭다운 메뉴를 사용하여 대신 사용할 매개 변수를 선택합니다. 아직 매개 변수를 만들지 않은 경우 새 매개 변수 만들기를 선택합니다. 매개 변수 만들기의 지침을 따라 매개 변수를 만듭니다.
참고: 매개 변수는 리터럴 값만 바꿀 수 있으며 식 또는 테이블 이름과 같은 식별자는 바꿀 수 없습니다.
아래 예에서 사용자 지정 SQL 쿼리는 우선 순위가 Urgent로 표시된 모든 주문을 반환합니다. 사용자 지정 SQL 문에서 주문 우선 순위는 상수 값입니다. 연결을 변경하여 High 우선 순위 주문을 확인하려는 경우 데이터 원본을 편집해야 합니다.
동일한 쿼리의 여러 변형을 만들어 유지 관리하는 대신 상수 주문 우선 순위 값을 매개 변수로 바꿀 수 있습니다. 매개 변수에는 Order Priority에 대해 가능한 모든 값이 포함되어야 합니다.
매개 변수를 만든 후 해당 매개 변수를 SQL 문에 삽입하여 상수 값을 바꿀 수 있습니다.
연결 편집을 완료하면 새 매개 변수가 데이터 패널 아래쪽에 있는 매개 변수 영역에 나열되며 뷰의 오른쪽에 매개 변수 컨트롤이 표시됩니다. 다른 값을 선택하면 연결이 업데이트됩니다.
참고: 추출 항목을 사용 중인 경우 매개 변수에 변경 내용을 반영하기 위해 추출 항목을 새로 고쳐야 합니다. 사용자 지정 SQL 매개 변수를 사용하는 데이터 원본을 게시하면 해당 매개 변수가 포함됩니다. 그러한 매개 변수는 해당 데이터 원본에 연결되는 모든 통합 문서로 전송됩니다.
사용자 지정 SQL을 위한 Tableau Catalog 지원
Tableau Catalog의 사용자 지정 SQL 지원은 사용자 지정 SQL 쿼리에 따라 다릅니다.
Tableau Server 및 Tableau Cloud에서 Data Management 제공의 일부로 Tableau Catalog를 사용할 수 있습니다. Tableau Catalog에 대한 자세한 내용은 Tableau Server 또는 Tableau Cloud 도움말에서 "Tableau Catalog 정보"를 참조하십시오.
지원되는 쿼리
Catalog는 ANSI SQL-2003 표준을 충족하는 사용자 지정 SQL 쿼리를 지원하며 세 가지 알려진 예외가 있습니다.
- 표준 시간대 식
- 다중 설정 식
- Tableau 매개 변수
2021.4부터 Tableau Catalog는 다음과 같은 예외와 함께 사용자 지정 SQL 내 Transact-SQL(T-SQL) 언어의 사용도 지원합니다.
- 힌트
- FOR 절
- OPENROWSET, OPENXML 및 OPENJSON 함수
- ODBC 스칼라 함수
- FOR SYSTEM_TIME
- TABLESAMPLE
- MATCH 식
- CONTAINS 식
- FREETEXT 식
Tableau Cloud 2023년 10월 및 Tableau Server 2023.3부터 Tableau Catalog는 다음을 제외하고 PostgreSQL을 사용하는 사용자 지정 SQL 쿼리도 지원합니다.
- XML 함수
- JSON 함수 및 연산자
지원되는 기능 및 함수
Catalog는 MySQL 또는 PostgreSQL 드라이버를 사용하는 연결이 있는 데이터 원본, 통합 문서 및 흐름에서 다음과 같은 추가적인 기능을 지원합니다. 이러한 연결의 예로는 MySQL용 Amazon Aurora, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo 등이 있습니다.
- MySQL GROUP_CONCAT 함수
- PostgreSQL 배열
- PostgreSQL EXTRACT() 함수
다른 사용자 지정 SQL 시나리오 및 기능이 작동할 수 있지만 Tableau는 그에 대한 구체적인 테스트를 수행하거나 지원을 제공하지 않습니다.
지원되는 계보
자산에 사용자 지정 SQL이 사용되는 경우 사용자 지정 SQL 쿼리 표시 단추가 포함된 메시지가 자산 페이지의 계보 탭에 나타납니다. 이 단추를 클릭하면 연결에 사용된 사용자 지정 SQL이 표시됩니다. 사용자 지정 SQL을 클립보드에 복사하려면 복사를 클릭합니다.
일부 유형의 사용자 지정 SQL은 불완전한 업스트림 계보를 야기할 수 있습니다. 이 경우 해당 정보와 함께 메시지가 나타납니다. 필드 세부 정보 카드에 연결된 열에 대한 링크가 포함되지 않거나 연결된 열이 전혀 표시되지 않을 수 있습니다. 열 세부 정보 카드에 열을 사용하는 필드에 대한 링크가 포함되지 않거나 필드가 전혀 표시되지 않을 수 있습니다.
테이블의 계보를 검사하는 경우 Catalog는 사용자 지정 SQL을 사용하여 수집된 테이블 메타데이터의 계보에서 열 정보를 표시하지 것을 지원하지 않는다는 점에 유의하십시오. 그러나 다른 자산에 동일한 테이블이 사용되고 사용자 지정 SQL이 사용되지 않는 경우 이러한 다른 자산을 통해 검색된 열에 대한 정보는 Tableau Catalog에 표시될 수도 있습니다.
다음 스크린샷에서 factAccountOpportunityByQuarter 테이블은 데이터 원본에서 사용되기 때문에 인덱싱되었습니다. 하지만 사용자 지정 SQL 쿼리에서 참조되므로 열 정보를 사용할 수 없습니다.
두 개 이상의 데이터 원본, 통합 문서 또는 흐름이 한 테이블을 사용하는 경우 열 수준 필터를 적용하면 사용자 지정 SQL 쿼리를 사용하는 해당 테이블의 모든 자산 다운스트림이 제외됩니다. 결과적으로, 계보에 실제 사용되는 것보다 적은 수의 다운스트림 자산이 표시됩니다.
계보 사용에 대한 자세한 내용은 Tableau Server(링크가 새 창에서 열림) 또는 Tableau Cloud(링크가 새 창에서 열림) 도움말에서 "계보를 사용한 영향 분석"을 참조하십시오.