Amazon Q 생성형 SQL과의 상호 작용 - Amazon Redshift

Amazon Q 생성형 SQL과의 상호 작용

참고

Amazon Q 생성형 SQL 지원은 다음 AWS 리전에서만 이용할 수 있습니다.

  • 미국 동부(버지니아 북부) 리전(us-east-1)

  • 미국 서부(오레곤) 리전(us-west-2)

  • 아시아 태평양(뭄바이) 리전(ap-south-1)

  • 아시아 태평양(싱가포르) 리전(ap-southeast-1)

  • 아시아 태평양(시드니) 리전(ap-southeast-2)

  • 아시아 태평양(도쿄) 리전(ap-northeast-1)

  • 유럽(프랑크푸르트) 리전(eu-central-1)

  • 유럽(파리) 리전(eu-west-3)

  • 유럽(아일랜드) 리전(eu-west-1)

Amazon Redshift 쿼리 에디터 v2에서 Amazon Q 생성형 SQL 기능을 사용할 수 있습니다. 생성형 SQL은 프롬프트와 데이터베이스 스키마를 기반으로 SQL 문을 생성하는 코딩 도우미입니다. 이 코딩 도우미는 쿼리 에디터 v2에서 노트북을 작성하는 동안 사용할 수 있습니다. 생성된 SQL은 노트북이 연결된 데이터베이스용입니다.

Amazon Q 생성형 SQL과 상호 작용할 경우 구체적인 질문을 하고, 복잡한 요청이 있으면 반복하고, 답변이 정확한지 검증합니다.

자연어로 분석 요청을 제공할 때는 코딩 도우미가 필요한 내용을 정확히 이해할 수 있도록 최대한 구체적으로 작성하세요. 'find top venues that sold the most tickets(티켓을 가장 많이 판매한 공연장을 찾아줘)'라고 묻는 대신 '2008년에 티켓을 가장 많이 판매한 공연장 세 개의 이름/ID를 찾아줘(find names/ids of top three venues that sold the most tickets in 2008)'와 같이 세부 정보를 더 제공하세요. 객체를 알고 있을 경우 데이터베이스에서 일관되고 구체적인 객체 이름을 사용합니다. 동일한 객체를 서로 다른 방식으로 참조하면 도우미에게 혼동을 줄 수 있으므로 데이터베이스에 정의된 스키마, 테이블, 열 이름 등을 사용합니다.

복잡한 요청을 도우미가 해석하기 쉬운 여러 개의 간단한 명령문으로 나누세요. 반복적으로 후속 질문을 하면 도우미로부터 더 자세한 분석을 받을 수 있습니다. 예를 들어, 먼저 'which state has the most venues?(공연장이 가장 많은 주가 어디야?)'라고 물어보세요. 그런 다음 답변을 바탕으로 'which is the most popular venue from this state?(이 주에서 가장 인기 있는 공연장은 어디야?)'라고 물어보세요.

생성된 SQL을 실행하기 전에 검토하여 정확성을 확인하세요. 생성된 SQL 쿼리에 오류가 있거나 의도와 맞지 않는 경우 요청을 완전히 바꾸는 대신 도우미에게 수정 방법에 대한 지침을 제공하세요. 예를 들어, 쿼리에 연도의 조건자 절이 누락된 경우 '2008년을 기준으로 공연장을 알려줘'라고 요청하세요.

생성된 SQL을 실행하여 받은 오류 텍스트를 Amazon Q 생성형 SQL에 프롬프트로 다시 제출합니다. 이러한 오류를 통해 학습하여 더 나은 SQL이 생성됩니다.

스키마를 사용해야 한다는 신호를 보내려면 SQL 검색 경로에 스키마를 추가합니다. 예를 들어 데이터가 퍼블릭 스키마가 아닌 tickit 스키마에 있으면 tickit 스키마를 추가합니다.

set search_path to '$user', tickit;

Amazon Q 생성형 SQL과 상호 작용할 경우의 고려 사항

