๋ฐ”์ด๋„ˆ๋ฆฌ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅยถ

Snowflake๋Š” 16์ง„์ˆ˜, base64 ๋ฐ UTF-8์˜ 3๊ฐ€์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹ ๋˜๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์˜ ๊ฐœ์š”ยถ

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

16์ง„์ˆ˜(๊ธฐ๋ณธ๊ฐ’)ยถ

โ€œ16์ง„์ˆ˜โ€ ํ˜•์‹์ด๋ž€ 16์ง„์ˆ˜ ๋˜๋Š” base 16 ์ฒด๊ณ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜•์‹์—์„œ ๊ฐ ๋ฐ”์ดํŠธ๋Š” 2๊ฐœ ๋ฌธ์ž(0 ~ 9 ์‚ฌ์ด์˜ ์ˆซ์ž ๋ฐ A ~ F ์‚ฌ์ด์˜ ๋ฌธ์ž)๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. 16์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

From

~

์ฐธ๊ณ 

๋ฐ”์ด๋„ˆ๋ฆฌ

String

16์ง„์ˆ˜์—์„œ๋Š” ๋Œ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

String

๋ฐ”์ด๋„ˆ๋ฆฌ

16์ง„์ˆ˜์—์„œ๋Š” ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

16์ง„์ˆ˜๋Š” ๊ธฐ๋ณธ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

base64ยถ

โ€œbase64โ€ ํ˜•์‹์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ(๋˜๋Š” ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ)๋ฅผ ์ธ์‡„ ๊ฐ€๋Šฅ ASCII ๋ฌธ์ž(๋ฌธ์ž, ์ˆซ์ž ๋ฐ ๊ตฌ๋‘์  ๋˜๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž)๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. (base64 ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ •์˜๋Š” RFC4648 ์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.)

Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์˜ ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ˆœ์ˆ˜ ASCII ํ…์ŠคํŠธ์ด๋ฏ€๋กœ, BINARY ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ASCII ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Œ์•…(๋””์ง€ํ„ธ ์ƒ˜ํ”Œ)์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ค‘๊ตญ์–ด ๋ฌธ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋Š” UTF ๋ฐ์ดํ„ฐ๋Š” ASCII ํ…์ŠคํŠธ๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ASCII ๋ฌธ์ž๋งŒ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์—๋Š” ์ œ์–ด ๋ฌธ์ž(์˜ˆ: ์ „์†ก ๋ ๋ฌธ์ž, ํƒญ ๋ฌธ์ž)๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ œ์–ด ๋ฌธ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ช…๋ น์œผ๋กœ ํ•ด์„๋  ์œ„ํ—˜ ์—†์ด ์ˆ˜์‹  ๋ฐ ์†ก์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ๋ฒˆ์— 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”(ํŒจํ‚ท์˜ ์–ด๋А ๋ถ€๋ถ„์ด ๋ฐ์ดํ„ฐ์ด๊ณ  ์–ด๋А ๋ถ€๋ถ„์ด ํ—ค๋” ๋˜๋Š” ์ œ์–ด ์ •๋ณด์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ‚ท ํ—ค๋” ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ) ๊ธฐ์กด ๋ชจ๋Ž€ ๋ฐ ์ „์ž ํ†ต์‹  ์žฅ๋น„์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์˜ ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ์ธ์‡„ ๊ฐ€๋Šฅ ๋ฐ์ดํ„ฐ ASCII ํ‘œํ˜„ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณ„์‚ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ์— ๋น„ํ•ด ์•ฝ 1/3์˜ ์ €์žฅ์†Œ ๊ณต๊ฐ„์„ ๋” ๋งŽ์ด ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” base64 ์ธ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

base64 ์ธ์ฝ”๋”ฉ ์„ธ๋ถ€ ์ •๋ณดยถ

๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ 8๋น„ํŠธ ๋ฐ”์ดํŠธ 3๊ฐœ(์ด 24๋น„ํŠธ)๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ ๊ทธ๋ฃน์ด ๊ฐ 6๋น„ํŠธ์˜ 4๊ฐœ ๊ทธ๋ฃน(24๋น„ํŠธ ์œ ์ง€)์œผ๋กœ ์žฌ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. 64๊ฐœ์˜ ๊ฐ€๋Šฅํ•œ 6๋น„ํŠธ ์กฐํ•ฉ ๊ฐ๊ฐ์€ ๋‹ค์Œ์˜ 64๊ฐœ ์ธ์‡„ ๊ฐ€๋Šฅ ASCII ๋ฌธ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ๋Œ€๋ฌธ์ž(A~Z)

  • ์†Œ๋ฌธ์ž(a~z)

  • ์ˆซ์ž(0~9)

  • +

  • /

