CREATE EXTERNAL FUNCTIONยถ

์ƒˆ ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์€ ๋‹ค์Œ ๋ณ€ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • CREATE OR ALTER EXTERNAL FUNCTION: ์™ธ๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ:

ALTER FUNCTION , SHOW EXTERNAL FUNCTIONS , DROP FUNCTION , DESCRIBE FUNCTION , CREATE API INTEGRATION, CREATE OR ALTER <์˜ค๋ธŒ์ ํŠธ>

๊ตฌ๋ฌธยถ

CREATE [ OR REPLACE ] [ SECURE ] EXTERNAL FUNCTION <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
  RETURNS <result_data_type>
  [ [ NOT ] NULL ]
  [ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
  [ { VOLATILE | IMMUTABLE } ]
  [ COMMENT = '<string_literal>' ]
  API_INTEGRATION = <api_integration_name>
  [ HEADERS = ( '<header_1>' = '<value_1>' [ , '<header_2>' = '<value_2>' ... ] ) ]
  [ CONTEXT_HEADERS = ( <context_function_1> [ , <context_function_2> ...] ) ]
  [ MAX_BATCH_ROWS = <integer> ]
  [ COMPRESSION = <compression_type> ]
  [ REQUEST_TRANSLATOR = <request_translator_udf_name> ]
  [ RESPONSE_TRANSLATOR = <response_translator_udf_name> ]
  AS '<url_of_proxy_and_resource>';
Copy

๋ฒ ๋ฆฌ์–ธํŠธ ๊ตฌ๋ฌธยถ

CREATE OR ALTER EXTERNAL FUNCTIONยถ

์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ธฐ์กด ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ๋ฌธ์— ์ •์˜๋œ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. CREATE OR ALTER EXTERNAL FUNCTION ๋ฌธ์€ CREATE EXTERNAL FUNCTION ๋ฌธ์˜ ๊ตฌ๋ฌธ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉฐ ALTER FUNCTION ๋ฌธ๊ณผ ์ œํ•œ ์‚ฌํ•ญ์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ํ•จ์ˆ˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • API_INTEGRATION

  • COMMENTS

  • COMPRESSION

  • CONTEXT_HEADERS

  • HEADERS

  • MAX_BATCH_ROWS

  • RESPONSE_TRANSLATOR

  • REQUEST_TRANSLATOR

  • SECURE

์ž์„ธํ•œ ๋‚ด์šฉ์€ CREATE OR ALTER EXTERNAL FUNCTION ์‚ฌ์šฉ๋ฒ• ๋…ธํŠธ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

CREATE [ OR ALTER ] EXTERNAL FUNCTION ...
Copy

ํ•„์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

name:

ํ•จ์ˆ˜์˜ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹๋ณ„์ž์—๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„๋ฟ ์•„๋‹ˆ๋ผ ์Šคํ‚ค๋งˆ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋Š” ๊ทธ ์ด๋ฆ„๊ณผ ์ธ์ž ์œ ํ˜•์œผ๋กœ ์‹๋ณ„๊ณผ ํ™•์ธ์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ‚ค๋งˆ ๋‚ด์—์„œ ์„œ๋ช…(์ด๋ฆ„ ๋ฐ ์ธ์ž ๋ฐ์ดํ„ฐ ํƒ€์ž…)์€ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

name ์€ Snowflake ์‹๋ณ„์ž ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹๋ณ„์ž ์š”๊ตฌ ์‚ฌํ•ญ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

name ์„ ์›๊ฒฉ ์„œ๋น„์Šค ์ด๋ฆ„๊ณผ ๋˜‘๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด ๊ด€๊ณ„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ํ•„์ˆ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

( [ arg_name arg_data_type ] [ , ... ] )

์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์ธ์ž/์ž…๋ ฅ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์›๊ฒฉ ์„œ๋น„์Šค๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ์ธ์ž์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ž๊ฐ€ ์—†์œผ๋ฉด ์ธ์ž ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์—†์ด ๊ด„ํ˜ธ๋ฅผ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

RETURNS result_data_type

ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

API_INTEGRATION = api_integration_name

์ด๊ฒƒ์€ ํ”„๋ก์‹œ ์„œ๋น„์Šค ํ˜ธ์ถœ์˜ ์ธ์ฆ์— ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” API ํ†ตํ•ฉ ์˜ค๋ธŒ์ ํŠธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

AS 'url_of_proxy_and_resource'

์ด๊ฒƒ์€ Snowflake๊ฐ€ ์›๊ฒฉ ์„œ๋น„์Šค(์˜ˆ: API Gateway ๋˜๋Š” API Management ์„œ๋น„์Šค)๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆ˜๋‹จ์ด ๋˜๋Š” ํ”„๋ก์‹œ ์„œ๋น„์Šค์™€ ๋ฆฌ์†Œ์Šค์˜ ํ˜ธ์ถœ URL์ž…๋‹ˆ๋‹ค.

์„ ํƒ์  ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

SECURE

ํ•จ์ˆ˜๊ฐ€ ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ URL, HTTP ํ—ค๋” ๋ฐ ์ปจํ…์ŠคํŠธ ํ—ค๋”๋Š” ํ•จ์ˆ˜์˜ ์†Œ์œ ์ž๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค.

[ [ NOT ] NULL ]

์ด ์ ˆ์€ ํ•จ์ˆ˜๊ฐ€ NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ NON-NULL ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. NOT NULL ์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์ด ํ•จ์ˆ˜๋Š” NULL์ด ์•„๋‹Œ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. NULL ์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์ด ํ•จ์ˆ˜๋Š” NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: ๊ธฐ๋ณธ๊ฐ’์€ NULL์ž…๋‹ˆ๋‹ค(์ฆ‰, ์ด ํ•จ์ˆ˜๋Š” NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ).

CALLED ON NULL INPUT ๋˜๋Š” . { RETURNS NULL ON NULL INPUT | STRICT }

null ์ž…๋ ฅ์œผ๋กœ ํ˜ธ์ถœ ์‹œ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ฐ’์ด null์ผ ๋•Œ ํ•ญ์ƒ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ ์ •์˜ ํ•จ์ˆ˜์™€๋Š” ๋ฐ˜๋Œ€๋กœ, ์™ธ๋ถ€ ํ•จ์ˆ˜๋Š” null ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž…๋ ฅ๊ฐ’์ด null์ผ ๋•Œ๋„ null์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • CALLED ON NULL INPUT ์€ ํ•ญ์ƒ null ์ž…๋ ฅ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์™€ ๊ฐ™์€ ๊ฐ’์„ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ด ํ•จ์ˆ˜์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ๊ฐ’์ด null์ธ ๊ฒฝ์šฐ RETURNS NULL ON NULL INPUT (๋˜๋Š” ๊ทธ ๋™์˜์–ด์ธ STRICT)์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ํ•ด๋‹น ํ–‰์— ๋Œ€ํ•ด ํ•ญ์ƒ null ๊ฐ’์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” null์ด ์•„๋‹Œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ์—ฌ์ „ํžˆ null์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: CALLED ON NULL INPUT

{ VOLATILE | IMMUTABLE }

๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • VOLATILE: (์˜ˆ: ๋น„๊ฒฐ์ •์„ฑ ๋ฐ ์ƒํƒœ ์ €์žฅ์œผ๋กœ ์ธํ•ด) ์ด ํ•จ์ˆ˜๋Š” ๋˜‘๊ฐ™์€ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฅธ ํ–‰์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • IMMUTABLE: ์ด ํ•จ์ˆ˜๋Š” ๋˜‘๊ฐ™์€ ์ž…๋ ฅ์œผ๋กœ ํ˜ธ์ถœ ์‹œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Snowflake๋Š” ์ด๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋ณด์ฆํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์›๊ฒฉ ์„œ๋น„์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•ด IMMUTABLE ์„ ์ง€์ •ํ•˜๋ฉด ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: VOLATILE

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

VOLATILE ๋ฐ IMMUTABLE ์™ธ๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š” ํ•จ์ˆ˜๋ฅผ ํœ˜๋ฐœ์„ฑ ๋˜๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

COMMENT = 'string_literal'

SHOW FUNCTIONS ๋ฐ SHOW EXTERNAL FUNCTIONS ์ถœ๋ ฅ์˜ DESCRIPTION ์—ด์— ํ‘œ์‹œ๋˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: user-defined function

HEADERS = ( 'header_1' = 'value_1' [ , 'header_2' = 'value_2' ... ] )

์‚ฌ์šฉ์ž๋Š” ์ด ์ ˆ์„ ํ†ตํ•ด ๋ชจ๋“  ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์ „์†ก๋˜๋Š” ํ‚ค-๊ฐ’ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํ•จ์ˆ˜ ์ž‘์„ฑ์ž๋Š” ํ—ค๋”์— ๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์„ ๊ฒฐ์ •ํ•˜๋ฉฐ ํ˜ธ์ถœ์ž๋Š” ์ด์— ๋Œ€ํ•œ ์ œ์–ด ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. Snowflake๋Š” ์ง€์ •๋œ ๋ชจ๋“  ํ—ค๋” ์ด๋ฆ„ ์•ž์— ์ ‘๋‘์‚ฌ โ€œsf-custom-โ€œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ HTTP ํ—ค๋”๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์ด ๊ฐ’์€ ์‹์ด ์•„๋‹Œ ์ƒ์ˆ˜ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

HEADERS = (
    'volume-measure' = 'liters',
    'distance-measure' = 'kilometers'
)
Copy

์ด๋กœ ์ธํ•ด Snowflake๋Š” ๋ชจ๋“  HTTPS ์š”์ฒญ์— 2๊ฐœ์˜ HTTP ํ—ค๋” sf-custom-volume-measure ์™€ sf-custom-distance-measure ๋ฅผ ํ•ด๋‹น ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ—ค๋” ์ด๋ฆ„์— ๋Œ€ํ•œ ๊ทœ์น™์€ Snowflake ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹๋ณ„์ž์— ๋Œ€ํ•œ ๊ทœ์น™๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ—ค๋” ์ด๋ฆ„์€ ๋‹ค์Œ์„ ์ œ์™ธํ•˜๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ASCII ๋ฌธ์ž(์‹ญ์ง„์ˆ˜ 32 - 126)๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณต๋ฐฑ ๋ฌธ์ž

  • (

  • )

  • ,

  • /

  • :

  • ;

  • <

  • >

  • =

  • "

  • ?

  • @

  • [

  • ]

  • \

  • {

  • }

  • _

ํŠนํžˆ ํ—ค๋” ์ด๋ฆ„์—๋Š” ๋ฐ‘์ค„ ๋ฌธ์ž๋ฅผ ์“ธ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

ํ—ค๋” ์ด๋ฆ„๊ณผ ๊ฐ’์€ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๊ตฌ๋ถ„๋˜๋ฏ€๋กœ, ํ—ค๋” ์ด๋ฆ„ ๋˜๋Š” ๊ฐ’ ๋‚ด์˜ ์ž‘์€๋”ฐ์˜ดํ‘œ๋Š” ๋ชจ๋‘ ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๋กœ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๊ฐ€ ํ—ค๋” ๊ฐ’ ๋‚ด์—์„œ ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ—ค๋” ๊ฐ’์—๋Š” ๊ณต๋ฐฑ๊ณผ ํƒญ์ด ๋ชจ๋‘ ํ—ˆ์šฉ๋˜์ง€๋งŒ, ํ—ค๋” ๊ฐ’์€ ํ•œ ํ–‰์— ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ ํฌํ•จํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ œํ•œ์€ ๊ฐœ๋ณ„ ๊ณต๋ฐฑ ๋ฌธ์ž(์˜ˆ: ์—ฐ์†์œผ๋กœ ๋‘ ๊ฐœ์˜ ๊ณต๋ฐฑ)๋ฟ ์•„๋‹ˆ๋ผ ๊ณต๋ฐฑ ๋ฌธ์ž์˜ ์กฐํ•ฉ(์˜ˆ: ๊ณต๋ฐฑ ๋‹ค์Œ์˜ ํƒญ)์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์ž‘์„ฑ์ž๊ฐ€ (CREATE SECURE EXTERNAL FUNCTION... ์„ ์‚ฌ์šฉํ•˜์—ฌ) ํ•จ์ˆ˜๋ฅผ ๋ณด์•ˆ์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉด ํ—ค๋”, ์ปจํ…์ŠคํŠธ ํ—ค๋”, ์ด์ง„ ์ปจํ…์ŠคํŠธ ํ—ค๋”, URL์€ ํ•จ์ˆ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ—ค๋” ์ด๋ฆ„์˜ ํฌ๊ธฐ์™€ ํ—ค๋” ๊ฐ’์˜ ํ•ฉ์ด 8KB๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CONTEXT_HEADERS = ( context_function_1 [ , context_function_2 ...] )

์ด๋Š” HEADERS ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ƒ์ˆ˜ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  Snowflake ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ HTTP ํ—ค๋”์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. (Snowflake ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.)

๋ชจ๋“  ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜๊ฐ€ ์ปจํ…์ŠคํŠธ ํ—ค๋”์—์„œ ์ง€์›๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ ํ•จ์ˆ˜๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • CURRENT_ACCOUNT()

  • CURRENT_CLIENT()

  • CURRENT_DATABASE()

  • CURRENT_DATE()

  • CURRENT_IP_ADDRESS()

  • CURRENT_REGION()

  • CURRENT_ROLE()

  • CURRENT_SCHEMA()

  • CURRENT_SCHEMAS()

  • CURRENT_SESSION()

  • CURRENT_STATEMENT()

  • CURRENT_TIME()

  • CURRENT_TIMESTAMP()

  • CURRENT_TRANSACTION()

  • CURRENT_USER()

  • CURRENT_VERSION()

  • CURRENT_WAREHOUSE()

  • LAST_QUERY_ID()

  • LAST_TRANSACTION()

  • LOCALTIME()

  • LOCALTIMESTAMP()

ํ•จ์ˆ˜ ์ด๋ฆ„์ด CONTEXT_HEADERS ์ ˆ์— ๋‚˜์—ด๋˜์–ด ์žˆ์„ ๋•Œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

Snowflake๋Š” ํ—ค๋” ์•ž์— sf-context ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ HTTP ์š”์ฒญ์— ์ด๋ฅผ ์”๋‹ˆ๋‹ค.

์˜ˆ:

CONTEXT_HEADERS = (current_timestamp)
Copy

์ด ์˜ˆ์—์„œ, Snowflake๋Š” ํ—ค๋” sf-context-current-timestamp ๋ฅผ HTTP ์š”์ฒญ์— ์”๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ํ—ค๋” ์ด๋ฆ„๊ณผ ๊ฐ’์— ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํ—ค๋” ์ด๋ฆ„๊ณผ ๊ฐ’ ์— ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•˜๋˜ ์ด์— ๊ตญํ•œ๋˜์ง€ ์•Š๋Š” HTTP ํ—ค๋” ๊ฐ’์—์„œ ์ž˜๋ชป๋œ ๋ฌธ์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ค„ ๋ฐ”๊ฟˆ

  • ร„

  • รŽ

  • รŸ

  • รซ

  • ยฌ

  • ยฑ

  • ยฉ

  • ยฎ

Snowflake๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž˜๋ชป๋œ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ ์‹œํ€€์Šค๋ฅผ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. (๋ฌธ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œํ€€์Šค ๋‹จ์œ„๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.)

์˜ˆ๋ฅผ ๋“ค์–ด, ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜ CURRENT_STATEMENT()๊ฐ€ ๋‹ค์Œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

select
  /*ร„รŽรŸรซยฌยฑยฉยฎ*/
  my_external_function(1);
Copy

sf-context-current-statement ์—์„œ ๋ณด๋‚ธ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

select /* */ my_external_function(1);
Copy

์ž˜๋ชป๋œ ๋ฌธ์ž๋ฅผ ๋ฐ”๊พผ ๊ฒฝ์šฐ์—๋„ ์›๊ฒฉ ์„œ๋น„์Šค๊ฐ€ ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜์˜ ์›๋ž˜ ๊ฒฐ๊ณผ(์ž˜๋ชป๋œ ๋ฌธ์ž ํฌํ•จ)์— ํ™•์‹คํžˆ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก, Snowflake๋Š” base64 ๋กœ ์ธ์ฝ”๋”ฉ๋œ ์ปจํ…์ŠคํŠธ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•œ ์ด์ง„ ์ปจํ…์ŠคํŠธ ํ—ค๋”๋„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ, base64 ํ—ค๋”๋กœ ์ „์†ก๋œ ๊ฐ’์€ ๋‹ค์Œ์„ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

base64_encode('select\n/ร„รŽรŸรซยฌยฑยฉยฎ/\nmy_external_function(1)')
Copy

์›๊ฒฉ ์„œ๋น„์Šค๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ base64 ๊ฐ’์˜ ๋””์ฝ”๋”ฉ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ base64 ํ—ค๋”๋Š” ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ช…๋ช…๋ฉ๋‹ˆ๋‹ค.

sf-context-<context-function>-base64
Copy

์œ„์˜ ์˜ˆ์—์„œ ํ—ค๋”์˜ ์ด๋ฆ„์€ ๋‹ค์Œ์ด ๋ฉ๋‹ˆ๋‹ค.

sf-context-current-statement-base64
Copy

์ปจํ…์ŠคํŠธ ํ—ค๋”๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š์œผ๋ฉด base64 ์ปจํ…์ŠคํŠธ ํ—ค๋”๋„ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ํ•จ์ˆ˜๋กœ ๋ณด๋‚ธ ํ–‰์ด ์—ฌ๋Ÿฌ ๋ฐฐ์น˜๋กœ ๋ถ„ํ• ๋˜๋ฉด ๋ชจ๋“  ์ผ๊ด„ ์ž‘์—…์— ๋˜‘๊ฐ™์€ ์ปจํ…์ŠคํŠธ ํ—ค๋”์™€ ๋˜‘๊ฐ™์€ ์ด์ง„ ์ปจํ…์ŠคํŠธ ํ—ค๋”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

MAX_BATCH_ROWS = integer

์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ํ”„๋ก์‹œ ์„œ๋น„์Šค๋กœ ์ „์†ก๋˜๋Š” ๊ฐ ์ผ๊ด„ ์ž‘์—…์˜ ์ตœ๋Œ€ ํ–‰ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๋ชฉ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ ๋˜๋Š” ๊ธฐํƒ€ ์ œํ•œ์ด ์žˆ๋Š” ์›๊ฒฉ ์„œ๋น„์Šค์˜ ์ผ๊ด„ ์ž‘์—… ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ์„ฑ๋Šฅ ์กฐ์ • ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๊ถŒ์žฅ ํฌ๊ธฐ๊ฐ€ ์•„๋‹Œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

MAX_BATCH_ROWS ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ Snowflake๋Š” ์ตœ์ ์˜ ์ผ๊ด„ ์ž‘์—… ํฌ๊ธฐ๋ฅผ ์ถ”์ •ํ•˜๊ณ  ๊ทธ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์›๊ฒฉ ์„œ๋น„์Šค์— ์ œํ•œ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

COMPRESSION = compression_type

์ด ์ ˆ์„ ์ง€์ •ํ•˜๋ฉด Snowflake์—์„œ ํ”„๋ก์‹œ ์„œ๋น„์Šค๋กœ ๋ณด๋‚ผ ๋•Œ์™€ ํ”„๋ก์‹œ ์„œ๋น„์Šค์—์„œ Snowflake๋กœ ๋‹ค์‹œ ๋ณด๋‚ผ ๋•Œ JSON ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์••์ถ•๋ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • NONE.

  • GZIP.

  • DEFLATE.

  • AUTO.

    • AWS์—์„œ๋Š” AUTO ๊ฐ€ GZIP ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • Azure์—์„œ๋Š” AUTO ๊ฐ€ NONE ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • GCP์—์„œ๋Š” AUTO ๊ฐ€ NONE ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Amazon API Gateway๋Š” ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ์••์ถ•/์••์ถ• ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. Amazon API Gateway ์••์ถ• ๋ฐ ์••์ถ• ํ•ด์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-gzip-compression-decompression.html์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ ํ”„๋ก์‹œ ์„œ๋น„์Šค์˜ ์••์ถ• ๋ฐ ์••์ถ• ํ•ด์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ๊ฐ’: ๊ธฐ๋ณธ๊ฐ’์€ AUTO ์ž…๋‹ˆ๋‹ค.

REQUEST_TRANSLATOR = request_translator_udf_name

์ด๋Š” ์š”์ฒญ ๋ณ€ํ™˜๊ธฐ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›๊ฒฉ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ณ€ํ™˜๊ธฐ ์‚ฌ์šฉํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

RESPONSE_TRANSLATOR = response_translator_udf_name

์ด๋Š” ์‘๋‹ต ๋ณ€ํ™˜๊ธฐ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์›๊ฒฉ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ณ€ํ™˜๊ธฐ ์‚ฌ์šฉํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์•ก์„ธ์Šค ์ œ์–ด ์š”๊ตฌ ์‚ฌํ•ญยถ

์ด ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ญํ•  ์—๋Š” ์ตœ์†Œํ•œ ๋‹ค์Œ ๊ถŒํ•œ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ

์˜ค๋ธŒ์ ํŠธ

์ฐธ๊ณ 

CREATE FUNCTION

์Šคํ‚ค๋งˆ

Operating on functions also requires the USAGE privilege on the parent database and schema.

:emph:`` OWNERSHIP ๋˜๋Š” USAGE

API ํ†ตํ•ฉ

API ํ†ตํ•ฉ์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ๊ถŒํ•œ ์„ธํŠธ๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ• ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ•  ๋งŒ๋“ค๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ณด์•ˆ ์˜ค๋ธŒ์ ํŠธ ์— ๋Œ€ํ•ด SQL ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—ญํ• ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋Š” ์•ก์„ธ์Šค ์ œ์–ด์˜ ๊ฐœ์š” ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ์••์ถ• ์‚ฌ์šฉ ์‹œ, Snowflake๋Š” HTTP ํ—ค๋” โ€œContent-Encodingโ€๊ณผ โ€œAccept-Encodingโ€์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์ธ์ž ์œ ํ˜•๊ณผ ๋ฐ˜ํ™˜ ์œ ํ˜•์€ GEOGRAPHY์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ จ:

    ์ฃผ์˜

    ๊ณ ๊ฐ์€ Snowflake ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์˜ค๋ธŒ์ ํŠธ ์ œ์™ธ), ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ, ์ˆ˜์ถœ ํ†ต์ œ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ธฐํƒ€ ๊ทœ์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Snowflake์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • CREATE OR REPLACE <์˜ค๋ธŒ์ ํŠธ> ๋ฌธ์€ ์›์ž์„ฑ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ด์ „ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์ƒˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

