Snowflake Python APIs: ์ผ๋ฐ˜ ๊ฐœ๋…ยถ

Snowflake Python APIs ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์€ ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜์ด๋ฉฐ, ์ด๋Š” API๊ฐ€ Snowflake์—์„œ ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ค๋ธŒ์ ํŠธ ์„ธํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. Snowflake ๋ฆฌ์†Œ์Šค ์˜ค๋ธŒ์ ํŠธ ์œ ํ˜•์˜ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ์Šคํ‚ค๋งˆ

  • ํ…Œ์ด๋ธ”

  • ๋ทฐ

  • ๊ฒฝ๊ณ 

  • ํŒŒ์ดํ”„

  • ์Šคํ…Œ์ด์ง€

  • ์‚ฌ์šฉ์ž

  • ์›จ์–ดํ•˜์šฐ์Šค

์ง€์›๋˜๋Š” ๊ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด Python API ์—์„œ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ง„์ž…์ : Root ์˜ค๋ธŒ์ ํŠธยถ

Root ์˜ค๋ธŒ์ ํŠธ๋Š” Python API์˜ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค. ์‹คํ–‰๋  Snowflake ์ปจํ…์ŠคํŠธ๋กœ ๊ตฌ์„ฑ๋œ Root ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด Python Connector Connection ์˜ค๋ธŒ์ ํŠธ ๋˜๋Š” Snowpark Session ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์ด๋ฆ„์ด my_connection ์ธ Connection ์˜ค๋ธŒ์ ํŠธ๋กœ Root ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•ฉ๋‹ˆ๋‹ค.

from snowflake.core import Root

root = Root(my_connection)
Copy

Session ์˜ค๋ธŒ์ ํŠธ๋กœ Root ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธํŠธ๋ถ ํ™˜๊ฒฝ ๋˜๋Š” ์ €์žฅ ํ”„๋กœ์‹œ์ €์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด get_active_session() ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ์…˜์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

from snowflake.core import Root
from snowflake.snowpark.context import get_active_session

session = get_active_session()
root = Root(session)
Copy

๊ณ„์ •, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์Šคํ‚ค๋งˆ ๋ฒ”์œ„ยถ

Root ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›จ์–ดํ•˜์šฐ์Šค(root.warehouses), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(root.databases), ์™ธ๋ถ€ ๋ณผ๋ฅจ(root.external_volumes)๊ณผ ๊ฐ™์€ ๊ณ„์ • ๋ฒ”์œ„ ์ง€์ • ์˜ค๋ธŒ์ ํŠธ์˜ ์ปฌ๋ ‰์…˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DatabaseResource ์•„๋ž˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ”์œ„ ์˜ค๋ธŒ์ ํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Root ์•„๋ž˜์—์„œ DatabaseCollection ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ, SchemaCollection ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ”์œ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์˜ค๋ธŒ์ ํŠธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”, ๋ทฐ, ์ŠคํŠธ๋ฆผ, ์Šคํ…Œ์ด์ง€์™€ ๊ฐ™์€ ์Šคํ‚ค๋งˆ ๋ฒ”์œ„ ์ง€์ • ์˜ค๋ธŒ์ ํŠธ์— SchemaResource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋Š” StageCollection ์— ๋จผ์ € ์•ก์„ธ์Šคํ•œ ๋‹ค์Œ StageResource ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

root = Root(my_connection)
stages = root.databases["my_db"].schemas["my_schema"].stages
my_stage = stages["my_stage"] # Access the "my_stage" StageResource
Copy

snowflake.core ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจยถ

๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์€ snowflake.core ํŒจํ‚ค์ง€์˜ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์™€ ์ด๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ์—ฐ๊ด€๋˜๋Š”์ง€ Root ์˜ค๋ธŒ์ ํŠธ๋ถ€ํ„ฐ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Snowflake.core ํŒจํ‚ค์ง€์˜ ์ผ๋ถ€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์™€ ์ด๋“ค ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ

์ปฌ๋ ‰์…˜ ํด๋ž˜์Šคยถ