๋˜ํ•œ, = ๋ฌธ์ž๊ฐ€ ์ž…๋ ฅ์˜ ๊ธธ์ด๊ฐ€ ์ •ํ™•ํžˆ 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ ๋•Œ ์ฑ„์šฐ๊ธฐ ๋ฌธ์ž๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์—๋Š” ๊ณต๋ฐฑ ๋ฌธ์ž(์˜ˆ: ๋นˆ์นธ ๋ฐ ์ค„ ๋ฐ”๊ฟˆ)๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์™€ ๊ณต๋ฐฑ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „์†ก์ž ๋˜๋Š” ์ˆ˜์‹ ์ž์˜ ๋ผ์ธ ๊ธธ์ด์— ์ตœ๋Œ€ ์ œํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์†์ƒ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๊ณ  base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐœ๋ณ„ ๋ผ์ธ์œผ๋กœ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. base64๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

From

~

์ฐธ๊ณ 

๋ฐ”์ด๋„ˆ๋ฆฌ

String

base64๋Š” ๊ณต๋ฐฑ ๋˜๋Š” ์ค„ ๋ฐ”๊ฟˆ์„ ์‚ฝ์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

String

๋ฐ”์ด๋„ˆ๋ฆฌ

base64๋Š” ๋ชจ๋“  ๊ณต๋ฐฑ ๋ฐ ์ค„ ๋ฐ”๊ฟˆ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

UTF-8ยถ

UTF-8 ํ˜•์‹์€ ์œ ๋‹ˆ์ฝ”๋“œ์šฉ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

UTF-8์€ ํ…์ŠคํŠธ์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ์˜ ์ธ์ฝ”๋”ฉ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  BINARY ๊ฐ’์„ ์œ ํšจํ•œ UTF-8 ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ์ด์ง„์—์„œ ํ…์ŠคํŠธ๋กœ์˜ ์ธ์ฝ”๋”ฉ์—์„œ๋Š” UTF-8์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํ˜•์‹์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ฐ€์ง€ ํƒ€์ž… ๋˜๋Š” ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ์žฌํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋ฌธ์ž์—ด ์‚ฌ์ด์—์„œ ์ผ๋Œ€์ผ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‹ค์ œ ์ธ์ฝ”๋”ฉ ๋ฐ ๋””์ฝ”๋”ฉ๋ณด๋‹ค ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์— ๋Œ€ํ•œ ์„ธ์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์„ Snowflake์™€ ์†ก์ˆ˜์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ 2๊ฐœ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

  • BINARY_INPUT_FORMAT: VARCHAR ์—์„œ BINARY ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ VARCHAR ์ž…๋ ฅ์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์šฉ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • 1๊ฐœ์˜ ์ธ์ž๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” TO_BINARY ๋ฒ„์ „์—์„œ BINARY๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • Snowflake๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค(ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ).

    ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” HEX, BASE64 ๋˜๋Š” UTF-8 (๋˜๋Š” UTF8)๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ’์—์„œ๋Š” ๋Œ€/์†Œ๋ฌธ์ž๊ฐ€ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ HEX ์ž…๋‹ˆ๋‹ค.

  • BINARY_OUTPUT_FORMAT: BINARY ์—์„œ VARCHAR ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์—์„œ ์ œ๊ณต๋˜๋Š” VARCHAR ์ถœ๋ ฅ์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์šฉ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • 1๊ฐœ์˜ ์ธ์ž๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” TO_CHAR , TO_VARCHAR ๋ฒ„์ „์—์„œ VARCHAR๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • Snowflake์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ธ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค(ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ).

    • ์ด์ง„์—์„œ varchar๋กœ์˜ ๋ณ€ํ™˜์ด ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹(์˜ˆ: Snowflake ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ)์œผ๋กœ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” HEX ๋˜๋Š” BASE64 ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ’์—์„œ๋Š” ๋Œ€/์†Œ๋ฌธ์ž๊ฐ€ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ HEX ์ž…๋‹ˆ๋‹ค.

    ์ฐธ๊ณ 

    UTF-8 ํ˜•์‹์˜ ๊ฒฝ์šฐ ์ด์ง„์—์„œ ๋ฌธ์ž์—ด๋กœ์˜ ๋ณ€ํ™˜์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, BINARY_OUTPUT_FORMAT ์„ UTF-8 ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ UTF-8๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด, 2๊ฐœ์˜ ์ธ์ž๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” TO_CHAR , TO_VARCHAR ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๊ณ„์ •, ์‚ฌ์šฉ์ž ๋ฐ ์„ธ์…˜ ์ˆ˜์ค€์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์„ธ์…˜์˜ ๋ชจ๋“  ์ž‘์—…์— ์ ์šฉ๋˜๋Š” ํ˜„์žฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด SHOW PARAMETERS ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์„ ๋กœ๋“œ/์–ธ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜ยถ

