๋ฐ์ํ
๋ฌธ์
๐ Hue ์์ ์ปฌ๋ผ์์ ์ >> ํ ์ด๋ธ ์คํค๋ง ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ฉด backfill ํด์ค์ผ ํ๋ ํ์ ์๋๋ฉด Mismatch ์ค๋ฅ๊ฐ ๋ธ
์์ธ
- ํ
์ด๋ธ ๋น๋์ parquet ๊ฐ ์๋ ๊ฒฝ์ฐ (TextInputFormat) ์๋ ์ปฌ๋ผ ์์๋ฅผ ์ง์ผ์ค์ผ ํจ
- ์ํฅ์ ๋ฐ๋ ํ์
- 'org.apache.hadoop.mapred.**TextInputFormat**'
- ์ํฅ์ ๋ฐ๋ ํ์
- ๊ทธ๋ ๋ค๋ฉด ? >>
- ๋น๋ํ ๋ PARQUET ํ์์ผ๋ก ๋น๋ํด์ผํจ
- external table ์ธ๋ฐ spark.sql.sources.schema ๋ฌ๋ฆฌ๋ฉด ์๋จ
- spark.sql.... property ๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๊ฑฐ๋
- spark.sql.sources.schema json ์ ์๋ก ์ถ๊ฐํ๋ ์ปฌ๋ผ์ ์ถ๊ฐ
- external table ์ธ๋ฐ spark.sql.sources.schema ๋ฌ๋ฆฌ๋ฉด ์๋จ
- ๋น๋ํ ๋ PARQUET ํ์์ผ๋ก ๋น๋ํด์ผํจ
ROW FORMAT SERDE
- ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
- Parquet ํ์์ ์ฌ์ฉํ๋ ค๋ฉด, ์ฌ๋ฐ๋ฅธ SerDe๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, **org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe**๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋น๋ํ ๋ ์ฝ๋ (ํ์ธํด๋ณด๋ ๊ตณ์ด ์ํด์ค๋ STORED AS PARQUET ์๊ฒ๋ง ๋ฃ์ด๋ ๋ฌด๋ฐฉํจ)
- **ParquetHiveSerDe**๋ ์ด ๋ ์์คํ ๊ฐ์ ํธํ์ฑ์ ์ ๊ณตํ์ฌ, Hive๊ฐ Parquet ํ์ผ ํ์์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋๋ก ํฉ๋๋ค.
- CREATE TABLE my_table ( ... ) STORED AS PARQUET WITH SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe';
TextInputFormat
- **TextInputFormat**์ ์ผ๋ฐ์ ์ผ๋ก CSV๋ TSV ๊ฐ์ ํ ์คํธ ํ์ผ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
TextInputFormat๊ณผ Parquet์ ๋น๊ต
<aside> ๐ ์์ฝ
- TextInputFormat์ ํธํ์ฑ์ด ๋๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ด๋ ์๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ์ ํฉํฉ๋๋ค. ๋ค๋ง, ์์ถ ๋ฐ I/O ํจ์จ์ฑ์ด ๋ฎ๊ณ ์คํค๋ง๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
- Parquet์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, ๋์ ์์ถ์จ๊ณผ ์ปฌ๋ผ ๋จ์ ์ฒ๋ฆฌ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ์ฐ์ํฉ๋๋ค. ์คํค๋ง๋ฅผ ๋ด์ฅํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ง๋ง, ์ด์ง ํ์์ผ๋ก ์ฌ๋์ด ์ฝ๊ธฐ ์ด๋ ต๊ณ ๋ฐ์ดํฐ ์ค๋น๊ฐ ๋ณต์กํฉ๋๋ค. </aside>
ํน์ง TextInputFormat Parquet
๋ฐ์ดํฐ ํ์ | ํ ์คํธ (CSV, TSV ๋ฑ) | ์ปฌ๋ผํ |
ํธํ์ฑ | ๋์ ํธํ์ฑ (๋ง์ ๋ฐ์ดํฐ ์์ค๊ฐ ํ ์คํธ ํ์) | ์ฃผ๋ก ๋น ๋ฐ์ดํฐ ๋ฐ ๋ถ์ ๋๊ตฌ (Hadoop, Spark ๋ฑ) |
์ดํด ๋ฐ ์์ ์ฉ์ด์ฑ | ์ฌ๋ ์ฝ๊ธฐ ๋ฐ ์์ ์ฉ์ด | ์ด์ง ํ์, ์ฌ๋์ด ์ฝ๊ธฐ ์ด๋ ค์ |
์์ถ ๋ฐ ์ ์ฅ ํจ์จ์ฑ | ์ผ๋ฐ์ ์ผ๋ก ๋ฎ์ | ๋์ ์์ถ์จ ๋ฐ ์ ์ฅ ํจ์จ์ฑ |
์คํค๋ง ์ง์ | ์์ (์ธ๋ถ์์ ์ ์ ํ์) | ๊ฐ๋ ฅํ ์คํค๋ง ๋ด์ฅ |
์ฟผ๋ฆฌ ์ฑ๋ฅ | ์ ์ฒด ํ ์ค์บ ํ์ | ํน์ ์ปฌ๋ผ๋ง ์ฝ๊ธฐ ๊ฐ๋ฅ, ๋์ ์ฟผ๋ฆฌ ์ฑ๋ฅ |
I/O ์ฑ๋ฅ | ๋ฎ์ | ๋์ (์ปฌ๋ผ ๋จ์ ์ฒ๋ฆฌ) |
๋ฐ์ดํฐ ์ค๋น ์ฉ์ด์ฑ | ์ฌ์ (๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ ํธ์ง๊ธฐ๋ก ์์ฑ ๊ฐ๋ฅ) | ๋ฐ์ดํฐ ์ค๋น ๋ณต์ก, ์ ์ฉ ๋๊ตฌ ํ์ |
์ค์๊ฐ ์ฒ๋ฆฌ ์ ํฉ์ฑ | ์ ํฉ (์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ ์ฉ์ด) | ์ ํฉํ์ง ์์ |
์ฌ์ฉ ์ฌ๋ก | ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ, ์๊ท๋ชจ ๋ฐ์ดํฐ์ | ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์, ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค, BI ๋๊ตฌ |
ํ์ผ ํฌ๊ธฐ | ๋น๊ต์ ํผ | ๋น๊ต์ ์์ (์์ถ ์ ์ฉ) |
TextInputFormat ์ฌ์ฉ ์ด์ :
- ํธํ์ฑ ๋ฐ ๋จ์์ฑ:
- ํ ์คํธ ํ์ผ ํธํ์ฑ: ๋ง์ ๋ฐ์ดํฐ ์์ค๊ฐ CSV, TSV ๊ฐ์ ํ ์คํธ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํธํ์ฑ์ด ์ข์ต๋๋ค.
- ๋จ์์ฑ: ํ ์คํธ ํ์์ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์ฌ๋์ด ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ํ์ธ ๋ฐ ๋๋ฒ๊น ์ด ์ฉ์ดํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ค๋น ๋ฐ ๋ก๋ฉ:
- ๋ฐ์ดํฐ ์ค๋น๊ฐ ์ฝ๋ค: ํ ์คํธ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ๋ ๊ฒ์ ์๋์ ์ผ๋ก ์ฝ์ต๋๋ค. ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ ํ์ค ํ ์คํธ ํธ์ง๊ธฐ๋ง์ผ๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ: ๋ฐ์ดํฐ๋ฅผ ์ฒ์ ๋ก๋ฉํ๊ฑฐ๋ ์์ ๋ฐ์ดํฐ์ ์ ๋ค๋ฃฐ ๋๋ ํ ์คํธ ํ์์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ:
- ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์ค์๊ฐ ๋๋ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ, ํ ์คํธ ํ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์๋นํ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
Parquet ์ฌ์ฉ ์ด์ :
- ํจ์จ์ฑ ๋ฐ ์ฑ๋ฅ:
- ์ปฌ๋ผํ ์ ์ฅ: Parquet์ ์ปฌ๋ผํ ์ ์ฅ ํ์์ ์ฌ์ฉํ์ฌ, ํน์ ์ด๋ง ์ฝ๊ฑฐ๋ ์ธ ๋ ๋ ํจ์จ์ ์ ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์งํฉ์์ ํน์ ์ด์ ๋ํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
- ์์ถ ๋ฐ ์ธ์ฝ๋ฉ: Parquet์ ๊ณ ๋๋ก ์์ถ๋ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ I/O ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์คํค๋ง ์ง์:
- ๊ฐ๋ ฅํ ์คํค๋ง ์ง์: Parquet ํ์ผ์๋ ์คํค๋ง ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ด ๋ฐ์ดํฐ ํ์ ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ , ๋ถ์ ์์ ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ถ์ฐ ์ฒ๋ฆฌ ์ต์ ํ:
- ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: Parquet์ Hadoop, Spark, Presto, Athena ๊ฐ์ ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ ๊ณผ ์ ํตํฉ๋์ด ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์ ์์ ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
์ ํ ๊ธฐ์ค:
- ๋ฐ์ดํฐ ํฌ๊ธฐ: ์๊ท๋ชจ ๋ฐ์ดํฐ์ ์ด๋ ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ๊ฒฝ์ฐ, TextInputFormat์ด ๋ ๊ฐํธํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์๋ Parquet์ด ๋ ํจ์จ์ ์ ๋๋ค.
- ์ฑ๋ฅ ์๊ตฌ ์ฌํญ: ๋ถ์ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ, Parquet์ด ๋ ์ ํฉํฉ๋๋ค. ํนํ, ํน์ ์ด์ ๋ํ ๋น๋ฒํ ์ฟผ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ Parquet์ ์ปฌ๋ผํ ์ ์ฅ ๋ฐฉ์์ด ํฐ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋ฐ์ดํฐ ํ์ ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ Parquet์ด ๋ ์ ํฉํฉ๋๋ค. Parquet์ ์คํค๋ง๋ฅผ ๋ด์ฅํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํฉ๋๋ค.
- ๋ฐ์ดํฐ ํํ: ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ ๋ก๊ทธ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ํ ์คํธ ํ์์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
ํ ์คํธ๋ฅผ ํด๋ณด์
- ํ ์ด๋ธ ๋น๋ 1
CREATE EXTERNAL TABLE temp.test_format_table_v2 (
user_id bigint ,
contents_id bigint,
contents_type string,
keycol_cnt bigint
)
PARTITIONED BY (
base_dt string
)
stored as parquet
location
's3://bucketplace-emr-ba/hive-ba/output/temp/test_format_table'
;
- ํ๋ฃจ์น insert
INSERT INTO temp.test_format_table_v2
select *
,'2024-04-10' as base_Dt
from ( SELECT
user_id,
project_name,
contents_id,
contents_type,
count(DISTINCT concat(cast(contents_type AS VARCHAR), cast(contents_id AS VARCHAR))) AS keycol_cnt
-- , base_dt
-- select *
FROM contents.contents_meta_daily cmd
WHERE 1 = 1
AND base_dt = '2024-04-10'
GROUP BY 1, 2, 3,4
limit 100)
where 1=1
- ํด์์ ์ปฌ๋ผ๋ณ๊ฒฝ
-- -- content_stat_monthly_test_v2 ํ
์ด๋ธ ๊ต์ฒด
alter table temp.test_format_table_v2
add columns (project_name string)
-- ;
alter table temp.test_format_table_v2
change column project_name project_name string AFTER user_id
- ์กฐํ
select * from temp.test_format_table_v2
- ๋ณ๊ฒฝ๋ ์ปฌ๋ผ insert
INSERT INTO temp.test_format_table_v2
select *
,'2024-04-11' as base_Dt
from ( SELECT
user_id,
project_name,
contents_id,
contents_type,
count(DISTINCT concat(cast(contents_type AS VARCHAR), cast(contents_id AS VARCHAR))) AS keycol_cnt
-- , base_dt
-- select *
FROM contents.contents_meta_daily cmd
WHERE 1 = 1
AND base_dt = '2024-04-11'
GROUP BY 1, 2, 3,4
limit 100
)
where 1=1
;
- ์กฐํ
select * from temp.test_format_table_v2 where base_dt = '2024-04-11'
- ์ ๋๋ค !
์ค์ต
- content_stat_monthly >> ๋ณ๊ฒฝ์๋ฃ
๊ธฐ์กด์ Textinputformat์ผ๋ก ๋ง๋ ํ ์ด๋ธ์ ์ด๋กํ๋ ?๋ฌธ์
๐ Hue ์์ ์ปฌ๋ผ์์ ์ >> ํ ์ด๋ธ ์คํค๋ง ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ฉด backfill ํด์ค์ผ ํ๋ ํ์ ์๋๋ฉด Mismatch ์ค๋ฅ๊ฐ ๋น๋๋ค ใ
์์ธ
- ํ
์ด๋ธ ๋น๋์ parquet ๊ฐ ์๋ ๊ฒฝ์ฐ (TextInputFormat) ์๋ ์ปฌ๋ผ ์์๋ฅผ ์ง์ผ์ค์ผ ํจ
- ์ํฅ์ ๋ฐ๋ ํ์
- 'org.apache.hadoop.mapred.**TextInputFormat**'
- ์ํฅ์ ๋ฐ๋ ํ์
- ๊ทธ๋ ๋ค๋ฉด ? >>
- ๋น๋ํ ๋ PARQUET ํ์์ผ๋ก ๋น๋ํด์ผํจ
- external table ์ธ๋ฐ spark.sql.sources.schema ๋ฌ๋ฆฌ๋ฉด ์๋จ
- spark.sql.... property ๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๊ฑฐ๋
- spark.sql.sources.schema json ์ ์๋ก ์ถ๊ฐํ๋ ์ปฌ๋ผ์ ์ถ๊ฐ
- external table ์ธ๋ฐ spark.sql.sources.schema ๋ฌ๋ฆฌ๋ฉด ์๋จ
- ๋น๋ํ ๋ PARQUET ํ์์ผ๋ก ๋น๋ํด์ผํจ
ROW FORMAT SERDE
- ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
- Parquet ํ์์ ์ฌ์ฉํ๋ ค๋ฉด, ์ฌ๋ฐ๋ฅธ SerDe๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, **org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe**๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋น๋ํ ๋ ์ฝ๋ (ํ์ธํด๋ณด๋ ๊ตณ์ด ์ํด์ค๋ STORED AS PARQUET ์๊ฒ๋ง ๋ฃ์ด๋ ๋ฌด๋ฐฉํจ)
- **ParquetHiveSerDe**๋ ์ด ๋ ์์คํ ๊ฐ์ ํธํ์ฑ์ ์ ๊ณตํ์ฌ, Hive๊ฐ Parquet ํ์ผ ํ์์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋๋ก ํฉ๋๋ค.
- CREATE TABLE my_table ( ... ) STORED AS PARQUET WITH SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe';
TextInputFormat
- **TextInputFormat**์ ์ผ๋ฐ์ ์ผ๋ก CSV๋ TSV ๊ฐ์ ํ ์คํธ ํ์ผ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
TextInputFormat๊ณผ Parquet์ ๋น๊ต
๐ ์์ฝ
- TextInputFormat์ ํธํ์ฑ์ด ๋๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ด๋ ์๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ์ ํฉํฉ๋๋ค. ๋ค๋ง, ์์ถ ๋ฐ I/O ํจ์จ์ฑ์ด ๋ฎ๊ณ ์คํค๋ง๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
- Parquet์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, ๋์ ์์ถ์จ๊ณผ ์ปฌ๋ผ ๋จ์ ์ฒ๋ฆฌ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ์ฐ์ํฉ๋๋ค. ์คํค๋ง๋ฅผ ๋ด์ฅํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ง๋ง, ์ด์ง ํ์์ผ๋ก ์ฌ๋์ด ์ฝ๊ธฐ ์ด๋ ต๊ณ ๋ฐ์ดํฐ ์ค๋น๊ฐ ๋ณต์กํฉ๋๋ค. </aside>
ํน์ง TextInputFormat Parquet
๋ฐ์ดํฐ ํ์ | ํ ์คํธ (CSV, TSV ๋ฑ) | ์ปฌ๋ผํ |
ํธํ์ฑ | ๋์ ํธํ์ฑ (๋ง์ ๋ฐ์ดํฐ ์์ค๊ฐ ํ ์คํธ ํ์) | ์ฃผ๋ก ๋น ๋ฐ์ดํฐ ๋ฐ ๋ถ์ ๋๊ตฌ (Hadoop, Spark ๋ฑ) |
์ดํด ๋ฐ ์์ ์ฉ์ด์ฑ | ์ฌ๋ ์ฝ๊ธฐ ๋ฐ ์์ ์ฉ์ด | ์ด์ง ํ์, ์ฌ๋์ด ์ฝ๊ธฐ ์ด๋ ค์ |
์์ถ ๋ฐ ์ ์ฅ ํจ์จ์ฑ | ์ผ๋ฐ์ ์ผ๋ก ๋ฎ์ | ๋์ ์์ถ์จ ๋ฐ ์ ์ฅ ํจ์จ์ฑ |
์คํค๋ง ์ง์ | ์์ (์ธ๋ถ์์ ์ ์ ํ์) | ๊ฐ๋ ฅํ ์คํค๋ง ๋ด์ฅ |
์ฟผ๋ฆฌ ์ฑ๋ฅ | ์ ์ฒด ํ ์ค์บ ํ์ | ํน์ ์ปฌ๋ผ๋ง ์ฝ๊ธฐ ๊ฐ๋ฅ, ๋์ ์ฟผ๋ฆฌ ์ฑ๋ฅ |
I/O ์ฑ๋ฅ | ๋ฎ์ | ๋์ (์ปฌ๋ผ ๋จ์ ์ฒ๋ฆฌ) |
๋ฐ์ดํฐ ์ค๋น ์ฉ์ด์ฑ | ์ฌ์ (๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ ํธ์ง๊ธฐ๋ก ์์ฑ ๊ฐ๋ฅ) | ๋ฐ์ดํฐ ์ค๋น ๋ณต์ก, ์ ์ฉ ๋๊ตฌ ํ์ |
์ค์๊ฐ ์ฒ๋ฆฌ ์ ํฉ์ฑ | ์ ํฉ (์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ ์ฉ์ด) | ์ ํฉํ์ง ์์ |
์ฌ์ฉ ์ฌ๋ก | ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ, ์๊ท๋ชจ ๋ฐ์ดํฐ์ | ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์, ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค, BI ๋๊ตฌ |
ํ์ผ ํฌ๊ธฐ | ๋น๊ต์ ํผ | ๋น๊ต์ ์์ (์์ถ ์ ์ฉ) |
TextInputFormat ์ฌ์ฉ ์ด์ :
- ํธํ์ฑ ๋ฐ ๋จ์์ฑ:
- ํ ์คํธ ํ์ผ ํธํ์ฑ: ๋ง์ ๋ฐ์ดํฐ ์์ค๊ฐ CSV, TSV ๊ฐ์ ํ ์คํธ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํธํ์ฑ์ด ์ข์ต๋๋ค.
- ๋จ์์ฑ: ํ ์คํธ ํ์์ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์ฌ๋์ด ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ํ์ธ ๋ฐ ๋๋ฒ๊น ์ด ์ฉ์ดํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ค๋น ๋ฐ ๋ก๋ฉ:
- ๋ฐ์ดํฐ ์ค๋น๊ฐ ์ฝ๋ค: ํ ์คํธ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํ๋ ๊ฒ์ ์๋์ ์ผ๋ก ์ฝ์ต๋๋ค. ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ ํ์ค ํ ์คํธ ํธ์ง๊ธฐ๋ง์ผ๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ: ๋ฐ์ดํฐ๋ฅผ ์ฒ์ ๋ก๋ฉํ๊ฑฐ๋ ์์ ๋ฐ์ดํฐ์ ์ ๋ค๋ฃฐ ๋๋ ํ ์คํธ ํ์์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ:
- ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์ค์๊ฐ ๋๋ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ, ํ ์คํธ ํ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์๋นํ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
Parquet ์ฌ์ฉ ์ด์ :
- ํจ์จ์ฑ ๋ฐ ์ฑ๋ฅ:
- ์ปฌ๋ผํ ์ ์ฅ: Parquet์ ์ปฌ๋ผํ ์ ์ฅ ํ์์ ์ฌ์ฉํ์ฌ, ํน์ ์ด๋ง ์ฝ๊ฑฐ๋ ์ธ ๋ ๋ ํจ์จ์ ์ ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ ์งํฉ์์ ํน์ ์ด์ ๋ํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
- ์์ถ ๋ฐ ์ธ์ฝ๋ฉ: Parquet์ ๊ณ ๋๋ก ์์ถ๋ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ I/O ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์คํค๋ง ์ง์:
- ๊ฐ๋ ฅํ ์คํค๋ง ์ง์: Parquet ํ์ผ์๋ ์คํค๋ง ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ด ๋ฐ์ดํฐ ํ์ ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ , ๋ถ์ ์์ ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ถ์ฐ ์ฒ๋ฆฌ ์ต์ ํ:
- ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: Parquet์ Hadoop, Spark, Presto, Athena ๊ฐ์ ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ ๊ณผ ์ ํตํฉ๋์ด ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์ ์์ ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
์ ํ ๊ธฐ์ค:
- ๋ฐ์ดํฐ ํฌ๊ธฐ: ์๊ท๋ชจ ๋ฐ์ดํฐ์ ์ด๋ ์ด๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ๊ฒฝ์ฐ, TextInputFormat์ด ๋ ๊ฐํธํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์์๋ Parquet์ด ๋ ํจ์จ์ ์ ๋๋ค.
- ์ฑ๋ฅ ์๊ตฌ ์ฌํญ: ๋ถ์ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ, Parquet์ด ๋ ์ ํฉํฉ๋๋ค. ํนํ, ํน์ ์ด์ ๋ํ ๋น๋ฒํ ์ฟผ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ Parquet์ ์ปฌ๋ผํ ์ ์ฅ ๋ฐฉ์์ด ํฐ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋ฐ์ดํฐ ํ์ ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ Parquet์ด ๋ ์ ํฉํฉ๋๋ค. Parquet์ ์คํค๋ง๋ฅผ ๋ด์ฅํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํฉ๋๋ค.
- ๋ฐ์ดํฐ ํํ: ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ ๋ก๊ทธ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ํ ์คํธ ํ์์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
ํ ์คํธ๋ฅผ ํด๋ณด์
- ํ ์ด๋ธ ๋น๋ 1
CREATE EXTERNAL TABLE temp.test_format_table_v2 (
user_id bigint ,
contents_id bigint,
contents_type string,
keycol_cnt bigint
)
PARTITIONED BY (
base_dt string
)
stored as parquet
location
's3://bucketplace-emr-ba/hive-ba/output/temp/test_format_table'
;
- ํ๋ฃจ์น insert
INSERT INTO temp.test_format_table_v2
select *
,'2024-04-10' as base_Dt
from ( SELECT
user_id,
project_name,
contents_id,
contents_type,
count(DISTINCT concat(cast(contents_type AS VARCHAR), cast(contents_id AS VARCHAR))) AS keycol_cnt
-- , base_dt
-- select *
FROM contents.contents_meta_daily cmd
WHERE 1 = 1
AND base_dt = '2024-04-10'
GROUP BY 1, 2, 3,4
limit 100)
where 1=1
- ํด์์ ์ปฌ๋ผ๋ณ๊ฒฝ
-- -- content_stat_monthly_test_v2 ํ
์ด๋ธ ๊ต์ฒด
alter table temp.test_format_table_v2
add columns (project_name string)
-- ;
alter table temp.test_format_table_v2
change column project_name project_name string AFTER user_id
- ์กฐํ
select * from temp.test_format_table_v2
- ๋ณ๊ฒฝ๋ ์ปฌ๋ผ insert
INSERT INTO temp.test_format_table_v2
select *
,'2024-04-11' as base_Dt
from ( SELECT
user_id,
project_name,
contents_id,
contents_type,
count(DISTINCT concat(cast(contents_type AS VARCHAR), cast(contents_id AS VARCHAR))) AS keycol_cnt
-- , base_dt
-- select *
FROM contents.contents_meta_daily cmd
WHERE 1 = 1
AND base_dt = '2024-04-11'
GROUP BY 1, 2, 3,4
limit 100
)
where 1=1
;
- ์กฐํ
select * from temp.test_format_table_v2 where base_dt = '2024-04-11'
- ์ ๋๋ค !
์ค์ต
- content_stat_monthly >> ๋ณ๊ฒฝ์๋ฃ
๊ธฐ์กด์ Textinputformat์ผ๋ก ๋ง๋ ํ ์ด๋ธ์ ์ด๋กํ๋ ?
๋ฐ์ํ
'Data Analysis > Data Engineering' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ICEBURG TABLE - Iceberg๋ ๋ฌด์์ธ๊ฐ? (0) | 2025.04.13 |
---|---|
Airflow์์ ๋ฐ์ฝ๋ ์ดํฐ(decorator)๋ฅผ ์ฌ์ฉํ๋ ์ด์ (0) | 2024.04.19 |
IBM Data Engineer - Introduction to Relational Databases (RDBMS) (0) | 2023.04.19 |
IBM Data Engineer - Extract, Transform, Load (ETL) (0) | 2023.04.18 |
IBM Data Engineer - Python for Data Science, AI & Development 3 (1) | 2023.04.18 |
๋๊ธ