etl常用的hive sql
时间: 2025-06-28 13:19:09 浏览: 12
### 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;
```
这种方法能有效地清理掉历史遗留下来的多余副本。
阅读全文
相关推荐

