๋ฐ”์ด๋„ˆ๋ฆฌ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ์„ธ์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ๋ณ„๋„๋กœ, Snowflake๋Š” BINARY_FORMAT ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด Snowflake ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ธ๋กœ๋“œํ•  ๋•Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์€ HEX, BASE64 ๋˜๋Š” UTF-8 (๊ฐ’์€ ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ถ„)๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ์–ธ๋กœ๋”ฉ ๋ชจ๋‘์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ, ๋‹ค๋ฅธ ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง€์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ช…๋ช…๋œ ํŒŒ์ผ ํ˜•์‹, ์ด๋ฆ„์ด ์ง€์ •๋œ ์Šคํ…Œ์ด์ง€ ๋˜๋Š” COPY ๋ช…๋ น์—์„œ ์ง์ ‘ ์ฐธ์กฐ ๊ฐ€๋Šฅ.

  • ์ด๋ฆ„์ด ์ง€์ •๋œ ์Šคํ…Œ์ด์ง€, COPY ๋ช…๋ น์—์„œ ์ง์ ‘ ์ฐธ์กฐ ๊ฐ€๋Šฅ.

  • COPY ๋ช…๋ น์—์„œ ์ง์ ‘.

๋ฐ์ดํ„ฐ ๋กœ๋”ฉยถ

๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, BINARY_FORMAT์€ ์Šคํ…Œ์ด์ง•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์˜ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์„ธ์…˜์˜ BINARY_INPUT_FORMAT ๋งค๊ฐœ ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ชจ๋“  ๊ฐ’์„ ์žฌ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์— ๋Œ€ํ•œ ์„ธ์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ฐธ์กฐ).

์ด ์˜ต์…˜์ด HEX ๋˜๋Š” BASE64 ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์Šคํ…Œ์ด์ง•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ฌธ์ž์—ด์ด ์œ ํšจํ•œ 16์ง„์ˆ˜ ๋˜๋Š” base64๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์ด ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Snowflake๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ON_ERROR ๋ณต์‚ฌ ์˜ต์…˜์— ์ง€์ •๋œ ๋™์ž‘์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์–ธ๋กœ๋”ฉยถ

๋ฐ์ดํ„ฐ ์–ธ๋กœ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, BINARY_FORMAT ์˜ต์…˜์€ ์ง€์ •๋œ ์Šคํ…Œ์ด์ง€์˜ ํŒŒ์ผ๋กœ ์–ธ๋กœ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์— ์ ์šฉ๋˜๋Š” ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ ์„ธ์…˜์˜ BINARY_OUTPUT_FORMAT ๋งค๊ฐœ ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ชจ๋“  ๊ฐ’์„ ์žฌ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์— ๋Œ€ํ•œ ์„ธ์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ฐธ์กฐ).

์˜ต์…˜์ด UTF-8 ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ…Œ์ด๋ธ”์˜ ์ด์ง„ ๊ฐ’์— ์ž˜๋ชป๋œ UTF-8 ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ์ดํ„ฐ ์–ธ๋กœ๋”ฉ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ Snowflake๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ž…๋ ฅ/์ถœ๋ ฅยถ

