本文介绍了HiveQL以及在Hive数据库中建表写表的命令。
一、HiveQL简介
HiveQL是一种用于Apache Hive的查询语言,类似于传统的SQL(结构化查询语言)。Hive是一个构建在Hadoop上的数据仓库,允许对存储在Hadoop分布式文件系统(HDFS)中的数据执行SQL查询。
二、使用HiveQL在Hive数据库中的建表命令
1. 建表
# 导入必要的包和模块
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark import HiveContext
from pyspark.sql import SparkSession
# 表名称和数据库:数据库‘DB’中创建名为‘tableName’的表
# 表结构:表的列名,字符串/浮点数等类型,COMMENT注释解释列的用途
# 分区:Hive中用于提高查询性能和数据管理,本例中为school_id和date
# 存储格式:ORC:Optimized Row Columnar 列存储格式
tableName = 'table_name'
construct_str = """CREATE TABLE IF NOT EXISTS
DB."""+tableName+"""(
column1_name string COMMENT 'student_id',
column2_name string COMMENT 'grade',
column3_name int COMMENT 'class'
)
COMMENT 'table_name'
PARTITIONED BY(
school_id STRING COMMENT 'school_id',
date long COMMENT 'date')
STORED AS ORC"""
hiveContext.sql(construct_str) # 执行建表语句,创建表
2. 向Hive表中添加新列
# 向表中添加新列 column1和column2
tableName = 'table_name' #表名称
# 添加新列的语句
alter_table_str = f"""
ALTER TABLE DB_name.{tableName}
ADD COLUMNS (
column1 float COMMENT 'score1',
column2 float COMMENT 'score2'
)
"""
# 执行添加新列的语句
hiveContext.sql(alter_table_str)
3. 删除Hive表
# 删除表:delete TABLE
tableName = 'table_name' #表名称
# 删除表的语句
drop_table_str = f"DROP TABLE IF EXISTS DB_name.{tableName}"
# 执行删除表的语句
hiveContext.sql(drop_table_str)
4. 向表中写入数据
dt是已经创建好的DateFrame。注意select选择的顺序与创建表时候的顺序应该是完全一致的
from pyspark.sql import functions
result = dt.select(
functions.col("column1"),
functions.col("column2"),
functions.col("column3"),
functions.col("fenqu1"),
functions.lit(date).alias("fenqu2")
)
result.write.insertInto("DB_name.table_name", overwrite=True)
补充:我也尝试删除表中的列,但是由于权限等原因,一直没有成功,期待有经验的大神指正分享!
于2024年12月30日第一次发布