์ด ๋ฌธ์์์๋ ๊ธฐ์กด tabledata.insertAll
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ BigQuery๋ก ์คํธ๋ฆฌ๋ฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
์ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ tabledata.insertAll
๋ฉ์๋ ๋์ BigQuery Storage Write API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. Storage Write API๋ ์ ํํ 1ํ ์ ์ก ์๋งจํฑ์ค๋ฅผ ๋น๋กฏํด ๋ ์ ๋ ดํ ๊ฐ๊ฒฉ๊ณผ ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ tabledata.insertAll
๋ฉ์๋์์ Storage Write API๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์คํธ๋ฆผ์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. tabledata.insertAll
๋ฉ์๋๋ ๊ณ์ํด์ ์๋ฒฝํ ์ง์๋ฉ๋๋ค.
์์ํ๊ธฐ ์ ์
๋์ ํ ์ด๋ธ์ด ํฌํจ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ์ฐ๊ธฐ ์ก์ธ์ค ๊ถํ์ด ์๋์ง ํ์ธํฉ๋๋ค. ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ ์ ์ ํ ์ด๋ธ์ด ์กด์ฌํด์ผ ํฉ๋๋ค. ํ ํ๋ฆฟ ํ ์ด๋ธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ํ ์ด๋ธ ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ ํ ๋น๋ ์ ์ฑ ์ ํ์ธํฉ๋๋ค.
-
Make sure that billing is enabled for your Google Cloud project.
์ฌ์ฉ์์๊ฒ ์ด ๋ฌธ์์ ๊ฐ ์์ ์ ์ํํ๋ ๋ฐ ํ์ํ ๊ถํ์ ๋ถ์ฌํ๋ Identity and Access Management(IAM) ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
๋ฌด๋ฃ ๋ฑ๊ธ์ผ๋ก๋ ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฒฐ์ ๋ฅผ ์ฌ์ฉ ์ค์ ํ์ง ์๊ณ ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉํ๋ฉด BigQuery: Streaming insert is not allowed in the free tier.
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ ๊ถํ
BigQuery๋ก ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ค๋ฉด ๋ค์ IAM ๊ถํ์ด ํ์ํฉ๋๋ค.
bigquery.tables.updateData
(ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ฝ์ ๊ฐ๋ฅ)bigquery.tables.get
(ํ ์ด๋ธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์)bigquery.datasets.get
(๋ฐ์ดํฐ ์ธํธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์)bigquery.tables.create
(ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์๋์ผ๋ก ๋ง๋๋ ๊ฒฝ์ฐ ํ์)
์ฌ์ ์ ์๋ ๋ค์ ๊ฐ IAM ์ญํ ์๋ BigQuery๋ก ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ๋ฐ ํ์ํ ๊ถํ์ด ํฌํจ๋์ด ์์ต๋๋ค.
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
BigQuery์ IAM ์ญํ ๊ณผ ๊ถํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ์ ์ ์๋ ์ญํ ๋ฐ ๊ถํ์ ์ฐธ์กฐํ์ธ์.
BigQuery์ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
C#
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ C# ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery C# API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Go
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Go ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Go API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Java
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Java ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Java API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Node.js
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Node.js ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Node.js API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
PHP
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ PHP ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery PHP API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Python
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Python ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Python API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Ruby
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Ruby ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Ruby API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
ํ์ ์ฝ์
ํ ๋ insertID
ํ๋๋ฅผ ์ฑ์ธ ํ์๊ฐ ์์ต๋๋ค.
๋ค์ ์์๋ ์คํธ๋ฆฌ๋ฐ ์ ๊ฐ ํ์ insertID
๋ฅผ ์ ์กํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
Java
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Java ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Java API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
Python
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ BigQuery ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Python ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ BigQuery Python API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
BigQuery์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
๋ ์ง ๋ฐ ์๊ฐ ๋ฐ์ดํฐ ์ ์ก
๋ ์ง ๋ฐ ์๊ฐ ํ๋์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด tabledata.insertAll
๋ฉ์๋๋ก ๋ฐ์ดํฐ ํ์์ ์ง์ ํฉ๋๋ค.
์ ํ | ํ์ |
---|---|
DATE |
"YYYY-MM-DD" ํ์์ ๋ฌธ์์ด |
DATETIME |
"YYYY-MM-DD [HH:MM:SS]" ํ์์ ๋ฌธ์์ด |
TIME |
"HH:MM:SS" ํ์์ ๋ฌธ์์ด |
TIMESTAMP |
1970-01-01(์ ๋์ค ์๊ฐ) ์ดํ์ ์ด ์ ๋๋ "YYYY-MM-DD HH:MM[:SS]" ํ์์ ๋ฌธ์์ด |
๋ฒ์ ๋ฐ์ดํฐ ์ ์ก
RANGE<T>
์ ํ ํ๋์ ๊ฒฝ์ฐ start
๋ฐ end
ํ๋๋ฅผ ์ฌ์ฉํด์ tabledata.insertAll
๋ฉ์๋์ ๋ฐ์ดํฐ ํ์์ JSON ๊ฐ์ฒด๋ก ์ง์ ํฉ๋๋ค.
start
๋ฐ end
ํ๋์ ๋๋ฝ๋ ๊ฐ์ด๋ NULL ๊ฐ์ ๋ฐ์ธ๋ฉ๋์ง ์์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๋
๋๋ค.
์ด๋ฌํ ํ๋๋ T
์ ํ์ ๋์ผํ ์ง์๋๋ JSON ํ์์ ํฌํจํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ T
๋ DATE
, DATETIME
, TIMESTAMP
์ค ํ๋์ผ ์ ์์ต๋๋ค.
๋ค์ ์์์์ f_range_date
ํ๋๋ ํ
์ด๋ธ์ RANGE<DATE>
์ด์ ๋ํ๋
๋๋ค. tabledata.insertAll
API๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ด์ ํ์ด ์ฝ์
๋ฉ๋๋ค.
{
"f_range_date": {
"start": "1970-01-02",
"end": null
}
}
์คํธ๋ฆผ ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ
BigQuery๊ฐ tabledata.insertAll
์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ํ์ธํ ์งํ์ GoogleSQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์๊ฐ ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ต๊ทผ์ ์์ง ์๊ฐ์ผ๋ก ํํฐ์
์ ๋๋ ํ
์ด๋ธ์ ์คํธ๋ฆฌ๋ฐ๋ ํ์๋ _PARTITIONTIME
์ ์ฌ ์ด์ NULL ๊ฐ์ด ์์ต๋๋ค. ์ด๋ฌํ ํ์ ๊ฒฝ์ฐ BigQuery๋ ์ผ๋ฐ์ ์ผ๋ก ๋ช ๋ถ ๋ด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ PARTITIONTIME
์ด์ ์ต์ข
NULL์ด ์๋ ๊ฐ์ ํ ๋นํฉ๋๋ค. ๋๋ฌผ์ง๋ง ์ต๋ 90๋ถ์ด ์์๋ ์๋ ์์ต๋๋ค.
์ต๊ทผ์ ์คํธ๋ฆฌ๋ฐ๋ ์ผ๋ถ ํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ช ๋ถ ๋์ ํ
์ด๋ธ ๋ณต์ฌ์ ์ฌ์ฉํ์ง ๋ชปํ ์ ์์ต๋๋ค. ๋๋ฌผ์ง๋ง ์ต๋ 90๋ถ์ด ์์๋ ์๋ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ํ
์ด๋ธ ๋ณต์ฌ์ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ณด๋ ค๋ฉด streamingBuffer
์น์
์ tables.get
์๋ต์ ํ์ธํฉ๋๋ค.
streamingBuffer
์น์
์ด ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
streamingBuffer.oldestEntryTime
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆฌ๋ฐ ๋ฒํผ์ ๋ ์ฝ๋ ๊ธฐ๊ฐ์ ์๋ณํ ์๋ ์์ต๋๋ค.
์ต์ ํ ์ค๋ณต ์ญ์
์ฝ์
๋ ํ์ insertId
์ ์
๋ ฅํ๋ฉด BigQuery๋ ์ด ID๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ 1๋ถ ๋์ ์ต์ ํ ์ค๋ณต ์ญ์ ๋ฅผ ์ง์ํฉ๋๋ค. ์ฆ, ํด๋น ๊ธฐ๊ฐ ๋ด์ ๊ฐ์ ํ
์ด๋ธ ๋ด์์ ๊ฐ์ insertId
๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ํ์ ๋ ๋ฒ ๋๊ฒ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒฝ์ฐ BigQuery๊ฐ ํด๋น ํ์ ๋ค์ค ์ผ์น ํญ๋ชฉ์ ์ค๋ณต ์ญ์ ํ๊ณ ํด๋น ์ผ์น ํญ๋ชฉ ์ค ํ๋๋ง ์ ์ฅํ ์ ์์ต๋๋ค.
์์คํ
์์๋ ๋์ผํ insertId
๊ฐ ์ ๊ณต๋ ํ๋ ๋์ผํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋ ํ์ insertId
๊ฐ ๊ฐ๋ค๋ฉด BigQuery๊ฐ ๋ณด์กดํ๋ ํ์ ํ์ ๋์ด ์์ง ์์ต๋๋ค.
์ค๋ณต ์ญ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์์คํ
๊ณผ BigQuery ์ฌ์ด์ ๋คํธ์ํฌ ์ค๋ฅ ๋๋ BigQuery ๋ด๋ถ ์ค๋ฅ์ ๊ฐ์ ํน์ ์ค๋ฅ ์ํ์์๋ ์คํธ๋ฆฌ๋ฐ ์ฝ์
์ ์ํ๋ฅผ ํ์ธํ ๋ฐฉ๋ฒ์ด ์๋ ๋ฐฐํฌ๋ ์์คํ
์์ ์๋๋ฆฌ์ค๋ฅผ ์ฌ์๋ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฝ์
์ ์ฌ์๋ํ๋ ๊ฒฝ์ฐ BigQuery๊ฐ ๋ฐ์ดํฐ ์ค๋ณต ์ญ์ ๋ฅผ ์๋ํ ์ ์๋๋ก ๋์ผํ ํ ์กฐํฉ์ ๋์ผํ insertId
๋ฅผ ์ฌ์ฉํ์ธ์. ์์ธํ ๋ด์ฉ์ ์คํธ๋ฆฌ๋ฐ ์ฝ์
๋ฌธ์ ํด๊ฒฐ์ ์ฐธ์กฐํ์ธ์.
BigQuery์์ ์ ๊ณตํ๋ ์ค๋ณต ์ญ์ ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ํ ๋ฐ์ดํฐ์ ์ค๋ณต์ด ์๋๋ก ๋ณด์ฅํ๋ ๋ฉ์ปค๋์ฆ์ผ๋ก ์์กดํด ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. ๋ํ BigQuery๋ ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ธ์ ๋ ์ง ์ต์ ์ ์ค๋ณต ์ญ์ ์ ํ์ง์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ์ ์ค๋ณต ์ญ์ ์๊ตฌ์ฌํญ์ด ์๊ฒฉํ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ์ง์ํ๋ ๋์ฒด ์๋น์ค๋ก Google Cloud Datastore๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ต์ ํ ์ค๋ณต ์ญ์ ์ฌ์ฉ ์ค์ง
์ฝ์
๋ ๊ฐ ํ์ ๋ํด insertId
ํ๋๋ฅผ ์
๋ ฅํ์ง ์์์ผ๋ก์จ ์ต์ ํ ์ค๋ณต ์ญ์ ๋ฅผ ์ฌ์ฉ ์ค์งํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ฝ์
์ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์
๋๋ค.
Apache Beam ๋ฐ Dataflow
Apache Beam์ Java์ฉ BigQuery I/O ์ปค๋ฅํฐ๋ฅผ ์ฌ์ฉํ ๋ ์ต์ ์ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ฌ์ฉ ์ค์งํ๋ ค๋ฉด ignoreInsertIds()
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋์ผ๋ก ์ค๋ณต ์ ๊ฑฐ
์คํธ๋ฆฌ๋ฐ์ ์๋ฃํ ํ ์ค๋ณต ํ์ด ์กด์ฌํ์ง ์๋๋ก ํ๋ ค๋ฉด ๋ค์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ธ์.
insertId
๋ฅผ ํ ์ด๋ธ ์คํค๋ง์ ์ด๋ก ์ถ๊ฐํ๊ณinsertId
๊ฐ์ ๊ฐ ํ์ ๋ฐ์ดํฐ์ ํฌํจํฉ๋๋ค.- ์คํธ๋ฆฌ๋ฐ์ด ์ค์ง๋ ํ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ์ฌ ์ค๋ณต์ ํ์ธํฉ๋๋ค.
๊ฒฐ๊ณผ๊ฐ 1๋ณด๋ค ํฌ๋ฉด ์ค๋ณต์ด ์กด์ฌํ๋ ๊ฒ์ ๋๋ค.#standardSQL SELECT MAX(count) FROM( SELECT ID_COLUMN, count(*) as count FROM `TABLE_NAME` GROUP BY ID_COLUMN)
- ์ค๋ณต์ ์ ๊ฑฐํ๋ ค๋ฉด ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค. ๋์ ํ
์ด๋ธ์ ์ง์ ํ๊ณ ๋๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํ๊ณ ๊ฒฐ๊ณผ ํ๋ฉดํ๋ฅผ ์ฌ์ฉ ์ค์งํฉ๋๋ค.
#standardSQL SELECT * EXCEPT(row_number) FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY ID_COLUMN) row_number FROM `TABLE_NAME`) WHERE row_number = 1
์ค๋ณต ์ญ์ ์ฟผ๋ฆฌ ์ฐธ๊ณ ์ฌํญ:
- ์ค๋ณต ์ ๊ฑฐ ์ฟผ๋ฆฌ๋ฅผ ์ํ ๋ ์์ ํ ์ ๋ต์ ์ ํ
์ด๋ธ์ ํ๊ฒํ
ํ๋ ๊ฒ์
๋๋ค.
๋๋ ์ฐ๊ธฐ ์ฒ๋ฆฌ
WRITE_TRUNCATE
๋ก ์์ค ํ ์ด๋ธ์ ํ๊ฒํ ํ ์ ์์ต๋๋ค. - ์ค๋ณต ์ญ์ ์ฟผ๋ฆฌ๋ ๊ฐ์ด
1
์ธrow_number
์ด์ ํ ์ด๋ธ ์คํค๋ง ๋์ ์ถ๊ฐํฉ๋๋ค. ์ฟผ๋ฆฌ๋ GoogleSQL์SELECT * EXCEPT
๋ฌธ์ ์ฌ์ฉํ์ฌ ๋์ ํ ์ด๋ธ์์row_number
์ด์ ์ ์ธํฉ๋๋ค.#standardSQL
ํ๋ฆฌํฝ์ค๋ ์ด ์ฟผ๋ฆฌ์ GoogleSQL์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ๋๋ ํน์ ์ด ์ด๋ฆ๋ณ๋ก ์ ํํ์ฌ ์ด ์ด์ ์๋ตํ ์ ์์ต๋๋ค. - ์ค๋ณต์ด ์ ๊ฑฐ๋ ๋ผ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๋ ๊ฒฝ์ฐ ์ค๋ณต ์ ๊ฑฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์์ ๋ทฐ๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ๋ทฐ์ ๋ํ ์ฟผ๋ฆฌ ๋น์ฉ์ ๋ทฐ์ ์ ํ๋ ์ด์ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ๋๋ฉฐ ์ด๋ก ์ธํด ๊ฒ์๋ ๋ฐ์ดํธ ํฌ๊ธฐ๊ฐ ์ปค์ง ์ ์์์ ์ ์ํ์ธ์.
์๊ฐ์ผ๋ก ํํฐ์ ์ ๋๋ ํ ์ด๋ธ๋ก ์คํธ๋ฆฌ๋ฐ
์๊ฐ์ผ๋ก ํํฐ์
์ ๋๋ ํ
์ด๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ฉด ๊ฐ ํํฐ์
์ ์คํธ๋ฆฌ๋ฐ ๋ฒํผ๊ฐ ๋ฐ์ํฉ๋๋ค. writeDisposition
์์ฑ์ WRITE_TRUNCATE
๋ก ์ค์ ํ์ฌ ํํฐ์
์ ๋ฎ์ด์ฐ๋ ๋ก๋, ์ฟผ๋ฆฌ ๋๋ ๋ณต์ฌ ์์
์ ์ํํ๋ฉด ์คํธ๋ฆฌ๋ฐ ๋ฒํผ๊ฐ ์ ์ง๋ฉ๋๋ค. ์คํธ๋ฆฌ๋ฐ ๋ฒํผ๋ฅผ ์ญ์ ํ๋ ค๋ฉด ํํฐ์
์์ tables.get
์ ํธ์ถํ์ฌ ์คํธ๋ฆฌ๋ฐ ๋ฒํผ๊ฐ ๋น์ด ์๋์ง ํ์ธํฉ๋๋ค.
์์ง ์๊ฐ์ผ๋ก ํํฐ์ ๋๋๊ธฐ
์์ง ์๊ฐ์ผ๋ก ํํฐ์ ์ ๋๋ ํ ์ด๋ธ๋ก ์คํธ๋ฆฌ๋ฐํ ๋ BigQuery๋ ํ์ฌ UTC ์๊ฐ์์ ๋์ ํํฐ์ ์ ์ถ๋ก ํฉ๋๋ค.
์๋ก ๋์ฐฉํ๋ ๋ฐ์ดํฐ๋ ์คํธ๋ฆฌ๋ฐ ๋ฒํผ์ ์๋ ๋์ ์์๋ก __UNPARTITIONED__
ํํฐ์
์ ๋ฐฐ์น๋ฉ๋๋ค. ํํฐ์
์ผ๋ก ๋๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ ๊ฒฝ์ฐ BigQuery๋ ๋ฐ์ดํฐ๋ฅผ ํํฐ์
๋๋๊ธฐํ์ฌ ์ฌ๋ฐ๋ฅธ ํํฐ์
์ ๋ฐฐ์นํฉ๋๋ค. ํ์ง๋ง __UNPARTITIONED__
ํํฐ์
์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ํ SLA๋ ์์ต๋๋ค. ์ฟผ๋ฆฌ๋ ์ ์ฌ ์ด(์ ํธํ๋ ๋ฐ์ดํฐ ์ ํ์ ๋ฐ๋ผ _PARTITIONTIME
๋๋ _PARTITIONDATE
) ์ค ํ๋๋ฅผ ์ฌ์ฉํด NULL
๊ฐ์ __UNPARTITIONED__
ํํฐ์
์์ ํํฐ๋งํจ์ผ๋ก์จ ์ฟผ๋ฆฌ์์ ์คํธ๋ฆฌ๋ฐ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
์ผ๋ณ๋ก ํํฐ์
์ ๋๋ ํ
์ด๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒฝ์ฐ ํํฐ์
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ insertAll
์์ฒญ์ ํฌํจ์์ผ ์ถ๊ฐํ๋ฉด ๋ ์ง ์ถ๋ก ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. tableId
๋งค๊ฐ๋ณ์์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด table1
ํ
์ด๋ธ์์ ํํฐ์
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด 2021-03-01์ ํด๋นํ๋ ํํฐ์
์ ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค.
table1$20210301
ํํฐ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒฝ์ฐ ํ์ฌ UTC ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ง๋ 31์ผ ๋ฐ ํฅํ 16์ผ ์ด๋ด์ ํํฐ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ์ฉ ๋ฒ์ ์ด์ธ์ ๋ ์ง์ ํํฐ์ ์ ๊ธฐ๋กํ๋ ค๋ฉด ํํฐ์ ์ ๋๋ ํ ์ด๋ธ ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋ฐ ๋ฎ์ด์ฐ๊ธฐ์ ์ค๋ช ๋ ๋๋ก ๋ก๋ ๋๋ ์ฟผ๋ฆฌ ์์ ์ ์ฌ์ฉํฉ๋๋ค.
ํํฐ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ ์คํธ๋ฆฌ๋ฐ์ ๋งค์ผ ํํฐ์ ์ ๋๋ ํ ์ด๋ธ์๋ง ์ง์๋ฉ๋๋ค. ์๊ฐ๋ณ, ์๊ฐ ๋๋ ์ฐ๊ฐ ํํฐ์ ์ ๋๋ ํ ์ด๋ธ์์๋ ์ง์๋์ง ์์ต๋๋ค.
ํ
์คํธ์๋ bq ๋ช
๋ น์ค ๋๊ตฌ bq insert
CLI ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ช
๋ น์ด๋ 2017๋
1์ 1์ผ($20170101
) ๋ ์ง์ ํํฐ์
์ ๋ํ ๋จ์ผ ํ์ mydataset.mytable
์ด๋ผ๋ ํํฐ์
์ ๋๋ ํ
์ด๋ธ๋ก ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
echo '{"a":1, "b":2}' | bq insert 'mydataset.mytable$20170101'
์๊ฐ ๋จ์ ์ด๋ก ํํฐ์ ๋๋๊ธฐ
์ง๋ 10๋
๋ถํฐ ํฅํ 1๋
์ด๋ด์ DATE
, DATETIME
, TIMESTAMP
์ด์ ๊ธฐ์ค์ผ๋ก ํํฐ์
์ ๋๋ ํ
์ด๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค.
์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ฐ์ดํฐ๋ ๊ฑฐ๋ถ๋ฉ๋๋ค.
๋ฐ์ดํฐ๊ฐ ์คํธ๋ฆฌ๋ฐ๋๋ฉด ์ฒ์์๋ __UNPARTITIONED__
ํํฐ์
์ ๋ฐฐ์น๋ฉ๋๋ค. ํํฐ์
์ผ๋ก ๋๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ ๊ฒฝ์ฐ BigQuery๋ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํํฐ์
๋๋๊ธฐํ์ฌ ์ ์ ํ ํํฐ์
์ ๋ฐฐ์นํฉ๋๋ค.
ํ์ง๋ง __UNPARTITIONED__
ํํฐ์
์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ํ SLA๋ ์์ต๋๋ค.
- ์ฐธ๊ณ : ์ผ๋ณ ํํฐ์ ์ ์๊ฐ๋ณ, ์๊ฐ, ์ฐ๊ฐ ํํฐ์ ๊ณผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ธฐ๊ฐ(์ง๋ 7์ผ์์ ํฅํ 3์ผ)์ ๋ฒ์ด๋๋ ๋ฐ์ดํฐ๋ง UNPARTITIONED ํํฐ์ ์ผ๋ก ์ถ์ถ๋๊ณ ๋ค์ ํํฐ์ ์ ๋๋๊ธฐ๋ฅผ ๋๊ธฐํฉ๋๋ค. ๋ฐ๋ฉด ์๊ฐ๋ณ๋ก ํํฐ์ ์ ๋๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ํญ์ UNPARTITIONED ํํฐ์ ์ผ๋ก ์ถ์ถ๋๊ณ ๋์ค์ ๋ค์ ํํฐ์ ์ ๋๋๋๋ค.
ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ํ ์ด๋ธ ๋ง๋ค๊ธฐ
ํ ํ๋ฆฟ ํ ์ด๋ธ์ ๋ ผ๋ฆฌ์ ํ ์ด๋ธ์ ๋ ์์ ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋ถํ ํ์ฌ ๋ ์์ ๋ฐ์ดํฐ ์งํฉ์ ๋ง๋๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค(์: ์ฌ์ฉ์ ID). ํ ํ๋ฆฟ ํ ์ด๋ธ์๋ ์๋ ์ค๋ช ๋ ์ฌ๋ฌ ์ ํ ์ฌํญ์ด ํฌํจ๋ฉ๋๋ค. ๋์ ํํฐ์ ์ ๋๋ ํ ์ด๋ธ ๋ฐ ํด๋ฌ์คํฐ๋ง๋ ํ ์ด๋ธ์ด ๋์์ ์ํํ๊ธฐ ์ํด ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
BigQuery API๋ฅผ ํตํด ํ
ํ๋ฆฟ ํ
์ด๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด insertAll
์์ฒญ์ templateSuffix
ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. bq ๋ช
๋ น์ค ๋๊ตฌ์ ๊ฒฝ์ฐ insert
๋ช
๋ น์ด์ template_suffix
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. BigQuery๋ templateSuffix
๋งค๊ฐ๋ณ์ ๋๋ template_suffix
ํ๋๊ทธ๋ฅผ ๊ฐ์งํ๋ฉด ๋์ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ํ
ํ๋ฆฟ์ผ๋ก ์ทจ๊ธํฉ๋๋ค. ๋์ ํ
์ด๋ธ๊ณผ ๋์ผํ ์คํค๋ง๋ฅผ ๊ณต์ ํ๋ฉฐ ์ง์ ๋ ์ํฝ์ค๋ฅผ ํฌํจํ๋ ์ด๋ฆ์ด ์๋ ์ ํ
์ด๋ธ์ ๋ง๋ญ๋๋ค.
<targeted_table_name> + <templateSuffix>
ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ฉด ๊ฐ ํ ์ด๋ธ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ง๋ค๊ณ ๊ฐ ํ ์ด๋ธ์ ์คํค๋ง๋ฅผ ์ง์ ํ๋ ์ค๋ฒํค๋๊ฐ ๋ฐฉ์ง๋ฉ๋๋ค. ํ๋์ ํ ํ๋ฆฟ๋ง ๋ง๋ค๊ณ ๋ค์ํ ์ํฝ์ค๋ฅผ ์ ๊ณตํ์ฌ BigQuery์์ ์ ํ ์ด๋ธ์ ๋ง๋ค ์ ์๋๋ก ํ๋ฉด ๋ฉ๋๋ค. BigQuery๋ ๋์ผํ ํ๋ก์ ํธ ๋ฐ ๋ฐ์ดํฐ์ธํธ์ ํ ์ด๋ธ์ ๋ฐฐ์นํฉ๋๋ค.
ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ง ํ ์ด๋ธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ด ๋ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ฌผ์ง๋ง ์ฌ์ฉํ ์ ์๊ฒ ๋๊ธฐ๊น์ง ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
ํ ํ๋ฆฟ ํ ์ด๋ธ ์คํค๋ง ๋ณ๊ฒฝ
ํ ํ๋ฆฟ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ดํ์ ์์ฑ๋๋ ๋ชจ๋ ํ ์ด๋ธ์ ์ ๋ฐ์ดํธ๋ ์คํค๋ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ์กด ํ ์ด๋ธ์ ์คํธ๋ฆฌ๋ฐ ๋ฒํผ๊ฐ ์ฌ์ ํ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ์ด์ ์ ์์ฑ๋ ํ ์ด๋ธ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
์์ง ์คํธ๋ฆฌ๋ฐ ๋ฒํผ๊ฐ ์๋ ๊ธฐ์กด ํ ์ด๋ธ์ ๊ฒฝ์ฐ ํ์ ํธํ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ํ ํ๋ฆฟ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ์์ ํ๋ฉด ์ด๋ฌํ ํ์ฑ ์คํธ๋ฆฌ๋ฐ ์์ฑ ํ ์ด๋ธ์ ์คํค๋ง๋ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ญํธํ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ํ ํ๋ฆฟ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์คํค๋ง๋ฅผ ์ฌ์ฉํ๋ ๋ฒํผ๋ง๋ ๋ฐ์ดํฐ๋ ์์ค๋ฉ๋๋ค. ๋ํ ํ์ฌ ํธํ๋์ง ์๋ ์ด์ ์คํค๋ง๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์์ฑ๋ ํ ์ด๋ธ๋ก ์ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค.
ํ ํ๋ฆฟ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ ํ ์ฟผ๋ฆฌ ์์ฑ ํ ์ด๋ธ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ธฐ ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ธ์. ์ ํ๋ ์ฝ์ ์์ฒญ์ ๋ช ๋ถ ์ด๋ด์ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ฉ๋๋ค. ์ ํ๋๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด ์ต๋ 90๋ถ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ ์ ์์ต๋๋ค.
์์ฑ๋ ํ
์ด๋ธ์ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ, ํ
ํ๋ฆฟ ํ
์ด๋ธ์ ํตํ ์คํธ๋ฆฌ๋ฐ์ด ์ค๋จ๋๊ณ ์์ฑ๋ ํ
์ด๋ธ์ ์คํธ๋ฆฌ๋ฐ ํต๊ณ ์น์
์ด tables.get()
์๋ต์ ์๋ ๊ฒฝ์ฐ(ํ
์ด๋ธ์ ๋ฒํผ๋ง๋ ๋ฐ์ดํฐ๊ฐ ์์์ ์๋ฏธ) ์ธ์๋ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ์ง ๋ง์ธ์.
ํํฐ์ ์ ๋๋ ํ ์ด๋ธ ๋ฐ ํด๋ฌ์คํฐ๋ง๋ ํ ์ด๋ธ์ ์์ ์ ํ ์ฌํญ์ด ์ ์ฉ๋์ง ์์ผ๋ฉฐ, ๊ถ์ฅ๋๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
ํ ํ๋ฆฟ ํ ์ด๋ธ ์ธ๋ถ์ ๋ณด
- ํ ํ๋ฆฟ ์ํฝ์ค ๊ฐ
templateSuffix
(๋๋--template_suffix
) ๊ฐ์ ๋ฌธ์(a-z, A-Z), ์ซ์(0-9), ๋ฐ์ค(_)๋ง ํฌํจํด์ผ ํฉ๋๋ค. ํ ์ด๋ธ ์ด๋ฆ๊ณผ ํ ์ด๋ธ ์ํฝ์ค๋ฅผ ๊ฒฐํฉํ ์ต๋ ๊ธธ์ด๋ 1,024์์ ๋๋ค.- ํ ๋น๋
ํ ํ๋ฆฟ ํ ์ด๋ธ์๋ ์คํธ๋ฆฌ๋ฐ ํ ๋น๋ ์ ํ์ด ์ ์ฉ๋ฉ๋๋ค. ํ๋ก์ ํธ๋
tables.insert
API์ ๋น์ทํ๊ฒ ํ ํ๋ฆฟ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋น ์ต๋ 10๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ํ ๋น๋์ ์์ ๋๋ ํ ์ด๋ธ์ด ์๋ ์์ฑ๋๋ ํ ์ด๋ธ์๋ง ์ ์ฉ๋ฉ๋๋ค.์ ํ๋ฆฌ์ผ์ด์ ์ด ํ ์ด๋ธ์ ์ด๋น 10๊ฐ ๋๊ฒ ๋ง๋ค์ด์ผ ํ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ๋ง๋ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋จ์ผ ํด๋ฌ์คํฐ๋ง ํ ์ด๋ธ์ ํค ์ด์ ๋์ ์นด๋๋๋ฆฌํฐ ํ ์ด๋ธ ID๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
- ๋ผ์ด๋ธ๊น์ง์ ์๊ฐ
์์ฑ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ธํธ์์ ๋ง๋ฃ ์๊ฐ์ ์์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ฑ๋ ํ ์ด๋ธ์ ์ฆ์ ๋ณต์ฌํ ์๋ ์์ต๋๋ค.
- ์ค๋ณต ์ญ์
์ค๋ณต ์ญ์ ๋ ๋์ ํ ์ด๋ธ์ ๋ํ ๋์ผํ ์ฐธ์กฐ ๊ฐ์๋ง ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ ํ๋ฆฟ ํ ์ด๋ธ๊ณผ ์ ๊ท
insertAll
๋ช ๋ น์ด๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์์ฑ๋ ํ ์ด๋ธ๋ก ๋์์ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒฝ์ฐ ํ ํ๋ฆฟ ํ ์ด๋ธ๊ณผ ์ ๊ทinsertAll
๋ช ๋ น์ด๋ก ์ฝ์ ๋ ํ ๊ฐ์๋ ์ค๋ณต ์ญ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.- ๋ทฐ
ํ ํ๋ฆฟ ํ ์ด๋ธ๊ณผ ์์ฑ๋ ํ ์ด๋ธ์ ๋ทฐ์ผ ์ ์์ต๋๋ค.
์คํธ๋ฆฌ๋ฐ ์ฝ์ ๋ฌธ์ ํด๊ฒฐ
๋ค์ ์น์ ์์๋ ๊ธฐ์กด ์คํธ๋ฆฌ๋ฐ API๋ฅผ ์ฌ์ฉํ์ฌ BigQuery๋ก ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆฌ๋ฐํ ๋ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์คํธ๋ฆฌ๋ฐ ์ฝ์ ์ ํ ๋น๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์คํธ๋ฆฌ๋ฐ ์ฝ์ ํ ๋น๋ ์ค๋ฅ๋ฅผ ์ฐธ์กฐํ์ธ์.
์คํจ HTTP ์๋ต ์ฝ๋
๋คํธ์ํฌ ์ค๋ฅ์ ๊ฐ์ ์คํจ HTTP ์๋ต ์ฝ๋๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ ์คํธ๋ฆฌ๋ฐ ์ฝ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์์ฒญ์ ๋ค์ ์ ์กํ๋ ค๊ณ ์๋ํ๋ ๊ฒฝ์ฐ ํ
์ด๋ธ์ ์ค๋ณต๋ ํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ํ
์ด๋ธ์์ ์ค๋ณต์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ ค๋ฉด ์์ฒญ์ ๋ณด๋ผ ๋ insertId
์์ฑ์ ์ค์ ํฉ๋๋ค. BigQuery๋ ์ค๋ณต ์ญ์ ์ insertId
์์ฑ์ ์ฌ์ฉํฉ๋๋ค.
๊ถํ ์ค๋ฅ, ์๋ชป๋ ํ ์ด๋ธ ์ด๋ฆ ์ค๋ฅ ๋๋ ํ ๋น๋ ์ด๊ณผ ์ค๋ฅ๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ ํ์ด ์ฝ์ ๋์ง ์์ผ๋ฉฐ ์ ์ฒด ์์ฒญ์ด ์คํจํฉ๋๋ค.
์ฑ๊ณต HTTP ์๋ต ์ฝ๋
BigQuery์์ ๋ถ๋ถ์ ์ผ๋ก๋ง ํ ์ฝ์
์ ์ฑ๊ณตํ๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก ์ฑ๊ณต HTTP ์๋ต ์ฝ๋๋ฅผ ๋ฐ๋๋ผ๋ ์๋ต์ insertErrors
์์ฑ์ ํ์ธํ์ฌ ํ ์ฝ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํด์ผ ํฉ๋๋ค. ๋ค์ ์๋๋ฆฌ์ค ์ค ํ๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ชจ๋ ํ์ด ์ฝ์
๋์์ต๋๋ค.
insertErrors
์์ฑ์ด ๋น ๋ชฉ๋ก์ธ ๊ฒฝ์ฐ ๋ชจ๋ ํ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฝ์ ๋ ๊ฒ์ ๋๋ค. - ์ผ๋ถ ํ์ด ์ฝ์
๋์์ต๋๋ค. ํ์ ์คํค๋ง ๋ถ์ผ์น๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ
insertErrors
์์ฑ์ ํ์๋ ํ์ ์ฝ์ ๋์ง ์์๊ณ ๋ค๋ฅธ ๋ชจ๋ ํ์ ์ฑ๊ณต์ ์ผ๋ก ์ฝ์ ๋์์ต๋๋ค.errors
์์ฑ์๋ ์ฑ๊ณตํ์ง ๋ชปํ ํ์ ์คํจ ์ด์ ์ ๋ํ ์์ธํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.index
์์ฑ์ ์ค๋ฅ๊ฐ ์ ์ฉ๋๋ ์์ฒญ์ 0 ๊ธฐ๋ฐ ํ ์์ธ์ ๋ํ๋ ๋๋ค. - ์ฑ๊ณต์ ์ผ๋ก ์ฝ์
๋ ํ์ด ์์ต๋๋ค. BigQuery์์ ์์ฒญ์ ๊ฐ๋ณ ํ์ ์คํค๋ง ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์๋ฌด๋ฐ ํ์ด ์ฝ์
๋์ง ์์ผ๋ฉฐ ํ์ ์คํค๋ง ๋ถ์ผ์น๊ฐ ์๋๋ผ๋ ๊ฐ ํ์
insertErrors
ํญ๋ชฉ์ด ๋ฐํ๋ฉ๋๋ค. ์คํค๋ง ๋ถ์ผ์น๊ฐ ์๋ ํ์ ๊ฒฝ์ฐreason
์์ฑ์ดstopped
๋ก ์ค์ ๋ ์ค๋ฅ๊ฐ ์์ผ๋ฉฐ ํ์ฌ ์ํ ๊ทธ๋๋ก ๋ค์ ๋ณด๋ผ ์ ์์ต๋๋ค. ์คํจํ ํ์๋ ์คํค๋ง ๋ถ์ผ์น์ ๋ํ ์์ธํ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ฐ BigQuery ๋ฐ์ดํฐ ์ ํ์ ์ง์๋๋ ํ๋กํ ์ฝ ๋ฒํผ ์ ํ์ ๋ํด ์์๋ณด๋ ค๋ฉด ๋ฐ์ดํฐ ์ ํ ๋ณํ์ ์ฐธ์กฐํ์ธ์.
์คํธ๋ฆฌ๋ฐ ์ฝ์ ์ ๋ฉํ๋ฐ์ดํฐ ์ค๋ฅ
BigQuery์ ์คํธ๋ฆฌ๋ฐ API๋ ๋์ ์ฝ์ ๋น์จ์ ๋ง๊ฒ ๊ณ ์๋์์ผ๋ฏ๋ก ์คํธ๋ฆฌ๋ฐ ์์คํ ๊ณผ ์ํธ์์ฉ ์ ๊ธฐ๋ฐ ํ ์ด๋ธ ๋ฉํ๋ฐ์ดํฐ ๋ ธ์ถ์ ์์ ์ eventual consistency๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฉํ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ช ๋ถ ์ด๋ด์ ์ ํ๋์ง๋ง ์ด ์๊ฐ ๋์ API ์๋ต์ ๋น์ผ๊ด์ ์ธ ํ ์ด๋ธ ์ํ๋ฅผ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ผ๋ถ ์๋๋ฆฌ์ค์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ์คํค๋ง ๋ณ๊ฒฝ์ฌํญ. ์คํธ๋ฆฌ๋ฐ ์์คํ ์ ์คํค๋ง ๋ณ๊ฒฝ์ ์ฆ๊ฐ ์ ์ฉํ์ง ์์ ์ ์์ผ๋ฏ๋ก ์ต๊ทผ ์คํธ๋ฆฌ๋ฐ ์ฝ์ ์ ์์ ํ ํ ์ด๋ธ์ ์คํค๋ง๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ์คํค๋ง ๋ถ์ผ์น ์ค๋ฅ ์๋ต์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํ
์ด๋ธ ๋ง๋ค๊ธฐ/์ญ์ . ์กด์ฌํ์ง ์๋ ํ
์ด๋ธ๋ก ์คํธ๋ฆฌ๋ฐํ๋ฉด
notFound
์๋ต ๋ณํ์ด ๋ฐํ๋ฉ๋๋ค. ์๋ต์ผ๋ก ์์ฑ๋ ํ ์ด๋ธ์ ํ์ ์คํธ๋ฆฌ๋ฐ ์ฝ์ ์์ ์ฆ์ ์ธ์๋์ง ์์ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํ ์ด๋ธ์ ์ญ์ ํ๊ฑฐ๋ ๋ค์ ๋ง๋ค์ด๋ ์คํธ๋ฆฌ๋ฐ ์ฝ์ ์ด ์ค์ ๋ก ์ด์ ํ ์ด๋ธ๋ก ์ ๋ฌ๋๋ ๊ธฐ๊ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์คํธ๋ฆฌ๋ฐ ์ฝ์ ์ด ์ ํ ์ด๋ธ์ ์กด์ฌํ์ง ์์ ์ ์์ต๋๋ค. - ํ ์ด๋ธ ์๋ฆผ. ๋ง์ฐฌ๊ฐ์ง๋ก WRITE_TRUNCATE์ writeDisposition์ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ์์ ์ ์ฌ์ฉํด์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์๋ฅด๋ฉด ์ผ๊ด์ฑ ๊ธฐ๊ฐ ๋์ ํ์ ์ฝ์ ์ด ๋๋ฝ๋ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๋๋ฝ/์ฌ์ฉ ๋ถ๊ฐ
์คํธ๋ฆฌ๋ฐ ์ฝ์
์ ์ผ์์ ์ผ๋ก ์ฐ๊ธฐ ์ต์ ํ ์คํ ๋ฆฌ์ง์ ์์นํ๋๋ฐ, ์คํธ๋ฆฌ๋ฐ ๋ฒํผ์ ๊ฐ์ฉ์ฑ ํน์ฑ์ ๊ด๋ฆฌ ์คํ ๋ฆฌ์ง์๋ ๋ค๋ฆ
๋๋ค. ํ
์ด๋ธ ๋ณต์ฌ ์์
๋ฐ tabledata.list
์ ๊ฐ์ API ๋ฉ์๋ ๋ฑ BigQuery์ ํน์ ์์
์ ์ฐ๊ธฐ ์ต์ ํ ์คํ ๋ฆฌ์ง์ ์ํธ์์ฉํ์ง ์์ต๋๋ค.
์ต๊ทผ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๊ฐ ๋์ ํ
์ด๋ธ ๋๋ ์ถ๋ ฅ์ ์กด์ฌํ์ง ์์ต๋๋ค.