CREATE OR ALTER EXTERNAL FUNCTION ์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ํ•จ์ˆ˜ ์ •์˜ ๋ฐ ๋ฐ˜ํ™˜ ์œ ํ˜•์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆยถ

Amazon API ๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋ก์‹œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐยถ

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” Amazon API Gateway ํ”„๋ก์‹œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๋Š” CREATE EXTERNAL FUNCTION ๋ฌธ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

CREATE OR REPLACE EXTERNAL FUNCTION local_echo(string_col VARCHAR)
  RETURNS VARIANT
  API_INTEGRATION = demonstration_external_api_integration_01
  AS 'https://xyz.execute-api.us-west-2.amazonaws.com/prod/remote_echo';
Copy

์ด ์˜ˆ์ œ์—์„œ:

  • local_echo ๋Š” SQL ๋ฌธ์—์„œ ํ˜ธ์ถœ๋œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: SELECT local_echo(varchar_column) ...; ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ).

  • string_col VARCHAR ์€ ์ž…๋ ฅ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํ•จ์ˆ˜์—๋Š” 0๊ฐœ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ์ž…๋ ฅ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • variant ๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.

  • ์ด๋ฆ„ demonstration_external_api_integration_01 ์€ CREATE API INTEGRATION ๋ฌธ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ƒ์„ฑ๋œ API ํ†ตํ•ฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • URL https://xyz.execute-api.us-west-2.amazonaws.com/prod/remote_echo ๋Š” ํ”„๋ก์‹œ ์„œ๋น„์Šค์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. HTTP POST ๋ช…๋ น์€ ์ด URL๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

CREATE OR ALTER EXTERNAL FUNCTION ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ณ€๊ฒฝํ•˜๊ธฐยถ

์œ„์—์„œ ์ƒ์„ฑํ•œ ์™ธ๋ถ€ ํ•จ์ˆ˜ local_echo ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐฐ์น˜ ํ–‰์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ 100์œผ๋กœ, ์••์ถ•์„ GZIP ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ—ค๋”์™€ ์ปจํ…์ŠคํŠธ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

CREATE OR ALTER SECURE EXTERNAL FUNCTION local_echo(string_col VARCHAR)
  RETURNS VARIANT
  API_INTEGRATION = demonstration_external_api_integration_01
  HEADERS = ('header_variable1'='header_value', 'header_variable2'='header_value2')
  CONTEXT_HEADERS = (current_account)
  MAX_BATCH_ROWS = 100
  COMPRESSION = "GZIP"
  AS 'https://xyz.execute-api.us-west-2.amazonaws.com/prod/remote_echo';
Copy