โ€œ๋ณด๋Š” ๊ฒƒ๊ณผ ์ถœ๋ ฅ์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœโ€ BINARY ์ž…๋ ฅ/์ถœ๋ ฅ์€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

CREATE OR REPLACE TABLE binary_table (v VARCHAR, b BINARY);

INSERT INTO binary_table (v, b)
  SELECT 'AB', TO_BINARY('AB');

SELECT v, b FROM binary_table;
Copy
+----+----+
| V  | B  |
|----+----|
| AB | AB |
+----+----+

v (VARCHAR) ์—ด๊ณผ b ์—ด์˜ ์ถœ๋ ฅ์€ ๋™์ผํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ b ์—ด์˜ ๊ฐ’์€ ์ด์ง„๋กœ ๋ณ€ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. b ์—ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

์ •๋‹ต์€ TO_BINARY ์˜ ์ธ์ž๋Š” 16์ง„์ˆ˜ ์ˆซ์ž ์‹œํ€€์Šค(๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์—ฌ ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ)๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์‹ค์ œ๋กœ๋Š” ํ‘œ์‹œ๋˜๋Š” 2๊ฐœ ๋ฌธ์ž๊ฐ€ 2๋ฐ”์ดํŠธ์˜ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ 1๋ฐ”์ดํŠธ์˜ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 16์ง„์ˆ˜ ์ˆซ์ž ์Œ์œผ๋กœ ํ•ด์„๋˜์–ด ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์ž…๋ ฅ โ€œ๋ฌธ์ž์—ดโ€์— 16์ง„์ˆ˜ ์ด์™ธ์˜ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋Š” ์ด ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ด๋ฉฐ, "String '...' isn't a legal hex-encoded string" ์™€ ์œ ์‚ฌํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒฐ๊ณผ๋กœ ์ œ๊ณต๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๋˜ํ•œ, BINARY ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์‹œ๋  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ 16์ง„์ˆ˜ ์ˆซ์ž์˜ ์‹œํ€€์Šค๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ 16์ง„์ˆ˜ ์ˆซ์ž(๋ฌธ์ž์—ด ์•„๋‹˜)๋กœ ์ž…๋ ฅ๋˜๊ณ  16์ง„์ˆ˜ ์ˆซ์ž๋กœ ํ‘œ์‹œ๋˜๋ฏ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค, 2๋ฌธ์ž ๋ฌธ์ž์—ด AB ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด์—ˆ๋‹ค๋ฉด ์ด ์ฝ”๋“œ๋Š” ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ๋Š” HEX_ENCODE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ 16์ง„์ˆ˜ ์ˆซ์ž ์‹œํ€€์Šค๋กœ ๋ณ€ํ™˜(๋˜๋Š” ๋‹ค๋ฅธ โ€œ์ธ์ฝ”๋”ฉโ€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ base64์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜)ํ•œ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์˜ˆ๋Š” ์•„๋ž˜์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

16์ง„์ˆ˜(โ€œHEXโ€) ํ˜•์‹์˜ ์˜ˆยถ

BINARY ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด 16์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

BINARY์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

CREATE OR REPLACE TABLE demo_binary_hex (b BINARY);
Copy

TO_BINARY ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ โ€œ์ผ๋ฐ˜โ€ ๋ฌธ์ž์—ด์„ ์‚ฝ์ž…ํ•˜๊ณ  ์œ ํšจํ•œ BINARY ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

INSERT INTO demo_binary_hex (b) SELECT TO_BINARY('HELP', 'HEX');
Copy

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

100115 (22000): The following string is not a legal hex-encoded value: 'HELP'

์ด๋ฒˆ์—๋Š” ์ž…๋ ฅ์„ 16์ง„์ˆ˜ ์ˆซ์ž์˜ ๋ฌธ์ž์—ด๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค(์„ฑ๊ณตํ•จ).

INSERT INTO demo_binary_hex (b) SELECT TO_BINARY(HEX_ENCODE('HELP'), 'HEX');
Copy

์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT TO_VARCHAR(b), HEX_DECODE_STRING(TO_VARCHAR(b)) FROM demo_binary_hex;
Copy
+---------------+----------------------------------+
| TO_VARCHAR(B) | HEX_DECODE_STRING(TO_VARCHAR(B)) |
|---------------+----------------------------------|
| 48454C50      | HELP                             |
+---------------+----------------------------------+