Collection ํด๋ž˜์Šค๋Š” ์ด๋ฆ„์ด <SnowflakeObjectType>Collection ์ธ ํด๋ž˜์Šค์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Collection ํด๋ž˜์Šค๋Š” ์ฃผ์–ด์ง„ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ํ‘œ์‹œ๋˜๋Š” ํŠน์ • ์˜ค๋ธŒ์ ํŠธ ์œ ํ˜•์˜ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ๋ฒ”์œ„ ์˜ค๋ธŒ์ ํŠธ(์˜ˆ: ํ…Œ์ด๋ธ”, ๋ทฐ, ํ•จ์ˆ˜, ์ŠคํŠธ๋ฆผ)์˜ ๊ฒฝ์šฐ ์ปฌ๋ ‰์…˜์€ ํ˜„์žฌ ์—ญํ• ์ด๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์ง€์ •๋œ ์Šคํ‚ค๋งˆ ๋‚ด์˜ ํ•ด๋‹น ์œ ํ˜•์˜ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

SchemaCollection ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฒ”์œ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. DatabaseCollection ๋ฐ WarehouseCollection ๊ฐ™์€ ๊ณ„์ • ๋ฒ”์œ„ ์˜ค๋ธŒ์ ํŠธ๋Š” Root ์ธ์Šคํ„ด์Šค์—์„œ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์Šคํ‚ค๋งˆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ๊ณ„์ •์— ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(์ด์ „์— ์„ค๋ช…ํ•œ ๋ฒ”์œ„ ๋ฐ ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).

  • ํ•ด๋‹น ๋ฒ”์œ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ ์„ธํŠธ๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋Š” WarehouseCollection ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# my_wh is created from scratch
my_wh = Warehouse(name="my_wh", warehouse_size="X-Small")
root.warehouses.create(my_wh)
Copy

์ปฌ๋ ‰์…˜์—์„œ Resource ์˜ค๋ธŒ์ ํŠธ ๊ฒ€์ƒ‰ํ•˜๊ธฐยถ

๋˜ํ•œ ์ปฌ๋ ‰์…˜์€ Resource ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ธฐ๋ณธ Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠน์ • API ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ง„์ž…์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์—์„œ ๋Œ€๊ด„ํ˜ธ ์ธ๋ฑ์Šค ์—ฐ์‚ฐ์ž([ ])๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ปฌ๋ ‰์…˜ ๋‚ด์˜ Snowflake ์˜ค๋ธŒ์ ํŠธ๋ฅผ โ€œ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜โ€ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋Š” Snowflake ๊ณ„์ •์˜ my_wh ๋ผ๋Š” ๊ธฐ์กด ์›จ์–ดํ•˜์šฐ์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

# my_wh_ref is retrieved from an existing warehouse
# This returns a WarehouseResource object, which is a reference to a warehouse named "my_wh" in your Snowflake account
my_wh_ref = root.warehouses["my_wh"]
Copy

๋ชจ๋ธ ํด๋ž˜์Šคยถ

๋ชจ๋ธ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ๋‹จ์ˆœํžˆ ์›จ์–ดํ•˜์šฐ์Šค์˜ ๊ฒฝ์šฐ Warehouse, ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ Table ๊ฐ™์ด Snowflake์—์„œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์™€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ํด๋ž˜์Šค๋Š” ์ด๋ฆ„, ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์†ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์Šคํ‚ค๋งˆ(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ), ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ ์œ ํ˜•์— ํŠน์ •ํ•œ ํŠน์„ฑ ๋“ฑ ๊ด€๋ จ ์†์„ฑ๊ณผ ํ•จ๊ป˜ Snowflake ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›จ์–ดํ•˜์šฐ์Šค ๋ชจ๋ธ์€ ํŠน์ • ์›จ์–ดํ•˜์šฐ์Šค ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ warehouse_size, type, auto_resume ์†์„ฑ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ์—๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์†์„ฑ ๋ฐฑ (์†์„ฑ ๋ฐ ํ•ด๋‹น ๊ฐ’์˜ ๋ชจ์Œ)์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ Snowflake์˜ ๊ธฐ์กด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ์‚ฌ์–‘์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Resource ์—์„œ ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐยถ

