SQL ์ ์ฅ ํ๋ก์์ ธ ์์
์ ์ฅ ํ๋ก์์ ธ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋๋ ๋ค๋ฅธ ์ ์ฅ ํ๋ก์์ ธ์์ ํธ์ถํ ์ ์๋ ๋ฌธ ๋ชจ์์ ๋๋ค. ํ๋ก์์ ธ๋ ์ ๋ ฅ ์ธ์๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ์ ์ถ๋ ฅ์ผ๋ก ๋ฐํํ ์ ์์ต๋๋ค. BigQuery ๋ฐ์ดํฐ ์ธํธ์ ํ๋ก์์ ธ์ ์ด๋ฆ์ ์ง์ ํ๊ณ ์ ์ฅํฉ๋๋ค. ์ ์ฅ ํ๋ก์์ ธ๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ธํธ์์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. ๋ฉํฐ ๋ฌธ ์ฟผ๋ฆฌ๋ ํฌํจํ ์ ์์ต๋๋ค.
์ผ๋ถ ์ ์ฅ ํ๋ก์์ ธ๋ BigQuery์ ๋ด์ฅ๋์ด ์์ผ๋ฏ๋ก ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์์คํ ํ๋ก์์ ธ๋ผ๊ณ ํ๋ฉฐ, ์์คํ ํ๋ก์์ ธ ์ฐธ์กฐ์์ ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
์ ์ฅ ํ๋ก์์ ธ๋ ์ ์ฐจ์ ์ธ์ด ๋ฌธ์ ์ง์ํ๋ฏ๋ก ๋ณ์๋ฅผ ์ ์ํ๊ณ ์ ์ด ํ๋ฆ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ ์ฐจ์ ์ธ์ด ๋ฌธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ ์ฐจ์ ์ธ์ด ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ์ฅ ํ๋ก์์ ธ ๋ง๋ค๊ธฐ
ํ๋ก์์ ธ๋ฅผ ๋ง๋ค๋ ค๋ฉด CREATE PROCEDURE
๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
๋ค์์ ๊ฐ๋
์ ์์์์ procedure_name
์ ํ๋ก์์ ธ๋ฅผ ๋ํ๋ด๋ฉฐ ํ๋ก์์ ธ์ ๋ณธ๋ฌธ์ BEGIN
๊ณผ END
๋ฌธ ์ฌ์ด์ ๋ํ๋ฉ๋๋ค.
CREATE PROCEDURE dataset_name.procedure_name()
BEGIN
-- statements here
END
๋ค์ ์์์์๋ ๋ฉํฐ ๋ฌธ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋ ํ๋ก์์ ธ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋ฉํฐ ๋ฌธ ์ฟผ๋ฆฌ๋ ๋ณ์๋ฅผ ์ค์ ํ๊ณ , INSERT
๋ฌธ์ ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์์ด ์ง์ ๋ ํ
์คํธ ๋ฌธ์์ด๋ก ํ์ํฉ๋๋ค.
CREATE OR REPLACE PROCEDURE mydataset.create_customer()
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id)
VALUES(id);
SELECT FORMAT("Created customer %s", id);
END
์์ ์์์์ ํ๋ก์์ ธ์ ์ด๋ฆ์ mydataset.create_customer
์ด๊ณ ํ๋ก์์ ธ ๋ณธ๋ฌธ์ BEGIN
๊ณผ END
๋ฌธ ์ฌ์ด์ ๋ํ๋ฉ๋๋ค.
ํ๋ก์์ ธ๋ฅผ ํธ์ถํ๋ ค๋ฉด CALL
๋ฌธ์ ์ฌ์ฉํ์ธ์.
CALL mydataset.create_customer();
์ ๋ ฅ ๋งค๊ฐ๋ณ์๋ก ๊ฐ ์ ๋ ฅ
ํ๋ก์์ ธ์๋ ์ ๋ ฅ ๋งค๊ฐ๋ณ์๊ฐ ์์ ์ ์์ต๋๋ค. ์ ๋ ฅ ๋งค๊ฐ๋ณ์๋ ํ๋ก์์ ธ์ ๋ํ ์ ๋ ฅ์ ํ์ฉํ์ง๋ง ์ถ๋ ฅ์ ํ์ฉํ์ง ์์ต๋๋ค.
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING)
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ก ๊ฐ ์ถ๋ ฅ
ํ๋ก์์ ธ์๋ ์ถ๋ ฅ ๋งค๊ฐ๋ณ์๊ฐ ์์ ์ ์์ต๋๋ค. ์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ ํ๋ก์์ ธ์์ ๊ฐ์ ๋ฐํํ์ง๋ง ํ๋ก์์ ธ์ ์
๋ ฅ์ ํ์ฉํ์ง ์์ต๋๋ค. ์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋งค๊ฐ๋ณ์ ์ด๋ฆ ์์ OUT
ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ด ํ๋ก์์ ธ ๋ฒ์ ์์๋ id
๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ๊ณ ๊ฐ ID๋ฅผ ๋ฐํํฉ๋๋ค.
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING, OUT id STRING)
BEGIN
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
์ด ํ๋ก์์ ธ๋ฅผ ํธ์ถํ๋ ค๋ฉด ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ ๊ฐ์ ์์ ํด์ผ ํฉ๋๋ค.
--- Create a new customer record.
DECLARE id STRING;
CALL mydataset.create_customer("alice",id);
--- Display the record.
SELECT * FROM mydataset.customers
WHERE customer_id = id;
์ ๋ ฅ/์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ก ๊ฐ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ
ํ๋ก์์ ธ์๋ ์
๋ ฅ/์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ ์์ ์ ์์ต๋๋ค. ์
๋ ฅ/์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ ํ๋ก์์ ธ์์ ๊ฐ์ ๋ฐํํ๊ณ ํ๋ก์์ ธ์ ์
๋ ฅ๋ ํ์ฉํฉ๋๋ค. ์
๋ ฅ/์ถ๋ ฅ ๋งค๊ฐ๋ณ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋งค๊ฐ๋ณ์ ์ด๋ฆ ์์ INOUT
ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ธ์ ๋ชจ๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฃจํด ์น์ธ
์ ์ฅ ํ๋ก์์ ธ๋ฅผ ๋ฃจํด์ผ๋ก ์น์ธํ ์ ์์ต๋๋ค. ์น์ธ๋ ๋ฃจํด์ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋ํด ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ง ์๊ณ ๋ ํน์ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์น์ธ๋ ๋ฃจํด์ ๋ฐ์ดํฐ์ ๋ํ ์ง๊ณ๋ฅผ ๊ณ์ฐํ๊ฑฐ๋ ํ ์ด๋ธ ๊ฐ์ ์กฐํํ๊ณ ์ด ๊ฐ์ ๊ณ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์น์ธ๋ ๋ฃจํด์ ํ ์ด๋ธ ๋ง๋ค๊ธฐ, ์ญ์ , ํ ์ด๋ธ ์กฐ์์ ๋ฌผ๋ก ๊ธฐ๋ณธ ํ ์ด๋ธ์์ ๋ค๋ฅธ ์ ์ฅ ํ๋ก์์ ธ๋ฅผ ํธ์ถํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ์น์ธ๋ ๋ฃจํด์ ์ฐธ์กฐํ์ธ์.
์ ์ฅ ํ๋ก์์ ธ ํธ์ถ
์ ์ฅ ํ๋ก์์ ธ๊ฐ ์์ฑ๋ ํ ํธ์ถํ๋ ค๋ฉด CALL
๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ฌธ์ ์ ์ฅ ํ๋ก์์ ธ create_customer
๋ฅผ ํธ์ถํฉ๋๋ค.
CALL mydataset.create_customer();
์์คํ ํ๋ก์์ ธ ํธ์ถ
๊ธฐ๋ณธ ์ ๊ณต ์์คํ
ํ๋ก์์ ธ๋ฅผ ํธ์ถํ๋ ค๋ฉด CALL
๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ฌธ์ ์์คํ
ํ๋ก์์ ธ BQ.REFRESH_MATERIALIZED_VIEW
๋ฅผ ํธ์ถํฉ๋๋ค.
CALL BQ.REFRESH_MATERIALIZED_VIEW;