๋ณด์‹œ๋‹ค์‹œํ”ผ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถœ๋ ฅ์€ 16์ง„์ˆ˜๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์›๋ณธ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด, HEX_DECODE_STRING ํ•จ์ˆ˜(๋ฌธ์ž์—ด์„ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „์— ์‚ฌ์šฉํ•œ HEX_ENCODE ํ•จ์ˆ˜์˜ ๋ฐ˜๋Œ€)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” ๋‚ด๋ถ€์—์„œ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ž์„ธํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

SELECT 'HELP',
       HEX_ENCODE('HELP'),
       b,
       HEX_DECODE_STRING(HEX_ENCODE('HELP')),
       TO_VARCHAR(b),
       HEX_DECODE_STRING(TO_VARCHAR(b))
  FROM demo_binary_hex;
Copy
+--------+--------------------+----------+---------------------------------------+---------------+----------------------------------+
| 'HELP' | HEX_ENCODE('HELP') | B        | HEX_DECODE_STRING(HEX_ENCODE('HELP')) | TO_VARCHAR(B) | HEX_DECODE_STRING(TO_VARCHAR(B)) |
|--------+--------------------+----------+---------------------------------------+---------------+----------------------------------|
| HELP   | 48454C50           | 48454C50 | HELP                                  | 48454C50      | HELP                             |
+--------+--------------------+----------+---------------------------------------+---------------+----------------------------------+

BASE64 ํ˜•์‹์˜ ์˜ˆยถ

์ด ์„น์…˜์„ ์ฝ๊ธฐ ์ „์— 16์ง„์ˆ˜(โ€œHEXโ€) ํ˜•์‹์˜ ์˜ˆ ์„น์…˜์„ ์ฝ์–ด๋ณด์‹ญ์‹œ์˜ค. ๊ธฐ๋ณธ ๊ฐœ๋…์€ ์œ ์‚ฌํ•˜์ง€๋งŒ, 16์ง„์ˆ˜(โ€œHEXโ€) ํ˜•์‹์˜ ์˜ˆ ์„น์…˜์—์„œ๋Š” ๋” ์ž์„ธํ•œ ์„ค๋ช…์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

BINARY์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

CREATE OR REPLACE TABLE demo_binary_base64 (b BINARY);
Copy

ํ–‰์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

INSERT INTO demo_binary_base64 (b) SELECT TO_BINARY(BASE64_ENCODE('HELP'), 'BASE64');
Copy

ํ•ด๋‹น ํ–‰์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT 'HELP',
       BASE64_ENCODE('HELP'),
       BASE64_DECODE_STRING(BASE64_ENCODE('HELP')),
       TO_VARCHAR(b, 'BASE64'),
       BASE64_DECODE_STRING(TO_VARCHAR(b, 'BASE64'))
 FROM demo_binary_base64;
Copy
+--------+-----------------------+---------------------------------------------+-------------------------+-----------------------------------------------+
| 'HELP' | BASE64_ENCODE('HELP') | BASE64_DECODE_STRING(BASE64_ENCODE('HELP')) | TO_VARCHAR(B, 'BASE64') | BASE64_DECODE_STRING(TO_VARCHAR(B, 'BASE64')) |
|--------+-----------------------+---------------------------------------------+-------------------------+-----------------------------------------------|
| HELP   | SEVMUA==              | HELP                                        | SEVMUA==                | HELP                                          |
+--------+-----------------------+---------------------------------------------+-------------------------+-----------------------------------------------+

UTF-8 ํ˜•์‹์˜ ์˜ˆยถ

BINARY์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

CREATE OR REPLACE TABLE demo_binary_utf8 (b BINARY);
Copy

ํ–‰์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

INSERT INTO demo_binary_utf8 (b) SELECT TO_BINARY('HELP', 'UTF-8');
Copy

ํ•ด๋‹น ํ–‰์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT 'HELP',
       TO_VARCHAR(b, 'UTF-8')
  FROM demo_binary_utf8;
Copy
+--------+------------------------+
| 'HELP' | TO_VARCHAR(B, 'UTF-8') |
|--------+------------------------|
| HELP   | HELP                   |
+--------+------------------------+