embulk_code
Embulk
Embulk์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์
https://github.com/mjs1995/muse-data-engineer/blob/main/doc/Data%20Ingestion/embulk.md
embulk๋ฅผ ์ค์นํฉ๋๋ค.
# JRE ์ค์น sudo apt install default-jre # embulk ์ต์ ๋ฒ์ ๋ค์ด๋ก๋ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar" # embulk ์คํ ๊ถํ ์ถ๊ฐ chmod +x ~/.embulk/bin/embulk # PATH ์ embulk ๋ฑ๋ก echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc # ๋ณ๊ฒฝ๋ PATH์ ์ ์ฉ source ~/.bashrc # ํ์ธ embulk -version
[WARN] Unrecognized Java version: openjdk full version "17.0.6+10-Debian-1deb11u1", Unrecognized VM option 'AggressiveOpts', Error: Could not create the Java Virtual Machine. ํด๋น ์๋ฌ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
Embulk๊ฐ Java ๋ฒ์ ์ ์ธ์ํ์ง ๋ชปํ์ฌ ๋ฐ์ํ๋ ๋ฌธ์ ๋ก Java ๊ฐ์ ๋จธ์ (VM) ์ต์ ์ค ์ธ์ํ์ง ๋ชปํ๋ ๊ฒ์ผ๋ก, Java 9 ์ดํ ๋ฒ์ ์์๋ ์ญ์ ๋์์ต๋๋ค. ๋ฐ๋ผ์ Java 9 ์ดํ ๋ฒ์ ์ ์ฌ์ฉํ๋ฉด ํด๋น ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
# ๊ธฐ๋ณธ JRE ์ค์น sudo apt install default-jre # Embulk๊ฐ ์ธ์ํ ์ ์๋ Java ๋ฒ์ ์ ํ sudo update-alternatives --config java # 3. Embulk ์คํ ์คํฌ๋ฆฝํธ ํ์ผ์ JAVA_OPTS ํ๊ฒฝ ๋ณ์ ์ค์ ํ์ฌ AggressiveOpts ์ต์ ๋นํ์ฑํ echo 'export JAVA_OPTS="-XX:-UseAggressiveOpts"' >> ~/.bashrc source ~/.bashrc
Embulk๊ฐ ์ ์ค์น๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Embulk plug-in ์ค์น
https://plugins.embulk.org/
๊ธฐ๋ณธ์ ์ธ embulk์ plugin์ ์ค์นํด์ postgres, bigquery, mysql, hdfs, oracle, redshift, s3, dynamodb, elasticsearch๋ฑ๋ฑ ๋ค์ํ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ ๋ฃ๊ฑฐ๋ ํ ์ ์์ต๋๋ค
embulk gem list # ์ค์น๋ ํ๋ฌ๊ทธ์ธ ๋ฆฌ์คํธ embulk gem install embulk-input-mysql # MySQL embulk gem install embulk-input-postgresql # PostgreSQL embulk gem install embulk-output-bigquery # Bigquery
embulk gem install embulk-output-gcs๋ฅผ ์คํํ ๋ ERROR: Error installing embulk-output-bigquery:jwt requires Ruby version >= 2.5. ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ์ ํด๊ฒฐํ์ต๋๋ค.
# Java 8 ์ค์นํ๊ธฐ sudo apt-get update sudo apt-get install openjdk-8-jre-headless -y # Embulk ์ค์นํ๊ธฐ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar" chmod +x ~/.embulk/bin/embulk echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc source ~/.bashrc # ํ์ํ ํ๋ฌ๊ทธ์ธ ์ค์นํ๊ธฐ embulk gem install embulk-input-gcs embulk gem install embulk-output-gcs
Embulk Example
embulk example ./test # ์ํ๋ฐ์ดํฐ ์์ฑ embulk guess ~/test/seed.yml -o config.yml # ์ ๋ ฅ ํ๋ฌ๊ทธ์ธ, ์ถ๋ ฅ ํ๋ฌ๊ทธ์ธ ๋ฐ ํ๋ ๋งคํ ๊ตฌ์ฑ์ ํฌํจํ๋ config.yml ํ์ผ์ ์ถ์ธกํ๋ฉฐ ์์ฑ embulk preview config.yml # Embulk๋ฅผ ์ฌ์ฉํ์ฌ config.yml ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ embulk run config.yml # # ์คํ
embulk guess๋ก yaml ํ์ผ์ ํ์ธํฉ๋๋ค.
Bigquery ์ค์
BigQuery Admin : ๊ธฐ์กด์ ์๋ ํ ์ด๋ธ์ ์์ฑํ๊ธฐ์ํ ๊ถํ์ผ๋ก ์ดํ์ BigQuery Admin ๊ถํ์ ๊ฐ๊ฒ ๋๋ฉด, ๊ธฐ์กด์ ํ ์ด๋ธ์ ์์ , ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ ๊ฐ๋ฅํ์ง๋ง, ์๋ ํ ์ด๋ธ ์์ฑ์ ๋ํ ๊ถํ์ ์์ต๋๋ค.
Embulk ์ค์ ์ service_account_email์ ๋ฃ์ด์ค์ผํฉ๋๋ค.
์๋น์ค ๊ณ์ ์ ํค๋ฅผ ๋ฃ์ด์ค๋๋ค.
gcs๋ก testํ yamlํ์ผ์ ๋ง๋ ๋ค์ embulk run์ ์คํํด์ค๋๋ค.
in: type: file path_prefix: /home/{์ ์ }/./test/csv/sample_ decoders: - {type: gzip} parser: charset: UTF-8 newline: LF type: csv delimiter: ',' quote: '"' escape: '"' null_string: 'NULL' trim_if_not_quoted: false skip_header_lines: 1 allow_extra_columns: false allow_optional_columns: false columns: - {name: id, type: long} - {name: account, type: long} - {name: time, type: timestamp, format: '%Y-%m-%d %H:%M:%S'} - {name: purchase, type: timestamp, format: '%Y%m%d'} - {name: comment, type: string} out: type: bigquery mode: append auth_method: json_key json_keyfile: /home/{์ ์ }/test/{ํ๋ก์ ํธ ํค}.json service_account_email: zoom-de-service-acct@{ํ๋ก์ ํธ}.iam.gserviceaccount.com dataset: test_dataset auto_create_table: true table: embulk_table_%Y_%m
Last updated