오늘, AWS와 Azure에서 Databricks SQL 명령문 실행 API를 사용할 수 있게 되었음을 알려드리게 되어 기쁘게 생각하며, GCP에 대한 지원은 내년 초에 공개 프리뷰로 제공될 예정입니다. 이 API를 사용하면 REST API를 통해 Databricks SQL 웨어하우스에 연결하여 Databricks 레이크하우스 플랫폼에서 관리하는 데이터에 액세스하고 조작할 수 있습니다.
이 블로그에서는 API의 기본 사항을 살펴보고, GA 릴리스에서 새롭게 제공되는 주요 기능에 대해 논의하며, Databricks Python SDK와 함께 명령문 실행 API를 사용하여 데이터 애플리케이션을 구축하는 방법을 보여드립니다. Databricks 워크스페이스에서 코드를 실행하여 직접 따라해 볼 수도 있습니다. 추가 예제로, 이전 블로그에서는 명령문 실행 API와 JavaScript를 사용하여 스프레드시트에서 데이터를 활용하는 방법을 보여드렸습니다.
BI 애플리케이션은 데이터 웨어하우스의 주요 소비자 중 하나이며, 데이터브릭스 SQL은 드라이버, 커넥터, 기존 BI 도구와의 기본 통합으로 구성된 풍부한 연결 에코시스템을 제공합니다. 그럼에도 불구하고, 데이터브릭스 레이크하우스 플랫폼에서 관리되는 데이터는 전자상거래 플랫폼, CRM 시스템, SaaS 애플리케이션, 고객이 자체 개발한 맞춤형 데이터 애플리케이션 등 BI 이외의 애플리케이션 및 사용 사례와도 관련이 있습니다. 이러한 도구는 표준 데이터베이스 인터페이스와 드라이버를 통해 쉽게 연결할 수 없는 경우가 많지만, 거의 모든 도구와 시스템은 REST API와 통신할 수 있습니다.
데이터브릭스 SQL 문 실행 API를 사용하면 표준 SQL over HTTP를 사용하여 다양한 애플리케이션, 기술 및 컴퓨팅 장치와의 통합을 구축할 수 있습니다. 이 API는 실행을 위해 SQL 문을 SQL 웨어하우스에 제출하고 결과를 검색할 수 있는 일련의 엔드포인트를 제공합니다. 아래 이미지는 일반적인 데이터 흐름에 대한 개략적인 개요를 제공합니다.
API를 사용해 원하는 도구와 언어로 맞춤형 데이터 앱을 구축할 수 있습니다. 예를 들어, 비즈니스 사용자가 사용자 인터페이스를 통해 일련의 쿼리 기준을 제공하고 시각화, 다운로드 또는 추가 분석을 위한 결과를 다시 제공받는 웹 애플리케이션을 구축할 수 있습니다. 또한 API를 사용하여 특정 사용 사례 및 마이크로서비스에 적합한 특수 목적의 API를 구현하거나 원하는 프로그래밍 언어로 사용자 지정 커넥터를 구축할 수도 있습니다. 이러한 시나리오에서 API를 사용할 때 중요한 장점 중 하나는 드라이버를 설치하거나 데이터베이스 연결을 관리할 필요 없이 HTTP를 통해 서버에 연결하고 비동기 데이터 교환을 관리하기만 하면 된다는 것입니다.
AWS 및 Azure에서 API가 일반에 공개됨에 따라 몇 가지 새로운 기능과 개선 사항이 추가되었습니다.
다음 섹션에서는 이러한 새로운 기능을 사용하여 문 실행 API 위에 사용자 지정 API를 구축하는 방법에 대해 자세히 살펴보겠습니다.
Along with the general availability of the API on AWS and Azure, we are enabling some new features and improvements.
In the next section, we will go into more detail as we use these new features to build a custom API on top of the Statement Execution API.
올해 데이터+AI 서밋에서는 이 새로운 명령문 실행 API를 사용하여 데이터브릭스 레이크하우스 플랫폼 위에 커스텀 API를 구축하는 과정을 안내했습니다. 그 과정을 놓치신 분들을 위해 Acme, Inc라는 가상의 회사를 위한 간단한 웹사이트와 서비스 백엔드를 개발하는 과정을 지금 다시 보여드리겠습니다. 첫 번째 단계로 `setup.sh` 스크립트를 실행하여 여기에서 코드를 따라할 수 있습니다.
Acme, Inc.는 다양한 종류의 기계 부품을 판매하는 100개의 매장을 보유한 중소기업입니다. 이 회사는 데이터브릭스 레이크하우스를 활용하여 각 매장에 대한 정보를 추적하 고 메달리온 아키텍처로 판매 데이터를 처리합니다. 매장 관리자가 금 판매 데이터와 매장 정보를 쉽게 검색할 수 있는 웹 애플리케이션을 만들고자 합니다. 또한 매장 관리자가 일반 POS를 거치지 않은 판매량을 입력할 수 있도록 하려고 합니다. 이 시스템을 구축하기 위해 사용자 지정 데이터 API와 해당 API를 호출하여 데이터를 읽고 쓰는 HTML/JQuery 프런트엔드를 노출하는 Python 플라스크 애플리케이션을 만들겠습니다.
모든 스토어를 나열하는 사용자 정의 API 엔드포인트와 이것이 백엔드의 문 실행 API에 어떻게 매핑되는지 살펴보겠습니다. 인수를 받지 않는 간단한 GET 요청입니다. 백엔드는 정적 SELECT 문을 사용하여 SQL 웨어하우스로 호출하여 `stores` 테이블을 읽습니다.
Acme Inc's API Request | Statement Execution API Request | |
---|---|---|
GET /stores | → | POST /sql/statements statement: "SELECT * FROM stores" wait_timeout: "50s" on_wait_timeout: "CANCEL" |
Acme Inc's API Response | Statement Execution API Response | |
state: "SUCCEEDED" stores: [ ["123", "Acme, Inc", …], ["456", "Databricks", …] ] |
← | statement_id: "ID123" status: { state: "SUCCEEDED" } manifest: { ... } result: { data_array: [ ["123", "Acme, Inc", …], ["456", "Databricks", …] ] } |
Acme에는 100개의 스토어만 있기 때문에 빠른 쿼리와 작은 데이터 세트가 응답에 포함될 것으로 예상됩니다. 따라서 데이터브릭스에 동기식 요청을 하고 스토어 데이터 행을 인라인으로 반환받기로 결정했습니다. 동기화하기 위해 `wait_timeout`을 설정하여 응답을 최대 50초까지 기다리도록 하고 `on_wait_timeout` 매개 변수를 설정하여 더 오래 걸리는 경우 쿼리를 취소하도록 했습니다. 데이터브릭스의 응답을 보면 기본 결과인 `disposition`과 `format`이 데이터를 인라인으로 JSON 배열로 반환한다는 것을 알 수 있습니다. 그러면 Acme의 백엔드 서비스가 해당 페이로드를 리패키징하여 사용자 지정 API의 호출자에게 반환할 수 있습니다.
이 사용자 지정 엔드포인트의 전체 백엔드 코드는 여기에서 확인할 수 있습니다. 프론트엔드에서는 사용자 지정 `/api/1.0/stores` 엔드포인트를 호출하여 스토어 목록을 가져오고 여기에 있는 JSON 배열을 반복하여 표시합니다. 이 두 가지를 통해 Acme는 데이터브릭스 SQL로 뒷받침되는 새로운 홈페이지를 갖게 되었습니다!
각 스토어에 대해 가장 최근 매출을 표시하는 페이지가 있고 스토어 관리자가 전체 스토어 데이터 세트를 다운로드할 수 있기를 원합니다. 한 가지 주목할 점은 스토어당 판매 거래의 수가 스토어 수보다 몇 배나 많을 수 있다는 것입니다. 이 사용자 지정 API 엔드포인트의 요구 사항은 다음과 같습니다:
아래에서 이러한 요구 사항을 충족하기 위해 Python용 데이터브릭스 SDK를 사용하여 문 실행 API를 호출하는 방법을 확인할 수 있습니다. 전체 코드는