채팅 패널을 사용할 때 다음 사항을 고려하세요.

  • 계정의 쿼리 에디터 v2 관리자가 생성형 SQL 설정 페이지에서 채팅 기능을 활성화한 상태여야 합니다.

  • Amazon Q 생성형 SQL을 사용하려면 Query Editor V2의 AWS 관리형 정책에 지정된 기타 권한 외에도 IAM 정책의 sqlworkbench:GetQSqlRecommendations 권한이 필요합니다. AWS 관리형 정책에 대한 자세한 정보는 쿼리 편집기 v2에 액세스 단원을 참조하세요.

  • 질문은 영어로 작성해야 합니다.

  • 질문은 클러스터 또는 작업 그룹에 연결된 데이터베이스를 참조해야 합니다. 빈 상태 오류를 방지하려면 데이터베이스에 하나 이상의 테이블과 어느 정도의 데이터가 있어야 합니다.

  • 질문은 연결된 데이터베이스에 저장된 데이터를 참조해야 합니다. 외부 스키마는 참조할 수 없습니다. 지원되는 스키마에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서의 Create schema를 참조하세요.

  • SQL 생성으로 인해 연결된 데이터베이스가 변경되는 질문을 하면 경고가 발생할 수 있습니다.

  • 생성형 AI 기술은 새로운 기술이며 응답에 할루시네이션이라고 하는 실수가 있을 수 있습니다. 환경 또는 워크로드에서 사용하기 전에 오류와 취약성이 있는지 모든 코드를 테스트하고 검토하세요.

  • 계정의 다른 사용자가 실행한 SQL 쿼리를 공유하여 제안을 개선할 수 있습니다. 계정 관리자는 다음 SQL 명령을 실행하여 계정의 쿼리 기록에 대한 액세스를 허용할 수 있습니다.

    GRANT ROLE SYS:MONITOR to "IAMR:role-name"; GRANT ROLE SYS:MONITOR to "IAM:user-name"; GRANT ROLE SYS:MONITOR to "database-username";

    SYS:MONITOR에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서의 Amazon Redshift 시스템 정의 역할을 참조하세요.

  • 데이터는 안전하고 공개되지 않습니다. 데이터는 계정 간에 공유되지 않습니다. 쿼리, 데이터, 데이터베이스 스키마는 생성형 AI 파운데이션 모델(FM)을 훈련하는 데 사용되지 않습니다. 입력은 FM에 대한 맥락적 프롬프트로 질문자의 쿼리에만 답변하는 데 사용됩니다.

사용자 지정 컨텍스트

Query Editor V2 관리자는 생성형 SQL을 환경에 맞춤화하도록 사용자 지정 컨텍스트를 지정할 수 있습니다. 사용자 지정 컨텍스트는 도메인 지식과 기본 설정을 제공하여 SQL 생성에 대한 세분화된 제어 기능을 제공합니다. 사용자 지정 컨텍스트는 Query Editor V2 관리자가 Amazon Q 생성형 SQL에 업로드할 수 있는 JSON 파일에 정의됩니다.

데이터 웨어하우스의 생성형 SQL을 맞춤화하는 데 사용되는 JSON 키는 다음과 같습니다.

모든 테이블 참조는 3부분 표기법(database.schema.table)을 따라야 합니다.

리소스

리소스는 사용자 지정 컨텍스트가 적용되는 데이터 자산의 범위 또는 비중을 지정합니다.

ResourceId

고유한 리소스 식별자를 지정합니다. Amazon Redshift 클러스터에서 cluster id를 지정합니다. Redshift 서버리스 작업 그룹에서 workgroup name을 지정합니다.

ResourceType

유효한 값: REDSHIFT_WAREHOUSE.

TablesToInclude

SQL 생성에 고려되는 테이블 모음을 지정합니다. 이 필드는 SQL 쿼리 범위를 사용 가능한 테이블의 정의된 하위 집합으로 제한하려는 경우에 매우 중요합니다. 불필요한 테이블 참조를 줄여 생성 프로세스를 최적화하는 데 도움이 될 수 있습니다. 쿼리 생성을 더 미세하게 제어하려고 TablesToExclude와 이 필드를 페어링할 수 있습니다.

TablesToExclude

SQL 생성에서 제외되는 테이블 모음을 지정합니다. 이 옵션은 특정 테이블이 관련이 없거나 쿼리 생성 프로세스에서 영향을 주면 안 되는 경우에 사용합니다.

TableAnnotations

사용 중인 테이블에 관한 메타데이터 또는 보충 정보를 제공합니다. 이러한 주석에는 테이블 설명, 사용 정보 또는 Amazon Q 생성형 SQL이 테이블의 컨텍스트 또는 구조를 더 잘 이해하는 데 도움이 되는 추가 속성이 포함될 수 있습니다. 이는 테이블 정의에 명확성을 더하여 SQL 생성의 정확도를 높이는 데 중요합니다.

ColumnsToInclude

생성형 SQL 쿼리 시 지정된 테이블에서 어떤 열이 포함되는지를 정의합니다. 이 필드는 Amazon Q 생성형 SQL이 관련 열에 집중하고 데이터 검색 범위를 좁혀 성능을 개선하는 데 도움이 됩니다. 이렇게 하면 Amazon Q 생성형 SQL이 지정된 쿼리 컨텍스트에 필요한 데이터만 가져옵니다.

ColumnsToExclude

SQL 생성에서 영향을 주지 않도록 제외할 열을 지정합니다. 특정 열에 Amazon Q 생성형 SQL에서 영향을 주면 안 되는 관련이 없거나 중복된 데이터가 포함되어 있는 경우에 사용할 수 있습니다. 열 포함 및 제외를 관리하여 결과를 구체화하고 검색된 데이터에 대한 제어 기능을 유지 관리할 수 있습니다.

