์์ฑ์: Adriana Ispas, ํฌ๋ฆฌ์ค ์คํฐ๋ธ์ค, Christian Stuart , Sander Goos
์ค๋, 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๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ ์ฒด ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ฒ์ ๋ ๊ฐ์ง ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ง์ API์์ `row_limit` ๋ฐ `format` ๋งค๊ฐ ๋ณ์๋ฅผ ๋ ธ์ถํ๊ณ ์ด๋ฅผ ๋ฌธ ์คํ API์ ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ์ถ์๊ฐ ์ฟผ๋ฆฌ์์ ์์ฑ๋๋ ์ด ํ ์๋ฅผ ์ ํํ๊ณ ๊ฒฐ๊ณผ ํ์(CSV, JSON ๋๋ Arrow)์ ์ ํํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ง์ API๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด, ๋ฌธ ์คํ API์ `wait_timeout` ๋งค๊ฐ๋ณ์๋ฅผ 0์ด๋ก ์ค์ ํ๋ฉด, ๋ฐ์ดํฐ๋ธ๋ฆญ์ค๊ฐ ๋ฌธ ID์ ์ฟผ๋ฆฌ ์ํ๋ก ์ฆ์ ์๋ตํ๊ฒ ๋ฉ๋๋ค. ํธ์ถ์์ ๋ํ ์๋ต์์ ์ํ์ ํจ๊ป ํด๋น ๋ฌธ ID๋ฅผ `request_id`๋ก ํจํค์งํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ ID์ ์ํ๋ฅผ ๋ฐ์ผ๋ฉด ๋์ผํ ์ฌ์ฉ์ ์ง์ API ์๋ํฌ์ธํธ๋ฅผ ํด๋งํ์ฌ ์คํ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์๋ํฌ์ธํธ๋ `get_statement` ๋ฉ์๋๋ฅผ ํตํด ์์ฒญ์ ๋ฐ์ดํฐ๋ธ๋ฆญ์ค SQL ์จ์ดํ์ฐ์ค๋ก ์ ๋ฌํฉ๋๋ค. ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณตํ๋ฉด API๋ ๊ฒฐ๊ตญ 'chunk_count'์ ํจ๊ป `SUCCEEDED` ์ํ๋ฅผ ๋ฐํํฉ๋๋ค. ์ฒญํฌ ์นด์ดํธ๋ ๊ฒฐ๊ณผ๊ฐ ๋ช ๊ฐ์ ํ ํฐ์ ์ผ๋ก ๋ถํ ๋์๋์ง๋ฅผ ๋ํ๋ ๋๋ค.
ํจ์จ์ ์ธ ์ถ์ถ(๋ค ๋ฒ์งธ ์๊ตฌ ์ฌํญ)์ ๋ฌ์ฑํ๊ธฐ ์ํด EXTERNAL_LINKS ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ ์ฒญํฌ์ ๋ํด ๋ฏธ๋ฆฌ ์๋ช ๋ URL์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์ ์ ์ API๋ 'request_id'์ 'chunk_index'๊ฐ ์ฃผ์ด์ง ๋ ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ ํ 20๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์นํ์ ์ธ JSON_ARRAY ๊ฒฐ๊ณผ ํ์์ ์ ๊ณตํ์ฌ ๊ฐ ์คํ ์ด์ ๋ํด ๊ฐ์ฅ ์ต๊ทผ ๋งค์ถ์ ํ์ํ๋ ๋๋ฉ ํ์ด์ง๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ํ์ง๋ง ํ์ด์ง ์๋จ์ '๋ค์ด๋ก๋' ๋ฒํผ์ ์ถ๊ฐํ์ฌ ์คํ ์ด ๊ด๋ฆฌ์๊ฐ ๋ชจ๋ ํ๋งค์ ๋ํ ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์คํ ์ด ๊ด๋ฆฌ์๊ฐ ์ ํํ ๋ถ์ ๋๊ตฌ๋ก ์ฝ๊ฒ ์์งํ ์ ์๋๋ก ์ ํ์ ๋์ง ์๊ณ CSV ํ์์ ํ์ฉํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณตํ๊ณ ์ด ์ฒญํฌ ์๋ฅผ ํ์ธํ๋ฉด ์ฌ์ฉ์ ์ง์ API๋ฅผ ๋ณ๋ ฌ๋ก ํธ์ถํ์ฌ ๋ฏธ๋ฆฌ ์๋ช ๋ URL์ ๊ฐ์ ธ์ค๊ณ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์์ ์ง์ CSV ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก EXTERNAL_LINKS ์ฒ๋ฆฌ๋ ์์ฐจ์ ์ธ๋ผ์ธ ์ฝ๊ธฐ์ ๋นํด ์ถ์ถ ์ฒ๋ฆฌ๋์ด 12๋ฐฐ ํฅ์๋ ๊ฒ์ผ๋ก ์ ์ฆ๋ Cloud Fetchย ๊ธฐ์ ์ ํ์ฉํฉ๋๋ค. ์๋ ์์์์๋ ์ฝ 160Mbps๋ก 500MB๋ฅผ ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋ํ์ต๋๋ค.

