LLM을 사용하여 텍스트에서 SQL로 이동하는 방법

LLM을 사용하여 텍스트에서 SQL로 이동하는 방법

LLMS와 함께 SQL 텍스트LLMS와 함께 SQL 텍스트
저자의 이미지 | 캔버

LLMS (Lagnuage Models)를 사용하면 오늘날 모두가 코더입니다! 이것은 LLM 프로모션 자료에서 얻은 메시지입니다. 어떤 광고와 마찬가지로 사실이 아닙니다. 코딩은 브레이크 넥 속도로 코드를 생성하는 것 이상입니다. 그러나 영어 (또는 기타 자연 언어)를 실행 가능한 SQL 쿼리로 번역하는 것은 LLM의 가장 매력적인 용도 중 하나이며 세계에서 자리를 차지하고 있습니다.

LLM을 사용하여 SQL을 생성하는 이유는 무엇입니까?

LLM을 사용하여 SQL을 생성하면 몇 가지 이점이 있으며, 모든 것과 마찬가지로 몇 가지 단점도 있습니다.

SQL을 생성하는 LLMSQL을 생성하는 LLM

두 가지 유형의 텍스트 간 SQL LLM

데이터베이스 스키마에 대한 액세스와 관련하여 현재 사용할 수있는 두 가지 매우 광범위한 텍스트 간 SQL 기술을 구별 할 수 있습니다.

  1. 직접 액세스가없는 LLM
  2. 직접 액세스가있는 LLM

// 1. 데이터베이스 스키마에 직접 액세스하지 않은 LLM

이 LLM은 실제 데이터베이스에 대해 쿼리에 연결되거나 실행되지 않습니다. 가장 가까운 것은 쿼리하려는 데이터 세트를 업로드하는 것입니다. 이 도구는 스키마에 대한 컨텍스트를 제공하는 데 의존합니다.

도구 예 :

사용 사례 :

  • 쿼리 제도 및 프로토 타이핑
  • 학습과 가르침
  • 나중에 검토를위한 정적 코드 생성

// 2. 데이터베이스 스키마에 직접 액세스 할 수있는 LLM

이 LLM은 PostgreSQL, 눈송이, BigQuery 또는 Redshift와 같은 라이브 데이터 소스에 직접 연결됩니다. 이를 통해 데이터베이스에서 SQL 쿼리에서 결과를 생성, 실행 및 반환 할 수 있습니다.

도구 예 :

사용 사례 :

  • 비즈니스 사용자를위한 대화 분석
  • 실시간 데이터 탐색
  • BI 플랫폼에 포함 된 AI 보조원

단계별 : 텍스트에서 SQL로 이동하는 방법

텍스트에서 SQL을 얻는 기본 워크 플로우는 연결이 끊거나 연결된 LLM을 사용하든 비슷합니다.

텍스트에서 SQL로텍스트에서 SQL로

Chatgpt의 위의 단계를 사용하여 Shopify와 Amazon의 인터뷰 질문을 해결하려고 노력할 것입니다.

// 1. 스키마를 정의합니다

쿼리가 데이터에서 작동하려면 LLM이 데이터 구조를 명확하게 이해해야합니다. 이것은 일반적으로 다음을 포함합니다.

  • 테이블 이름
  • 열 이름과 유형
  • 테이블 간의 관계 (조인, 키)

이 정보는 프롬프트에서 직접 전달하거나 RAG (Resprieved-Augmented Generation) 파이프 라인 내에서 벡터 검색을 사용하여 동적으로 검색 할 수 있습니다.

// 2. 자연어로 프롬프트

프롬프트는 일반적으로 두 개의 세그먼트로 구성됩니다.

  • 스키마 정의
  • SQL 답변이 필요한 질문

예 : 먼저 자리 표시자를 포함하는 신속한 구조를 제공하겠습니다. 그런 다음 실제 프롬프트를 작성하겠습니다.

우리는 롤 플레잉 프롬프트를 사용할 것입니다. 이는 Chatgpt에게 특정 역할을하도록 지시하는 것을 의미합니다.

프롬프트를 구조화하는 방법은 다음과 같습니다.

Dataset: My dataset consists of [number of tables] tables.

The first one is [table “” not found /]
with the following columns and data types: [column names and data types] The second table is [table “” not found /]
with the following columns and data types: [column names and data types] Question: [provide a question to be answered] Assumptions: [provide assumptions for solving the question] Role: [describe a role LLM has to play]

이제 인터뷰 질문을 해결하는 실제 프롬프트를 작성해 봅시다.

여기에 올바른 SQL 솔루션을 제공하기를 바랍니다. 열 이름, 데이터 유형, 질문 및 가정은 질문 자체에서 방금 붙여 넣습니다.