ColumnAnnotations

TableAnnotations와 마찬가지로 이 필드는 각 열별로 메타데이터 또는 주석을 제공합니다. 이러한 주석을 통해 열 정의 또는 특정 처리 지침에 대한 인사이트를 제공할 수 있습니다. 이 정보는 SQL 생성 프로세스를 안내하고 쿼리에서 열이 적절하게 사용되도록 하는 데 유용합니다.

CuratedQueries

미리 정의된 질문 및 답변 예제 모음이며, 질문은 자연어(NLQ)로 작성되고 답변으로 해당 SQL 쿼리가 반환됩니다. 이러한 예제를 통해 Amazon Q 생성형 SQL에서 생성되어야 하는 쿼리 유형을 이해할 수 있습니다. 예제는 Amazon Q 생성형 SQL 출력의 정확도와 관련성을 개선하기 위한 기준점 역할을 합니다.

CustomDocuments

정의, 도메인별 지식 또는 설명 등 Amazon Q 생성형 SQL에 제공되는 추가 정보 또는 힌트입니다. 사업부에서 고유한 방식으로 값을 계산하는 경우를 예로 들 수 있습니다. '제조 팀의 총매출은 가격*수익'이며, 여기에서 문서화할 수 있습니다. 이러한 문서는 추가 컨텍스트를 제공하여 자연어 입력을 해석하는 Amazon Q 생성형 SQL의 기능을 향상시킵니다.

AdditionalTables

SQL 생성에 영향을 줘야 하지만 데이터 웨어하우스에 저장된 일부 데이터에 포함되지 않은 추가 테이블을 지정합니다. 이렇게 하면 Amazon Q 생성형 SQL에서 외부 데이터 소스를 SQL 생성 로직에 통합하여 복잡한 데이터 환경을 처리할 수 있는 용량을 확장할 수 있습니다.

AppendToPrompt

SQL 생성 프로세스를 안내하도록 Amazon Q 생성형 SQL에 제공되는 추가 지침 또는 가이드라인입니다. 여기에는 쿼리를 구조화하는 방법에 대한 특정 지침, 특정 SQL 구문에 대한 기본 설정 또는 Amazon Q 생성형 SQL 출력의 품질을 향상시키는 기타 개괄적인 지침이 포함될 수 있습니다.

다음 사용자 지정 컨텍스트 예제에서는 JSON 파일의 형식을 보여 주며, 다음 항목을 정의합니다.

  • mycluster 클러스터에 대한 Amazon Redshift 데이터 웨어하우스의 사용자 지정 컨텍스트를 정의합니다.

  • SQL 생성 프로세스를 최적화하는 데 도움이 되도록 포함 및 제외할 특정 테이블과 열을 정의합니다.

  • 포함할 직접 호출된 테이블 및 열에 대한 주석을 정의합니다.

  • Amazon Q 생성형 SQL에서 사용할 엄선된 샘플 쿼리를 정의합니다.

  • 생성형 SQL 사용 시의 사용자 지정 문서와 가드레일을 정의합니다.

  • 생성형 SQL 사용 시의 추가 테이블에 대한 DDL을 정의합니다.

{ "resources": [ { "ResourceId": "mycluster", "ResourceType": "REDSHIFT_WAREHOUSE", "TablesToInclude": [ "database.schema.table1", "database.schema.table2" ], "TablesToExclude": [ "database.schema.table3", "database.schema.table4" ], "ColumnsToInclude": { "database.schema.table1": [ "col1", "col2" ], "database.schema.table2": [ "col1", "col2" ] }, "ColumnsToExclude": { "database.schema.table5": [ "col1", "col2" ], "database.schema.table6": [ "col1", "col2" ] }, "TableAnnotations": { "database.schema.table1": "table1 refers to Q3 sales", "database.schema.table2": "table2 refers to Q4 sales" }, "ColumnAnnotations": { "database.schema.table1": { "col1": "col1 refers to Q3 sale total", "col2": "col2 refers to sale location" }, "database.schema.table2": { "col1": "col2 refers to Q4 sale total", "col2": "col2 refers to sale location" } }, "CuratedQueries": [ { "Question": "what is the sales data for Q3", "Answer": "SELECT * FROM table1" }, { "Question": "what is the sales data for Q4", "Answer": "SELECT * FROM table2" } ], "CustomDocuments": [ "in manufacturing division total sales is price * revenue", "in research division total sales is price * revenue" ], "AdditionalTables": { "database.schema.table8": "create table database.schema.table8(col1 int)", "database.schema.table9": "create table database.schema.table9(col1 int)" }, "AppendToPrompt": "Apply these guardrails: Queries should never return the secretId field of a user." } ] }