HIVE External Table With Partition

록스블로그·2023년 11월 1일
0
post-thumbnail

추후에 데일리 배치를 돌릴 예정이기 때문에 데일리 파티션으로 하이브 테이블을 생성할 생각이라 미리 테스트할 겸 쓰게되었다.

Spark Code

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType,StructField, StringType, IntegerType, DateType
from pyspark.sql.functions import lit
from datetime import date

today = date.today()

spark = SparkSession.builder \
    .appName("ParquetSaver") \
    .config("spark.jars", "/usr/lib/spark/jars/commons-pool2-2.12.0.jar")\
    .getOrCreate()
    

data2 = [("James","","Smith","36636","M",3000),
    ("Michael","Rose","","40288","M",4000),
    ("Robert","","Williams","42114","M",4000),
    ("Maria","Anne","Jones","39192","F",4000),
    ("Jen","Mary","Brown","","F",-1)
  ]

schema = StructType([ \
    StructField("firstname",StringType(),True), \
    StructField("middlename",StringType(),True), \
    StructField("lastname",StringType(),True), \
    StructField("id", StringType(), True), \
    StructField("gender", StringType(), True), \
    StructField("salary", IntegerType(), True) \
  ])
 
df = spark.createDataFrame(data=data2,schema=schema)
df = df.withColumn("partition_date", lit(today))

df.write.mode("overwrite").parquet(f"hdfs://private-dns:8020/testdir2/{today}/testtable2_{today}.parquet")

잘 저장 되었고... 였지만 잘못했다.

df.write.mode("overwrite").parquet(f"hdfs://private-dns:8020/usr/livy/testdir2/partition_date={today}/testtable2_{today}.parquet")

이렇게 저장을 해줘야한다 (맨날 delta 쓰고...Databricks만 쓰니까 이런거를 모르지)
후에 아래 쿼리로 테이블을 만들어 주고

CREATE EXTERNAL TABLE testtable2(
firstname string ,
middlename string ,
lastname string ,
id string ,
gender string ,
salary integer
)
PARTITIONED BY(partition_date date)
STORED AS PARQUET
LOCATION 'hdfs://private_dns:8020/usr/livy/testdir2/'; 

'2023-10-31' 과 같이 새로운 날짜에 데이터가 들어왔을 가정시

ALTER TABLE testtable2 ADD PARTITION (partition_date='2023-10-31');

로 마스킹을 해줘야 새로운 데이터가 조회가 되기 시작한다. 추후에 이 부분도 자동화가 필요할 것으로 보인다.

중간중간 beeline 에서 사용하는 anonymos user 와 livy user로 생성되는 경로 때문에 권한 문제가 발생하긴 하였지만 결과적으로는 테이블은 잘 보인다.

+-----------------------+------------------------+----------------------+----------------+--------------------+--------------------+----------------------------+
| testtable2.firstname  | testtable2.middlename  | testtable2.lastname  | testtable2.id  | testtable2.gender  | testtable2.salary  | testtable2.partition_date  |
+-----------------------+------------------------+----------------------+----------------+--------------------+--------------------+----------------------------+
| James                 |                        | Smith                | 36636          | M                  | 3000               | 2023-10-31                 |
| Michael               | Rose                   |                      | 40288          | M                  | 4000               | 2023-10-31                 |
| Robert                |                        | Williams             | 42114          | M                  | 4000               | 2023-10-31                 |
| Maria                 | Anne                   | Jones                | 39192          | F                  | 4000               | 2023-10-31                 |
| Jen                   | Mary                   | Brown                |                | F                  | -1                 | 2023-10-31                 |
| James                 |                        | Smith                | 36636          | M                  | 3000               | 2023-11-01                 |
| Michael               | Rose                   |                      | 40288          | M                  | 4000               | 2023-11-01                 |
| Robert                |                        | Williams             | 42114          | M                  | 4000               | 2023-11-01                 |
| Maria                 | Anne                   | Jones                | 39192          | F                  | 4000               | 2023-11-01                 |
| Jen                   | Mary                   | Brown                |                | F                  | -1                 | 2023-11-01                 |
+-----------------------+------------------------+----------------------+----------------+--------------------+--------------------+----------------------------+
profile
어려움에 성장하는 데이터 엔지니어

0개의 댓글