์ด์ ๋งค์ฅ์ ๋งค์ถ์ ๋ณผ ์ ์๊ฒ ๋์์ผ๋, Acme ํ์ ์๋ก์ด ๋งค์ถ ์ ๋ณด๋ฅผ ๋ ์ดํฌํ์ฐ์ค์ ์ฝ์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด /api/1.0/stores/storeId/sales ์๋ํฌ์ธํธ์ ๋ํ POST ์์ฒญ์ผ๋ก ๋ท๋ฐ์นจ๋๋ ๊ฐ๋จํ ์น ์์์ ๋ง๋ค ์ ์์ต๋๋ค. ์์ ๋ฐ์ดํฐ๋ฅผ ๋ ์ดํฌํ์ฐ์ค๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋งค๊ฐ๋ณ์ํ๋ SQL ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค:
๊ทธ๋ฆฌ๊ณ ๊ฐ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ, ๊ฐ, ์ ํ๊ณผ ํจ๊ป `parameters` ๋ชฉ๋ก ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์น ์์์ ์ ๋ ฅ์ ๋ฌธ ์คํ API์ ์ ๊ณตํฉ๋๋ค:
SQL Warehouse ์์ง์ SQL ์ฝ๋๋ฅผ ํ์ฑํ ํ ์ ๊ณต๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฟผ๋ฆฌ ๊ณํ์ ๋ฆฌํฐ๋ด๋ก ์์ ํ๊ฒ ๋์ฒดํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์์ ์ผ๋ก ์ฝ์ ๋ SQL ๊ตฌ๋ฌธ์ด SQL๋ก ํด์๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๊ฐ ๋งค๊ฐ๋ณ์์ '์ ํ' ํ๋๋ ์ ๊ณต๋ '๊ฐ'์ ์ ํ ์ ํ์ฑ์ ๊ฒ์ฌํ์ฌ ์ถ๊ฐ์ ์ธ ์์ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค. ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์๋ ํ๋์ ์ ๋ ฅ์ผ๋ก "100); drop table sales"์ ๊ฐ์ ๊ฐ์ ์ ๊ณตํ๋ฉด INSERT INTO ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ณ ์คํ๋์ง ์์ต๋๋ค:
[INVALID_PARAMETER_MARKER_VALUE.INVALID_VALUE_FOR_DATA_TYPE] An invalid parameter mapping was provided: the value '100); drop table sales' for parameter 'quantity' cannot be cast to INT because it is malformed.
ย
์ฌ๊ธฐ์์ `POST /api/1.0/stores/store_id/sales` ์๋ํฌ์ธํธ์ ์ผ๋ถ๋ก ์ฌ์ฉํ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์น ์์์ ์ ๋ ฅ์ด ์ฌ๋ฐ๋ฅธ ์ ํ์ผ๋ก ์ ํจํ๋ฉด ์ฌ์ฉ์๊ฐ '์ ์ถ'์ ํด๋ฆญํ ํ ํ๋งค ํ ์ด๋ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
์ด์ ์ด ์ฌ์ฉ์ ์ ์ API๋ฅผ ๋ฐ๋ณตํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ธ๋ฆญ์ค ๋ ์ดํฌํ์ฐ์ค ํ๋ซํผ ์์ ์์ ๋ง์ ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๋๋ค๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ธ ์ ์ฒด์์ ์ฌ์ฉํ ์ํ ์ฝ๋์ ์์ฒด ๋ฐ์ดํฐ๋ธ๋ฆญ์ค ํ๊ฒฝ์์ ์ํ ํ ์ด๋ธ์ ์์ฑํ๋ `setup.sh` ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋, ์๋ ๋์์์์ ๋ฐ์ดํฐ+AI ์๋ฐ์ ๋ผ์ด๋ธ ์ค๋ช ์ ์์ฒญํ ์ ์์ต๋๋ค.
The Databricks SQL Statement Execution API is available with the Databricks Premium and Enterprise tiers. If you already have a Databricks account, follow our tutorial (AWS | Azure), the documentation (AWS | Azure), or check our repository of code samples. If you are not an existing Databricks customer, sign up for a free trial.
๋ธ๋ก๊ทธ๋ฅผ ๊ตฌ๋ ํ๊ณ ์ต์ ๊ฒ์๋ฌผ์ ์ด๋ฉ์ผ๋ก ๋ฐ์๋ณด์ธ์.