Dataset: My dataset consists of two tables.

The first one is "customers" with the following columns and data types:

address:
text
city:
text
first_name:
text
id:
bigint
last_name:
text
phone_number:
text

The second table is "orders" with the following columns and data types:

cust_id:
bigint
id:
bigint
order_date:
date
order_details:
text
total_order_cost:
bigint

Question: Find the customers with the highest daily total order cost between 2019-02-01 and 2019-05-01. If a customer had more than one order on a certain day, sum the order costs on a daily basis. Output each customer's first name, total cost of their items, and the date.

Assumption: For simplicity, you can assume that every first name in the dataset is unique.

Role: Act as a SQL expert and write a PostgreSQL query that answers the question.

// 3. SQL 쿼리를 생성합니다

이 단계에서 선택한 LLM은 SQL 쿼리를 생성합니다.

예 : 다음은 PostgreSQL 코드 ChatGpt가 우리를 위해 생성되었습니다.

SELECT
    c.first_name,
    daily_totals.order_date,
    daily_totals.total_cost
FROM (
    SELECT
        cust_id,
        order_date,
        SUM(total_order_cost) AS total_cost
    FROM orders
    WHERE order_date BETWEEN '2019-02-01' AND '2019-05-01'
    GROUP BY cust_id, order_date
) AS daily_totals
JOIN customers c ON c.id = daily_totals.cust_id
WHERE (daily_totals.cust_id, daily_totals.order_date) IN (
    SELECT
        cust_id,
        order_date
    FROM (
        SELECT
            cust_id,
            order_date,
            SUM(total_order_cost) AS total_cost,
            RANK() OVER (ORDER BY SUM(total_order_cost) DESC) AS rnk
        FROM orders
        WHERE order_date BETWEEN '2019-02-01' AND '2019-05-01'
        GROUP BY cust_id, order_date
    ) ranked
    WHERE rnk = 1
);

// 4. 쿼리를 실행하십시오

이제 쿼리를 직접 (LLM이 라이브 연결을 지원하는 경우) 직접 쿼리를 실행하거나 데이터베이스 시스템 내에서 복사 및 실행하여 실행할 수 있습니다.

예 :이 경우 코드를 Stratascratch 코드 편집기에 복사하고 ‘Solution’버튼을 사용하여 솔루션을 검증합니다.

이것이 바로 출력이며 올바른 솔루션입니다. Chatgpt를위한 Bravo! 그것은 첫 번째 시도에서 그것을 못 박았습니다!

First_name Order_date Total_cost
처녀 2019-04-19 275
표시 2019-04-19 275

// 5. 검토, 시각화 및 정제

LLM을 사용하여 SQL 코드를 작성하려는 목적에 따라이 단계는 선택 사항 일 수 있습니다. 비즈니스 세계에서는 일반적으로 쿼리 출력을 사용자 친화적 인 형식으로 표시합니다. 일반적으로 다음과 같습니다.

  • 결과를 표 및/또는 차트로 표시합니다
  • 후속 요구 사항 허용 (예 : “고객 도시를 포함 할 수 있습니까?”) 변경 변경 및 출력 제공

함정과 모범 사례

이 예에서는 Chatgpt가 즉시 정답을 제시했습니다. 그러나 특히 데이터와 요구 사항이 더 복잡해질 때 항상 그렇게한다는 의미는 아닙니다. LLM을 사용하여 텍스트에서 SQL 쿼리를 얻는 것은 함정이 없습니다. LLM 쿼리 생성을 데이터 과학 워크 플로의 일부로 만들려면 모범 사례를 적용하여 피할 수 있습니다.

함정과 모범 사례함정과 모범 사례

결론

LLM은 텍스트에서 SQL 쿼리를 만들고 싶을 때 가장 친한 친구가 될 수 있습니다. 그러나 이러한 도구를 최대한 활용하려면 달성하고자하는 것과 LLM을 사용하는 것이 유리한 사용 사례를 명확하게 이해해야합니다.

이 기사는 이러한 지침을 제공하며 LLM을 자연어로 프롬프트하고 작동하는 SQL 코드를 얻는 방법의 예를 제공합니다.

네이트 로시디 데이터 과학자이자 제품 전략입니다. 그는 또한 겸임 교수 교육 분석이며, 데이터 과학자들이 최고 회사의 실제 인터뷰 질문과의 인터뷰를 준비하는 플랫폼 인 Stratascratch의 창립자입니다. Nate는 커리어 시장의 최신 트렌드에 대해 글을 쓰고, 인터뷰 조언을 제공하고, 데이터 과학 프로젝트를 공유하며, 모든 SQL을 다룹니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다