【HIVE】hive两种创建表常用组合

博客介绍了Hive的常用组合,包括parquet格式与snappy压缩的组合,以及ORC格式与snappy压缩的组合,为Hive数据存储和处理提供参考。
常用组合:parquet 格式 + snappy 压缩
set parquet.compression=snappy;
 CREATE TABLE db_name.tb_name(
id              STRING
)
PARTITIONED BY (date_str STRING ,hour_str STRING )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'
STORED AS PARQUET;  

常用组合:ORC 格式 + snappy 压缩
CREATE TABLE db_name.tb_name(
id              STRING
)
PARTITIONED BY (date_str STRING ,hour_str STRING )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY") ;

### ETL 过程中常用Hive SQL 语法 #### 数据加载 (Load) 为了将外部文件导入到Hive中,通常会使用`LOAD DATA`命令。此方法适用于一次性数据迁移场景。 ```sql LOAD DATA LOCAL INPATH '/path/to/local/file' INTO TABLE table_name; ``` 另一种方式是从其他位置直接加载数据,这不需要本地路径的存在[^2]。 ```sql LOAD DATA INPATH 'hdfs_path_to_file' INTO TABLE table_name; ``` #### 创建临时 (Create Temporary Table) 创建临时对于ETL过程非常有用,尤其是在处理中间结果时。这些格只存在于当前会话期间。 ```sql CREATE TEMPORARY TABLE temp_table AS SELECT * FROM source_table WHERE condition; ``` 这种方式能够有效减少磁盘空间占用并提高性能[^1]。 #### 插入新记录 (Insert Into/Overwrite) 当向现有添加新的记录集或更新整个分区的数据时,可以采用如下语句: - **追加模式** ```sql INSERT INTO target_table PARTITION(partition_column='value') SELECT columns... FROM source_table; ``` - **覆盖模式** ```sql INSERT OVERWRITE TABLE target_table PARTITION(partition_column='value') SELECT columns... FROM source_table; ``` 这两种操作允许灵活控制如何处理目标中的已有数据。 #### 动态分区插入 (Dynamic Partition Insertion) 动态分区功能使得可以在单次查询中同时写入多个不同的分区,极大地简化了多分区管理的任务。 ```sql SET hive.exec.dynamic.partition=true; -- 启动动态分区设置 INSERT INTO target_table PARTITION(year, month) SELECT id, name, year, month FROM source_table; ``` 上述配置确保了即使在大规模环境中也能高效完成复杂的数据分布工作。 #### 转换函数的应用 (Transformation Functions) 利用内置转换函数可轻松实现字段格式化或其他必要的预处理步骤。例如日期时间戳之间的相互转化、字符串大小写的调整等。 ```sql -- 将Unix时间戳转成标准日期格式 SELECT from_unixtime(unix_timestamp_field) as formatted_date FROM mytable; -- 修改列值为大写字母形式 UPDATE mytable SET column=upper(column); ``` 这类工具箱有助于提升最终输出的质量和一致性。 #### 删除重复项 (Deduplication) 去除冗余条目是保持数据质量的关键环节之一。通过子查询配合窗口函数来识别唯一键组合下的最新版本记录。 ```sql WITH ranked_data AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY key_columns ORDER BY timestamp DESC) rn FROM original_table ) DELETE FROM ranked_data WHERE rn > 1; ``` 这种方法能有效地清理掉历史遗留下来的多余副本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值