ํ˜„์žฌ Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์†์„ฑ ๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด Resource ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด fetch() ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์ฝ”๋“œ๋Š” ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ์ž‘์—…์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

# my_wh is fetched from an existing warehouse
my_wh = root.warehouses["my_wh"].fetch()
print(my_wh.name, my_wh.auto_resume)
Copy
# my_wh is fetched from an existing warehouse
my_wh = root.warehouses["my_wh"].fetch()
my_wh.warehouse_size = "X-Small"
root.warehouses["my_wh"].create_or_alter(my_wh)
Copy

์ฐธ๊ณ 

์ด ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์€ my_wh ์˜ค๋ธŒ์ ํŠธ๊ฐ€ Snowflake์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ํด๋ž˜์Šคยถ

Resource ํด๋ž˜์Šค๋Š” ์ด๋ฆ„์ด <SnowflakeObjectType>Resource ์ธ ํด๋ž˜์Šค์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Resource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ธฐ๋ณธ Snowflake ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋˜๋Š” ์ฐธ์กฐ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํด๋ž˜์Šค๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์†์„ฑ์ด๋‚˜ ์‚ฌ์–‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์ˆœํ•œ ์†์„ฑ ๋ชจ์Œ์ธ ๋ฐ˜๋ฉด, Resource ํด๋ž˜์Šค๋Š” Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹ค์ œ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค.

Resource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น Collection ์—์„œ ์ด๋ฆ„์œผ๋กœ ์ฐธ์กฐํ•˜๊ณ  ๋Œ€๊ด„ํ˜ธ ์ธ๋ฑ์Šค ์—ฐ์‚ฐ์ž([ ])๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” ์›จ์–ดํ•˜์šฐ์Šค ์ปฌ๋ ‰์…˜์—์„œ my_wh ๋ผ๋Š” ์ด๋ฆ„์˜ ๊ธฐ์กด ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

# my_wh_ref is retrieved from an existing warehouse
# This returns a WarehouseResource object, which is a reference to a warehouse named "my_wh" in your Snowflake account
my_wh_ref = root.warehouses["my_wh"]

# Fetch returns the properties of the object (returns a "Model" Warehouse object that represents that warehouse's properties)
wh_properties = my_wh_ref.fetch()
Copy

Resource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•ด๋‹น ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋ฆฌ์†Œ์Šค์—์„œ fetch() ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด Snowflake์—์„œ ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์˜ ์†์„ฑ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‹ค์ œ๋กœ Snowflake์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

Resource ์˜ค๋ธŒ์ ํŠธ์—์„œ ์œ ํ˜•๋ณ„ ์ž‘์—… ์ˆ˜ํ–‰ํ•˜๊ธฐยถ

Resource ํด๋ž˜์Šค๋Š” ์˜ค๋ธŒ์ ํŠธ ํƒ€์ž…์˜ ํŠน์ˆ˜ํ•œ API ์ž‘์—…๋„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, WarehouseResource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ์žฌ๊ฐœํ•˜๊ฑฐ๋‚˜ StageResource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ…Œ์ด์ง€์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” ๊ฐ๊ฐ์˜ Resource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์œ ํ˜•๋ณ„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

# my_wh_ref is retrieved from an existing warehouse
my_wh_ref = root.warehouses["my_wh"]

# Resume a warehouse using a WarehouseResource object
my_wh_ref.resume()
Copy
# my_stage is retrieved from an existing stage
stage_ref = root.databases["my_db"].schemas["my_schema"].stages["my_stage"]

# Print file names and their sizes on a stage using a StageResource object
for file in stage_ref.list_files():
  print(file.name, file.size)
Copy

create_or_alter API ์‚ฌ์šฉํ•˜๊ธฐยถ

Resource ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ฆฌ์†Œ์Šค์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ create_or_alter API ๋ฉ”์„œ๋“œ๋„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด Snowflake ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

Python API๋Š” ์ด ์ƒ์„ฑ-๋˜๋Š”-๋ณ€๊ฒฝ(COA) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ Snowflake์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๋ชฉ์ ์€ ํŠน์ • ์˜ค๋ธŒ์ ํŠธ๊ฐ€ Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด COA ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ COA ์ž‘์—…์€ ์ œ๊ณต๋œ ์‚ฌ์–‘์œผ๋กœ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญ๋œ ์‚ฌ์–‘๊ณผ ์ผ์น˜ํ•˜๋„๋ก ๊ธฐ์กด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ด ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉฑ๋“ฑ์ ์ด๊ณ  ์›์ž์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋‹จ์ผ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ผ๊ด€๋œ ๋””์ž์ธ ํŒจํ„ดยถ

Snowflake Python APIs ์—๋Š” Snowflake์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ผ๊ด€๋œ ๋””์ž์ธ ํŒจํ„ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์ •์˜ ๊ธฐ์กด ์›จ์–ดํ•˜์šฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์˜ˆ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์•ž์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค ์œ ํ˜•์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ API์˜ ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. Root ์—์„œ WarehouseCollection ๊ฐ€์ ธ์˜ค๊ธฐยถ

์›จ์–ดํ•˜์šฐ์Šค๋Š” Root ์—์„œ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์ • ๋ฒ”์œ„์˜ ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค.

my_warehouses = root.warehouses # my_warehouses is a WarehouseCollection
Copy

2. WarehouseCollection ์—์„œ WarehouseResource ์˜ค๋ธŒ์ ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐยถ

Resource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น ์ปฌ๋ ‰์…˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Collection ์˜ค๋ธŒ์ ํŠธ๋Š” ๋Œ€๊ด„ํ˜ธ ์ธ๋ฑ์Šค ์—ฐ์‚ฐ์ž([ ])๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ง„์ž…์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

my_wh_ref = my_warehouses.warehouses["my_wh"] # my_wh_ref is a WarehouseResource
Copy

3. WarehouseResource ์—์„œ Warehouse ๋ชจ๋ธ ๊ฐ€์ ธ์˜ค๊ธฐยถ

WarehouseResource ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น Warehouse ๋ชจ๋ธ๊ณผ ํ•ด๋‹น ์†์„ฑ์„ Snowflake์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

my_wh = my_wh_ref.fetch() # my_wh is a Warehouse model object
Copy

4. Warehouse ๋ชจ๋ธ์—์„œ ์†์„ฑ ์ˆ˜์ •ํ•˜๊ธฐยถ

์›จ์–ดํ•˜์šฐ์Šค ๋ชจ๋ธ์—์„œ warehouse_size ์™€ ๊ฐ™์€ ์†์„ฑ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

my_wh.warehouse_size = "X-Small"
Copy

5. Snowflake์—์„œ ๊ธฐ์กด ์›จ์–ดํ•˜์šฐ์Šค ์˜ค๋ธŒ์ ํŠธ ๋ณ€๊ฒฝยถ

๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ์›จ์–ดํ•˜์šฐ์Šค ๋ชจ๋ธ ์‚ฌ์–‘์„ ์‚ฌ์šฉํ•˜์—ฌ Snowflake์˜ ๊ธฐ์กด ์›จ์–ดํ•˜์šฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(์›จ์–ดํ•˜์šฐ์Šค ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค).

my_wh_ref.create_or_alter(my_wh) # Use the WarehouseResource to perform create_or_alter
Copy

์ด my_wh_ref ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Snowflake์˜ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์‚ญ์ œ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ์ฝ”๋“œ ์˜ˆ์ œยถ

๋‹ค์Œ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€์˜ ์ „์ฒด ์›จ์–ดํ•˜์šฐ์Šค ์ƒ์„ฑ ๋˜๋Š” ๋ณ€๊ฒฝ ์ž‘์—…์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

# my_wh is fetched from an existing warehouse
my_warehouses = root.warehouses # my_warehouses is a WarehouseCollection
my_wh_ref = my_warehouses.warehouses["my_wh"] # my_wh_ref is a WarehouseResource
my_wh = my_wh_ref.fetch() # my_wh is a Warehouse model object
my_wh.warehouse_size = "X-Small"

my_wh_ref.create_or_alter(my_wh) # Use the WarehouseResource perform create_or_alter
Copy